ESP32/ESP8266のMicroPythonでRTCを現在時刻に合わせる方法
2020/3/6
ESP32/ESP8266 MicroPython Clock
ESP32/ESP8266 MicroPython Clock
概要
ESP32/ESP8266のMicroPythonでRTCを現在時刻に合わせる方法を記する。ここでは、デモとして簡単な時計表示を行なう。
micropythonスクリプト
ESP32_8266_clock.py
以下は自分の環境に合わせる:
ssid = 'your_ssid'
password = 'your_passwd'
# NIC setup
import network, socket
WIFI_SSID = "your_ssid"
WIFI_PASSWD = "your_passwd"
def wlan_connect(ssid='SSID', password='PASSWD'):
import network
wlan = network.WLAN(network.STA_IF)
if not wlan.active() or not wlan.isconnected():
wlan.active(True)
print('connecting to:', ssid)
wlan.connect(ssid, password)
while not wlan.isconnected():
pass
wlan_connect(ssid=WIFI_SSID, password=WIFI_PASSWD)
#==========================================
# ESP32_8266_clock.py
from machine import Pin, RTC
import network, urequests, utime
import ujson
rtc = RTC()
url_jst = "http://worldtimeapi.org/api/timezone/Asia/Tokyo" # see http://worldtimeapi.org/timezones
retry_delay = 5000 # interval time of retry after a failed Web query
response = urequests.get(url_jst)
# parse JSON
parsed = response.json()
#parsed=ujson.loads(res) # in case string
datetime_str = str(parsed["datetime"])
year = int(datetime_str[0:4])
month = int(datetime_str[5:7])
day = int(datetime_str[8:10])
hour = int(datetime_str[11:13])
minute = int(datetime_str[14:16])
second = int(datetime_str[17:19])
subsecond = int(round(int(datetime_str[20:26]) / 10000))
# update internal RTC
rtc.datetime((year, month, day, 0, hour, minute, second, subsecond))
# setup day of the week
daysOfTheWeek = "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"
tm = utime.localtime(utime.mktime(utime.localtime()))
while True:
# generate formated date/time strings from internal RTC
date_str = "Date: {0:4d}/{1:02d}/{2:02d}".format(*rtc.datetime())+' ('+daysOfTheWeek[tm[6]]+')'
time_str = "Time: {4:02d}:{5:02d}:{6:02d}".format(*rtc.datetime())
print(date_str)
print(time_str)
print('-----------')
utime.sleep(1)
#=============================================
ここでは、World Time APIのサーバーから現在時刻を取得して時刻合わせを行なう。
他の方法
ネットワークが接続済みが前提で以下のスクリプトでも時刻合わせができる。(NTPサーバーを利用している)
#===========================================
from machine import RTC
import utime
import ntptime
rtc = RTC()
ntptime.settime() # setup time by remote NTP server
def get_jst():
tm = utime.localtime(utime.time()) # UTC now
jst = str(tm[0])+'/'+str(tm[1])+'/'+str(tm[2])+' '+str((tm[3]+9)%24)+':'+str(tm[4])+':'+str(tm[5])
return jst
#===========================================
実行画面
picocom /dev/ttyUSB0 -b115200
import ESP32_8266_clock
Date: 2020/03/06 (Fri)
Time: 12:29:20
-----------
Date: 2020/03/06 (Fri)
Time: 12:29:21
-----------
Date: 2020/03/06 (Fri)
Time: 12:29:22
-----------
Date: 2020/03/06 (Fri)
Time: 12:29:23
-----------
Date: 2020/03/06 (Fri)
Time: 12:29:24
-----------
Date: 2020/03/06 (Fri)
Time: 12:29:25
-----------
Date: 2020/03/06 (Fri)
Time: 12:29:26
-----------
...
参考情報
Very Simple MicroPython ESP8266/ESP-12 Web Clock
以上
| 固定リンク
« ESP32/ESP8266のMicroPythonでDHTセンサーデータをMQTTで送信する | トップページ | ESP32/ESP8266のMicroPythonのDHTセンサーデータをホストPCのpythonでMQTT受信する »
「linux」カテゴリの記事
- platfomioを使ってnaitive(linux/windows)のプログラムをビルドする方法(2021.03.10)
- micro:bit Yotta開発ツール(linux版)(2021.01.09)
- PlatformIOをRaspberryPi4で動かしてみる(実験)(2020.10.20)
- headless RaspberryPiインストール方法(v2)(2020.10.20)
- wio-terminalのファームウェア・アップデートについて(linux版)(2020.10.15)
「MicroPython」カテゴリの記事
- microbit-v2にMicropythonをインストールする(2021.05.06)
- PicoボードのMicroPythonをVS_CodeのextensionのPico-Goでプログラミングする(2021.02.10)
- MicroPython/CircuitPython Performance Test(2021.02.07)
- PicoボードにMicropython/CircuitPythonをインストールする(2021.02.03)
- MicroPython(F767ZI) Network Samples(2021.01.03)
コメント