wifi + NTP (mruby/c)
はじめに
wifi 接続して, 時刻を NTP で取得する. 得られた時刻で RTC を初期化し,LCD に時刻表示を行う.
プロジェクトの準備
先に使ったディレクトリ mrubyc-04-i2c をそのまま使うことにする. メインプログラムはバックアップしておくこと.
$ cd ~/esp/mrubyc-04-i2c $ cp mrblib/loops/master.rb mrblib/loops/master.rb.bk
プログラムの例
NTP でネットワーク経由で時計 (RTC) を設定し, 液晶モニタに現在時刻を表示させる.
1 # coding: utf-8
2
3 WiFi.init()
4 #WiFi.setup_ent_peap("id", "ssid", "username", "password")
5 WiFi.setup_psk("ssid", "key")
6 WiFi.start()
7
8 sleep 3
9
10 #I2C 初期化
11 i2c = I2C.new(0, 22, 21)
12 i2c.driver_install
13
14 # LCD 初期化
15 lcd = AQM0802A.new(i2c)
16 lcd.setup
17
18 # 時刻取得
19 SNTP.init()
20
21 #BCDコードへ変換.
22 year = ((SNTP.year - 2000) / 10).to_i(2) << 4 | ((SNTP.year - 2000) % 10).to_i(2)
23 mon = (SNTP.mon / 10).to_i(2) << 4 | (SNTP.mon % 10).to_i(2)
24 mday = (SNTP.mday / 10).to_i(2) << 4 | (SNTP.mday % 10).to_i(2)
25 hour = (SNTP.hour / 10).to_i(2) << 4 | (SNTP.hour % 10).to_i(2)
26 min = (SNTP.min / 10).to_i(2) << 4 | (SNTP.min % 10).to_i(2)
27 sec = (SNTP.sec / 10).to_i(2) << 4 | (SNTP.sec % 10).to_i(2)
28
29 # RTC 初期化
30 rtc = RC8035SA.new(i2c)
31
32 #RTCに時刻を与える.
33 rtc.write([year, mon, mday, SNTP.wday, hour, min, sec]) #年(下2桁), 月, 日, 曜日, 時, 分, 秒
34
35 while true
36 # 1 秒毎に時刻表示
37 tt = rtc.read
38 lcd.cursor(0, 0)
39 lcd.write_string(sprintf("%02x-%02x-%02x", tt[0], tt[1], tt[2]))
40 lcd.cursor(0, 1)
41 lcd.write_string(sprintf("%02x:%02x:%02x", tt[4], tt[5], tt[6]))
42 sleep(2)
43 end
プログラムの実行
以下のように実行して, 現在時刻が LCD モニタに表示されることを確認すること.
$ make $ make flash monitor