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 を用いたプログラムを作成すること.