GPIO IN, OUT (mruby/c)

プロジェクトの準備

基本的に ESP-IDF 環境と同じなので, ESP-IDF 環境がインストールされているディレクトリ (ここでは $HOME/esp) 以下にプロジェクト用のディレクトリを作る. GitHub から j5_es_2020 ブランチを git clone する.

$ 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

書き方

コンストラクタ

​  gpio1 = GPIO.new( pin, setmode )   
   # pin : GPIO PIN number
   # setmode : GPIO::IN, GPIO::OUT, GPIO::PULL_UP 

出力

gpio1.write( 1 )

入力

val = gpio1.read()    # val = 0 or 1

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 とスイッチを使うプログラムを作成せよ. 内容は自由であるが, 特にアイデアが思いつかなけれ以下の例で示すプログラムを作成せよ.
例) 各スイッチに対して以下のように別々の LED を割り当て, スイッチを入れたら割り当てられた LED が点灯する (スイッチを切ったら LED が消灯する) プログラムを作成せよ.
  • スイッチ 1 を ON/OFF -> LED1,2 が ON/OFF
  • スイッチ 2 を ON/OFF -> LED3,4 が ON/OFF
  • スイッチ 3 を ON/OFF -> LED5,6 が ON/OFF
  • スイッチ 4 を ON/OFF -> LED7,8 が ON/OFF