XIAOGYAN Talkie ：WiFi音声トランシーバの製作

# はじめに
XIAOGYAN Talkieは、ALGYANコミニュティで開発されたXIAOGYANプラットフォームを利用して、2.4GHz WiFiの電波の電波で音声通信ができるライセンスフリーのトランシーバです。Espressif社のESPNOWプロトコル（Long Range Mode）を使用し、最大1kmの距離で音声通信が可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/337553/42c1ed8b-7e16-ac46-3944-a1175758c95e.png)

この資料では、XIAOGYAN Talkieを製作するのに必要なハードウェア、ソフトウェア(https://github.com/algyan/XIAOGYAN)  について説明します。
ベースとなるXIAOGYANについては、以下を参照願います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/337553/d992d280-6989-d05a-3a06-963f46813590.png)

# XIAOGYAN Talkieの仕様
- 送受信周波数	：2412～2472MHz(5MHz間隔13波)
WiFiの1～13chを使用します。
- 電波形式	：G1D, D1D
- 送信出力	：4.7mW/MHz
- 受信感度	：約-90dBm
受信レベルをLEDマトリクスの8個のLEDで表示します。
- 音声出力	：約0.2W
- プロトコル	：ESPNOW Long Range Mode（Espressif）
- 通信距離	：最大1km（見通し距離）
- 制御マイコン	：XIAO ESP32S3
- 電源	：リチウムポリマー電池　3.7V, 500mA
- 消費電流	：最大120mA（送信時）
- その他	：ライセンスフリー- 		　工事設計認証番号：217-230892
# ハードウェア
ハードウェアとしてXIAOGYANに追加しているものは以下になります。
- CPUモジュール XIAO-ESP32S3
標準のXIAO-ESP32C3からXIAO-ESP32S3に変更しています。
- アンテナ XIAO ESP32C3用 2.4GHz ロッドアンテナ(https://www.switch-science.com/products/8637)
 XIAO-ESP32-S3/C3にはフィルム状のWiFiアンテナが付属していますが、周辺の影響を大きく受けるため、別売りのロッドアンテナに交換しています。ESP32C3用とされていますが、ESP32S3でも技適が取得されており、使用に問題ないことをSeeed様に確認済みです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/337553/d5731736-fef5-81ef-856b-1abd8f3177da.png)

