見出し画像

はじめてのM5Stack - REALITY Advent Calendar #12

12日目を担当するサーバサイドエンジニアのみるぽちです。
愛する妻と子供達【メス猫(12歳)、オス猫(8歳)、娘(5歳)、息子(2歳)】を置き去りにして開発合宿に参加しました。。。
※決して温泉目当てじゃないわよ、仕事仲間と親睦を深めるためなのよー!(自分に言い聞かせる...)


合宿の開発内容の選定

画像1

という趣旨なので、今回は業務以外の事をやろう!と思いました。

でも何やろう???

と悩んでいたのですが、自由研究っぽく電子工作するのはどうだろう!面白そうだな。よーし決定★

でも何にしよう???

よし、こういう時はハードウェアに強い同じサーバエンジニアのうすぎぬちゃんにアドバイスを求めよう!そうしよう。

主な電子工作について

うすぎぬちゃんにアドバイスしてもらったのが以下の3つ。

Arduino(アルディーノ)
Raspberry Pi(ラズベリーパイ)
M5Stack(エムファイブ・スタック)

Arduinoは、むき出しの基盤にCPUや入出力ポートをそなえた小型のコンピュータ。安くて教育用としても人気があるみたい。
Arduino IDEと呼ばれる統合開発環境を用いて、Arduino言語と呼ばれるC言語に近いオリジナル言語を用います。

Raspberry Pi(通称ラズパイ)は、Arduino同様むき出しの基盤です。
LinuxやWindows 10 IoT CoreなどOSが搭載され、このボード自体がコンピュータとして動作します。(ArduinoにはOSがなく一度書き込んだプログラムがマイコン上で動作している)
Linux上で動作するので、開発できるプログラミング言語に制限はなく、多機能なのでかなりの事ができるが、シンプルな作品作りならラズパイじゃなくてもよいかも。

M5Stackは、むき出しの基盤ではなくArduinoの機能をケースに詰め込んだような製品です。液晶画面やWi-Fi、Bluetooth通信機能、SDカードスロット、マイク、スピーカー、ディスプレイなどが搭載されているため、これ1つでさまざまなIoTデバイスとして利用でき、多数の専用拡張パーツがあります。

↓↓↓

さてどれにしよう?
Arduinoやラズパイの基盤に回路つないだりするのは楽しそうだけど、まだまだハードウェアに慣れてない初心者なのでなるべく簡単にやりたい!
よし、M5Stackにしよう!!

M5Stackの種類

さて、M5Stackに決めたはいいが、一体どれだけの種類あるのだろう??
調べてみたらこんなにありました(汗)

・M5Stack Basic
・M5GO
・M5Stack Gray
・M5Stack Fire
・M5Stack Core2
・M5StickC
・M5StickV
・M5StickC Plus
・M5Stack CoreInk
・M5Papaer
・Atom Matrix
・Atom lite
・Atom Echo

あわわわぁ。。。どれを買えばいいんだろう??
とりあえず自分なりに調べてみました。

まずはM5Stack Basic、M5GO、M5Stack Gray、M5Stack Fire、M5Stack Core2が同じ系統で四角いケースに3つのボタンといった基本デザイン。
中のチップ、液晶がモノクロかカラーかとかのグレードなんかが異なります。

次にM5StickC、M5StickV、M5StickC Plusが同じ系統で、正方形ではなく長方形の細長いスティック状のケース。基本形より安くて小さい。

そしてM5Stack CoreInk、M5Papaerが電子ペーパーディスプレイ搭載で電源消しても表示されたまま。タッチパネルかどうかの違いがあります。

ほんでAtom Matrix、Atom liteはバッテリーがないので基本形より更に小さく最小サイズ。

最後にAtom Echoは、スピーカーとマイク搭載でスマートスピーカー向けとのこと。

M5Stackの購入先

よし、ではどこで買おう???
と売っている所を調べてみました。

