STM32F4DISCOVERYでMicroPython!
この記事はGeekWomenJapan Advent Calendar 2016 の21日目の投稿です。
PyLadies Tokyo MeetUpで初めてのマイコン体験してきたので、そのメモになります。
正直いって、マイコンなんて触ったこともない完全な初心者です。
今回は、頼りになるPyLadies 代表@amacbeeさんにいろいろ教えてもらいながら進めました。
(接続するケーブルまでご用意頂き、本当にありがとうございました!)
準備するもの
- STM32F4DISCOVERY
- OS X (他Windows OS XP,7,8 / Linux 64bitでもOK)
- USB Type A to mini-B cable
- USB Type A to micro-b cable
※ケーブルは2本ともPCにつなぐ必要があるので、PC側にUSBポートが2つ必要です。
たったこれだけです!
Python女子部のイベントといことで、今回はMicroPythonを使って動作させます。
何もわからないので、とにかくググる。
Micro Python とは
- Python 3 互換の文法を実装した、マイコン上で動作させることに最適化されたもの
- Micro Python は PyBoard というボードと共に、KICKSTARTER で多数の投資を集めて開発されたようです。
- Micro Python を手軽に試すことが出来る PyBoard は、日本では入手困難ということで、今回は、PyBoard 同等の STM32F4 系のマイコンを搭載したSTM32F4DISCOVERYを使用しました。
STM32F4DISCOVERYって?
- ARM社が販売しているマイコンボードです。(ちなみに、今年SoftBankが3兆円でARM社を買収したらしい)
- ARMの場合、コンパイラやデバッガが無償で個人でも利用可能な為、世界中に多くのホビーユーザーがいるらしい。
- 安く手に入る(@amacbeeさんがまとめて秋月で購入してくれたのですが、2,800円でした!)
とりあえず、micropythonをSTM32F4DISCOVERYにインストール - くろねこ日記を参考に、各自ひたすらもくもく。
基本的に、上記サイトがとても丁寧に書かれていたので、そのとおりの手順で行えばOKだったのですが、それでもつまずいた箇所などあったので、さらに詳しく自分用にメモします。
ビルド環境 (ちなみに私の環境はOS X El Capitanです)
1.micropythonをビルドするときに使うgcc-arm-embeddedを自分の環境(MAC)にインストール。
- GNU ARM Embedded Toolchain のサイトから、マイコン用のコンパイラ「gcc-arm-none-eabi-5_4-2016q3-20160926-mac.tar.bz2 (md5)」をDL。 DLしたら、解凍します。
> tar xvf gcc-arm-none-eabi-5_4-2016q3-20160926-mac.tar.bz2 > cp -r gcc-arm-none-eabi-5_4-2016q3 ~/gcc-arm-none-eabi
2.bash_profile にpathを設定します。
> export PATH=$HOME/gcc-arm-none-eabi/bin:$PATH > source .bash_profile
3.micropythonに書き込むためのライタ(ソフトウェア)を用意します.(homebrewが必要です。)
> brew install dfu-util
4.ボードをパソコンにつなぎます。
- ボードの裏側にあるジャンパピン二つ(Jp2,Jp3と書いてあるやつです)のうちどちらかを取って,p2側の21pin-22pin(BOOT0とVDDのところ)に刺します。そのあとボードをパソコンに繋ぎます。 繋ぐときにはmicrousbとminiusbの2ポートがボードから出ているので、二つともパソコンに繋ぎます。 <-- ここ!!
やるまえにちらっと、USBの1つだけ繋げばOKみたいな情報もあったのですが、電源用と転送用で分かれているらしく、結局二つつながないとだめでした;
5. MicoroPython本体はgithubにあるので、DLしビルドします。
ビルドの際には今回使うマイコンをオプションで指定します。
> git clone https://github.com/micropython/micropython.git > cd micropython/stmhal > make BOARD=STM32F4DISC ※ dfu-utilで、build-STM32F4DISC/firmware.dfu を書き込み > dfu-util -a 0 -D ./build-STM32F4DISC/firmware.dfu
ここまで済んだらp2の21pin-22pinに刺してあるジャンパピンを元の場所に戻します。
ここで、/dev/tty.usbmodemなんとかというデバイスがあるはずとありましたが、ない!! amacbeeさんがデバッグ?して解決してくれました。(ファームウエアをデバッグできるなんて!)
結局、一旦PCから外して、再度さしたらデバイスを検出。
ハードあるあるな感じですが、全くきづけなかった ....。
だめなら、抜き差し!重要ですね。
6.シリアルターミナルソフトウェアでそのポートに接続!
pyserialに付属してくるminiterm.pyを使って接続します。
> pip install pyserial > miniterm.py /dev/usbmodem1412 (usbmodem1412***数字の部分は適宜かわるので、その都度確認します)
- 接続ができた!とおもったのですが、コマンドが入力できないので、きいてみると、
Ctl+c
を押すといいとのこと。無事コマンドが打てる状態になりました!
※チュートリアルを読むとMACの場合、screen
コマンドで通信できるとあったので、こちらでも試してみたところ接続できました。
> screen /dev/tty.usbmodem1412 終了は Ctrl + a 押しながら k
とりあえず、Lチカ
> pyb.LED(1).on()
光った!!感動。
7.あとはPython のコードをかくだけ!
で、ここまでできればもう本当になんでもできる感あります。 まずはおきまりのLチカをためし、MicroPython tutorialに従い、いろいろ試してみました。
MAC のFinderでデバイスのフォルダをみるとPYBFLASH
というリムーバルディスクが表示され、そこからファイルにアクセスできます。
main.py
というファイルがあるので、ここにpythonでプログラムを書き込みます。書き込んだら、一旦PYBFLASH
をMACから取り出し処理をしてResetボタンを押すとプログラムが実行されました。
または、
> Ctrl + d
で soft rebootしてもmain.py のプログラム実行されます。
プログラムを止める時は、
> Ctrl + c
一番盛り上がった?Disco
- チュートリアルのLEDs の項に、「A Disco on your pyboard」という項目があったのでやってみました。
- STM32 は4つのLEDがありますが、思った通り!実行すると、4つのLEDがきらびやかに点滅してまるでディスコ!!
Disco って、立派な?英語だったんだーと、どうでもいい知見も得ました。
ちなみにdiscの定義 by Google先生(超どうでもいい。)
a club or party at which people dance to pop music.
python なので、本当に簡単なコードで手軽に試せる感あります。 マイコンといえば、Cのイメージでしたが、python だけで動かすことができるのでとても素敵だー。
STM32 には、ユーザースイッチやリセットボタンが標準でついていますし、GPIOのピンもたくさんあります。 加速度計もついていて傾き検出などもできました!
組み込み系は、とても敷居が高い感じがありましたが、みんなでわいわいやると楽しいですね! なにより、つまずいてもなんとかしてくれる人がいるというのが心強い。
今後もなにかしら引き続きやりたいな。