United Statesからアクセスのようです。言語設定をEnglishに切り替えますか?
Switch to English site
Skip to main content

STM Nucleo ボードを Python言語でプログラミング!

マイコンのプログラム開発の面で言えば、私はかなり古典的な部類の人間だ。もともとC言語が好きで、電子機器製品の組込みプログラミングにおいて、C言語ほど自在に使えるものはないとも考えている。
とはいえ、量産設計とは別にプロトタイプ開発をターゲットとしたような簡易な開発環境にも興味があって、「手軽さ」や「時短効率の良さ」を売りにした開発環境にも一定の評価をしている。昨今でいえば私が知らない間に広く普及したPythonの便利さには頭が下がる。機械学習を始め様々分野で本格的なアプリケーション開発に使われるようになった。

本記事では、まったく知識ゼロの状態から30分という短時間で、主要マイコンボードのプログラミングをPython言語で記述し実行するまでの様子を紹介する。

STM32F401 Nucleo

主要なマイコンボードとしては、ST Micro Nucleo F401REボードを使用する。これは組み込みアプリケーションに対応したボードであり、スペックはつぎの通りだ:

MCU:                   STM32F401RET6 ARM®Cortex®-M4 32-bit, 84MHz
SRAM:                 96 KB
Flash:                  512 KB
Digital I/O:           50 ピン, 3.3V
ADC input:          16 ピン

Nucleoを使用する利点の1つは、開発の際に必要となるものが本ボードとUSB​​ A-USBmini ケーブルだけであることだ。ケーブルは、電源供給とボードのプログラミングの両方で使用する。

はじめる前に

ST Nucleoボードを本格的に使用する前に、やらなければならないことがいくつかある。

最初にすることは、パワージャンパーがNucleoボード上の正しい場所にあることを確認することだ。JP5では、ジャンパーはピン1とピン2を接続している必要がある。

JP5_marked_ebf52f4c44dea8ac7859c0d5db280426036b8722.jpg

次に、Windowsを使用している場合、STリンクドライバーをダウンロードしてインストールする。これにより、ST Nucleoプログラミングポートにアクセスして、ホストコンピューターに仮想COMポートを作成できる。 MAC OSXまたはLinuxを使用している場合は、デバイスが自動的に認識されるため、すぐの使用が可能だ。

01_-_link_driver1_4aaa433678f98b29532254d04d4c18518ed08d51.jpg

そして、Python IDEを使用する前に、オンボードファームウェアをアップグレードする。アップグレードおよびインストール手順は、こちらで確認できる。zipファイルをダウンロードして解凍すると、Windowsユーザーの場合、図のような実行可能なファイルが見つけられるだろう。

02-_executable_1a82c4761b4717513fcca6c88174819e6b944b15.jpg

そのファイルを実行し、ST-Link Upgradeのインターフェイスで[Device Connect]ボタンをクリックする。

03a_-_update_yes_button2_b4ab484d449beb3e6b7057246973cbc2b764e4f8.jpg

すると下の[Yes>>>]ボタンがアクティブになるのでクリックする。完了すると、「更新に成功しました」というメッセージが表示される。

Zerynth Studio

ST Nucleoを Python言語でプログラミングするための開発環境として、Zerynth Studioをダウンロードしてインストールする。 有料の「Pro」バージョンもあるが、無料バージョンでも、非常に洗練されたアプリケーションの構築に必要なすべてがそろっている。しかもそのアプリケーションは、 Arduino, Hexiware, NodeMCU, Particle, RedBear, ST Micro, Sparkfun、そのほか多くのメーカーの開発ボード上で動作させることができる。

どのOS使用しているかに関係なく、インストールの手順は非常にシンプルで簡単だ。Windowsなら EXE インストーラー、MacOSならディスクイメージ(.dmg)ファイル、またLinuxなら「./zerynth」スクリプト(”tar.xz”ファイル内)をダウンロードできる。

インストールして実行すると、下図とよく似たインターフェイスが表示されるだろう:

04a_-_updated1_aeb1fc4ba340b896da5253b8e6f7b2323d608f71.jpg

ST NucleoをコンピューターのUSBポートに接続すると(または既に接続している場合)、ZerynthはST Nucleoを認識し、Device Management Toolbar(以下DMT)の”Target”ボックスからNucleoボードを選択できるようになる:

05a---target1_f5896e2356799c50431a5c3ce441d946b556d41c.jpg

次に、DMTの[Z]ボタンを使用してデバイスを登録する:

06---z-button_arrow_c4bb1419ef0ec9da2e146bd5f25e41c0dab6ec3e.jpg

“Register”ボタンをクリックする:

07_-_register1_b743edd35e80b5d992b2a0d886aba69c14735944.jpg

下図の画面になったら、デバイスの登録が開始したことを表している:

07b_-_registering1_faaa69406344dc481571399d6976756d18ef260e.jpg

ボードが正常に登録されると、次のような画面が表示される。

08---succesful-arrow_a8150abfaabefe2786aed7131a154afc6f677dbc.jpg

