STM32 MicroPythonでLチカしてみる

STM32 MicroPythonでLチカしてみる

今回はMicroPythonを使ってSTM32マイコンを動かしてみます。

投稿時の開発環境を記しておきます。

PC:Windows10 OS
Board: STM32Nucleo-F401RE

概要

最近では機械学習の開発用として使われるなど注目を浴びているPythonですが、今回は組み込み用としての実装であるMicroPythonを使ってSTM32マイコンを動かしてみます。

MicroPythonについて詳しく知りたい方は MicroPython Webサイト をご覧になってください。

Pythonはインタプリタを使うことができる言語です。インタプリタは処理系の一種で「プログラミング言語で書かれたプログラムを解釈しながら実行するためのしくみ」になります。
インタプリタ(interpreter)は翻訳を意味します。
コンパイルやビルドが不要で動くということになります。

MicroPythonにも、この機能が備わっていて今回は REPL というものを使います。
REPLとは Read, Eval, Print, Loop の略です。

(1) プログラムを読んで(Read)
(2) その内容を評価して(Eval)
(3) その結果を表示して(Print)
(4) 次のプログラムを待つ状態(1)に戻る(Loop)

REPLを使うとプログラムをフラッシュメモリに書く必要がなく、手軽に書いたプログラムを実行することができます。

それでは今回の作業の全体的な流れを説明しておきます。

(1)MicroPython Webサイトから STM32Nucleo-F401REボードに対応した dfuファイルをダウンロードする。
(2)dfuファイルをhexファイルに変換する。
(3)STM32CubeProgrammerを使ってhexファイルをSTM32Nucleo-F401REボードに書き込む。
(4)REPLを使ってPythonのコードでプログラムを動かしてみる。

dfuファイルをダウンロードする

MicroPython STM32ダウンロード から NUCLEO_F401REボードのファームウェアをダウンロードします。
後で探しやすい場所に保存しておいてください。

ファイルを変換してボードに書き込む

STマイクロに Dfuse というツールがあります。これを使ってボードにdfuファイルを書き込めば良いと考えました。
ところがデバイス(ボード)リストにターゲットが出てこないので、書き込みのスタートラインにも立てませんでした。
(何か取り扱いが悪かったのかも知れません)

途方に暮れていたところ DFuse のオマケの機能?で dfu – hex ファイル変換ツールを見つけました。
こちらを使ってhexファイルを作成し、このファイルをライターで書くことにしました。
IDEを使ったhexファイルの書き込み方法がわからないので、ここでは STM32CubeProgrammer を使って書き込みを行います。

従ってここでは、DFuse と STM32CubeProgrammer を使います。

それではこちらから Dfuseダウンロード と STM32CubeProgrammerダウンロード をそれぞれダウンロードしてインストールしてください。

特に注意する点もないのでインストール手順は省略します。

ファイルを変換する

スタートメニューから STMicroのフォルダを開き Dfu file manager をクリックします。

ラジオボタンで下を選択しOKボタンを押します。

右側の赤枠の部分をクリックして、保存しておいた dfu ファイルを選択します。

ラジオボタンで Hex を選んでおいて、Extractボタンを押します。

hexファイルをつくったメッセージが出るので、ファイルのある場所を記憶しておいてください。

hexファイルをボードに書き込む

PCとボードをUSBケーブルでつないでおきます。

スタートメニューから STM32CubeProgrammer を選択し起動します。

Open fileタブを選択して、保存した hexファイルを選択します。

Downloadボタンを押してファイルを書き込みます。

MicroPythonを試してみる

ボードとはシリアル通信で対話するのでPC側はターミナルソフトの TeraTerm を起動してください。

COMポートは STマイクロの仮想COMポートを選択します。

そして通信パラメーターは以下のように設定してください。

ターミナルで Enterキーを押し >>> というプロンプトが出てきたら成功です。

これで REPL の対話モードに入りました。

help(‘modules’)

と入力し、Enterキーを押すと利用可能なライブラリが表示されます。

pyb — pyboard 関連の関数
pyb は pyboard に固有の関数を提供します(訳注: 元々は pyboard 用ですが、似たアーキテクチャ、特に STM32 系の MCU を載せたボードではサポートされていることが多いです)。

ということでこのボードは pyb を使うことができるようになっています。

pyb については microPython pyb を参照してください。

それでは pyb の Timerクラス を使ってボードを制御してみます。
以下のコードを1行ずつ入力します。(1行入力しては Enterキーを押します)

tim = pyb.Timer(4)
tim.init(freq=2)
tim.callback(lambda t:pyb.LED(1).toggle())

これで緑色のLEDがチカチカすれば成功です。
周波数を10に変更するには

tim.freq(10)

とします。
点滅速度は速くなりましたか?

もうひとつ RTCクラス を試してみます。

rtc = pyb.RTC()
rtc.datetime((2020, 8, 28, 5, 19, 4, 0, 0))
print(rtc.datetime())

4番目の引数 5 は月曜日を 1 とした 1から7までの値になります。
この記事を書いた日は金曜日なので 5 です。

print()で現在日時を表示してくれます。

今回は MicroPython のインタブリタを使ってLチカを体験してみました。
いかがでしたでしょうか?

Pythonカテゴリの最新記事