GPIO IN, OUT (mruby/c)
プロジェクトの準備
基本的に ESP-IDF 環境と同じなので, ESP-IDF 環境がインストールされているディレクトリ (ここでは $HOME/esp) 以下にプロジェクト用のディレクトリを作る.
$ cd ~/esp $ git clone https://github.com/gfd-dennou-club/iotex-esp32-mrubyc.git mrubyc-01-gpio $ cd mrubyc-01-gpio
make menuconfig で “IoTeX ESP32 mrubyc Configuration” から GPIO の項目にのみチェック入れる.
$ make menuconfig
書き方
iotex-esp32-mrubyc のGPIO を参照
L チカ
電子工作における Hello World と言える L チカを実行するためのプログラムを作成する. mrblib/loops/master.rb に以下のように書く. これは 1 番目の LED (GPIO 13) を 1 秒毎に点灯・消灯するプログラムである.
1 led1 = GPIO.new( 13, GPIO::OUT ) 2 3 while true 4 led1.write(1) 5 sleep 1 6 7 led1.write(0) 8 sleep 1 9 end
- 1 行目: インスタンスの作成. LED の接続されているピン (GPIO 13) を出力に設定.
- GPIO クラスが定義されたファイルは, mrblib/models/pin.rb である
- mrblib/models 以下に置かれているクラスについては明示的に require しなくて良い.
- 3~9 行目: while 文で led の on と off を繰り返す.
コンパイルと実行を行う.
$ make $ make flash monitor
L チカとスイッチ
スイッチと LED を連動させたプログラムを書く. mrblib/loops/master.rb に以下のように書く. これは SW4 を ON/OFF した時に LED1 が点灯/消灯するプログラムである.
1 led1 = GPIO.new( 13, GPIO::OUT ) 2 sw1 = GPIO.new( 34, GPIO::IN, GPIO::PULL_UP ) 3 4 while true 5 6 if (sw1.read == 1) 7 led1.write(1) 8 else 9 led1.write(0) 10 end 11 12 sleep 1 13 end
- 1 行目: LED の接続されているピン (GPIO 13) を出力に設定.
- 2 行目: スイッチの接続されているピン (GPIO 34) を入力に設定. プルアップする.
- 4~13 行目: while 文でスイッチがオン (値が1) の時に led を on にしている.
コンパイルと実行を行う.
$ make $ make flash monitor
課題
- LED とスイッチを使うプログラムを作成せよ. iotex-esp32-mrubyc のGPIO を参照して,IRQ handler を用いたプログラムを作成すること.