Arduino IDEで簡単なプログラム(C++)を作成してM5StickCで実行してみた | そう備忘録

Arduino IDEで簡単なプログラム(C++)を作成してM5StickCで実行してみた

はじめに

M5StickC(エムファイブスティック・シー)を手に入れたので簡単なプログラムを作って動作させるまでの備忘録を記事として残しておく。

M5StickCの外観

M5StickCとは

M5StickCはESP32と同じアーキテクチャのESP32-PICOを搭載したスティック型のM5Stack社の製品だ。

主な特徴は、

  • 4MBフラッシュ+520K RAMメモリ
  • TFT LCD(TFT液晶ディスプレイ)
  • Wi-Fi、Bluetooth
  • リチウムイオンポリマーバッテリー内蔵(80mAh)
  • 電源ボタン+ボタン×2個
  • USB Type-Cコネクター
  • HY2.0-4P(Grove互換コネクター)
  • LED×1個
  • 赤外線送信
  • 拡張コネクター
  • 3軸加速度センサー+3軸ジャイロセンサー(6軸)
  • マイクロフォン内蔵

となっている。

2021年11月 追記

M5StickC は下記の M5StickC Plus に置き換わっている。

スイッチサイエンスでは M5StickC(本体のみ)がまだ販売されていた。

M5StickCの特徴をもう少し詳しく説明しておく。

TFT LCD(TFT液晶ディスプレイ)

ディスプレイは0.96インチ(80×160)のTFT LCD(Thin Film Transistor Liquid Crystal Display)。

使用しているモジュールはST7735Sと書いてあった。

Wi-Fi、Bluetooth

ESP32をベースにしているのでWi-FiおよびBluetoothが内蔵されている。

下記の写真は工場出荷時にプリインストールされているBLE(Bluetooth Low Energy)のサンプルアプリ。

BLEサンプルアプリ

リチウムイオンポリマーバッテリー

内蔵バッテリーはリチウムイオンポリマーバッテリーだった。

ドローンにも使われており小型でパワフルな反面、高温での使用や充電時の取り扱い注意との話も聞くので雑な扱いは避けるようにしたい。

ボタン類

ボタンは電源ボタンとボタンAとBの3つがある。

電源ボタンとボタンA

正面にあるのがボタンA、側面にあるのが電源ボタンで、

  • 電源オン:電源ボタンを2秒間押す
  • 電源オフ:電源ボタンを6秒間押す

と電源オフの方が若干長目に押す仕様になっている。

ボタン’(電源、ボタンA)

ボタンB

電源ボタンの反対側にボタンBがある。

ボタンB

コネクター

下記の写真で上にあるコネクターが電源供給とPCで作成したプログラムのダウンロードに使用するUSB Type-Cコネクター。

下の4ピンの端子がGROVE互換のHY2.0-4P。

コネクター

HY2.0-4Pは電源とGNDの他に2本の信号線があり、下記の写真の向かって左から

  • GND
  • Vout(5.0V)
  • GPIO32(SDA)
  • GPIO33(SCL)

となっており裏面のシールの印字で分かるようになっている。

自分はまだ未検証だがSDAとSCLでのI2C通信でBME280で温湿度、気圧を測定している記事もあったのでいずれ試してみたいと思っている。

2021年1月3日 追記

M5StickCのGrove端子にBME280を接続して温湿度・気圧を測定した記事を書いた

HY2.0-4P

拡張コネクター

USBコネクターの反対側にあるのが2.54mmピッチの汎用ピンコネクター。

写真向かって左から、

  • 5.0V 入力
  • 3.3V 出力 ※
  • 内蔵バッテリー※
  • GPIO0
  • GPIO36
  • GPIO26
  • 5.0V 出力※
  • GND

となっている。

※3.3Vや5.0V出力が電源オンの時だけ電圧がかかるのに対して内蔵バッテリーは電源オフ時も3.928V(フル充電時)の電圧だった。

拡張コネクター

LED

赤色LEDが本体左上に付いている。

前述の写真はLEDが点灯している状態。

赤外線送信

自分はまだ未検証だが赤外線送信ができる模様。

下記の写真は工場出荷時にプリインストールされている赤外線送信のサンプルアプリ。

