Arduino IDEでTOPPERS/ASP、そしてWio TerminalのWi-Fi/BLE使用

# Arduino IDEでTOPPERS/ASP、そしてWio TerminalのWi-Fi/BLE使用

[こ](https://qiita.com/exshonda/items/5ed13c87870dee9b2a56)のQiitaの記事で紹介されているように、[Arduino IDE](https://www.arduino.cc/en/software)でTOPPERSのRTOSの一つTOPPERS/ASPが使えるようになっています。
ターゲットデバイスは[Wio Terminal](https://wiki.seeedstudio.com/jp/Wio-Terminal-Getting-Started/)です。

しかし、Wio TerminalにはWi-Fi/BLEが搭載されているのですが、[FreeRTOS](https://github.com/Seeed-Studio/Seeed_Arduino_FreeRTOS)ライブラリに依存していて、TOPPERS/ASPとは共存できません。

そこで、FreeRTOSのAPIをTOPPERS/ASPで実装して、Wi-Fi/BLEを使えるようにするArduinoライブラリを作ってみました。
この記事では、その使い方について説明したいと思います。

## ファームウェアの更新

Wio TerminalのWi-Fi/BLEを使うには、Wi-Fi/BLE用CPU(RTL8720)のファームウェアの書き換えが必要です。
詳しくは、[SeeedさんのWiki](https://wiki.seeedstudio.com/Wio-Terminal-Network-Overview/)を参考にしてください。

ここでは、Windowsでの書き換え方法を簡単に説明します。

また、[ここ](https://github.com/Seeed-Studio/ambd_flash_tool)から書き換えツールをダウンロードし、どこかに展開しておいてください。

![ambd_flash_tool](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/242320/47920143-17c4-5e4f-8429-b0d99efe552d.png)

「PowerShell」や「コマンドプロンプト」を起動して、書き換えツールを展開したフォルダに移動します。

```cmd
cd ambd_flash_tool
```

Wio TerminalをUSBでPCに接続し、下記のコマンドを実行して、一度ファームウェアを消します。

```cmd
ambd_flash_tool.exe erase
```

次に、ファームウェアを書き込みます。

```cmd
ambd_flash_tool.exe flash
```

これで、最新のファームウェアに書き換わりました。

## ライブラリのインストール

[TOPPERS/ASP Arduino ライブラリ](https://github.com/exshonda/Arduino_TOPPERS_ASP)をArduino IDEにインストールします。
2021/5/2の段階では、リリース版ではなく、最新のコードをZipファイルでダウンロードして使用します。

![Arduino_TOPPERS_ASP](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/242320/22c0bf1f-0572-ce96-1d57-c9c712a0d3b1.png)

Arduino IDEのメニューから「スケッチ」→「ライブラリをインクルード」→「.ZIP形式のライブラリをインストール」を選択して、ダウンロードした.ZIPファイルを指定してください。

![.ZIP形式のライブラリをインストール…](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/242320/c050b027-da7f-ddcb-cfbf-82582a7a7043.png)

同様に[ここ](https://github.com/h7ga40/Arduino_TOPPERS_ASP_FreeRTOS_API)からも、最新のコードをZipファイルでダウンロードして、Arduino IDEにライブラリの追加をします。

![Arduino_TOPPERS_ASP_FreeRTOS_API](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/242320/eca3d5b4-e5dc-ef66-25b3-e78892e29075.png)

Arduino IDEのメニューから「スケッチ」→「ライブラリをインクルード」→「ライブラリを管理」を選択して、下記のライブラリをインストールしてください。

「Seeed_Arduino_SFUD」「Seeed_Arduino_FS」「Seeed_Arduino_mbedtls」「Seeed_Arduino_rpcBLE」「Seeed_Arduino_rpcUnified」「Seeed_Arduino_rpcWiFi」

## 使い方

Wi-Fiを使う例を説明します。

「rpcWiFi」の「WiFiScan」で簡単な動作確認をしてみます。

Arduino IDEのメニューから「ファイル」→「スケッチ例」→「Seeed Arduino rpcWiFi」→「WiFiScan」を選択します。

![スケッチ例 WiFiScan](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/242320/09d83a91-c7ed-37b5-3a94-af93cc2117ec.png)

コードの初めいある`#include "rpcWiFi.h"`の前に`#include <ToppersASP.h>`と`#include <ToppersASP_FreeRTOS_API.h>`を追加します。

```c
#include <ToppersASP.h>
#include <ToppersASP_FreeRTOS_API.h>
#include "rpcWiFi.h"
```

初めにインクルードファイル追加することで、標準のFreeRTOSを使わずに、TOPPERSで実装したFreeRTOSの方が使われるようになります。

確認するため、コンパイル結果を確認してみます。
Arduino IDEのメニューから「ファイル」→「環境設定」を選択し表示された画面で、「より詳細な情報を表示する」の「コンパイル」にチェックを入れます。

![環境設定](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/242320/ade26c6a-9dd1-799c-d5e5-09930eb6aceb.png)

左上のチェックボタン（検証ボタン）を押してコンパイルします。

![検証](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/242320/096aa263-2ed0-c83d-9b4e-3c6a953241d4.png)

下のログを見ると下記のようにTOPPERSのライブラリが使われていれば、置き換わっています。

```text
次のフォルダのライブラリArduino_TOPPERS_ASP-masterバージョン1.0.0を使用中：C:\Users\...
次のフォルダのライブラリArduino_TOPPERS_ASP_FreeRTOS_API-mainバージョン1.0.0を使用中：C:\Users\...
```

また、Wio Terminalの裏の40PinのUARTポートに、下記の出力が出ているかを見ることでも確認できます。

![TOPPERSバナー](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/242320/3e54da9b-cbd7-ae03-2405-b747cee599e7.png)

## あとがき

FreeRTOSで動いている物をTOPPERS/ASPに変えて何かいいことがあるのかと疑問に思われるかもしれません。

TOPPERSプロジェクトでは、夏の終わりを締め切りとした[TOPPERS活用アイデア・アプリケーション開発コンテスト](https://www.toppers.jp/contest.html)が行われています。

Wio Terminalを使ったアプリケーションを、上記の手順でTOPPERSの成果物を使った作品に変更でき、応募資格を満たすことが出来ます！

ということで、Wio TerminalのWi-Fi/BLEでもTOPPERS/ASPを使ってみてください。