次のステップでは、コードを実行できるようにするためターゲット上に仮想マシンを作成する。
再度[Z]ボタンを押すとアクションボックスが表示されるので、”Create”ボタンをクリックする。

09_-_create_VM_857983d7cd5df57f542e3ea6dfba379c7c3c281a.jpg

“Standard VM”が選択されていることを確認し、”Create”をクリックする。

10b2_8a68a951858335ae3ca7704451636f26b2da2ca0.jpg

次に”Virtualize”ボタンをクリックする。

11_-_virtualise2_304b772e0b2ac113ee8b9d1d271be2adce98608d.jpg

"Virtualize"をクリック。

11b_-_virtualise_pt2_5d988636ad93817d5cbcd56ab386d378ab4f91c8.jpg

(ホストPCの速度に応じて)少しの間の後、デバイスが仮想化されたことが通知される。

12b---VM-ok_86397613ded30407a962c34a17ee3c29cc25f928.jpg

これで、ボードをPythonでプログラムする準備は完了だ。

Pythonでのプログラミング

もし組み込みPythonプログラミングの経験がなければ、Zerynthはスタートダッシュを切るのに最適なツールだ。下図はボードのI / Oピンマップを示している。これはプログラムの際ピン名を参照するときに役立つ。

ST_nucleof401re_pin_io3_92ceddaf8fe85f1bca88547332eb1d0ef5d8a76a.jpg

さらに重要なのは、IDEウィンドウの左側にある、電球型のアイコンだ。これは”Example”, つまりサンプルコードのボタンだ。これをクリックすると、Pythonサンプルコードのリストが表示されます。サンプルコードには、初歩的なものから、Zerynthライブラリを使用した非常に複雑なハードウェアインタラクションのコードまで揃っている。
今回は、”hello world”と同じくらい基本的な”Blink”(Lチカ)アプリケーションの起動から実行までをおこなう。まず”Basics”の横にある矢印アイコンをクリックして、サンプルコードのリストをプルダウンする。

13_-_examples_50f3509e15339dde0a4a8b32429519b3e941eb2b.jpg

次に、”Blink”をクリックして、サンプルコードボックスを表示する。”Clone”ボタンを押すと、このコードをアクティブなプログラミングウィンドウにドロップできる。

14_-_clone_blink_db17be125e73487bd1399cc61a434100bd782991.jpg

ここまであまり手を動かしてないので、何か作業をおこなった気になれるように、ここでサンプルを少し変更して、LEDの点滅間隔を短くしてみよう。

15_-_make_it_our_own_2b1278f3012564f7f58f8e0f4d44f9d45f9ab89e.jpg

このコードをデバイスに書き込むためには、シンプルに”Uplink”ボタンを使用する。

16---uplink-arrow_8721815039dc40fd6ac136fdb0b76aca1c4c5980.jpg

コードをアップロードせずに検証したいなら、アップリンクボタンの左側にある”Verify”ボタンを使用すればよい。

さて、ここで一つアドバイス。「Nucleoのリセットボタンに指を置きなさい」

reset_buttonsm_752f5195138fc3590ce51914a21c4ad72857f47d.jpg

これは、ボードへの書き込み中に下図のようにボードのリセットを求められたときのためだ。アップリンクはすぐタイムアウトしてしまうため、うまくリセットできなかった場合やり直しをくらってしまう。リセットボタンはすぐ押せるようにしておきたい。

17_-_reset_c7f328cadf3a3e82dcfbf3b28af2e64fe3afdf6c.jpg

すべてが計画通りに進んだ場合、メッセージウィンドウに「アップリンクが完了しました」というメッセージが表示される。

18---done-arrow_f05449b6650ca0e7601f6716ef7c5995c79cf91e.jpg

そうすればNucleoボードでもLEDが点滅しているはずだ。やった!

さいごに

お手軽を売りにするマイコンボードが多く発表される中、ST Micro Nucleoは ビジネス利用も見据えた堅実な部類のボードと呼べるだろう。IAR EWARM(IAR社のARM向け開発環境)、Keil MDK-ARM、mbed、GCC / LLVMなど組込みビジネスでも歴史ある伝統的な組込みツールからサポートされている。

一方で、新たなツールであるZerynthが実現したことにも注目したい。Zerynthは、ボードの立ち上げからコードの書き込みまでにかかる時間を大きく短縮した。これにより、開発キットを使ってアイデアを試したりいじったりすることが簡単にできるようになった。 またZerynthはドキュメント, サンプルコード, プログラミングガイドにも非常に注力しているため、単なるWebスクリプトだけでなく実際のアプリケーションの作成に使用すればPythonの学習にも役立つ。古いものは一旦おいて、時間をかけて学ぶ価値が十分にある新しい試みに目を向けてはどうだろう。

Mark completed his Electronic Engineering degree in 1991 and worked in real-time digital signal processing applications engineering for a number of years, before moving into technical marketing.
DesignSpark Electrical Logolinkedin