プリメイドai用WiFiブリッジを作ったよ プリメイドaiをWiFi化

プリメイドai用にWiFiブリッジを作りました。

プリメイドaiは、Bluetooth接続で動作するようになっていますが、今回、ESP-32を使用して
WiFiから使用できるようにしました。
本ボードは、頭部のボードと4PinのZHコネクタで接続となり、ポン付けできます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/b8dc5240-27b5-ac5a-6a0e-170f3efad865.jpeg" alt="" width="800" height="" border="0" />

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/9975e59c-7073-2bf4-9476-49e9f9a6c892.jpeg" alt="" width="600" height="" border="0" />
カバーも問題なし
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/7747b6cd-a99f-0337-a136-a8df2825d1af.jpeg" alt="" width="600" height="" border="0" />

回路図
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/4400266d-f9a3-2e06-d146-cb928e4e3371.png" alt="" width="10000"height="" border="0" />

以下のコードを使用しました。

##・ESP32-Serial-Bridge
https://github.com/AlphaLima/ESP32-Serial-Bridge

config.hを変更します
(RXとTXを間違えたからですが・・・）

###変更前
```
#define UART_BAUD0 19200            // Baudrate UART0
#define SERIAL_PARAM0 SERIAL_8N1    // Data/Parity/Stop UART0
#define SERIAL0_RXPIN 21            // receive Pin UART0
#define SERIAL0_TXPIN 1             // transmit Pin UART0
#define SERIAL0_TCP_PORT 8880       // Wifi Port UART0
```
###変更後
```
#define UART_BAUD0 115200            // Baudrate UART0
#define SERIAL_PARAM0 SERIAL_8N1    // Data/Parity/Stop UART0
#define SERIAL0_RXPIN 17            // receive Pin UART0
#define SERIAL0_TXPIN 16            // transmit Pin UART0
#define SERIAL0_TCP_PORT 8880       // Wifi Port UART0
```
プログラムの書き方を念のため追記しておきます。
これは、M5Stackをはじめよう　Arduino編からの引用です。
https://qiita.com/usashirou/items/3d5f03b0de320cf0ee57

まずは、Arduinoをインストールします。
https://www.arduino.cc/en/Main/Software
Arduinoをダウンロードしましょう
![Arduino-DL.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/8504c9e0-0eda-e79e-9184-2ffd18ce38dd.jpeg)

ファイル⇒環境設定を開きます
![ESP-32-Arduino-0.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/f28ce29d-373c-dbd4-fe9d-972e1ee43eca.jpeg)

以下のアドレスをボードマネージャーのURLに入力します。
https://dl.espressif.com/dl/package_esp32_index.json
![ESP-32-Arduino.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/17b79639-855d-a025-0a7e-86ac1255cd59.jpeg)

ツール→ボード（？？？ここは気にしないでね）→ボードマネージャーをクリックします。
![M5Stack-1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/9f3f24a3-fcc3-799b-3467-53bdd3945e6f.jpeg)
「ESP32」と入力し、インストールします。
![M5Stack-2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/b7dda189-7637-9555-8b9a-bfb2d55c8410.jpeg)

ボードをESP32にします
（ここで選択するESP32は、どれでもいいわけではありませんが、ESP32Dev Moduleならば、問題ないようです）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/0a09c81d-8ee4-db68-ed55-d1797be40706.png)

次に、上記のGithubのページからファイルをダウンロードします。
・ESP32-Serial-Bridge
https://github.com/AlphaLima/ESP32-Serial-Bridge
Clone or Downloadをクリックし
Download ZIPを選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/e44867c8-fda2-0163-0020-42b5603ff7a1.png)

ダウンロードしたファイルを解凍し、実行します。
すると、こんな画面が出てきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/f31c7ebf-62e0-5e28-227d-14e7240afbdc.png)
OKを押した場合、必ずConfig.hを同じフォルダに入れるようにしてください。
ArduinoIDEの仕様により、プロジェクト毎にフォルダを作るようになりました。
同じフォルダの中に、conhig.hが入っていないとエラーが出てしまいます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/39730561-87dd-226f-e5bf-954efffbc9b1.png)
プログラムを修正したら、マイコンボードに書き込みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/f6d25496-fa12-24e7-451c-47aa17f47a79.png)

書き込む際は、ボードのRX,TXにUSBシリアルなどを使用して接続します。
注意：RXにはRXポートを
TXにはTXポートを接続します。
注意事項として3V電源については要注意です。
突入電流として800mA程度必要なため、ボードによっては使用できないケースがあります（私はこのために数か月無駄にしています）
今回であれば、お勧めできませんが、プリメイドaの4ピンコネクタを接続すれば、電源が確保できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/b08b0aeb-1264-5bdc-aa1d-ec5306ca3717.png)

TeraTermで接続してみます。
ビットレートは115200にしましょう
![tera-1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/2be5e8be-89d8-fdd5-2047-47cad5783533.jpeg)
普通に起動するとこんな画面になります。（Resetボタンを押して確認してください）
変な文字列が出てしまいましたね・・・
![tera-.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/e71c96e1-d73c-0e5b-67c3-fb13fa59e241.jpeg)
書き込みの際は、PSボタンを押しながらResetボタンを押します。
Resetボタンを先に離すことでDownloadModeになります。
この状態にすることで書き込みが可能になります。
TeraTermで見るとこんな表示になります。
ちなみに、シリアル接続中は書き込みできないので、必ず切断するようにしてください。
![tera-3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/15db5811-5111-2bff-f9c9-74eeae0c646e.jpeg)

ArduinoIDEで書き込みを行う前に、必ず、上記ボタン操作をするようにしてください。
（そうしないと、書き込みできません）

使用には、VCPDriverなどが必要になります。
まずは、無線で接続しましょう。

config.hの以下項目を変更した方が便利かと思います。

```
const char *ssid = "LK8000";  // You will connect your phone to this Access Point
const char *pw = "Flightcomputer"; // and this is the password
```

ついでのAPモードも変更しても良いと思います。

```
WiFi.mode(WIFI_AP);
```

![wifi.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/f3cefd2a-e61c-5410-b32a-8155102d22cc.jpeg)

無線で接続出来たら
USRVCOMで接続します。
今回は、192.168.4.1の8880になっています。（私は8881も同じ設定になっています）
https://www.usriot.com/support/downloads/usr-vcom-virtual-serial-software.html

![usr-vcp.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/50334950-eb21-b5d1-d50f-6de5a335e4d5.jpeg)

プリメイドaiとはComHexを使用します。
@kiruroboさんに感謝ですね。
https://drive.google.com/file/d/1Oy_G2rJxmCQNNGJbNXCuu_6m60Sld17X/view

![ComHex-1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/39672b85-7508-824b-8be4-81057291fcdc.jpeg)

電圧不足になるとこう表示されます。
![ComHex-2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/86c72c48-2cf4-06c9-985a-05498a36da60.jpeg)

WIndowsで普通に使う場合は、こちらを参考に
##プリメイドAI（廉価版）をWindows10から動かす
https://qiita.com/arrowmeiwaracing/items/e9b88f36408c338e6b36