WioTerminalが来た!(商品提供によるレビュー記事です)

はじめに

この記事はSeeedからレビュー用の製品をいただき、書いたものです。

 

f:id:inajob:20201110130852p:plain

Seeedは、中国の企業でいわゆるメイカー向けの製品の開発・販売や、製造を行っている会社です。自分はSeeed Fusionという、プリント基板の製造や、部品の実装を行ってくれるサービスをよく利用しています。

inajob.hatenablog.jp

 

思えばこのブログも結構長く書いてきましたが、ついに自分にも「製品レビューの依頼」が来ました!!!

ちょっと感動しつつ、ありがたくレビューさせていただくことにしました。

 

ということで、以下 いわゆる PR記事 になるんですかね、Wio Terminalについてレビューしていきたいと思います。

Wio Terminal 公式での買い方

こちらから買うことが出来ます。

jp.seeedstudio.com

f:id:inajob:20201110130039p:plain

Japan Direct Lineで発送してもらうと、DHLやFedExよりも安い値段で、そこそこ早く届けてくれました。(5-7営業日)

製品外観

良い感じの箱に入ってきます

f:id:inajob:20201110103613p:plain

技適もばっちり

f:id:inajob:20201110103654p:plain

右下の丸いのが方向キー

f:id:inajob:20201110103727p:plain

筐体にも技適マーク付き。スケルトンがカッコいい!のは光センサーがここに入っているから。

f:id:inajob:20201110103823p:plain

説明書にも日本語ページがありました!

f:id:inajob:20201110104205p:plain



新製品!ワクワクしますね!

仕様を見てみる

なんとなく存在は知っていたWio Terminalですが、改めてそのスペックを見てみることにします。

 

まず外見ですが、最近広く見かけるようになった「M5Stack」とよく似ていることに気付きます。M5Stackとの比較記事としては下記が非常に参考になります。

note.com

この記事にも書かれていますが、自分が気になった点は

  • 画面解像度は同じ(サイズはWio Terminalのほうが大きい)
  • 技適付きなのも同じ
  • CPUはARMベースの samd51なのでARMの勉強によさそう(M5Stackは ESP32)
  • 十字キーが搭載されていてうれしい
  • 加速度センサー・マイク・光センサー・IR送信機 など 周辺機器がてんこ盛りなのがうれしい
  • USBホスト・クライアント機能がうれしい
  • バッテリーが非搭載なのは残念(別途バッテリーが販売されているようです)
  • SRAMが少ないのは残念

といったところです。いい所・悪い所 それぞれある感じですね。

Arduinoとして利用してみる

早速ArduinoとしてPCにつないでみます。

f:id:inajob:20201110104011p:plain

緑と青のLEDがかっこいい!

私が普段使用しているのはWindows10搭載のPCです。おそらくこういうデバイスを使う上ではMacよりもWindowsのほうがすんなりいくことが経験上多いです。

 

USBケーブルでPCとWio Terminalをつなげると、期待通り ドライバのインストールが自動的に始まり、インストールされると Wio TerminalのシリアルポートがPCから見えるようになりました。

 

WioTerminalの情報は、公式ページが結構充実しており、これに従っていけば基本的に困ることはなさそうです。

wiki.seeedstudio.com

しかも、日本語版も用意されています。これは初学者にも優しくて良いですね。

(ただし日本語版よりも英語版のほうが内容が充実しているようです。英語に抵抗がない方は英語版を見ながら進めるのがよさそうです。)

 

さて、シリアルポートが見えるようになったので、Arduino IDEから書き込みを試してみます。

M5Stackなどほかのボードの追加と同様に、ボード定義を含むjsonファイルの設定を追加してから、ボードマネージャから「Seeed SAMD Boards」を追加すれば、ボード一覧にWio Terminalが現れます。

f:id:inajob:20201110082819p:plain

まぁ上記ページの通りにやればArduinoとして使い始めることが出来るというわけです。

WioTerminalの2つの書き換え方法

WioTerminalのコアであるSAMD51を書き換える方法はいくつかあるようです。

まず1つはArduino系のファームウェアが書き込まれている状態であれば、前述のようなUSBシリアル経由での書き込みができるようです。

f:id:inajob:20201110083208p:plain

そしてもう一つ「ブートローダーモード」というのがあります。電源ボタンをONの方向からさらに先に押し込むという「リセット」操作を素早く2回行うことによりこの「ブートローダーモード」に入ることが出来ます。

f:id:inajob:20201110083222p:plain

この時PCにはマスストレージデバイスとして認識され、USBメモリのようなドライブが出現します。このドライブにuf2形式のファイルを配置することで、ファームウェアを書き込みするのが後者の方法です。(mbedなどでおなじみの方法ですね)

 

この仕組み故か、ArduinoIDEから書き換えを行うタイミングで、USBのドライブが接続されて、すぐに外されるような挙動をするようです。(ちょっとびっくりしました)

 

Arduinoから最新の方法でWiFiを使う準備

Wio TerminalはWiFiBluetoothの機能も提供していますが、これはメインCPUであるSAMD51とは別に搭載されているRTL8720というCPUにより実現されています。

M5StackはメインCPUであるESP32の内部にWiFiBluetoothの機能が内蔵されているのとは対照的ですね。

 

で、どうもWio Terminalの古い仕組みだとRTL8720とSAMD51の間はATコマンドでやり取りをしたようなのですが、今では新しくeRPCというプロトコルに刷新されているようです。

f:id:inajob:20201110083635p:plain

f:id:inajob:20201110083650p:plain

ということで、RTL8720のファームウェアを書き換えて、上記の新しいやり方であるeRPCを使えるようにバージョンアップするのがよさそうです。