スイッチサイエンス
秋月電子通商
千石電商
共立エレショップ
マルツオンライン
Amazon

最初は秋葉原にリアル店舗がある秋月電子通商や千石電商にしようかなって考えましたが、交通費とか考えたらリアル店舗こだわらなくていいかなと。
それより意外と送料がなんやかんやかかるのでAmazonがいいのかと思ったら元値が微妙に高い気がする。。
で、結局スイッチサイエンスが正規代理店なのでこちらにしました。
※3,000円以上で送料無料だったしね。

実際に購入したもの

・M5Stack Core2 IoT開発キット 6,589円
・M5StickC Plus        3,058円

色々考えた結果、基本形の最新版でカラーディスプレイでタッチパネルのM5Stack Core2 をメインに。親機と子機として通信できるようにもう1台スティック型のM5StickC Plusをサブに。
※M5StickCでよかったのですが在庫なかったので

M5Stackの開発環境

M5Stackを開発するのはWindows、Mac、LinuxのいずれでもOKです。
基本的には付属のUSB-C⇒USB-Aのケーブルを使ってPCと接続してデータを流し込むって感じです。
今回はMacbook Pro macOS Catalina(バージョン10.15.7)を使用しました。
端子がUSB-Cしかないので、USB-A⇒USB-C変換アダプタを利用しました。

<手順>
1. Arduino IDEをインストール
2. CP210X Driverのインストール
3. ArduinoIDEの設定

1. Arduino IDEをインストール
リンク先のページから[Mac OS X 10.10 or newer]を選択し、
Arduino IDE 1.8.16をダウンロード。
ダウンロードしたArudioをアプリケーションフォルダに移動して起動すればOK。

2. CP210X Driverのインストール
リンク先のページから[CP2104 Driver]の横の[Download]⇒[MacOS]を選択。
ダウンロードした[SiLabsUSBDriverDisk.dmg]を開いて、
「Silicon Labs VCP Driver.pkg」をダブルクリックしてドライバーをインストールする。
基本的にはデフォルトインストールするのだが、途中『機能拡張がブロックされました』というダイアログがでたら、
["セキュリティ"環境設定を開く]を選択します。
[セキュリティとプライバシー]の[一般]タブを開き、左下にある鍵アイコンをクリック。
[Silicon Laboratories Inc]
[Placeholder Developer]
の2つにチェックを入れて[OK]を選択してインストールを終わらせます。

ドライバがインストールされたかを確認する。

% cd ~
% ls /Library/Extensions/
...
SiLabsUSBDriver.kext
...

SiLabsUSBDriver.kextがあればOK。

3. ArduinoIDEの設定
(ボードの追加)
メニューバーの[Arduino]⇒[Preferences...]から環境設定のダイアログを開き、[追加のボードマネージャのURL]で以下のURLを入力。

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

そしてメニューバーの[ツール]⇒[ボード]⇒[ボードマネージャ...]を選択し、
[タイプ]の横にある検索ボックスに「m5」を入力し検索された[M5Stack]をインストールします。
---------------------------------------------------
M5Stack
by M5Stack official 2.0.0 [インストール]
---------------------------------------------------

(ライブラリの追加)
メニューバーの[ツール]⇒[ライブラリを管理...]を選択。
検索ボックスに「m5core2]を入力し[M5Core2]をインストール。
同様に「m5stickcplus」を入力し[M5StickCPlus]もインストール。
---------------------------------------------------
M5Core2
by M5Stack バージョン0.0.9 [インストール]
---------------------------------------------------
M5StickCPlus
by M5Stack バージョン0.0.5 [インストール]
---------------------------------------------------

(ボードの選択)
メニューバーの[ツール]⇒[ボード]⇒[M5Stasck Arduino]⇒[M5Stack-Core2]を選択する。
※M5StickCPlusの場合は、メニューバーの[ツール]⇒[ボード]⇒[M5Stasck Arduino]⇒[M5Stick-C-Plus]をする。

