m5stackでmicropythonをつかう(SDカードブートも)

2020年4月16日

はじめに

m5stackと呼ばれるESP32にディスプレイをくっつけたデバイスがあります。

M5Stack Basic

それでこいつはmicropythonが動くのですが、公式のファームウエアが、wifi必須で使いづらいので以下の記事を参照しながらオフラインのファームウェアを作成しました。

M5Stack用MicroPythonのビルドとカスタマイズ

ファームウェアの仕様

システム

ざっくりな仕様は以下のとおりです。

  • ボード名 ESP32
  • シリアル速度 115200
  • タイムゾーン JST
  • PSRAM対応(なくでも動作)
  • スタックメモリサイズ 16KB
  • ヒープメモリサイズ 80KB
  • スレッド数 4
  • スレッドスタックサイズ 4KB
  • Telnet server
  • FTP server

記録容量

m5stackはflashが16MBありますが、公式ファームウェアでは2MBしか利用できません

[bash]
----------------
Filesystem size: 2221568 B
           Used: 16128 B
           Free: 2205440 B
----------------
[/bash]

これを16MBすべて利用できるようにファームウェアを作成しました。

[bash]
Internal FS (SPIFFS): Mounted on partition 'internalfs' [size: 14680064; Flash address: 0x200000]
----------------
Filesystem size: 13486336 B
           Used: 512 B
           Free: 13485824 B
----------------
MicroPython ESP32_LoBo_v3.2.24 - 2018-09-06 on M5STACK bord with ESP32
Type "help()" for more information.
>>>
[/bash]

micropythonモジュール

ファームウェア作成時に選択できるすべてのモジュールが有効になっています。

残念ながらBluetoothはメモリが足りずに選択ができませんでした。

以下のモジュールが利用できます。

  • Framebuffer
  • Btree
  • websockets
  • spi tft display
  • GSM
  • GPS
  • Ethernet
  • mDNS
  • requests
  • curl(FTP TLS)
  • ssh
  • mqtt
  • m5stack

m5stackライブラリの使用に関してはこちらを参照してください

使い方

ファームウェアのダウンロード

こちらからダウンロードできます。

追記

telnetやftpが利用できるファームウエアを結構前に作っていたので出しておきます。

展開を行うと次のファイルがあります。

書き込みツールの準備

python3の準備

python3が必要ですので入れてきてから作業を行ってください。

コマンドプロンプトで以下のように実行できれば大丈夫です。

[ps]
C:\Users\PCUser>python
Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:54:40) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()
[/ps]

書き込みツールのインストール

以下のツールをpip3を用いてインストールします。

  • esptool
  • adafruit-ampy

以下のコマンドでインストールすることができます

[ps]
C:\Users\PCUser>pip3 install esptool
Collecting esptool
  Using cached https://files.pythonhosted.org/packages/5c/85/5654e7b9019739d3d89af0adf528c9ae57a9a26682e3aa012e1e30f20674/esptool-2.6.tar.gz
Requirement already satisfied: pyserial>=3.0 in c:\users\pcuser\appdata\local\programs\python\python36\lib\site-packages (from esptool) (3.4)
Requirement already satisfied: pyaes in c:\users\pcuser\appdata\local\programs\python\python36\lib\site-packages (from esptool) (1.6.1)
Requirement already satisfied: ecdsa in c:\users\pcuser\appdata\local\programs\python\python36\lib\site-packages (from esptool) (0.13.2)
Installing collected packages: esptool
  Running setup.py install for esptool ... done
Successfully installed esptool-2.6
You are using pip version 19.0.3, however version 19.1.1 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip' command.
[/ps]
[ps]
C:\Users\PCUser>pip3 install adafruit-ampy
Collecting adafruit-ampy
  Downloading https://files.pythonhosted.org/packages/59/99/f8635577c9a11962ec43714b3fc3d4583070e8f292789b4683979c4abfec/adafruit_ampy-1.0.7-py2.py3-none-any.whl
Collecting python-dotenv (from adafruit-ampy)
  Downloading https://files.pythonhosted.org/packages/8c/14/501508b016e7b1ad0eb91bba581e66ad9bfc7c66fcacbb580eaf9bc38458/python_dotenv-0.10.1-py2.py3-none-any.whl