赤外線送信

加速度センサーとジャイロセンサー

3軸(X、Y、Z)の加速度センサーと3軸のジャイロセンサーが搭載されていて(チップはMPU6886)M5StickCを傾けたり振ったり、回転させた時の状態を測定することができる。

加速度センサーは単位時間あたりの速度の変化を測定するので速度が早く(遅く)なっている状態を測定する。

静止または等速運動の場合の加速度はゼロになる。

またジャイロセンサーは角度の変化(角速度)を検知するセンサー。

その場で回転した場合、加速度センサーでは位置が動いている訳ではないので加速度がゼロになるが、ジャイロセンサーでは検知できる。

加速度センサーとジャイロセンサーを組み合わせれば大抵の物体の動きは検知できる。

下記の写真は工場出荷時にプリインストールされている加速度センサーとジャイロセンサーを使ったサンプルアプリ。

加速度センサーとジャイロセンサーを使ったプログラム

マイクロフォン

マイクロフォンはM5ボタンの下に内蔵されていて、使用しているチップはSPM1423。

下記の写真は工場出荷時にプリインストールされているマイクロフォンを使ったサンプルアプリ。

マイクロフォンアプリ例

M5Stackシリーズ

M5StickCを購入するに辺り、似たような名前の製品が沢山あり違いがよく分からずネット上をウロウロとしたのでその時に調べた事を記録として記事にしておく。

それぞの製品の違いが既に分かっている人は次の章の”プログラム環境“まで読み飛ばして欲しい。

M5Stack社(エムファイブ・スタック社)は中国深セン市に本社がありESP32をベースにしたM5Stack、M5Stickシリーズの製品を製造している。

日本では株式会社スイッチサイエンス社がM5Stackを積極的に扱っている。

M5Stack系

M5Stack系は主に以下の製品が販売されている。

  1. M5Stack Basic
  2. M5Stack Gray(9軸IMU搭載)
  3. M5Stack Faces(9軸IMU搭載、各種カバー付き)
  4. M5Stack FIRE
  5. M5GO IoTスターターキット(各種IoTセンサー付属)
  6. M5Stack Core2
  7. M5Stack ATOM Matrix

1. M5Stack Basic

Basicの名の通り基本的なM5Stack。

搭載チップ

ESP32 240MHz dual core

メモリ

520KB SRAM

フラッシュメモリ

4M FLASH

ディスプレイ

320×240 カラーTFT LCD(2.0インチ)

ネットワーク

Wi-Fi、dual mode Bluetooth

入力

 5.0V~5.5V/500mA(USB Type-C経由)

インターフェイス

  • USB Type-C×1
  • SPI×1
  • GROVE I2C(HY2.0-4)×1
  • UART×2
  • I2S(SCLK、WS、MCLK、IN、OUT)×1
  • microSDスロット×1

内蔵スピーカー

1W

内蔵電池

3.7V/150mAh

2. M5Stack Gray

M5Stack Basicに加速度3軸及びジャイロ3軸を検知する6軸センサー(MPU6886)と3軸地磁気を計測可能なセンサー(BMM150)を搭載したモデル。

搭載チップ

ESP32 240MHz dual core

メモリ

520KB SRAM

フラッシュメモリ

16M FLASH

ディスプレイ

320×240 カラーTFT LCD(2.0インチ)

ネットワーク

Wi-Fi、dual mode Bluetooth

入力

 5.0V~5.5V/500mA(USB Type-C経由)

インターフェイス

  • USB Type-C×1
  • SPI×1
  • GROVE I2C(HY2.0-4)×1
  • UART×2
  • I2S(SCLK、WS、MCLK、IN、OUT)×1
  • microSDスロット×1

慣性計測センサー

  • MPU6886:加速度3軸及びジャイロ(角速度)3軸の6軸
  • BMM150:地磁気3軸

初期モデルはMPU9250だったが2019年頃からMPU6886+BMM150の組み合わせに変わっている

内蔵スピーカー

1W

内蔵電池

3.7V/150mAh

3. M5Stack Faces

9軸センサーを搭載したM5Stack Grayに、キーボード、テンキー、ゲームパネルを搭載したモデル。

