こんばんは!
GWも本日で終了、明日は雨天の中、出社の予定です。
右差し憂鬱です。

群馬の実家に2泊で出掛けてきました。植栽の手入れです。
庭の草むしりもありです。


【私なりの草むしりの極意】
①除草剤は使用しません。

 すべて道具を使って処理します。自然に優しい。

 故に効率は、良くないです。(笑)
②草むしり中は、無 の境地に入れる。

 右差し最近改めて気が付きました。エコだと思います。
③草は、後ろ向き(後進)しながらむしる。

 これは、むしり残しに気が付き易い。 

 前進しながらむしって、振り返った時に残りがあると、自分は隙だらけの人間(笑)か?と精神衛生上宜しくない。

さてと本題に入ります。

の続きになります。
https://github.com/dchristl/esp32_nat_router_extended
をESP-IDF v5.01の環境でビルドすることに挑戦しています。右差し大筋の目途は立ちました。筋肉
徐々に紹介して行きます。
先ずは、
## Interpreting the on board LED

If the ESP32 is connected to the upstream AP then the on board LED should be on, otherwise off.
If there are devices connected to the ESP32 then the on board LED will keep blinking as many times as the number of devices connected.

For example:

One device connected to the ESP32, and the ESP32 is connected to upstream: 

`*****.*****`

Two devices are connected to the ESP32, but the ESP32 is not connected to upstream: 

`....*.*....`
の機能が上手く動作しなかったのですが、解決しました。

esp32_nat_router.cに含まれる関数群の1つを弄ってみました。
void *led_status_thread(void *p)
{
    gpio_reset_pin(BLINK_GPIO);
    gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT);

    //uint16_t connect_count = getConnectCount();

    while (true)
    {
        uint16_t connect_count = getConnectCount();     // 20230507
        gpio_set_level(BLINK_GPIO, ap_connect);

        for (int i = 0; i < connect_count; i++)
        {
            gpio_set_level(BLINK_GPIO, 1 - ap_connect);
            vTaskDelay(50 / portTICK_PERIOD_MS);
            gpio_set_level(BLINK_GPIO, ap_connect);
            vTaskDelay(50 / portTICK_PERIOD_MS);
        }
        vTaskDelay(1000 / portTICK_PERIOD_MS);
    }
}
の様にパッチを当てたら、期待通りの動きをするようになりました。拍手  洒落のつもりはございません。
getConnectCount()という関数は、DHCPサーバーに接続しているStationの数を取ってきます。
その値は動的に変化するので、void *led_status_thread(void *p) のスレッド初期化部分ではなくて、
スレッドの実態が収まる
 while (true) {

...
}

のループの中に置くべきなのです。その結果として、LEDは接続台数を表わすBLINKをします。

===
OSS(オープンソースソフトウェア)を探して、興味のあるものを自分の環境で動かすって楽しいのですよ。
ちょっとしたゲーム感覚です。

OSSを自分の環境で動かせた時の達成感が、なんとも言えないのです。

ターゲットデバイスにプログラムを書き込む際の注意点:
〇ソースプログラムをビルドする際には、前回ビルドしたデータを消去しておくこと。
 IDEを使ってプログラムをビルドするときに、クリーンを事前に行うこと。

 

〇必ずクリーンインストールを心掛けること。

 ターゲットデバイスのフラッシュメモリを先ずクリアしてから、プログラムを書き込むこと。

〇プログラムを書き込んだら、必ずハードウェアリセットを掛けること。

   その後にターゲットデバイス上でプログラムの各種設定を再設定して、もう一度 ハードウェアリセットを掛ける。  
 見かけ上前回書き込んだ時の設定値が残っていますが、これが危ないのです。


多少は手間なのですが以上の3点をきちんとこなせば、些細なプログラムミスをかなり軽減できます。グッ

では、本日はこれにて。