MicroPythonでSAM D21 Xplained Proを動かす

SAMD21 Xplained ProにMicroPythonをインストール Embedded
SAMD21 Xplained ProにMicroPythonをインストール

概要

昔Atmel(現Microchip)のSAMマイコンを仕事で使うことがあって、理由あって自腹で買ったXplained Proボード(以下Xpro)。最近ではこれにMicroPythonをインストールできるようなのでやってみた。VScodeのmpremote拡張でファイル転送するのに少し手間取った。

インストール

参考にした手順書はこちら:

MicroPython – Python for microcontrollers https://micropython.org/download/SAMD21_XPLAINED_PRO/

Xproボードではないオリジナルボードの場合はAtmel ICEなどで3を書き込めばいいのではないかな。

REPLの起動

USBを通して仮想COMポートができているので、TeraTermなどシリアルポートにアクセスできるターミナルソフトを使ってポートを開く。手元ではCOM17になっていた。

REPL

プロンプトが現れれば正しく動作しているということがわかる。

Lチカ

EmbeddedのHello,worldとも言われるLチカをやってみる。

まずMicroPythonでSAMD21マイコンを動かすための資料をあたる。LチカはようはGPIOをLow/Highすればいいので、まずはMicroPythonにおけるピンの制御方法を学ぶ。

Quick reference for the SAMD21/SAMD51 family — MicroPython latest documentation https://docs.micropython.org/en/latest/samd/quickref.html

p = Pin(“ピン名”)でピンのインスタンスを取得できるようだ。

Quick reference for the SAMD21/SAMD51 family — MicroPython latest documentation https://docs.micropython.org/en/latest/samd/quickref.html#pins-and-gpio

  • p.value(0)でLow、p.value(1)でHighをセットできる
  • p = Pin(“ピン名”, Pin.OUT)とすれば出力ピンにできる。

このあたりがわかればあとはLEDのピン名とLow/Highどちらで点灯するかがわかればプログラムを作ることができる。

Xproのユーザーガイドをあたる。

Xproのボタンのすぐ近くにあるLEDはPB30に割り当てられている。そしてそこに記載されているようにPB30をGND (LOW) にすれば点灯するようだ。

そこで次のようにコードを書いてみた。

from machine import Pin
import time
led = Pin("PB30")
while(True):
    led.value(0)
    time.sleep(1)
    led.value(1)
    time.sleep(1)

これをTeraTermに貼り付ければREPLで動作する。最後に空行つけてENTERすればLEDがチカチカ動き始めた。

exec on repl

たったこれだけでとりあえず動き始めるというのはとても便利だ。

停止はTeraTermでCTRL+Cを入力するか、XproのRESETボタンを押してもいい。

ところで、REPLでhelp()を実行してみるとpaste modeというのがあった。もしかしたらこっちのほうがいいのかもしれない。

paste mode

Ctrl+Eでpaste modeに入るのでその間に貼り付け(TeraTermではALT+Vまたは右クリック)Ctrl+Dを押すとペースト終了=プログラム実行となるようだ。

ファイルの転送

次は.pyファイルを転送してREPLを使わなくてもLチカできるようにする。

Quick referenceの最後にmpremoteを使うと書いてある。

MicroPython remote control: mpremote — MicroPython latest documentation https://docs.micropython.org/en/latest/reference/mpremote.html

これにしたがって転送してみよう。

pip install --user mpremote

でインストール、

mpremote

で実行、なんだけど、違うCOMポートに接続されてしまった。複数COMポートがあるときは明示的に指定しないといけないようだ。

mpremote connect COM17

TeraTermでCOM17を開いているとエラーになるので(経験者)TeraTermの方の接続を閉じたうえでコマンドを実行すると無事接続できた。

 mpremote connect COM17 run main.py

こうすると転送なしでプログラムを実行できるようだ。また、名前はmain.pyにしないといけないらしいということを学んだ。boot.pyがあればまずboot.pyが呼ばれ、続いてmain.pyが呼ばれるそうだ。

転送なしで実行させる、いわゆる「書き込む」には、次のようにやるようだ。

mpremote connect COM17 cp main.py :main.py

cp <source> <dist>で “:” がついた方がボード内のFlashROMになるらしい。転送後基板をリセットすると無事チカチカ動き出した。

書き込まれたファイルを確認するにはこう。

mpremote connect COM17 ls

VScode用拡張

その名も”MPRemote”という拡張があったのでインストールしてみた。

エクスプローラーでファイルを右クリックするとMPRemoteのメニューが追加されていた。runとcpが使えるようだ。ソースコードエディタの方で右クリックしても出てきた。

ところがrunはできるがcpがエラーになる。

PS C:\a_long_path> py.exe -m mpremote connect COM17 cp 'c:\a_long_path\main.py' ':\main.py'
cp c:\a_long_path\main.py :\main.py
mpremote: Error with transport:
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
OSError: 2

結論からいうと、次のように ‘:\main.py’ を ‘:/main.py’ に変更してやるとcpできた。少しいじってやる必要があるのかもしれない。

py.exe -m mpremote connect COM17 cp 'c:\a_long_path\main.py' ':/main.py'

また、MPRemote vscodeは現時点で1.21.12が最新だったが1.21.3に戻せば

PS C:\a_long_path> py.exe -m mpremote connect COM17 cp 'c:\a_long_path\main.py' ':/main.py'
cp c:\a_long_path\main.py :/main.py
Up to date: /main.py

無事に動くことがわかった。

1.21.12でも、extension.jsの390行あたりで置換してやればよさそう?

390:            remotePath = remotePath.replace(/\\/g, "/");
391:            mpremote.upload(port, localPath, remotePath);

追記

複数のCOMポートがあるときはトップバーのあたりにポート選択メニューが表示された。そこから選べばいいようだ。

まとめ

古いXplained Proボードを引っ張り出してきてMicroPythonをインストールし、REPLの動作を確認した。また、Lチカを試してみた。そしてVScodeのメニューからスクリプトをダウンロード(PC→ボード)できるようになった。

なんだこれは。当時の苦労は何だったんだっていうくらい簡単だった。マイコンボードの敷居がここまで下がっているととても学習しやすいだろう。

参考サイト

コメント

タイトルとURLをコピーしました