搭載チップ

ESP32 240MHz dual core

メモリ

520KB SRAM

フラッシュメモリ

16M FLASH

ディスプレイ

320×240 カラーTFT LCD(2.0インチ)

ネットワーク

Wi-Fi、dual mode Bluetooth

入力

 5.0V~5.5V/500mA(USB Type-C経由)

インターフェイス

  • USB Type-C×1
  • SPI×1
  • GROVE I2C(HY2.0-4)×1
  • UART×2
  • I2S(SCLK、WS、MCLK、IN、OUT)×1
  • microSDスロット×1

慣性計測センサー

  • MPU6886:加速度3軸及びジャイロ(角速度)3軸の6軸
  • BMM150:地磁気3軸

初期モデルはMPU9250だったが2019年頃からMPU6886+BMM150の組み合わせに変わっている

入力機器

  • キーボード
  • テンキー
  • ゲーム機風インターフェースパネル

内蔵スピーカー

1W

内蔵電池

3.7V/150mAh

4. M5Stack FIRE

9軸センサーを搭載したM5Stack Gray相当にメモリが4M PSRAMに強化されているのとLED BAR(RGB LED×10)や充電用のCharge Baseが付いている。

またインターフェース類はM5Stack Grayとは異なるのと本体裏側にレゴとジョイントできる穴が空いている。

搭載チップ

ESP32 240MHz dual core

メモリ

520KB SRAM、4M PSRAM

フラッシュメモリ

16M FLASH

ディスプレイ

320×240 カラーTFT LCD(2.0インチ)

ネットワーク

Wi-Fi、dual mode Bluetooth

入力

 5.0V/500mA(USB Type-C経由)

インターフェイス

  • USB Type-C×1
  • GROVE×3(I2C、I/O、UART)
  • POGO PIN×1(Charge Baseとの接続)
  • microSDスロット×1

慣性計測センサー

  • MPU6886:加速度3軸及びジャイロ(角速度)3軸の6軸
  • BMM150:地磁気3軸

初期モデルはMPU6050+MAG3110だったがMPU9250に変更され最新モデルはMPU6886+BMM150の組み合わせになっている

LED

LED BAR(RGB LED×10)

内蔵スピーカー

1W

内蔵電池

3.7V/550mAh

5. M5GO IoTスターターキット

M5stack Gray相当に温湿度の測定や赤外線など各種センサーが付属しているセット。

LEGOとの互換用のパーツも付属しているのでレゴマインドストームEV3とも組み合わせる事ができる。

2021年11月 追記

シリアル変換モジュールが CP2104 から CH9102F へと変更された Ver2.6 がスイッチサイエンスで販売されている。

搭載チップ

ESP32 240MHz dual core

メモリ

520KB SRAM

フラッシュメモリ

16M FLASH

ディスプレイ

320×240 カラーTFT LCD(2.0インチ)

ネットワーク

Wi-Fi、dual mode Bluetooth

入力

 5.0V/500mA(USB Type-C経由)

インターフェイス

  • USB Type-C×1
  • GROVE×3(I2C、I/O、UART)
  • POGO PIN×1
  • microSDスロット×1

慣性計測センサー

MPU9250:加速度3軸、ジャイロ(角速度)3軸、地磁気3軸の9軸センサー

LED

LED BAR(RGB LED×10)

内蔵スピーカー

1W

マイクロフォン

マイク

内蔵電池

3.7V/550mAh

付属センサー

  • ENV Sensor(温湿度、気圧)
  • IR Romote(赤外線)
  • RGB LED(LEDの点灯)
  • Motion Sensor(モーションセンサー)
  • ANGLE Sensor(つまみの位置で数値や側面LEDの発光量が変わる)
  • Hub

6. M5Stack Core2

2020年9月に発売されたオリジナル世代のCoreを機能拡張したバージョン。

M5Stack Grayと比較すると8M PSRAM、タッチスクリーン、地磁気センサーがついてない(6軸の加速度&ジャイロセンサーのみ)、振動モーターによるバイブレーション、マイクロフォン、リアルタイムクッロック等の違いがある。

搭載チップ

ESP32 D0WD-V3 240MHz dual core

メモリ

