5GHz帯域の屋外利用(W56) ~CPE710を事例に挙げて~
はじめに
”TP-linkのCPE710が無免許で屋外利用できる” という噂が流れていますが、技適の関係上使えるか気になったので調べて見ました。
結論から言うと、技適の認証は取れています。
但し認証の範囲で使うためには、EIRP(=出力電力+アンテナ利得)が30dBm以下と定められているため、送信電力10dBm(10mW)に設定する必要があります。
尚、出荷時で自動的にEIRPが30dBmになるようです。
最新情報は下記にまとめています。 CPE710の技適と送信電力.pdf - Google ドライブ
スペック
送信電力は、最大で27dBm、更にアンテナ利得が23dBiもあります。
CPE710 | 5GHz AC 867Mbps 23dBi アウトドア CPE | TP-Link 日本
許容値
ARIBやTELECの資料で許容値が書いているものを見つけられなかったので総務省の資料を取り上げます。
W56は EIRPが、平均電力 1W且つ50mW/MHz(TPC) なら利用して良いようです。
”(TPC) 6dBの TPC を実装した場合。 TPC 無しの場合最大 EIRPを 3dB 下げること”とあります。 TPC( transmit power control)は通常実装されていませんが、CPE-710は実装されているようです。
技術基準適合 可否
CPE710は技適認証を受けています。GENERAL DESCRIPTION を抜粋します。
電波の型式、周波数及び空中線電力は、下記です。 Channelによって帯域幅が違うので、帯域幅辺りの出力が違います。
W56帯(5470-5725MHz)の内、11ch/5ch/2ch
参考
W51/52は10dBm/MHzです。 規格と許容値概要【5GHz 帯小電力データ通信システム 証明規則第 2 条第 1 項第 19 号の 3】
5GHz帯試験方法は下記ですが、冊子を取り寄せないと許容値が載っていません。 5GHz 帯小電力データ通信システムの特性試験方法
M5Stack LovyanLauncher(M5Stack-SD-Updater)の調査
M5Stack LovyanLauncher
各種アプリを選択して起動できる M5Stack LovyanLauncher が気になったのでまとめる。
参考
M5Stack-SD-Updaterのすすめ - Qiita
M5Stack LovyanLauncher対応アプリの作り方 | M5Stack沼人の日記
M5Stack LovyanLauncherの使い方 | M5Stack沼人の日記
Platformioでビルドしたバイナリは .pioenvs\m5stack-core-esp32\firmware.bin みたいなので、これの名前を変えて、SD(TF)カード直下に入れれば、M5Stack-SD-Updaterのmenuから起動できる
考察
- 現状はM5Stack用のLauncherだがM5Unifiedベースとなったり、グラフィックやボタン配置に変更すればM5StickCでも使えるだろう。
- M5Stack-SD-Updater上で動かしたところ、安定しないアプリは同じであったため大元のM5Stack-SD-Updaterえ対応する必要があるように思う。(後述)
動作検証
M5Stack-SD-Updater で正常動作できたものを記録していく
- 〇 M5UnifiedWebRadio
- △ M5Stack_OnScreenKeyboard 起動したが動作が遅く、文字入力できない
- △ Osciloscope 起動して5秒後にリセットしてしまう。
一部エラーログを記載する。
Osciloscop
rst:0xc (SW_CPU_RESET),boot:0x17 (SPI_FAST_FLASH_BOOT) configsip: 0, SPIWP:0xee clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00 mode:DIO, clock div:1 load:0x3fff0018,len:4 load:0x3fff001c,len:1496 load:0x40078000,len:8596 load:0x40080400,len:6980 entry 0x400806f4 M5Stack initializing...OK E (11130) task_wdt: Task watchdog got triggered. The following tasks did not reset the watchdog in time: E (11130) task_wdt: - IDLE0 (CPU 0) E (11130) task_wdt: Tasks currently running: E (11130) task_wdt: CPU 0: SigmaDelta_Task E (11130) task_wdt: CPU 1: loopTask E (11130) task_wdt: Aborting. abort() was called at PC 0x400e4223 on core 0 ELF file SHA256: 0000000000000000000000000000000000000000000000000000000000000000 Backtrace: 0x40085ee0:0x3ffbe380 0x4008615d:0x3ffbe3a0 0x400e4223:0x3ffbe3c0 0x40081e01:0x3ffbe3e0 0x40083acd:0x3ffb5f50 0x4008381b:0x3ffb5f70 0x400815d3:0x3ffb5f90 0x40081613:0x3ffb5fb0 0x400d1371:0x3ffb5fd0 0x40087831:0x3ffb5ff0 Rebooting... ets Jul 29 2019 12:21:46 rst:0xc (SW_CPU_RESET),boot:0x17 (SPI_FAST_FLASH_BOOT) configsip: 0, SPIWP:0xee clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00 mode:DIO, clock div:1 load:0x3fff0018,len:4 load:0x3fff001c,len:1496 load:0x40078000,len:8596 load:0x40080400,len:6980 entry 0x400806f4 M5Stack initializing...OK
M5StickCでM5Unified WebRadio
はじめに
ESP32-2432S028-RでESP Radioを試してみようと思い、まずはM5StickCで動かしてみる事にした。
失敗例
ESP32 Audio Project - Part I: Internet Radio with I²S DAC を参考に、 M5Stick WebRadioを試してみたが、
[WiFiClient.cpp:253] connect(): select returned due to timeout 250 ms for fd 48
のエラーに陥る。どうやらWiFi clientとHttp clientのタイムアウトに問題があるようだ。 検索してみると、2022年後半頃のソースから問題が生じているような気配があり、6676は以前mergeされていない。
- https://github.com/espressif/arduino-esp32/issues/7057
- https://github.com/espressif/arduino-esp32/pull/6676
VS1053Bチップを搭載したハードウェアデコードモジュールを使ったWebRadioで類似のエラーに陥っている人が居り、部分的にしか解決していないようだ。
結局自分でも解決方法が分からなかった。
M5Unified WebRadio
諦めて他のコードで動くものが無いか探してみた所、かの有名なlovyan03殿のM5unifiedを使うコードに辿り着いた。 kokensha.xyz
ArduinoIDE v2.1.0やPlatformIOの両者でbuildでき、M5unifiedのおかげでM5Stack GreyやM5StickC plusの両者で使うことができた。
特に変更した点はないが、M5Stack GreyはM5Unifiedに対応しておらずboardをm5stack-core-esp32にする必要がある。 platformio.ini の設定だけ記載しておく。
[env:m5stack-core-esp32] platform = espressif32 board = m5stack-core-esp32 framework = arduino lib_deps = M5unified earlephilhower/ESP8266Audio@^1.9.7 [env:m5stickc] platform = espressif32 board = m5stick-c framework = arduino lib_deps = M5unified earlephilhower/ESP8266Audio@^1.9.7
失敗例に記載したエラーは起きなかった。
- プレイリストの参照先の問題なのか
- 他にあるのか
失敗例のエラー原因は不明のままであるが、起動時から選曲を変えた時のコンソール出力と分かっている点を記載する。
- [ 9693][E][WiFiClient.cpp:268] connect(): socket error on fd 48, errno: 104, "Connection reset by peer" → リンク切れの場合に出力
- [103957][E][WiFiClient.cpp:517] flush(): fail on fd 48, errno: 11, "No more processes" → 選曲の瞬間に頻繁に発生する
E (472) esp_core_dump_flash: Core dumpxata check failed: Calculated checksum='f4f477a0' Image checksum='e10282ff' E (1716) wifi:Association refused temporarily, comeback time 1499 mSec E (3221) wifi:Association refused temporarily, comeback time 1499 mSec [ 9693][E][WiFiClient.cpp:268] connect(): socket error on fd 48, errno: 104, "Connection reset by peer" //"Asia Dream" , "http://igor.torontocast.com:1025/;.-mp3" リンク切れ [ 16174][E][WiFiClient.cpp:517] flush(): fail on fd 48, errno: 11, "No more processes" [ 31140][E][WiFiClient.cpp:517] flush(): fail on fd 48, errno: 11, "No more processes" [ 47578][E][WiFiClient.cpp:268] connect(): socket error on fd 48, errno: 104, "Connection reset by peer" //"Asia Dream" , "http://igor.torontocast.com:1025/;.-mp3" リンク切れ [103957][E][WiFiClient.cpp:517] flush(): fail on fd 48, errno: 11, "No more processes" [109491][E][WiFiClient.cpp:517] flush(): fail on fd 48, errno: 11, "No more processes" [128016][E][WiFiClient.cpp:517] flush(): fail on fd 48, errno: 11, "No more processes" [145165][E][WiFiClient.cpp:517] flush(): fail on fd 48, errno: 11, "No more processes" [152261][E][WiFiClient.cpp:517] flush(): fail on fd 48, errno: 11, "No more processes" [175722][E][WiFiClient.cpp:517] flush(): fail on fd 48, errno: 11, "No more processes" [181211][E][WiFiClient.cpp:268] connect(): socket error on fd 48, errno: 104, "Connection reset by peer" //"Asia Dream" , "http://igor.torontocast.com:1025/;.-mp3" リンク切れ [190870][E][WiFiClient.cpp:517] flush(): fail on fd 48, errno: 11, "No more processes" [199162][E][WiFiClient.cpp:517] flush(): fail on fd 48, errno: 11, "No more processes" [201592][E][WiFiClient.cpp:517] flush(): fail on fd 48, errno: 11, "No more processes" [204542][E][WiFiClient.cpp:517] flush(): fail on fd 48, errno: 11, "No more processes" [207962][E][WiFiClient.cpp:517] flush(): fail on fd 48, errno: 11, "No more processes" [219993][E][WiFiClient.cpp:517] flush(): fail on fd 48, errno: 11, "No more processes"
動作
M5Unified WebRadioの完成度が凄すぎる。https://t.co/f2wBxaThMb pic.twitter.com/nk8gX1RF7p
— kenji (@uecken) June 11, 2023
パスコンを入れたM5 Speaker HATを装着し、良い音色を聞くことができた。音声の時間波形やスペクトル表示の作りこみが非常によく、完成度として素晴らしい。
気づいた点
- その他スピーカーも試してみたが、アンプ無しでは音量が小さかったり、ボーカルの音が聞こえなかったりであった。
- M5Stack Greyは音声のDAC出力に雑音がのる。巷のメイカーがI2Sを使っている理由だろうか。
- 時々音が途切れる原因や、一部playlistが再生できない原因は今度調べて見ようと思う。
疑問点
- M5Stackシリーズで音声が良い機種はあるのだろうか?
技術基準適合証明について
はじめに
証明の方法には、無線設備(申し込み設備)1台1台ごとを試験等により証明する「技術基準適合証明」と、 機種(商品の型式・型名)毎に書面及び試験等により認証する「工事設計認証」の2種類があります。 「技術基準適合証明」が無線設備1台ごとに証明するのに対し、「工事設計認証」は大量生産機種等に向いています。
とありますが、今回は技術基準適合証明、つまり技適についてです。
技術基準適合証明を取得するには、較正の取れた測定器を使い、決められた特性試験方法にて、技術基準を満たす必要があります。
現時点ではURLを貼っている段階ですので、詳しくはそちらをご覧ください。
技術基準適合証明の取得方法
技術基準適合証明及び工事設計認証の申し込み|TELEC 一般財団法人テレコムエンジニアリングセンター
技術基準
特定無線設備の技術基準|TELEC 一般財団法人テレコムエンジニアリングセンター
英語資料があるが、測定方法の詳細な記載は無く、
"測定方法は、技術基準適合証明等に関する規則に添付される表 1-1-(3)に準拠、もしくは同等以上の測定方法で測定されなければならない。" "Method of measurement of this system shall be based on OTRCC attached table 1-1-(3) (Note) or an equivalent or exceeding method of measurement."
と記載がある。
つまり、特定無線設備の技術基準適合証明等に関する規則別表第一号一(3)の規定に基づく特性試験の試験方法 に準拠すれば良いという事になる。 https://www.tele.soumu.go.jp/horei/law_honbun/00004750.html
特性試験方法
測定器の較正
測定器の較正|TELEC 一般財団法人テレコムエンジニアリングセンター
付録
これら技術基準適合証明等では、ディーエスピーリサーチさんやTELECが有名です。 関係する代表的な申請は 認証・許認可の代行 Application | with the partner | 国内外の試験・認証サービス機関 | DSP Research にあります。
- 実験試験局申請
- 無線局免許申請
- 高周波利用設備の型式指定
- 微弱無線設備証明
ARIBが出してる標準規格、英語版は無償で日本語版は有償になっている。 日本の電波法に準拠してるはずなので翻訳費用を考えると日本語版は無償、英語版は有償が自然に思います。 情報公開の義務があるから英語版は無償にして、活動費を賄うために日本語は有償にしているという事でしょうか? → 国外向けの資料のようです。
送信空中線の絶対利得の測定は、試験場所が床面を含む6面反射波を抑圧した電波暗室、と定められているのでコストがかかりそうです。
気になる特定無線設備を挙げておきます。 特定無線設備の技術基準|TELEC 一般財団法人テレコムエンジニアリングセンター 特定無線設備の技術基準|TELEC 一般財団法人テレコムエンジニアリングセンター
また追記していきます。
2.4GHz帯無線LAN等の欧米基準試験データ等の活用可能性について
はじめに
総務省が 2.4GHz帯無線LAN等の欧米基準試験データ等の活用可能性について のスライドで、欧米基準に合わせようとしています。
特に気になる内容を見てましょう。
送信電力
26MHz以下は 10mW/MHzで変わりありません。
アンテナ利得
"12.14dBi以下。EIRPが12.14dBiの送信空中線に平均電力10mWの空中線電力を加えたとき以下の値となるときは、その低下分を補うことができる。"
アンテナ利得が12.14dBi以下というのは読み取れます。2.14dBiから10dB増えたことになります。
但し、EIRPの記載が良く分かりません。そもそもEIRPの単位はdBmです。どういう事でしょうか?
「EIRPが、12.14dBiの送信空中線に平均電力10mWの空中線電力を加えた値以下となるときは、その低下分を何かで補うことができる」とも読み取れます。
EIRPは、20dBm/20MHz + 12.14dBi = 32.14dBmまで許容していると考えられるので、 EIRPが22.14dBm以下の場合にアンテナ利得または空中線電力で+10dB補う事出来る、のでしょうか??
EIRP 32.14dBmまで許容するのも驚きですが、実際はどうなのでしょうか。
下記によると、アンテナ利得または空中線電力で補う事ができるようです。
参考
XIAO ESP32C3を使ってみて
はじめに
XIAO ESP32C3を使ってみて、資料が少ないので記載しておきます。 (英語資料を参照していますが....)
資料
Getting Started with Seeed Studio XIAO ESP32C3のページ下部まで行くとWiKiや回路図のリンクがあります。
- Getting Started with Seeed Studio XIAO ESP32C3, https://wiki.seeedstudio.com/XIAO_ESP32C3_Getting_Started/#hardware-overview
- WiKi, https://sigmdel.ca/michel/ha/xiao/xiao_esp32c3_intro_en.html
- 回路図, https://files.seeedstudio.com/wiki/XIAO_WiFi/Resources/Seeeduino-XIAO-ESP32C3-SCH.pdf
How to
ブートローダーモードへ移行
XIAO ESP32C3を利用していると頻繁に書き込みできなくなります。その場合は下記の方法でブートローダーモードへ移行します。
ボタンを使う場合
- リセットボタンを押し続けます。
- 起動ボタンを押したままにします。
- リセットボタンを離します。
- 起動ボタンを離します。
USBケーブルで起動する場合
- 通常は USB ケーブルを外して、ボードの電源を切ります。
- 起動ボタンを押したままにします。
- 通常は USB ケーブルを接続して、ボードに電源を供給します。
- 起動ボタンを離します。
上記一連の手順により、PlatformIOやArduinoIDEのシリアルポート接続が解除されている場合があるので、その場合はシリアルの再接続が必要になります。
回路
回路図はこちら https://files.seeedstudio.com/wiki/XIAO_WiFi/Resources/Seeeduino-XIAO-ESP32C3-SCH.pdf にあります。
上部に電源回路とリチウム電池充電回路があります。
LDO XC6210
https://www.torexsemi.com/file/xc6210/XC6210.pdf
注意点
Seeed K.K.の松岡さんの記事が参考になります。 Seeed Studio XIAO ESP32C3のI/O割り付けに注意 - Seeed K.K. エンジニアブログ 結論として、
- D9はスイッチ入力に使う
- D6ピンは極力使わない
- D8はプルアップする
になります。
D8からは1.3V程度が常時かかっているようでした。ブザーを繋ぐと勝手に音が流れて困っていました。
応用
小型ソーラー電源とリチウム電池の併用
結論から言うと、小型ソーラー電源とリチウム電池からXIAO ESP32C3への同時電源供給は出来なさそうです。 送信時の5V 50mA程度の小型ソーラー電源とリチウム電池を組み合わせて利用する場合を想定しています。 理由は、VbatとVusbの切り替えにP-MOSFETを使っており、Vusbから電圧が来ている場合(GS間に+電位が掛かっている場合)、Vbatから電流が流れない(DS間に電流が流れない)ためです。
※ ソーラー電源だけで起動させようとした場合、WiFi受信時は平均50mA@5V消費し、送信時の電流200~300mAを考慮すると60mAのソーラーパネルでは電流が不足しました。コンデンサ100uFで電流不足を補うとしたが出来ませんでした。そのため、ソーラー発電時は充電のみ行うためにESP32C3をDeepsleepまたはWiFi OFFし、リチウム電池から起動させる場合は外部スイッチでソーラー発電をOFFする必要があります。Vusb(ソーラー電源)とVbat(リチウムイオン電池)はXIAO内部のP-MOSFETでスイッチする構成になっています。WiFi受信だけではソーラー電源で足りていたとしても、送信時にソーラー電源不足で電圧降下し、リチウム電源からの供給となるため、VCC_3V3にある程度の充電コンデンサ(1F程度?)が無いと厳しそうです。そもそも屋外環境ではソーラー電源に0V以上ある事が定常でありスイッチが発生しないので、ソフトウェアで意図的にソーラー電源をOFFする仕組みが必要になります。 (2023/3/22 進行中)
当初Deepsleepからのwakeupで起動しようとしていましたが、バッテリー容量が減ってXIAO ESP32C3が電源OFFになると起動できません。 電源OFFから起動するためにはリセットする必要がありますが、ジャンパワイヤで確認したところ背面のRST端子は繋がっていないようなため使えません。全く好ましくないですが、強制的にリセットするためにMOSFETで3VとGNDをショートさせる事でリセットするようにしました。MOSFETの種類にもよりますが、3V-GND間に流れる電流は60mA程度です。 (2023/3/29 追記)
ジャンパワイヤでMOSFETで3VとGNDをショートさせるとリセットできますが、ベタアースにした場合はリセットがかかりませんでした。 瞬間的に大電流流れる必要があると想定します。 この方式はそもそも好ましくないので、リチウムイオン電池とVusbの間にPch-MOSFETを挟み、外部スイッチでリセットできるようにします。 と思った矢先に、再度回路を見てみるとENが端子が基盤の腹に出ていた....のでこれを使いましょう。 (2023/5/9 追記)
キャリアセンスのON/OFF
esp_err_t esp_ieee802154_transmit(const uint8_t frame, bool cca); //CAMA/CAのONOFFができる。
void esp_ieee802154_set_cca_threshold(int8_t cca_threshold); //CAMA/CAのthresholdをsetできる。
void esp_ieee802154_set_cca_mode(esp_ieee802154_cca_mode_t cca_mode); //CSMA/CAのmodeをsetできる。
modeは下記。CarrierはWiFi Channelを意味しているだろうか。
typedef enum {
ESP_IEEE802154_CCA_MODE_CARRIER, /!< Carrier only /
ESP_IEEE802154_CCA_MODE_ED, /!< Energy Detect only /
ESP_IEEE802154_CCA_MODE_CARRIER_OR_ED, /!< Carrier or Energy Detect /
ESP_IEEE802154_CCA_MODE_CARRIER_AND_ED, /!< Carrier and Energy Detect */
} esp_ieee802154_cca_mode_t;
arduino-esp32/esp_ieee802154_types.h at 00214d5c2a1c2b1904f2caf6f0d5ddfe952331ff · espressif/arduino-esp32 · GitHub
arduino-esp32/esp_ieee802154.h at 00214d5c2a1c2b1904f2caf6f0d5ddfe952331ff · espressif/arduino-esp32 · GitHub
WiFi/BLE同時運用
WiFiとBLEの共用は出来るが、時分割となる。 併用可能な組み合わせは、 docs.espressif.com に詳しい。
SDRangle for Android ~Heat Map表示~
SDRangel for Android
SDRangel for Androidが2023年にリリースされて使えるようになっている。
SDRangel for Androidhttps://t.co/vYEmg9sjSw
— GiamMa-based researchers SDR R&D IoT (@giammaiot2) March 9, 2023
ADSB
AIS
APT (NOAA weather satellites)
AM,FM,SSB,M17,digital voice
FM broadcast,DAB
NTSC,PAL,DVBS,DVBS2 (video)
POCSAG
Packet (AX.25)
RS41 (radiosondes)#SoftwareDefinedRadio #SDR #Android #RTLSDR #HackRF pic.twitter.com/2mudEvP5Ll
heatmap plugins
RTLSDRを接続後、緑〇のAvailable channelsからHeat Mapを選択してmapを開くと、受信電力に応じてカラープロットされる。
heatmap: sdrangel/plugins/channelrx/heatmap at master · f4exb/sdrangel · GitHub
FFT/Waterfall
SDRangleの基本的な機能として、AndroidにRTLSDRを接続してWFMを受信すると、 FFT/Waterfallが表示され音声が聞き取れる。
Features
Featureの一覧は下記。
Featureを追加するには、Add Features を選択して、該当のFeatureを選択すればよい。
MapやPacket Errpr Rate Tester、Radio Controller等気になるfeatureがあるので、是非使ってみたい。