GPIO IN, OUT (Arduino IDE + ESP32 ボードマネージャ)
プログラムの書き方
LED やスイッチを使う上でよく使われる関数を紹介する.
pinMode( ピン番号, OUTPUT); //ピンを出力に設定 digitalWrite(ピン番号, HIGH); //電圧を HIGH (3.3V, 定格) に. LED が光る. digitalWrite(ピン番号, LOW); //電圧を LOW (0V) に. LED が消える. pinMode( ピン番号, INPUT); //ピンを入力に設定 pinMode( ピン番号, INPUT_PULLUP); //ピンを入力に設定. 内部でプルアップする. State = digitalRead( ピン番号 ); //入力値の取得. status の値は HIGH (1), LOW (0)のどちらかをとる.
詳細は Language Reference の "Digital I/O" の項目, リファレンス デジタル入出力関数の項目, を参照されたい.
例題:L チカ
電子工作における Hello World と言える L チカを実行するためのプログラムを作成する. 基本的なプログラムは「スケッチ例」に含まれているので, それを利用するのが良い.

スケッチ例に LED の接続先 GPIO (変数名: LED_BUILTIN) を加えたものが以下のプログラムである. このプログラムは GPIO 13 に接続されている LED を 1 秒間隔で点灯させるものである.
const int LedPin = 14; //LEDのピンの設定
// 初期化関数
void setup() {
pinMode(LedPin, OUTPUT); // LED の接続しているピンを出力へ
}
// 無限ループ
void loop() {
digitalWrite(LedPin, HIGH); // LED 点灯 (HIGH is the voltage level)
delay(1000); // 1 秒待つ
digitalWrite(LedPin, LOW); // LED 消灯
delay(1000); // 1 秒待つ
}
3 番目の LED が定期的に点灯・消灯することを確認されたい.
プログラムの修正. スイッチの利用
const int buttonPin = 34; // the number of the pushbutton pin
const int ledPin = 14; // the number of the LED pin
// 初期化関数
void setup() {
pinMode(ledPin, OUTPUT); // LED の接続しているピンを出力へ
pinMode(buttonPin, INPUT); // スイッチの接続しているピンを入力へ
}
// 無限ループ
void loop() {
if (digitalRead(buttonPin) == HIGH) {
digitalWrite(ledPin, HIGH); // LED 点灯
} else {
digitalWrite(ledPin, LOW); // LED 消灯
}
delay(1000); // 1 秒待つ
}
なお, スイッチ 1, 2 で用いている GPIO 34, 35 はハードウェア的にプルアップされているので, ソフトウェア的にプルアップしなくても大丈夫であるため,pinMode(buttonPin, INPUT) で問題ない. スイッチ 3, 4 (GPIO 18, 19) については pinMode でプルアップしないといけないので, pinMode(buttonPin, INPUT_PULLUP) としないといけない (ESP32 マイコンでは, GPIO 34 ~ 39 は内部的にプルアップできない).
1 番目のスイッチを入れると 3 番目の LED が点灯することを確認されたい.
課題
- 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