520KB SRAM、8M PSRAM

フラッシュメモリ

16M FLASH

ディスプレイ

320×240 カラーTFT LCD(2.0インチ)

タッチスクリーン(FT6336U)

ネットワーク

Wi-Fi、dual mode Bluetooth

入力

 5.0V/500mA(USB Type-C経由)

インターフェイス

  • USB Type-C×1
  • GROVE×3(I2C、I/O、UART)
  • microSDスロット×1

慣性計測センサー

MPU6886:加速度3軸及びジャイロ(角速度)3軸の6軸

その他

  • 振動モーターによるバイブレーション機能
  • マイクロフォン(SPM1423)
  • リアルタイムクッロック(RTC BM8563)

LED

電源表示灯(緑)

内蔵スピーカー

1W

I2Sパワーアンプ(NS4168)

内蔵電池

3.7V/390mAh(リチウムバッテリ)

7. M5Stack ATOM Matrix

M5Stack シリーズの中でもコンパクトな開発モジュール。

24x24mm の小さなサイズにESP32チップを搭載している。

搭載チップ

ESP32-PICO-D4 チップ

メモリ

統合型 520 KB SRAM

フラッシュメモリ

4M FLASH

ディスプレイ

5 x 5 RGB LEDパネル

ネットワーク

Wi-Fi、dual mode Bluetooth

入力

5.0V@500mA(USB Type-C経由)

インターフェイス

  • USB Type-C × 1
  • PH2.0-4P × 1(GROVE互換)
  • 拡張ピン(6 ✕ GPIOピン)

慣性計測センサー

MPU6886:加速度3軸及びジャイロ(角速度)3軸の6軸

その他

赤外線送信

M5Stick系

M5Stick系は主に以下の製品が販売されている。

  1. M5StickC
  2. M5stickC Plus
  3. M5StickV AIカメラ搭載

1. M5StickC

M5Stackを小型化して若干スペックがダウンしているがIMU(慣性計測装置)も積んでおり最初に始めるIoT機器としてはおすすめ。

2021年11月 追記

M5StickC は下記の M5StickC Plus に置き換わっている。

スイッチサイエンスでは M5StickC(本体のみ)がまだ販売されていた。

搭載チップ

ESP32-PICO 240MHz dual core

メモリ

520KB SRAM

フラッシュメモリ

4M FLASH

ディスプレイ

80×160 カラーTFT LCD(0.96インチ)

ネットワーク

Wi-Fi、dual mode Bluetooth

入力

5.0V@500mA(USB Type-C経由)

インターフェイス

  • USB Type-C×1
  • HY2.0-4P(Grove互換コネクター)×1
  • 拡張コネクター

慣性計測センサー

MPU6886:加速度3軸及びジャイロ(角速度)3軸の6軸

当初はSH200Qだったが2019年頃からMPU6886に切り替わっている

その他

赤外線送信

LED

赤色LED×1個

マイクロフォン

マイクロフォン内蔵

内蔵電池

80mAh リチウムイオンポリマーバッテリー

2. M5StickC Plus

M5stickと比較して画面が大きくなった事とバッテリー容量が増えてブザーが追加されたバージョン。

搭載チップ

ESP32-PICO-D4 240MHz dual core

メモリ

520KB SRAM

フラッシュメモリ

4M FLASH

ディスプレイ

135×240 カラーTFT LCD(1.14インチ)

ネットワーク

Wi-Fi、dual mode Bluetooth

入力

5.0V@500mA(USB Type-C経由)

インターフェイス

  • USB Type-C×1
  • HY2.0-4P(Grove互換コネクター)×1
  • 拡張コネクター

慣性計測センサー

MPU6886:加速度3軸及びジャイロ(角速度)3軸の6軸

当初はSH200Qだったが2019年頃からMPU6886に切り替わっている

その他

  • 赤外線送信
  • ブザー

LED

赤色LED×1個

マイクロフォン

マイクロフォン内蔵

内蔵電池

120mAh@3.7V

3. M5StickV AIカメラ搭載

搭載チップはESP32ではなく64ビットRISC-Vを搭載している。

