M5StackとGPSで遊ぶ


Pythonが動くマイコンで遊んでみようと思いM5Stackを買いました。

M5StackはEspressif ESP32マイコン、ディスプレイ、SDカードスロット、ボタン、ブザーが搭載されており、かわいいプラスチックの筐体にパッケージされています。基板をむき身で持つよりずっと安心できますね。

製品ラインナップはマイコンが搭載される コア とセンサ機器を搭載する モジュール に分かれています。 モジュールにはコアの下側にスタックして接続するものとGroveコネクタにより接続するものがあります。

買ったもの

  • M5Stack Fire (失敗!)
  • M5Stack Gray
  • M5Stack GPS Module

M5Stack Fire

M5Stack Fireはコアの一つで、標準のコアに9軸センサとPSRAMが追加されています。

メモリも多いし、9軸センサも載ってるし、バッテリ付きモジュールも同梱してるし、これは便利だと思ったわけですが罠がありました。同時に購入したGPSモジュールが動きません。

MicroPythonからGPSモジュールのUARTにアクセスするとリブートしてしまい、何故だろうと調べまくった結果、以下のことがわかりました。

  • M5Stack FireのPSRAMは16番、17番ピンを使用 (回路図)
  • GPSモジュールのUARTは16番、17番ピンを使用

おい嘘だろ…。

カッとなったわたしはPSRAM未搭載の別のグレードであれば動くだろうと考え千石通商へ走り、M5Stack Grayを手に入れました。こちらは正常に動作。

開発環境の構築

MicroPythonを動かすには以下のツールが必要です。

UART VCPドライバのインストール

Macの人はbrewでインストールすると簡単です。

brew cask install silicon-labs-vcp-driver

esptoolのインストール

Macの人はbrewでインストールすると簡単です。

brew install esptool

adafruit ampyのインストール

brewで提供されていないのでpipでインストールします。
(Python2じゃないと動かなかったような気がする)

pip install adafruit-ampy

ファームウェアのインストール

esptoolがインストールされていれば以下の手順でインストールできます。 firmware.bin はダウンロードしたファイルを指定しましょう。

esptool.py --chip esp32 --port /dev/cu.SLAB_USBtoUART erase_flash
esptool.py --chip esp32 --port /dev/cu.SLAB_USBtoUART write_flash --flash_mode dio -z 0x1000 firmware.bin

GPSモジュールを駆動するサンプルコード

Ambientさんのサイトで書かれていた M5StackでGPS衛星の現在位置を表示する をSDカードにGPSログを取得するよう改造して動かしました。 main.pymicropyGPS.py を同じディレクトリに置いたら次のようにファイルを転送します。

ampy -p /dev/cu.SLAB_USBtoUART put main.py
ampy -p /dev/cu.SLAB_USBtoUART put micropyGPS.py

M5Stackの側面についているボタンを短押しするとリセットされ、プログラムが実行されます。

改造後のコードはgithubに上げました。