偉大なるESP-MESH

ESP-MESH

Page not Found - ESP32 - — ESP-IDF Programming Guide latest documentation

ESP-MESHは通常のWiFiルーターにroot Nodeが接続して一般的なWiFi規格上で双方向Mesh通信できるようになっている。 各ノードは上位にはStationが接続し、SoftAPが機能している。

更に一般的なネットワークで使われるTCP/IPプロトコルへの接続可用性も残し、

WiFi規格上に独自のESP-MESHパケットを内包する事でMACルーティングテーブルに基づく双方向Mesh通信を可能としている。ルートノードはTCP / IPでルーターと通信する事で外部IPネットワークとの間でパケットを送受信できる

・各ノードとルーター間の信号強度に基づくルートノードを動的選択できる。

・親ノードの自己修復ができる。  ”1つ以上の子ノードを持つ親ノードが故障した場合、または親ノードとその子ノード間の接続が不安定になった場合に発生します。ESP-MESHの子ノードは、新しい親ノードを自律的に選択し、それとアップストリーム接続を形成して、ネットワークの相互接続性を維持できる。”

MACアドレスに基づくマルチキャスト通信 ができる。
・動的な物理チャネル切り替えが可能である。

これらにより柔軟な自律ネットワークが構成される。

条件:

“各ノードは、同じメッシュネットワークID、ルーター構成、およびsoftAP構成で構成する必要がある。” メッシュネットワークID、softAP構成を特に変わるもので無いため良い。 各ノードでルーター構成を同じにするという事はルーターが1台の場合には問題ないが、複数の場合には接続先のルーター情報(SSID/PW/暗号化方式)を同じにしておく必要があるという事だ。

WiFiテザリングとの違い:

上位WiFiルーターに接続しているWindowsPCやスマホテザリングを数珠繋ぎにする構成だと、上位から下位以下へ接続ができない。これは基本的にはRouting tableが無いためだ。勿論ファイアウォールで制限されている可能性もある。SSIDを選択しなければ接続できないため、完全自動でリーフノードが最上位へ接続できるわけではない。

考察

 物理チャネルはSTAとSoftAPで同一チャネルとなってしまうため、基本的に分けられない。  TPを更に向上するには、チャネルを離した2台のESP32を高速なI2C等でブリッジさせる必要がある。

SoftAPの静的IP設定

Wifi.softAPConfig() sometimes set the wrong IP address · Issue #985 · espressif/arduino-esp32 · GitHub を参照

参考コードは下記。

#include <WiFi.h>

const char *ssid = "ESP32ap";
const char *password = "12345678";

void setup() {
  Serial.begin(115200);
  Serial.println("Configuring access point...");

  WiFi.mode(WIFI_AP);
  WiFi.softAP(ssid, password);
  Serial.println("Wait 100 ms for AP_START...");
  delay(100);
  
  Serial.println("Set softAPConfig");
  IPAddress Ip(192, 168, 1, 1);
  IPAddress NMask(255, 255, 255, 0);
  WiFi.softAPConfig(Ip, Ip, NMask);
  
  IPAddress myIP = WiFi.softAPIP();
  Serial.print("AP IP address: ");
  Serial.println(myIP);
}

void loop() {
}

備考

 SoftAP ---->ESP32 NAT Router---->PC のような構成で同一セグメントにすると正常に動かない。

ESPxxのWiFi Repeater検証

背景

必要だったのでesp wifi repeaterを検索してみた所、下記が見つかった。 順に試していきたい。

esp_wifi_repeater

dockerでbuildまでできて、写真の下の基盤に書き込みできた。但し上の基盤はできない。何か書き込みモードでもあるのか?

ESP8266

## 結果 インターネットに向けてspeedtestすると500kbps程度であった。
ブラウジングにはほとんど使えないが、AutoMesh機能がこれは優れものだろう。
複数台使えるようになった時に使ってみる。 技適マークが無いので利用には要注意。

## AutoMesh機能 今後書く。

esp32_nat_router

イメージ書き込み注意点

上記githubの通りetpsoolからESP32 or 8266に書き込みを行う。
但しwindowsのesp toolから書き込めなかったため Ubuntu20で行った。

動作画面

接続時の様子。スマホSSID:ESP32_NAR_Routerへ接続し、インターネットへ接続できる。 速度は11Mbpsと一般用に使える。優秀。

備考

  • 2台接続もできるので NAPT動作する。
  • CLIからESP32_NAT_Router自身のIPを192.168.4.1から変更できる。
  • またPort Mappingも可能なため、外から中へアクセスできる。
  • 上位WiFi Routerと同一セグメントすると、下位ESP32_NAR_Routerが正常に動かない。同一セグメントにDHCP Serverが二つ存在したためかもしれない。
  • M5Atomにも書き込めた。
  • コード改変する場合、恐らく WiFi.mode(WIFI_STA_AP) を利用する。 ESP32 Useful Wi-Fi Library Functions (Arduino IDE) | Random Nerd Tutorials

Let's note CF-MX3でUbuntu20の輝度調整

初めは下記参考にしたが、全て駄目。
4 Ways to Fix the Laptop Brightness Problem In Ubuntu

最後に下記を行うとできた!
素晴らしいスクリプト! 神!
Adventures with Linux: Installing Ubuntu on a Panasonic Toughbook CF-31 - Bob Johnson's Computer Stuff, Inc.

但し、chmod 755 /usr/local/bin/redirect-brightness.sh が追加で必要。

M5Atom MatrixでGameControllerizerの環境構築

 1.  UIFLOWの書き込みと接続

M5Burnerでv1.7.3を書き画面から書き込んだ後、API Keyが不明になったので解決策を記す。

f:id:jijiken0417:20210411220859p:plain

M5Atomは画面が無いので、シリアル接続し出力を見ながら、LEDの色でモード判定しないといけない。

M5AtomをUIFlowで書き込んだあとにWiFiでUIFlowに接続するモードに戻す方法 - Qiita

f:id:jijiken0417:20210411220754p:plain

シリアル作業画面

 

手順は恐らく下記となる。

1.青色モードにして、シリアル接続してAPIKEYを確認する

2.黄色モードにして、M5AtomのWiFi-APに接続しWiFi ID/PWを入力する

3.緑色モードにして、UIFlowにAPIKEYを入力して接続する

(色々やったので何か不要かもかもしれません)

 

 

2.  UIFLOWの書き込みと接続

GcOpsM5のUIFlowのmicroPythonコードの実行。

一部訂正する必要がある。UIFlowはv1.7.4を利用した。

誤 from microWebSrv import MicroWebSrv
正 from MicroWebSrv.microWebSrv import MicroWebSrv

 

備考

 M5AtomをAppモード(黄色モード)にしてシリアル接続するとmicroPythonをコンソールから実行できる。
 MicroWebSrvモジュールのエラー解決をずっと探しており、色々確認して内臓モジュールを確認してみると順序が違う事に気づいた。いつから変わったのかは不明。

f:id:jijiken0417:20210411230242p:plain

M5StickCでMicroPythonを使う(公式ファームウェア編) – 楽しくやろう。

所感

 ずっとはまってました。

 接続検証は次の記事に記載します。

jijiken0417.hatenablog.com