カメラに写った映像をV-Trainingというサービスを使って学習させて学習後のモデルをM5stickVにダウンロードすればニューラルネットワークプロセッサーで物体検知(Object Detection)が出来たりと面白そうな使い方ができそうな製品。

Micropythonが動くようなのでいずれ試してみたいと思っている。

搭載チップ等

  • Dual-Core 64-bit RISC-V RV64IMAFDC(RV64GC)400Mhz(ノーマル)
  • Dual Independent Double Precision FPU
  • ニューラルネットワークプロセッサ(KPU)/0.8Tops
  • Field-Programmable IO Array (FPIOA)

メモリ

8MiB SRAM

フラッシュメモリ

16M FLASH

ディスプレイ

135×240 カラーTFT LCD(1.14インチ)

ネットワーク

Wi-Fi、dual mode Bluetooth

入力

5.0V DC電源(USB Type-C経由)

インターフェイス

  • USB Type-C×1
  • SPI、I2C、UART、I2S、RTC、PWM
  • microSDスロット×1

慣性計測センサー

MPU6886:加速度3軸及びジャイロ(角速度)3軸の6軸

カメラ

640×480カメラ(OV7740イメージセンサー)

LED

ステータスLED(RGBW)

マイクロフォン

マイクロフォン(MSM261S4030HOR)

※マイクロフォンの無いバージョンもある様なので購入時には注意

内蔵電池

200mAh

プログラム環境

M5StickCでのプログラムの作成に戻る。

簡単なテストプログラムを作成するにあたってプログラミング環境について調べてみた。

環境

尚、自分の環境は以下の通りである。

OS

Windows10 Home バージョン1903

本体

DELL G7 15 7588

CPU

CoreTM i7-8750H

開発環境と言語の選定

一般的な開発環境と言語はArduino IDEでC/C++の選択の模様。

MicroPythonでも動かすことが出来るみたいなのでネットで色々と調べたのだが、M5Stack関係のPythonでのサンプルソースはそれ程多くはなかった。

自分的にはC言語はイマイチ(というかかなり)分かっていないので少しでもマシなPythonを選択したい所だがこの手の選択は言語が苦手でも参考資料やサンプルコードが多いほうが結局楽になる事が多いと感じている。

「まぁC/C++もやっているうちに出来る様になるでしょう」と諦めてArduino IDEをインストールすることにする。

Arduino IDEのダウンロード

こちらのページへアクセスして右側の”DOWNLOAD OPTIONS”の”Windows Win7 and newer”をクリックする。

Arduino IDEのダウンロード

寄付をしつつダウンロードする場合は金額を選択して「CONTRIBUTE & DOWNLOAD」ボタンを押すとPayPalでの寄付ができる。

もしArduino IDEを使い込むようなら寄付をしようと思いつつまずは無料の”JUST DOWNLOAD”をクリックした。

無料版をダウンロード

arduino-1.8.13-windows.exeファイルをローカルディスクに保存する。

インストーラーの起動

ダウンロードしたarduino-1.8.13-windows.exeを起動するとGNUのライセンスが表示されるので「I Agree」をクリックする。

ライセンス確認

インストールオプションが表示されるので確認をして「Next」ボタンをクリックする。

インストールオプションの選択

インストール先フォルダーを確認して「Install」ボタンをクリックする。

インストール開始

追加ソフトウェアのインストール

Adafruit IndustriesのLLCポートデバイスソフトウェアのインストールを確認されるので「インストール」ボタンをクリックする。

Adafruit IndustriesのLLCポート

Arduino srlのUSBドライバーのインストールを確認されるので「インストール」ボタンをクリックする。

Arduino srl USBを Driver

続いてArdiuno LLCのUSBドライバーのインストールを確認されるので「インストール」ボタンをクリックする。

何故、Arduino srl(イタリア)とArdiuno LLC(米国)の2つのUSBドライバーがあるのかは良く分からないが以前に分裂していた事があったので(2016年に和解)その時の名残なのかも知れない。

Ardiuno LLCのUSBドライバーのインストール

インストールが終了したら「Close」ボタンをクリックする。

インストール終了

動作環境の準備

インストールが終了したらM5StickCのプログラミングに必要なライブラリー類をインストールする。

ボードマネージャの追加

