Wio TerminalでMbed OS

Seeed K.K.の中井です。この記事はSeeedUG Advent Calendar 21日目の記事です。

この記事ではmbed祭り 2020@秋のオンラインで発表されていた「Wio TerminalをMbed OSで動かしてみる」を実際の動作確認手順と共にご紹介します。

Wio Terminalは、Microchip ATSAMD51を搭載しLCDや無線LANなどを備えたマイコンです。拡張性については40ピンの拡張用コネクタとGroveポートが2つ用意され、容易に拡張することができるようになっています。通信機能と拡張機能を利用することで様々なIoTプロジェクトで活躍できるデバイスとなっています。

f:id:mnakai:20201218151733j:plain

今回動かしてみるMbed OSは、正式なリポジトリにマージされているものではなく、いわゆる野良実装(カスタムボード)となります。 そのため、Mbed Enabledと呼ばれる認定ボードとは制御の仕方が一部違う可能性がありますのでご注意ください。

ビルド方法

Mbed OSをビルドする方法としては、オンラインコンパイラを利用する方法やMbed CLIを使ったローカルビルド、Mbed Studioを使った方法があります。 Wio Terminalの実装は野良実装(カスタムボード)となるため、オンラインコンパイラを使用してビルドすることはできません。 そのため、手軽にビルドが可能なMbed Studioを利用して説明したいと思います。

os.mbed.com

Mbed Studioを起動し、メニューのFile > Import programを選択し、下記のリポジトリのURLを設定します。

https://github.com/SeeedJP/seeed-wio-terminal-mbed6.git

f:id:mnakai:20201203114142j:plain

URLを設定すると自動的にProgram nameが設定されますが、変更することもできます。 Add Programを実行すると、リポジトリから自動的にソースコードがダウンロードされます。 先ほどのImport program画面でMake this tha active programにチェックを入れていると、Active programに指定したProgram nameが設定されます。設定されていない場合は手動で選択します。 Targetのリストには、custom_targets.jsonから読み込まれた"WIO_TERMINAL"が追加されているので、これを選択します。

f:id:mnakai:20201203114152j:plain

これでビルドの準備は完了です。まずはデフォルト状態でビルドしてみます。 トンカチマークのビルドボタンをクリックするとビルドが開始されます。

Building project seeed-wio-terminal-mbed6 (WIO_TERMINAL, ARMC6)
Scan: seeed-wio-terminal-mbed6

完了すると次のようなログが出力されます。

Total Static RAM memory (data + bss): 17509(+17509) bytes
Total Flash memory (text + data): 37072(+37072) bytes
Image: BUILD/WIO_TERMINAL/ARMC6\seeed-wio-terminal-mbed6.bin

バイナリは、[Workspace]/[Program name]/BUILD/WIO_TERMINAL/ARMC6の下に生成されます。 例えばWindowsでは C:\Users\[ユーザー名]\Mbed Programs\seeed-wio-terminal-mbed6\BUILD\WIO_TERMINAL\ARMC6 という感じです。 ※[ ]内は環境に合わせて変わります

作成したバイナリファイルでプログラムを更新

Arduino IDEではbossacというツールでバイナリファイル(.bin)の書き込みを行いますが、残念ながらMbed Studioでは対応していないので、こちらの記事で紹介されているUF2フォーマット(.uf2)に変換してプログラムを書き換えます。

qiita.com

こちらのuf2conv.pyをバイナリファイルと同じフォルダにダウンロード(リンクを右クリックして、名前を付けてリンク先を保存)しておき、Windows PowerShellで次のようにコマンドを実行します。

cd "~/Mbed Programs2/seeed-wio-terminal-mbed6/BUILD/WIO_TERMINAL/ARMC6"
python uf2conv.py -c -b 0x4000 -o seeed-wio-terminal-mbed6.uf2 seeed-wio-terminal-mbed6.bin

続いて、Wio Terminalをブートローダーモードで起動させ、認識したドライブにUF2ファイル(.uf2)を放り込みます。 ブートローダーモードで起動させるには、下図のように素早くを2回行います。 f:id:mnakai:20201203134225j:plain

ブートローダーモードで起動した場合"Arudino"というドライブとして認識します。UF2ファイルをドラッグ&ドロップしてあげます。

f:id:mnakai:20201203134819j:plain

Wio Terminalの標準出力

seeed-wio-terminal-mbed6の実装では、標準入出力はTXD、RXDピンとなっています。

f:id:mnakai:20201203135447j:plain

Wio Terminal Chassis - Battery (650mAh)を使うと比較的取り出しやすくなります。

f:id:mnakai:20201203135907j:plain

サンプルプログラム

seeed-wio-terminal-mbed6にはWio Terminalに搭載されたいくつかの機能の確認のためのサンプルプログラムが収録されています。

  • Lチカ
  • LCD表示
  • ブザー
  • 照度センサー
  • 3軸加速度センサー
  • 無線LANのTLSクライアント

これらのサンプルの切り替えは、example.hを編集して行います。 下記のうち、1つを有効にしてビルドしなおす必要があります。

#define MBED_BLINKY_EXAMPLE
//#define MBED_LCD_EXAMPLE
//#define MBED_BUZZER_EXAMPLE
//#define MBED_LIGHT_EXAMPLE
//#define MBED_ACCEL_EXAMPLE
//#define MBED_TLS_CLIENT_EXAMPLE

無線LANのTLSクライアント

Wio Terminalの無線LANチップであるRTL8720のファームウェアは、ATコマンドファームウェアとなります。アップデート方法については、下記リンクを参照してください。

また、アクセスポイントのSSIDとパスワードは、mbed_app.jsonに記述します。

"nsapi.default-wifi-ssid": "\"YOUR SSID\"",
"nsapi.default-wifi-password": "\"PASSWORD\"",

設定を更新してビルド、プログラムを書き換えると標準出力に通信のログが表示されます。

Starting mbed-os-example-tls/tls-client
Using Mbed OS 6.1.0
Successfully connected to os.mbed.com at port 443
Starting the TLS handshake...
Successfully completed the TLS handshake
  :

変更履歴

日付 変更者 変更内容
2020/12/18 mnakai 作成