M5StackGray LEDチカチカ

2021.6.18 Coskx Lab  

1 はじめに

M5StackGrayを使って何かを動かそうとするときのはじめの一歩はLEDチカチカ(Lチカ)です。プログラムでM5StackのピンにHを出力したりLを出力したりして,そのピンに接続されたLEDを点滅させます。 LED[発光ダイオード(light emitting diode)]は電流を流すと発光する素子です。

2 使用環境

3 LED点滅プログラム

最初に一回だけGPIO 2ピンを出力モードに設定します。
その後無限ループ内で,ボタン押し下げに従って,GPIO 2ピンにHを出力したり,Lを出力したりします。

//LED0.ino//

#include <M5Stack.h>

const uint8_t LED_PIN = 2;  // LED出力に使用するGPIO PIN番号

void setup() {
  //LED出力ピンを出力モードにする
  pinMode(LED_PIN, OUTPUT); 
}

void loop() {
  M5.update();

  if (M5.BtnA.wasPressed()) { //ボタンAが押されたら
    digitalWrite(LED_PIN, HIGH); //Hを出力
  } else if (M5.BtnB.wasPressed()) { //ボタンBが押されたら
    digitalWrite(LED_PIN, LOW);  //Lを出力
  }
}

4 配線

LEDへのの出力は「GPIO 2」です。「GPIO 2」はM5Stackの裏側に 2 と書いてあるところです。
G2 と書いてあるところも同じ信号になるのでこちらにつないでも問題ありません。
プログラムでGPIO 2からHが出力されると3.3Vの電圧が出力されます。
プログラムでGPIO 2からLが出力されると0Vの電圧が出力されます。
GPIO 2が3.3Vの時に,電流は,抵抗→LED→GND(電池のマイナス極)の順に流れます。



LEDはダイオードの一種なので,電流を流す方向が決まっていて,アノード(足の長い方)からカソードに向けて電流を流して光らせます。
抵抗220オームは電流制限用の抵抗で,M5StackとLEDを守っています。


5 実行の様子



6 ロジックテスタ

回路はそのまま同じですが,コンパクトに作るとロジックテスタ(ある端子のH・Lを検査する)が作れます。熱収縮チューブなどで,ショートしないように作ります。
黒ケーブルはGNDへ,赤ケーブルは検査したい端子に触れます。端子にH信号が出ていれば,LEDが点灯します。
検査対象から取り出す電流は少なくしたいため,抵抗は点滅が確認できる範囲のできるだけ大きな値のものを使います。



7 まとめ

M5Stack GrayでLED点灯ができました。


補足1

回路には電流制限のための220Ω抵抗が使われています。この抵抗値は次のように決めています。

(1)LEDのデータシートを検討します。(ネット検索でデータシートを見つけます)
絶対定格で,最大許容電流を調べると50mAとなっていました。
通常使用での電流値は見当たらなかったですが,特性測定には20mAが使われていました。また明るさ測定の基準値も20mA時の時のものでした。
LEDは20mA程度で使用するようです。(実用上は1mAでも点灯します)

(2)次にM5Stackのデータシートを調べるのですが,M5Stackに使われているマイクロコンピュータ(ESP32)のデータシートを調べます。(ネット検索でデータシートを見つけます)
わかりにくいのですが電気特性の欄を見ると,ピンのHの時の出力電流(IOH)は40mAまでとなっています。(20mAまでのピンもあります)
40mA以下であれば問題ないのですが,少ないほどCPUの負担が減ります。

(3)まず20mA駆動の設定で考えます。LEDにかける電圧と流れる電流の間にはある関係があり,それはデータシートにグラフで示されています。20mAの時は2.15Vになっています。
ピンの出力電圧は3.3Vなので,抵抗で1.15V電圧降下してくれるとLEDには2.15Vがかかります。抵抗で20mA流れるときに1.15V電圧降下を起こすべきなので,抵抗値はV/I=1.15/0.02=57.5Ωになります。(V/I=(3.3-2.15)/0.02=57.5Ω)
10mA駆動の設定では,LEDのデータシートのグラフでは,1.98Vが読み取れます。抵抗値はV/I=(3.3-1.98)/0.01=132Ωになります。
5mA駆動の設定では,LEDのデータシートのグラフでは,1.9Vが読み取れます。抵抗値はV/I=(3.3-1.9)/0.005=280Ωになります。
電流は小さいほうがCPUにとって負担が少ないので,入手しやすい220Ωの抵抗を用いることにしました。

  LEDの電圧と流れる電流の関係(OS5RPM5B61A-QR)


補足2

プログラムでは,根拠なしに出力ピンを「GPIO 2」に設定したように見えますが,実はどのピンを使ってもよいわけではありません。
次のような吟味をして,「GPIO 2」に設定しています。
1)M5Stack Grayで用途が制限されているGPIOピン
  ・回路図から読み取った,すでに使用されているGPIOピン
   GPIO 1 3 ............. USB UART0 (RXD0,TXD0)で使用
   GPIO 4 23 18 19 ...... SD SPIと共有
   GPIO 33 27 23 18 14 .. LCDで使用
   GPIO 21 22 ........... I2C,電源管理,モーションセンサ,磁気センサで使われている
   GPIO 25 .............. Audioで使用
  ・ESP32仕様
   GPIO 34~39は読み取り専用

2)M5Stack Grayで入出力に使えることを確認したGPIOピン
  GPIO 2, GPIO 5 他とは共用していないので自由に使える
  GPIO 16, GPIO 17 UART2 (TXD2・RXD2)を使わなければ OK
  GPIO 26 DAを使わなければ OK
  GPIO 19 SDを使わなければ OK
  GPIO 35, GPIO 36 ADを使わなければ,入力のみOK