Arduino IDEを起動したら”ファイル”ー>”環境設定”を選択する。

環境設定

追加ボードマネージャのURL欄に、

https://dl.espressif.com/dl/package_esp32_index.json

を入力して「OK」ボタンをクリックするとESP32を認識できるようになる。

※複数のボードマネージャを指定する場合は”,”(カンマ)で区切る。

追加ボードマネージャのURL

続いて”ツール”ー>”ボード”ー>”ボードマネージャ”を選択する。

ボードマネージャ

検索欄で”esp32″を入力すると絞り込まれるので「インストール」ボタンをクリックする。

インストールが終了したら「閉じる」ボタンで閉じる。

esp32で検索してインストール

ライブラリーのインストール

続いて必要なライブラリーをインストールする。

メニューから”スケッチ”ー>”ライブラリをインクルード”ー>”ライブラリを管理”を選択する。

ライブラリを管理

検索欄で”M5StickC”で絞り込んで該当ライブラリを表示させたら「インストール」ボタンをクリックしてM5StickCのライブラリーをインストールする。

検索欄でM5StickCを絞り込んでインストーラー

同じく検索欄で”FastLED”で絞り込んで「インストール」ボタンをクリックしてFastLEDのライブラリーをインストールする。

尚、このライブラリーは工場出荷時のサンプルアプリで使用しているのでインストールしておく。

インストールが終了したら「閉じる」ボタンで閉じる。

FastLEDのインストール

COMポートの確認

M5StickCをパソコンとUSB接続をするとCOMポートが認識されるので番号を調べておく。

エクスプローラーから”PC”上で右クリック、”プロパティ”を選択する。

PC、プロパティ

デバイスマネージャーをクリックする。

M5StickCをUSB接続するとCOM5(環境によって変わる可能性があり)が表示されるのでCOM5である事が分かる。

COM番号を調べる

ボードの選択

続いてArduino IDEのメニューから”ツール”ー>”ボード”ー>”ESP32 Arduino”ー>”M5Stick-C”を選択する。

ボードをM5StickCを選択する

Upload Speedが1500000に変わるので(変わっていなければ手動で変更する)続いて”ツール”ー>”Partition Scheme”ー>”No OTA(Large APP)”を選択する。

OTAとはOver the Airの略称でWi-Fi経由でプログラムのバージョンアップを行う機能なのだが一時的に新旧のプログラムがメモリに読み込まれるのでプログラムサイズの2倍分の空きメモリが必要になる。

今回テストで作成するプログラム程度であれば何も問題が無いサイズなのだが工場出荷時にインストールされていたプログラムに戻そうとコンパイルした所、OTAが有効になっていると、

The program size (1338029 bytes) is greater than maximum allowed (1310720 bytes)

のエラーになってしまった。

メモリ上のプログラム領域を1.3MByte以上に広げる設定もあるようなのだが、とりあえずOTAを無効にして対応する事にしている。

ポートの選択

先程、確認しておいたCOMポート(COM5)を設定する。

メニューから”ツール”ー>”シリアルポート”ー>”COM5″を選択する。

ポートの設定

以上で事前の設定は終了。

テストプログラム

メニューから”ファイル”ー>”新規ファイル”で新規プログラムを作成する。

仕様

テスト用のプログラムの仕様は以下の通り。

  • ボタンA(M5ボタン)でLEDの点灯/消灯を切り替える(トグル)
  • LED点灯時はディスプレイに”LED ON”の文字、消灯時は”LED OFF”の文字を表示する
  • ボタンBでディスプレイの文字の表示を”背景が黒の白文字”と”背景が白の赤文字”に切り替える(トグル)

白文字のLED消灯

白文字のLED消灯

白文字のLED点灯

白文字のLED点灯

赤文字のLED消灯

赤文字のLED消灯

赤文字のLED点灯

赤文字のLED点灯

ソースコード

上記のプログラムのソースコードは以下の通り。

#include <M5StickC.h>

#define LED_PIN   10

#define LED_ON  LOW // LED点灯
#define LED_OFF HIGH // LED消灯

int led_flg = 0; // false
int color_flg = 0; // false