これで準備OK!!!

やっぱり最初は「Hello World」

やったーーーー!!!
やっとコードが書ける〜♪
※以下はM5StickC Plusの場合のコードです。

スクリーンショット 2021-12-11 14.35.37

コードを入力したらウィンドウ上部の左から2番目の[⇒]アイコン(マイコンボードに書き込む)をクリックすれば、ビルドして転送してくれます。

画像3

おおーーー!!!
これだけでもなんか嬉しい♪
すんごく嬉しい。。

なぜかというと・・・・

実は大きなトラブルがありました。

予想外のトラブル

画像2

実は最初に話していた通り、上記の写真のM5Stack Duo2をメインにするつもりだったので最初はこいつにHello Worldを表示させるつもりでした。
※画像のディスプレイは買った時のサンプルデモになります。

ところがUSB接続しても正常に認識されず、プログラムをM5Stack Duo2に書き込むことが出来なかったのです。 

本来ならばUSB接続した後、メニューバーの[ツール]⇒[シリアルポート]⇒[/dev/cu.usbserial-XXXXXXX]と認識されるはずなのですが、[/dev/cu.usbmodemXXXXXXX]と認識されてしまいます。

試しにこのまま転送してみたのですが、下記のエラーが出てしまいます。

Arduino:1.8.16 (Mac OS X), ボード:"M5Stack-Core2, Enabled, Default (2 x 6.5 MB app, 3.6 MB SPIFFS), 240MHz (WiFi/BT), 921600, None"
最大6553600バイトのフラッシュメモリのうち、スケッチが387433バイト(5%)を使っています。
最大4521984バイトのRAMのうち、グローバル変数が15804バイト(0%)を使っていて、ローカル変数で4506180バイト使うことができます。
esptool.py v3.1
Serial port /dev/cu.usbmodemXXXXXXX
Connecting.....
Chip is ESP32-D0WDQ6-V3 (revision 3)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
MAC: XX:XX:XX:XX:XX:XX
Uploading stub...
A fatal error occurred: Failed to write to target RAM (result was 01070000)
A fatal error occurred: Failed to write to target RAM (result was 01070000)

この後、このUSB接続を正常にすべく、色々試してみました。
・持ってきた別のMacbook Airで試してみる
・USB-A⇒USB-C変換アダプタを交換してみる
・USB端子の上下の向きを変えてみる
・ドライバーを別のサイトから入手する
・お祈りする
・温泉に入って気持ちを切り替える
・お酒を飲んでパワーアップする
いずれも駄目でした。。。

結局色々ためしてみたものの、M5Stack Duo2には転送出来ませんでした。
そしてすごく時間をかけた後、M5StickC Plusを試してみたらめちゃくちゃあっさり転送出来ちゃいました。

反省点

本当は合宿中に「Hello World」だけでなくいろいろなサンプルをいじった後、【騒音計】⇒【ある一定の大きい音を検知したらライトを点滅させてブザーを鳴らす】ようなものを作るつもりでした。

ですが先程説明したトラブルのせいで時間をたくさん使ってしまい、サンプルをいじってやっとコードを書こうって時に時間切れとなってしまいました。

(反省点)
・トラブルが起きた時、原因追求に時間をかけるより、代替品があるならそちらで本来の目的に時間をかけるべきだった。
・そもそも事前準備をしっかりして、開発環境までは合宿前にすませるべきだった。

最後に合宿の感想

個人的には大きく反省が残る合宿となってしまいましたが、仕事とは関係なしにみんなと夢中になって開発したり、足湯したり、温泉入ったり、酒を飲んだり、普段話したことのない人とお話出来たりして大変充実した合宿旅行となりました。
帰りにお土産で干物買って帰りました(笑)

明日13日目のアドベントカレンダーは!?

Androidのテックリードをしているメタルおじさんによる「KtorでAndroidをWebサーバーにしてみた」です。お楽しみに♪