Developers_外部のデバイス用クラスの取り込み - gfd-dennou-club/mrubyc-esp32 GitHub Wiki
はじめに
液晶モニタ AQM0802A とリアルタイムクロック RX8035SA 用のリポジトリとの連携のやり方について述べる.
手順
本体のリポジトリ (mrubyc-esp32) の components ディレクトリ以下に, デバイス用のリポジトリを展開する.
$ git clone https://github.com/gfd-dennou-club/mrubyc-esp32.git
$ cd mrubyc-esp32
$ cd components/
$ git clone https://github.com/gfd-dennou-club/mrubyc-gem-rx8035sa.git
$ git clone https://github.com/gfd-dennou-club/mrubyc-gem-aqm0802a.git
(必要なら) ESP-IDF の環境設定を読み込む
$ source ~/esp/esp-idf/export.sh
デバイス用のリポジトリに含まれる Ruby クラス用ファイルを mrblib 以下にリンクする. これは make gems コマンドで一括実行できる.
$ cd ..
$ make gems
*** make links (.rb) ***
../../components/mrubyc-gem-aqm0802a/mrblib/models/aqm0802a.rb -> mrblib/models/aqm0802a.rb
../../components/mrubyc-gem-rx8035sa/mrblib/models/rc8035sa.rb -> mrblib/models/rc8035sa.rb
*** make links (.c, .h) ***
コンパイルと書き込み・実行,モニター
$ make flash
$ make spiffs monitor
なお,リンクを削除する場合は以下のようにする.
$ make gems-clean
** remove symlinks **
mrblib/rc8035sa.rb
mrblib/aqm0802a.rb
** main/main.c is initialized **
プログラム例
src/master.rb
# coding: utf-8
#I2C 初期化
i2c = I2C.new(22, 21)
# LCD 初期化
lcd = AQM0802A.new(i2c)
# RTC 初期化. 時刻設定
rtc = RX8035SA.new(i2c)
# RTC に初期値書き込み
rtc.write([20, 3, 31, 1, 23, 59, 50]) #年(下2桁), 月, 日, 曜日, 時, 分, 秒
# LCD に "Hello World" 表示
lcd.cursor(1, 0)
lcd.write_string("Hello!")
# i2c で直接送信
lcd.cursor(0, 1)
opcode = 0x40.chr
i2c.write(0x3e, opcode + "from ESP")
# <=> lcd.write_string("from ESP")
sleep(10)
# 適当な時間を表示
while true
tt = rtc.read
t0 = sprintf("%02d-%02d-%02d", tt[0], tt[1], tt[2])
t1 = sprintf("%02d:%02d:%02d", tt[4], tt[5], tt[6])
lcd.clear
lcd.cursor(0, 0)
lcd.write_string( t0 )
lcd.cursor(0, 1)
lcd.write_string( t1 )
puts sprintf("#{t0} #{t1}")
sleep 1.0
end
プログラム例 (2)
src/master.rb
#WiFi
wlan = WLAN.new('STA', WLAN::ACTIVE)
# connect
wlan.connect("essid", "pass")
# SNTP
time = SNTP.new()
#I2C 初期化
i2c = I2C.new(22, 21)
# LCD 初期化
lcd = AQM0802A.new(i2c)
# RTC 初期化
rtc = RX8035SA.new(i2c)
# RTC に初期値書き込み. 年(下2桁), 月, 日, 曜日, 時, 分, 秒
rtc.write([time.year2, time.mon, time.mday, time.wday, time.hour, time.min, time.sec])
# LCD に "Hello World" 表示
lcd.cursor(1, 0)
lcd.write_string("Hello!")
lcd.cursor(0, 1)
lcd.write_string("From ESP")
sleep(10)
# 適当な時間を表示
while true
tt = rtc.read
t0 = sprintf("%02d-%02d-%02d", tt[0], tt[1], tt[2])
t1 = sprintf("%02d:%02d:%02d", tt[4], tt[5], tt[6])
lcd.clear
lcd.cursor(0, 0)
lcd.write_string( t0 )
lcd.cursor(0, 1)
lcd.write_string( t1 )
puts sprintf("#{t0} #{t1}")
sleep 1.0
end