おはようございます。
今朝の群馬県北毛方面は吹雪いていますね。子持山、小野子山の様子です。
我が家の植栽の沈丁花の開花状況です。あの妖艶な香りも漂ってきました。
e-Taxに依る確定申告も済みました。還付金が、お小遣いとして戻ってきそうです。
また、保険証とマイナンバーカードは兼ねることが可能ですが、申告の際に必要になる医療費分の控除計算も自動で行ってデータとして添付出来ます。 私の場合は医療費控除分は、0円でしたが。。。
e-Taxに依る申告は慣れると、非常にらくちんですね。
さてこの連休は、
を参考にしてwifi routerの自作に挑戦しています。
STEM教育が叫ばれてきましたが日本に特化した形でいうと、もう一つのE(English)が欠かせません。
興味のあることは英語の文章から吸収すると、必ず英語力は付くハズです。
上から目線のつもりは、ございません。(笑)
###今回の記事は後々修正を加える予定なので、訪問される場合はブラウザで必ずリロードをお願い致します。###
上記サイトで公開されているバイナリーをESP32のボードに書き込めば完成なのですが、少々カスタマイズしたいと思っています。
手を入れるのはの中継AP(ESP32)に書き込むプログラムです。
カスタマイズのポイントですが、
APのDHCPで割り振るIPアドレスを変更した。
jk1brk局に付与されたIPアドレスに変更する。
esp32_nat_router.c
// Set your ip address given by AMPRNet
#define DEFAULT_AP_IP "44.129.106.1" // 20230225
#define DEFAULT_DNS "8.8.8.8"
// Set ch. for ap
#define AP_CHANNEL 5 // 20230226
snip
/* ESP WIFI CONFIG */
wifi_config_t wifi_config = { 0 };
wifi_config_t ap_config = {
.ap = {
.channel = AP_CHANNEL, // 20230226
.authmode = WIFI_AUTH_WPA2_PSK,
.ssid_hidden = 0,
.max_connection = 8,
.beacon_interval = 100,
}
};
の様に変更して、再ビルドします。
## Building the Binaries (Method 1 - ESPIDF)
The following are the steps required to compile this project:
1. Download and setup the ESP-IDF.
2. In the project directory run `make menuconfig` (or `idf.py menuconfig` for cmake).
1. *Component config -> LWIP > [x] Enable copy between Layer2 and Layer3 packets.
2. *Component config -> LWIP > [x] Enable IP forwarding.
3. *Component config -> LWIP > [x] Enable NAT (new/experimental).
3. Build the project and flash it to the ESP32.
A detailed instruction on how to build, configure and flash a ESP-IDF project can also be found the official ESP-IDF guide.
## Building the Binaries (Method 2 - Platformio)
The following are the steps required to compile this project:
1. Download Visual Studio Code, and the Platform IO extension.
2. In Platformio, install the ESP-IDF framework.
3. Build the project and flash it to the ESP32.
のMethod 1では、バイナリ(プログラム)の再構築が不可能でした。一連のビルド作業中に叱られ続ける。。。
なので、Method 2を採用したら、ビルド一発でした。
Arduino IDEに慣れている私にとって、その環境構築(PlatformIO)は簡単ではありませんでした。
2.4GHz帯は、アマチュア無線で使用される周波数帯と被ります。なので、使用するチャネルを指定できる様にする。
アクセスポイント(AP)と子端末間の通信チャンネル のことです。
修正したプログラムをビルドして、ロードします。
Teraterm@USBのシリアル端末から、そのOpening messageを見ると、
I (2851) ESP32 NAT router: connect to ap SSID: xxxxxxxxxxxxx
I (2851) wifi:ap channel adjust o:5,2 n:11,2
I (2861) wifi:new:<11,2>, old:<5,2>, ap:<11,2>, sta:<11,2>, prof:5
ch.5に設定していますが、ch.11にadjustされてしまいます。。。 原因究明中です。
それから、
//#define CHANNEL 1 // 2412MHz 2401-2423
//#define CHANNEL 2 // 2417MHz 2406-2428
//#define CHANNEL 3 // 2422MHz 2411-2433
//#define CHANNEL 4 // 2427MHz 2416-2438
#define CHANNEL 5 // 2432MHz 2421-2443
//#define CHANNEL 6 // 2437MHz 2426-2448
の6つのチャンネルは、アマチュア無線で使用する周波数帯域と被ります。各チャンネルの帯域幅は、22MHzです。
将来的に今回自作したrouterで、2.4GHz帯の局免許を受けたいと思っています。2.4GHz帯のアマチュア無線データ通信とインターネットのゲートウェイで、局免許を受けたい
この図は、お借りしています。アマチュア無線で使用できる周波数帯を赤枠で括りました。具体的には、
ch.1~ch.6の範囲となります。
ということではなくて、以下のやり方の方がIDEっぽいです。
なのですが、APのDHCPとして割り振るIPアドレスですが、44.129.106.1は割り振れます。
44.129.106.101は、割り振れません。要は、プロフラム上44.129.106.101を割り振っても、44.129.106.1が割り振られます。何故だろう? その2
本wifi routerのスピードですが、
な感じです。上りも下りも10数M/bpsですね。
無線規格:IEEE 802.11b/g/n(2.4GHz)
この表から、恐らくIEEE 802.11nで動作している様ですが、速度は11b並みです。
因みに親routerのスピードですが、ベストエフォートで下り1Gbps、上り100Mbpsです。
もう一つの系として、wifi routerの外部から内部の端末にアクセスするケース
一番右側のESP32がrouterです。
2つの子機には、
のプログラムを書き込みました。
// Replace with your network credentials
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
の部分は、本routerの場合になります。
## Access devices behind the router
If you want to access a device behind the esp32 NAT router? `PC -> local router -> esp32NAT -> server`
Lets say "server" is exposing a webserver on port 80 and you want to access that from your PC.
For that you need to configure a portmap (e.g. by connecting via the arduino IDE uart monitor through USB)
```
portmap add TCP 8080 44.129.106.2 80
↑ port of the webserver
↑ server's ip in esp32NAT network
↑ exposed port in the local router's network
```
Assuming the esp32NAT's ip address in your `local router` is `192.168.0.57` you can acces the server by typing `192.168.0.57:8080` into your browser now.
ステルスモードの設定
esp32_nat_router.c
.ssid_hidden で 1 を設定して再ビルド
/* ESP WIFI CONFIG */
wifi_config_t wifi_config = { 0 };
wifi_config_t ap_config = {
.ap = {
.channel = AP_CHANNEL, // 20230226
.authmode = WIFI_AUTH_WPA2_PSK,
.ssid_hidden = STEALTH_MODE, // 20230318
.max_connection = MAX_STA_CONN, // 20230318
.beacon_interval = 100,
}
};
なのですが、Boot時に自動設定できる様に回路を変更しました。
GPIO 4を入力モードに設定しています。プログラム(抜粋部分のみ)も
#define INPUT_GPIO CONFIG_INPUT_GPIO // 20230325
// Input refered to Kconfig.projbuild file
gpio_set_direction(INPUT_GPIO, GPIO_MODE_INPUT);
wifi_config_t ap_config = {
.ap = {
.channel = AP_CHANNEL, // 20230226
.authmode = WIFI_AUTH_WPA2_PSK,
.ssid_hidden = gpio_get_level(INPUT_GPIO), // 20230325
.max_connection = MAX_STA_CONN, // 20230318
.beacon_interval = 100
}
};
の様に弄っています。
また現在は、の様な系で接続試験を行っています。(2023/4/7)
の系で、Note PC 子端末からAPに接続できなくなりました。Note PC上のシリアル端末でモニタすると、クレデンシャル(IDとパスワード)認証が上手くいっていない様子です。
試しに、APのステルスモードを一時解除したらNote PCからAPに接続できる様になりました。
原因としては、近隣に本APと同じチャンネル(ch. 5)を使う他のAPの存在が考えられます。
市販のAPの場合、空いているch.を探してその周波数を自動的に選択する仕組みがあると思われます。(2023/4/9)
参考