2019年3月30日土曜日

【めんどくさがりやさん用】できるだけ手っとりばやくM5Stackで自分のプログラムを動かす方法(MicroPython)


■ はじめに

僕が持っているのはM5Stack FACESだ。◯ルカリで安かったので思わずポチってしまった。
日本でこのアイテムを扱っているスイッチサイエンスさんのサイトの画像にこんなのが。


↑「PocketComputer」ですよ!!!!

僕も元高専生だったので持っていましたよ。ポケコン。例の某中華の企業にドナドナされてしまったSHARPのやつで、入学と同時に教育用とか言って強制的に買わされるのですw
電源オンするとすぐ関数電卓になって、「BASIC」ボタンを押すとちゃらっとBASICを書けて、颯爽とRUNすることができました。今思うと結構すぐれものでしたね。

そんなポケコンよりはるかに優れたスペックを持つのがこのM5Stackで、折角買ったからにはプログラミングの勉強に使いたいところです。

じゃあポケコンのようにすぐプログラミングを始められるか…というと、そうではなく、鬼のようにめんどくさい開発環境構築をしなければならないのです(TT

そこで、いちばんめんどくさいないのは…と、いろいろと調べた結果

MicroPythonをオフラインで使う!

この方法かな?と思ったので手順をメモしておきます。


■ 用意するもの

・M5Stack
・USBケーブル(スイッチサイエンスで買うと、USB Type-Cなのに、なぜか表裏があるという怪しいのがついてくるらしいw)
・それを接続するパソコン。(OSはなんでもいいけど、やっぱりLinuxが一番楽だと思います。大抵の場合USBのドライバーをインストールしなくてもシリアルポートとして認識してくれるので)
もし普段Windowsパソコンを使っているなら、USB用のドライバー(CP210X Driver)をインストールしておきましょう。


「CP210X Driver」というのをダウンロードして、インストールしておきましょう。


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

micropythonのファームウェアをM5Stackに書き込みます。

そのファームウェアは https://github.com/m5stack/M5Cloud/tree/master/firmwares からダウンロードできます。オフライン版がいいでしょう。(筆者がv0.4.0ををつ限りでは特にオフライン版を使わなくても問題ないようです。)


Windowsの場合:

 「Espressif Flash Download Tools」というのを使うのが標準らしい。
 ダウンロードは https://www.espressif.com/en/support/download/other-tools の「Flash Download Tools」から。

起動すると、いろいろなESP〜というボタンが出てくるので「ESP32 Download Tool」を選ぶ。
ツールの使い方は公式に図で示されている。
基本的には、この図のとおりにやればだいじょうぶ(ボタンを押す順番はERASE→START)
「ESP32 Download Tool」で.binファイルはあらかじめダウンロードしたファイルを指定して(下の図とは違うファイル名になるはずです)、0x1000を指定してあげましょう。


「あれ?なんかエラーが出る?」と思っても、慌てずにパソコンとM5Stackの接続を確認しましょう。意外と多いんですよね。こういう単純なうっかりさんが(^^;←経験者は語る)


MacOS/Linuxの場合:

説明の必要はあまりないかもしれませんが自分用のメモも兼ねて。

「esptool」というPythonのツールで書き込みするので、pipでインストールしておきます。パソコンにPythonがインストールされていな人は…(^▽^;)知りません。特にLinuxを使っている方はスペイン宗教裁判にでもかけられて下さい。

pip install esptool


※僕の場合、esptool.pyが、~/local/.bin にインストールされて、いざ使おうとするときNot foundと怒られてしまうので、パスを設定しておく必要がありました。
PATH="$HOME/bin:$HOME/.local/bin:$PATH"
↑ホームフォルダ下の「.profile」に追加しておきましょう。


いよいよパソコンとM5Stackをケーブルで接続して…

M5Stackのフラッシュメモリを消します。
esptool.py --chip esp32 --port /dev/tty.SLAB_USBtoUART erase_flash
※僕の環境ではportは「/dev/ttyUSB0」でした。

ファームウェアの書き込み
esptool.py --chip esp32 --port /dev/tty.SLAB_USBtoUART write_flash --flash_mode dio -z 0x1000 書き込むfirmwareの名前.bin


無事ファームウェアが書き込み終わると、M5Stackが
M5Stack MicroPython v.x.x.x
Device ID:なんちゃら
という具合に表示されていると思います!

…ふぅ。

■ プログラム書き込みの準備(ampyのインストール)


…ここまででも十分めんどくさい気もしないまでも無いですが;;;
あともう少しです!

公式だとここでM5Cloudからプログラムを書き込むのですが、これもM5Cloudのアカウントを作ったりだとか、M5stackの方にもwifi設定だとかがあってめんどくさいので、USBをつなげてやるのが手っとり早いと思いますね。

でも、やっぱり準備があるんです(^^;

「ampy」というPythonのツールを用意しましょう!

Windowsだと、これまたたいへんですね〜ヽ(´ー`)ノ
Pythonがインストールされていないことが多々あるので…
でもプログラミングを勉強しようと思うなら、WindowsにもPythonを入れておいた方がいいでしょうね。
Pythonのインストールは他サイトが詳しいのでそっちを参照しましょう。

Pythonが入ったら、「コマンドプロンプト」からpipを使って、ampy(パッケージ名はadafruit-ampy)をインストールします。

python -m pip install adafruit-ampy

※Macの場合はroot権限で実行(sudo)する必要があるでしょう。
※筆者は普段Linuxを使っているのですが、この記事を書くために久しぶりにWindowsを使いました
 Python環境を作るのが思いのほかめんどくさかったです(笑)
 インストール時に気をつけていないとpythonコマンドのPATHを手動で設定しないといけないし、pipでさえなぜか-mオプションをつけないとエラーで怒られてしまって、こんな所で詰まってしまうとは思いませんでした(^^;


普通にWindows生活を送っているとコマンドプロンプトとか使うことがまず無いので、コマンドプロンプトがどこにあるのか探す羽目になったりますね…

CUIってわけわからなくてめんどい。と思うのですが、慣れましょう(^^;。僕も始めはCUIアレルギーでした。CUIコマンドがズラズラと並んでいるブログが並んでいると頭が痛くなったものです。でも慣れるとCUIの方が楽ちんな作業もそれなりにあったりしますので。


■ ampyを使う!

…自分以外にここまで読んで下さった方は偉いと思います!他人の文章って、ただでさえ読みにくいですからね…。

よくがんばりました!いよいよ書き込みです!

では、よくある「HelloWorld」を作ったとしましょう。
from m5stack import lcd
lcd.print('hello world!')
↑これをメモ帳なり使い慣れたテキストエディタで「hello.py」とかいうファイル名で保存します。
※そういえば、最近は「テキストエディタって何?」という人もいますね。それくらいWindowsだとメモ帳の存在さえ忘れられかけているようだ。ここでの説明は割愛します。

M5StackとパソコンをUSBケーブルで接続して
ampy  -p [シリアルポート名] run hello.py

シリアルポート名はWindowsの場合 「COM4」とか
macの場合は 「/dev/cu.SLAB_USBtoUART」とかUbuntuなら「/dev/ttyUSB0」 みたいなやつですね。

書き込みが終了するとM5Stackに「HelloWorld!」と表示されたでしょう?

たかが、HelloWorldでも、苦労したぶん表示されると嬉しいものですね〜(T▽T)

ampyは、runコマンドでパソコン上のpyファイルをちゃらっと実行してくれるので、たいへん便利なやつです。何度もお世話になることと思います。
プログラミングってのは、一発で思い通り動くことはほとんどなくて、何度も何度も実行させて修正して確認するという作業の繰り返しですからね…

ampyを使うたびにport名を設定するのがめんどくさいのであれば、環境変数を設定することができます。

AMPY_PORT=/dev/ttyUSB0

こんな感じ。
ほかにホームフォルダに「.ampy」という設定ファイルを作って
# Example .ampy file
# Please fill in your own port, baud rate, and delay
AMPY_PORT=/dev/ttyUSB0
AMPY_BAUD=115200
# Fix for macOS users' "Could not enter raw repl"; try 2.0 and lower from there:
AMPY_DELAY=0.5
これを書いておくと幸せになれるらしい。(https://github.com/pycampers/ampy より。)
Windowsではどうなるのかは知らない(^▽^;

ほかにもampyにはいろいろなコマンドがある。
get
M5Stackに書き込まれているファイルをパソコンにゲットする。

ls
M5Stackに書き込まれているファイルのリストを表示する。要するにLinuxとかのlsと同じですね

put
M5Stackにファイルを書き込む。runと違うのはM5Stackの電源をオフオンしてもファイルが残っている(フラッシュメモリに書き込まれる)ということですね。boot.pyやmain.pyを書き換えれば、電源オン時にそのプログラムが動作することになります

rm
M5Stackにファイルを消す

なんだかんだでampyを使ってパソコンとM5Stackのコミュニケーションを取るのが筆者にとっては一番楽でした。。。

さあ、これで開発環境がそろったし、レッツプログラミング!

…ふぅ…

やっぱり、こういうIoT機器のプログラミングって、どうしても母艦とのやりとりが本当にめんどくさいですね〜(T-T。
その代わり、プログラミングはシンプルになりやすいので楽しいんですけどね!

ここまで読んで下さった方、本当にお疲れ様です;;;

0 件のコメント:

コメントを投稿