- MIC
[M5Stack用PDMマイクユニット](https://www.switch-science.com/products/6620?_pos=2&_sid=4d5f822c0&_ss=r)
 MEMSのPDMタイプのデジタルマイクです。XIAOGYANのGROVEコネクタに接続します。
 
# ソフトウェア
ソフトウェア(https://github.com/pokibon3/algyan8th)  は、以下のライブラリをベースに構築しています。

- ESP32-walkie-talkie  
atomic14氏のESP32-walkie-talkie のプロジェクトから、transportクラス、およびOutputBufferクラスを流用・改造して使用させてもらっています。
(https://github.com/atomic14/esp32-walkie-talkie)    

- XIAOGYAN Support Library(https://github.com/algyan/xiaogyan_arduino)  
- Speakerクラス 
lipoyangさんが公開されているESP32S3のものを使わせてもらっています。
(https://github.com/lipoyang/XiaogyanRadio/tree/main) 

## ソフトウェア改造のポイント
- ESP32-walkie-talkieオリジナルソフトウェアの機能追加
    - チャンネル変更機能
ローターリーエンコーダにより、送受信チャンネルを1～13chまで変更できます。
チャンネルは8x8のLEDでマトリクスに16進数で表示します。
RSSIレベルを見ながら、開いているチャンネルを探すことにより安定した通信ができます。
    - シグナルレベル表示機能（Sメーター）
8x8のLEDでマトリクスの最下行がWiFi信号のRSSI値に基づく信号レベルです。
LEDの点灯個数をRSSI値の関連は以下のテーブルで決定しています。
```
int16_t rssi_level[] = {
    -90, -80, -70, -60, -50, -40, -30, -20
};
```
## I/O関連の設定等は以下になります。（config.h)
- ESPNOWはLONG RANGEモードを使用します。詳細なドキュメントが見当たらないのですが、ビットレートを1Mbps程度に落とし、最大1kmの通信が可能なようです。フィールドテストでも300～400mの距離で通信できています。
- PDMマイク、スピーカーの設定は以下を参照してください。
- PTT（Push To Talk)
通信は半二重で行います。送信時にはAボタンを押しながら音声入力してください。

```
#define USE_ESP_NOW
// sample rate for the system
#define SAMPLE_RATE 16000
//ESPNow Long Range Mode
#define ESPNOW_LONG_RANGE

// Which channel is the I2S microphone on? I2S_CHANNEL_FMT_ONLY_LEFT or I2S_CHANNEL_FMT_ONLY_RIGHT
// Generally they will default to LEFT - but you may need to attach the L/R pin to GND
#define I2S_MIC_CHANNEL I2S_CHANNEL_FMT_ALL_RIGHT
#define I2S_MIC_SERIAL_CLOCK    6
#define I2S_MIC_SERIAL_DATA     5

// speaker settings
#define PWM_SPEAKER_PIN         D0
#define PWM_SPEAKER_ENABLE_PIN  -1
#define PWM_SPEAKER_LEDC_CHANNEL 0

// transmit button
#define GPIO_TRANSMIT_BUTTON    D9         

// On which wifi channel (1-11) should ESP-Now transmit? The default ESP-Now channel on ESP32 is channel 1
#define ESP_NOW_WIFI_CHANNEL    1
```
# 使用方法
- 電源
基板左側のスライドスイッチで電源のON/OFFができます。
裏面に3.7V 500mAのリチウムバッテリーが搭載されており、約3Hrの連続運用が可能です。
充電はXIAO-ESP32S3のUSB-Cコネクタから行います。充電中はXIAO-ESP32S3上の赤色LEDが点滅します。
- 音量調整
中央下の半固定ボリュームで音量を調整します。
- チャンネル変更
基板右側のロータリーエンコーダでチャンネルを変更します。
- PTT（Push to Talk)
Aボタンを押下している間、受信モードから送信モードに切り替えます。
- 8x8 LEDマトリクス
上から7段目までで、使用しているWiFiチャンネルを16進数で表示します。
8段目は、信号レベルを示します。
なるべく信号レベルの低いチャンネルを選択することが、安定通信のコツとなります。

# 実際に使ってみて
いくつかの展示会会場などでつかってみましたが、WiFIが皆使えないと言っているところでも以外に使うことができました。ただし、WiFiの1chは激混みです。みんな1chをつかうんですよね。こんなときには、チャンネル切り替えと信号強度の表示が非常に役にたちました。WiFiは一度周波数を決めたら、周波数ホッピングは行われないので、事前に空きを探しておくことは重要ですね。  

また、展示会会場のような騒がしい場所ではスピーカーの音量・音質がよくないこともあり、相手の声が聞こえづらいのでどうしてもこちらが話す音量も大声になり、結果として歪んだ声を送信しますます会話しづらくなるということが発生しました。実用化にあたっては、マイク、スピーカーを含めた全体的な音質改善が必要かと思います。

# 問題点と今後の課題
- 小型化
XIAOGYAN基板を活用して、原理的な試作はできたので、今後、専用基板化して小型化しようかなと思っています。
- 高音質化
スピーカーが小型のため受信音質がよくありません。上記小型化と合わせて最適なスピーカーを選定する予定です。

# XIAOGYAN基板の入手について
開発者の@matsujirushi12さんがBOOTH(https://booth.pm/ja/items/5108023)  で配布されています。

# 謝辞
ベースとなるソフトウェアを公開頂いている、atomic14氏、lipoyang氏、およびXIAOGYANプロジェクトの皆様に感謝いたします。