Collecting click (from adafruit-ampy)
  Downloading https://files.pythonhosted.org/packages/fa/37/45185cb5abbc30d7257104c434fe0b07e5a195a6847506c074527aa599ec/Click-7.0-py2.py3-none-any.whl (81kB)
    100% |████████████████████████████████| 81kB 2.9MB/s
Requirement already satisfied: pyserial in c:\users\pcuser\appdata\local\programs\python\python36\lib\site-packages (from adafruit-ampy) (3.4)
Installing collected packages: python-dotenv, click, adafruit-ampy
Successfully installed adafruit-ampy-1.0.7 click-7.0 python-dotenv-0.10.1
You are using pip version 19.0.3, however version 19.1.1 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip' command.
[/ps]

ファームウェアの書き込み

m5stackをパソコンと接続します。

書き込み先のポートを確認するためにデバイスマネージャを開きます。

devmgmt.msc を指定するか他の手段で開いてください。

CP2104が追加されます。これを選択します。

ドライバの再インストールを選択します。

自動検索を行います。

インストールされました。

COM6であることがわかりました。

ファームウェアを展開したフォルダ内でShiftを押しながら右クリックします。

パワーシェルをここで開くを選択します。

firmware.binはmicropythonの実行環境のみ入っています。

sd_boot_ firmware.binは起動時にSDカード内にある「sdmain.py」を実行します。sd_bootにソースコードがあります。

どちらかを選択してください。

以下のコマンドを実行します。

[ps]
PS D:\Users\PCUser\Downloads\m5stack_micropython> esptool.py.exe --port com6 write_flash 0 .\firmware.bin
esptool.py v2.6
Serial port com6
Connecting.....
Detecting chip type... ESP32
Chip is ESP32D0WDQ6 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
MAC: a4:cf:12:44:4f:48
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Auto-detected Flash size: 16MB
Compressed 16777216 bytes to 1325361...
Wrote 16777216 bytes (1325361 compressed) at 0x00000000 in 152.5 seconds (effective 879.9 kbit/s)...
Hash of data verified.
Leaving...
Hard resetting via RTS pin...
[/ps]

これでファームウェアの書き込みができました。

シリアル通信を行う

今回はRloginを利用します。

115200 8bit です。

接続に成功するといろいろ表示され最後にインタプリタが待機状態になります。

以下のコマンドを実行してみましょう。

[python]
MicroPython ESP32_LoBo_v3.2.24 - 2018-09-06 on M5STACK bord with ESP32
Type "help()" for more information.
>>> import m5stack
Device ID:a4cf12444f48
LCD initializing...Done!
>>> m5stack.lcd.p
pixel           polygon         print           println
>>> m5stack.lcd.println("hello")
[/python]

ファイルを転送する

試しにsd_boot にあるmain.pyを転送してみましょう

転送とコンソールは同時に実行できないので注意しましょう。

以下のコマンドを実行します。

[ps]
PS D:\Users\PCUser\Downloads\m5stack_micropython> ampy.exe --port com6 put .\sd_boot\main.py
[/ps]

SDカードが入っていないとエラーが出ます。FAT32を認識します。

sdカードに以下のファイルを作成します。

m5stackは8bitの20KHZ以下のwavが再生できます。

[python]
sdmain.py
from m5stack import lcd
lcd.print('im_sd_python')
import os
lcd.print(os.getcwd())
print("play music")
import machine,time
lcd.image(0,0,"1.jpg")
dac=machine.DAC(machine.Pin(25))
dac.wavplay('crossingfield2.wav')
time.sleep(30)
[/python]

これ書き込んだSDカードを挿入し再起動します。

画像が表示され音楽が再生されました。

SDカードで起動しているときはカレントディレクトリがsdカードになるので、ファイル操作の対象はフルパスを指定しない限りはSDカードになります。

なのでこの状態で以下のコマンドをもう一度実行します。

[ps]
PS D:\Users\PCUser\Downloads\m5stack_micropython> ampy.exe --port com6 put .\sd_boot\main.py
[/ps]

その後SDカードを取り出してパソコンで確認してみます。

このようにSDカードにmain.pyが書き込まれました。

このsdbootはユーザーがフラッシュかSDかを意識せずに利用することができます。

32GB程の保存領域があるので容量には困らなそうです。

また、転送用のツールがなくてもSDカードを編集すれば開発が可能です。

まとめ

まじつかれた。