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円でした!)

f:id:electricSheep:20161217142120j:plain:w300

とりあえず、micropythonをSTM32F4DISCOVERYにインストール - くろねこ日記を参考に、各自ひたすらもくもく。
基本的に、上記サイトがとても丁寧に書かれていたので、そのとおりの手順で行えばOKだったのですが、それでもつまずいた箇所などあったので、さらに詳しく自分用にメモします。

ビルド環境 (ちなみに私の環境はOS X El Capitanです)

1.micropythonをビルドするときに使うgcc-arm-embeddedを自分の環境(MAC)にインストール。

 > 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でプログラムを書き込みます。書き込んだら、一旦PYBFLASHMACから取り出し処理をして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のピンもたくさんあります。 加速度計もついていて傾き検出などもできました!

組み込み系は、とても敷居が高い感じがありましたが、みんなでわいわいやると楽しいですね! なにより、つまずいてもなんとかしてくれる人がいるというのが心強い。

今後もなにかしら引き続きやりたいな。