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