M5StampPicoでLチカする

マイコン/Arduino

M5StampPicoは、ESP32を搭載したマイコンボード・M5シリーズの末弟とも言える製品で、
切手サイズの小さな本体にWifi、Bluetooth、12個のGPIOを搭載しています。

メインプロセッサはESP32-PICO-D4です。

また、オンボードでスイッチとRGB-LEDも搭載されています。ただし、LEDはマイコン内蔵の特殊なもので、単にGPIOをON・OFFしても点灯させられません。

今回はこの辺りを中心に、M5StampPicoのLチカまでを解説します。

プログラムの書き込み準備:回路

M5stamppicoには他のM5シリーズのようにUSB端子はありません。プログラムの書き込み(アップロード)には
別途USB-シリアル変換器が必要です。これらはアマゾンなどでも安価に購入できます。

接続は次の図のようにします。M5stamppicoプログラム 書き込み回路

M5stampPico本体、シリアル変換器以外にスイッチが3つ、その他配線が必要です。
(スイッチをブレッドボード上の抜き差しで代用しても構いません。)

シリアル変換器はAmazonなどで入手できる安価なもので問題ないと思います。

プログラムの書き込み準備:ソフト

ArduinoIDEの[ファイル]-[環境設定]-[追加ボードマネージャー]

に次の項目を追加してください。

!https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/arduino/package_m5stack_index.json

[ツール]-[ボード]-[ボードマネージャー]を開いてM5stackを検索、インストールしてください。

M5Stackボード設定

[ツール]-[ボード]-[M5Stack Arduino]-[M5 Stamp Pico]を選んでください。

次に、LED制御のためにAdafruiteのNeopixelライブラリを使用します。
[スケッチ]-[ライブラリをインクルード]-[ライブラリの管理]
を開いて、”Adafruite Neopixel”で検索してインストールしてください。

adafruiteNeopixel

スケッチ例

#include <Adafruit_NeoPixel.h>

#define PIN 27
#define BRIGHTNESS 100
Adafruit_NeoPixel pixels(1, PIN, NEO_GRB + NEO_KHZ800);

void setup()
{
  pixels.begin();
  pixels.clear();
  pixels.setBrightness(BRIGHTNESS);
}

void loop() {
  int r, g, b;
  r = 100;//MAX:255
  g = 100;//MAX:255
  b = 255;//MAX:255
  pixels.setPixelColor(0, pixels.Color(r, g, b));
  pixels.show();

  delay(1000);

  r = 0;
  g = 0;
  b = 0;
  pixels.setPixelColor(0, pixels.Color(r, g, b));
  pixels.show();
}

RGB制御が可能なオンボードLEDはM5StamppicoのGPIO27で接続されていて、
このGPIOを通してコマンドを送ることで制御します。

m5-docs
The reference docs for M5Stack products. Quick start, get the detailed information or instructions such as IDE,UIFLOW,Ar...

プログラムの書き込み方法

GPIO0をGNDに落とした状態で電源ON、もしくはリセットするとダウンロードモードでM5StampPicoが起動します。

ここでArduinoIDEから[ツール]-[シリアルポート]でUSB-シリアル変換器のCOM番号を確認(指定)してください。次に、[スケッチ]-[マイコンボードに書き込み]を実行すればOKです。

書き込みが成功したらGPIO0をハイインピーダンスとして、リセットをすれば書き込んだプログラムが実行されます。

まとめ

上記手順で、とりあえずLEDを点灯させることができるはずです。

ちなみに、LEDは独自のマイコンが内蔵されていて、新たな命令がくるまでは前の状態を維持します。
例えばLEDの点灯コマンドを送った後にESP32自体をDeepSleep状態に入れると、LEDはそのまま点灯し続けます。

このあたりは使い方次第なのでどちらが良いというわけではありませんが、スリープ中はLEDを点灯させたくないのであれば、SLEEPに入る前に消灯する信号を送る必要があります。

なお、”M5Atom.h”を使用した例がよく出てきますが、私の環境ではうまく動かすことができなかったため、Adafruiteのライブラリを使用させていただきました。

コメント