ここで紹介する内容は公式Wikiの下記ページを基にしています。(英語版しかないようです)

wiki.seeedstudio.com

RTL8720はUSBと直接つながっているわけではないので、ちょっと工夫が必要です。

まずSAMD51に「PCから送られてくる情報を基に、RTL8720のファームウェアを書き換えるソフトウェア」を書きこみ、それからUSBシリアル経由でRTL8720用のファームウェアを書き込みます。

バケツリレーのようですね。

f:id:inajob:20201110084231p:plain

公式ページで紹介されているのはブートローダーモードによる書き換え方法なので、それに従います。

提供されているuf2形式のファイル(rtl8720_update_v2.uf2)を、マスストレージデバイスとして認識されたWio TerminalにCopy&Pasteします。

このuf2形式のファイルの実体は、下記のArduinoのスケッチをコンパイルしたもののようです。

github.com

シリアルポートから来たコマンドをRTL8720にそのまま渡すようなプログラムのようです。

ここまで来たらPCからRTL8720の新しいファームウェアを書き込みます。

日本版はファームウェアが別のようなので注意が必要です。

f:id:inajob:20201113071125p:plain

 

GitHub - LynnL4/ambd_flash_tool: Firmware download script for rtl872x のリポジトリを git cloneして書き込みツールを取得する手順が紹介されているのでそれに従います。

 

書き込みツールの実体はPythonで動作するスクリプトのようですが、Windows向けにはexe形式も用意されているので、Pythonの導入は不要でした。

公式ページの指示に従い RTL8720のFlashの消去と、新しいファームウェアへの更新を行います。

$ ./ambd_flash_tool.exe erase
Erasing...
All images are sent successfully!
Image tool closed!

Success!

$ ./ambd_flash_tool.exe flash -d 20201106-seeed-ambd-firmware-rpc-v2.0.1/
copy img to workspace...
Flashing...
All images are sent successfully!
Image tool closed!

Success!

これでハードウェア的には準備が整いました。

 

次はArduinoからこの 新しいファームウェアを利用する準備を行います。

必要なライブラリは公式から提供されているようなので、単にそれらをArduino IDEに取り込むだけです。

ライブラリはArduino公式のライブラリとしては登録されていないので、GitHubからZIP形式でダウンロードし、Arduino IDEに取り込みます。

GitHub - Seeed-Studio/Seeed_Arduino_rpcWiFi: A library of maximum ESP32 WiFi-compatible software.

これはRTL8720のWiFi機能を ESP32の WiFi機能とよく似たインターフェースで利用するためのライブラリです。

GitHub - Seeed-Studio/Seeed_Arduino_rpcUnified: RTL8720DN wireless abstraction layer using the eRPC protocol.

これはeRPCを扱うためのライブラリです。

GitHub - Seeed-Studio/Seeed_Arduino_FreeRTOS: This library gives an example of how to get FreeRTOS running on a SAMD processor. The project can be used as a template to build your projects off of as well.

これはFreeRTOSの実装のようです。 READMEにはSAMD21用と書かれているので、WioTerminalに必要なものかよくわかっていませんが、公式の手順で紹介されているので、一応入れておきます。

 

これらのライブラリはかなり新しいもののようでこれからどんどん改良されていくことが予想されます。rpcWiFiなどはまだバージョンに対応するタグが1つもないなど、開発途上である様子が伺えます。

 

とにかくここまで導入すれば、最新のドキュメントに従ってArduinoからWiFiを利用することができます。

 

公式ドキュメントにあるWiFiのアクセスポイントを列挙するサンプルが動くことを確認しました。

Wi-Fi - Seeed Wiki

使い方はM5StackのWiFiライブラリと同じなので、学ぶことが少なて良いですね。

Platformio(CLI)から書き込んでみる

私はArduinoを扱う時は Platformioを使うことが多いです。

調べるとPlatformioはWio Terminalにも対応しているようなので、試してみました。

Seeeduino Wio Terminal — PlatformIO 5.0.3a2 documentation

[env:seeed_wio_terminal]
platform = atmelsam
framework = arduino
board = seeed_wio_terminal
board_build.mcu = samd51p19a
board_build.f_cpu = 120000000L

こんな感じのplatformio.iniを用意すれば、PlatformioからもArduinoとして書き込むことが出来ました。

これでCLIを使った開発がはかどりそうです。

 

画面に文字を出すだけの簡単な例を作ってみました。Platformioを使った開発の参考にしてみてください。

github.com

f:id:inajob:20201110104131p:plain

感想

ざっとWio Terminalを使って開発を行う手前のところまでの手順を紹介しました。

周辺機器が充実しており、電子工作をしない人でもソフトウェアの書き換えだけでしばらく遊べそうです。

 

ここまで触ってきて、Wio Terminalを買うと幸せになる人の像がぼんやりと見えてきました。

  • SAMD51を使ったオリジナルの「同人ハードウェア」のプロトタイピングを行いたい方
  • M5Stackは気になるけどESP32のアーキテクチャがちょっと・・という方
  • Wio Terminalを製品の一部に組み込むことで、難しい部分の設計を省きたいという方
  • Wio Terminal自体をゲーム機と考え、そこで動くゲーム開発を行いたい方

この記事を読んでいるあなた! これらの項目に当てはまるぞ!という場合はぜひ Wio Terminal を買ってみてください。

 

 この記事では Wio Terminalの本当に導入部分までしか紹介できませんでした。

無線機能の活用やUSBホスト・クライアント、各種センサーの活用、ほかの電子部品との合わせ技、などWio Terminalで試してみたいことはまだまだたくさんあります。

 

またいろいろ遊んでみてから、記事を書いていこうと思います。