Skip to content

Developers_外部のデバイス用クラスの取り込み

Ko-ichiro Sugiyama edited this page May 31, 2023 · 11 revisions

はじめに

液晶モニタ 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
Clone this wiki locally