JF1DIR業務日誌(はてなblog版)

アマチュア無線局JF1DIRのアクティビティをつづっています。

NucleoにMicroPython入れてみた

以前、Pyboradという最初からMicroPythonが実装されているボードを使ってみました。MicroPythonはSTM32系を中心にどんどんポートされているようです(PyboardのマイクロコントローラもSTM32F405RGです)、安くて入手しやすいNucleoでも動かせるようなので、早速やってみました。実装の仕方はいろいろありますが、Windows上で一番簡単と思われる方法をご紹介します。

まずチップに適合したMicroPythonのバイナリをダウンロード

ソースから自分でビルドしてみるのもよいのですが、バイナリをダウンロードしてくるのが一番早いです。ダウンロードページはココです。すべてのNucleoボードのバイナリが用意されているわけではありません。運良く手持ちのNucleo F411REのバイナリがあったのでそれをダウンロードしました。ここではDFU形式のファイルとなっています。

DfuSeDemoをインストール、DFUからhexファイルへ変換

次に、STmicroが用意しているツール、DfuSeDemoをダウンロードしインストールします。このツールを使って、NucleoをDFUモードで起動して書き込むことができるのですが、ジャンパーを用意したり、うまくいかないことがあったので、本体のDfuSeDemoではなく、DfuSeDemoと同じディレクトリにあるDFU File Managerを使いました。このツールでダウンロードしてきたDFUファイルをhexファイルへ変換しておきます。

hexファイルをST LinkでNucleoへ書き込む

PCとNucleoをUSB接続すると、PCのストレージ扱いになりかつSTLinkでつながっているで(デバイスマネージャで確認できます)ST-Link Utilityを使って書き込むことができます。Nucleoと接続した状態でST-Link Utilityを立ち上げます。Target→Connectで認識させ、File→File Openで上で変換したhexファイルを開き、Target→Programでhexファイルを書き込みます。

TeratermでMicroPythonを起動

ST-Linkと同時にシリアル接続にもなっているので、Teratermなどのターミナルソフトで接続し(ボーレートを115200に設定)、NucleoのRESETボタンを押すと、MicroPythonが起動します。これで完了です。また、uPyCraftというツールを使っても動かすことができます。
例によってLチカプログラムを打ち込むとすぐさま動作しました。

自分でビルド

チップに適合したバイナリがない場合は、自力でビルドするしかありません(すべてのチップ対応しているわけではありません)。ソースはGitHubココにあります。tarを展開したディレクトリを~/micropython/とすると、~/micropython/stmhal/boardsに対応しているチップ(ボード)のディレクトリがあるので、そのボード名をmake時のBOARDに指定して(例えばNUCLEO_F767ZIならば)、

$ cd ~/micropython/stmhal
$ make BOARD=NUCLEO_F767ZI

とし、成功するとbin, hex, dfuファイルが生成されます。hexファイルを上の方法でST Linkで書き込めばOKです。なおビルドにはARM GCCツールチェーンが必要なので最新のものをインストールして下さい。その方法はmbed CLIを紹介したページをご覧下さい。