void setup() {
  M5.begin();
  pinMode(LED_PIN, OUTPUT);
  digitalWrite(LED_PIN, LED_OFF); // LEDを消灯する
  led_flg = 0;
  M5.Lcd.setRotation(1); // LCDの方向を変える
  M5.Lcd.setTextSize(2); // フォントサイズを2倍
  M5.Lcd.setTextColor(WHITE, BLACK); // 文字を白、背景を黒
  color_flg = 0;
  M5.Lcd.setCursor(10,10);
  M5.Lcd.print("LED OFF"); // LED OFFを表示
}

void loop() {
  M5.update();

  if(M5.BtnA.wasPressed()){ // ボタンAが押された時
    M5.Lcd.fillScreen(BLACK);
    M5.Lcd.setCursor(10,10);
    if (led_flg){ // 点灯なら
      digitalWrite(LED_PIN, LED_OFF); // 消灯する
      M5.Lcd.print("LED OFF"); // LED OFFを表示
      led_flg = 0;
    } else { // 消灯なら
      digitalWrite(LED_PIN, LED_ON); // 点灯させる 
      M5.Lcd.print("LED ON"); // LED ONを表示
      led_flg = 1;
    }
    delay(500);
  }

  if(M5.BtnA.wasReleased()){ // ボタンAが離された時
    ;  // 何もしない 
  }

  if(M5.BtnB.wasPressed()){ // ボタンBが押された時
    if (color_flg){ // 文字赤、背景白なら
      M5.Lcd.setTextColor(WHITE, BLACK); // 文字を白、背景を黒
      color_flg = 0;
    } else { // 文字白、背景黒なら
      M5.Lcd.setTextColor(RED, WHITE); // 文字を赤、背景を白
      color_flg = 1;
    }
    delay(500);
  }

  if(M5.BtnB.wasReleased()){ // ボタンBが離されたとき
     ; // 何もしない
  }

}

フラグで状態を判断するのでは無くもっとスマートな方法があるのだとは思うのと、もうちょっとC/C++らしいコードを書ければ良いのだがC言語初心者という事で容赦して欲しい。

コンパイルと書き込み

続いてメニューから”スケッチ”ー>”マイコンボードに書き込む”を選択するとコンパイルすると同時にM5StickCに実行モジュールを書き込む。

コンパイル&マイコンボードに書き込み

書き込むと同時にプログラムが動作するのでボタンA、Bを押してみて希望の動作をすることを確認した。

最初のプログラムに戻す

新たなプログラムを書き込むとの元のプログラムは消えてしまうので工場出荷時のプログラムに戻したい時は以下の手順で戻す。

メニュから”ファイル”ー>”開く”でファイルを開く。

ファイル、開く

Arduino IDEのライブラリーをインストールしたフォルダー(Windows10の場合はデフォルトだと”ドキュメント”)配下の下記のファルダーのFactoryTest.inoを開く。

C:¥Users¥ユーザ名¥Documents¥Arduino¥libraries¥M5StickC¥examples¥Basics¥FactoryTest¥FactoryTest.ino
ファイルを開く

ファイルを開いたら前述の手順でメニューから”スケッチ”ー>”マイコンボードに書き込む”を選択してプログラムをM5StickCに書き込めば工場出荷時の状態に戻る。

以上で今回の記事を終了する。

最後に

この記事が何処かで誰かの役に立つことを願っている。

尚、当記事中の商品へのリンクはAmazonアソシエイトへのリンクが含まれています。Amazonのアソシエイトとして、当メディアは適格販売により収入を得ていますのでご了承ください。

souichirou

やった事を忘れない為の備忘録 同じような事をやりたい人の参考になればと思ってブログにしてます。 主にレゴ、AWS(Amazon Web Services)、WordPress、Deep Learning、RaspberryPiに関するブログを書いています。 仕事では工場に協働ロボットの導入や中小企業へのAI/IoT導入のアドバイザーをやっています。 2019年7月にJDLA(一般社団法人 日本デイープラーニング協会)Deep Learning for GENERALに合格しました。 質問は記事一番下にあるコメントかメニュー上部の問い合わせからお願いします。

おすすめ

質問やコメントや励ましの言葉などを残す

名前、メール、サイト欄は任意です。
またメールアドレスは公開されません。