M5Stamp C3+ArduinoのWi-Fi接続不具合3

同じコードでも、バージョン2.0.1で動いていて、バージョン2.0.2以降でコンパイルした場合に接続できなくなる現象を自宅環境では問題解決する事ができましたのでこちらに書いておきます。

以下、Core debug levelをveboseでコンパイルした場合のログです。

[   124][V][WiFiGeneric.cpp:283] _arduino_event_cb(): STA Started
[   124][D][WiFiGeneric.cpp:852] _eventCallback(): Arduino Event: 2 - STA_START
[   245][V][WiFiGeneric.cpp:96] set_esp_interface_ip(): Configuring Station static IP: 0.0.0.0, MASK: 0.0.0.0, GW: 0.0.0.0
[  2297][V][WiFiGeneric.cpp:300] _arduino_event_cb(): STA Disconnected: SSID: xxxxx, BSSID: 00:00:00:00:00:00, Reason: 201
[  2298][D][WiFiGeneric.cpp:852] _eventCallback(): Arduino Event: 5 - STA_DISCONNECTED
[  2306][W][WiFiGeneric.cpp:873] _eventCallback(): Reason: 201 - NO_AP_FOUND
[  2313][D][WiFiGeneric.cpp:889] _eventCallback(): WiFi Reconnect Running
[  2374][V][WiFiGeneric.cpp:96] set_esp_interface_ip(): Configuring Station static IP: 0.0.0.0, MASK: 0.0.0.0, GW: 0.0.0.0
[  4425][V][WiFiGeneric.cpp:300] _arduino_event_cb(): STA Disconnected: SSID: xxxxx, BSSID: 00:00:00:00:00:00, Reason: 201
[  4426][D][WiFiGeneric.cpp:852] _eventCallback(): Arduino Event: 5 - STA_DISCONNECTED
[  4434][W][WiFiGeneric.cpp:873] _eventCallback(): Reason: 201 - NO_AP_FOUND
[  4441][D][WiFiGeneric.cpp:898] _eventCallback(): WiFi AutoReconnect Running
[  4449][V][WiFiGeneric.cpp:96] set_esp_interface_ip(): Configuring Station static IP: 0.0.0.0, MASK: 0.0.0.0, GW: 0.0.0.0

「Reason: 201 – NO_AP_FOUND」が返ってきて接続できません。
延々と繰り返していきます。

対処方法は

  WiFi.mode(WIFI_STA);

の前に

  WiFi.setMinSecurity(WIFI_AUTH_WPA_PSK);

を入れることにより無線LANの暗号化方式のレベルを下げる指定ができ、この方法でバージョン2.0.3でも接続できる様になりました。
MinSecurityのデフォルト値がバージョン2.0.2以降、WIFI_AUTH_WPA_PSKからWIFI_AUTH_WPA2_PSKに変更になった様です。

[    37][D][WiFiGeneric.cpp:852] _eventCallback(): Arduino Event: 0 - WIFI_READY
[   123][V][WiFiGeneric.cpp:283] _arduino_event_cb(): STA Started
[   124][D][WiFiGeneric.cpp:852] _eventCallback(): Arduino Event: 2 - STA_START
[   225][V][WiFiGeneric.cpp:96] set_esp_interface_ip(): Configuring Station static IP: 0.0.0.0, MASK: 0.0.0.0, GW: 0.0.0.0
[   432][V][WiFiGeneric.cpp:295] _arduino_event_cb(): STA Connected: SSID: xxxxx, BSSID: 08:10:86:15:f4:de, Channel: 1, Auth: PSK
[   434][D][WiFiGeneric.cpp:852] _eventCallback(): Arduino Event: 4 - STA_CONNECTED
[   999][V][WiFiGeneric.cpp:305] _arduino_event_cb(): STA Got New IP:192.168.1.2
[   999][D][WiFiGeneric.cpp:852] _eventCallback(): Arduino Event: 7 - STA_GOT_IP
[  1002][D][WiFiGeneric.cpp:914] _eventCallback(): STA IP: 192.168.1.2, MASK: 255.255.255.0, GW: 192.168.1.1

自宅環境の無線LANアクセスポイントはWPA/WPA2対応の機器、設定ですが、なぜかデフォルトの「WPA_WPA2_PSK」設定では接続が出来ませんでした。

WiFi.setMinSecurity() で指定できる値は、「esp_wifi_types.h」にあります。

typedef enum {
    WIFI_AUTH_OPEN = 0,         /**< authenticate mode : open */
    WIFI_AUTH_WEP,              /**< authenticate mode : WEP */
    WIFI_AUTH_WPA_PSK,          /**< authenticate mode : WPA_PSK */
    WIFI_AUTH_WPA2_PSK,         /**< authenticate mode : WPA2_PSK */
    WIFI_AUTH_WPA_WPA2_PSK,     /**< authenticate mode : WPA_WPA2_PSK */
    WIFI_AUTH_WPA2_ENTERPRISE,  /**< authenticate mode : WPA2_ENTERPRISE */
    WIFI_AUTH_WPA3_PSK,         /**< authenticate mode : WPA3_PSK */
    WIFI_AUTH_WPA2_WPA3_PSK,    /**< authenticate mode : WPA2_WPA3_PSK */
    WIFI_AUTH_WAPI_PSK,         /**< authenticate mode : WAPI_PSK */
    WIFI_AUTH_MAX
} wifi_auth_mode_t;

暗号化種類の中にWAPI_PSK (WLAN Authentication and Privacy Infrastructure (WAPI))もあります。興味深いですね。

カテゴリー: Arduino関連, ESP32 | コメントする

WordPressをバージョンアップ (Version6.0へ)

WordPressをWordPress 6.0にバージョンアップしました。

カテゴリー: WordPress, このサイト全般 | コメントする

ESP32+Arduino+HttpsClient

ESP32+Arduino+HttpsClientで状況がよくわからずハマった事象を書いておきます。

WiFiClientSecure *client = new WiFiClientSecure;
if(client) {
    client -> setCACert(rootCACertificate);
    {
        // Add a scoping block for HTTPClient https to make sure it is destroyed before WiFiClientSecure *client is 
        HTTPClient https;
        Serial.print("[HTTPS] begin...\n");
        if (https.begin(*client, "https://jigsaw.w3.org/HTTP/connection.html")) {  // HTTPS
            Serial.print("[HTTPS] GET...\n");
            // start connection and send HTTP header
            int httpCode = https.GET();
            // httpCode will be negative on error
            if (httpCode > 0) {
                // HTTP header has been send and Server response header has been handled
                Serial.printf("[HTTPS] GET... code: %d\n", httpCode);
                // file found at server
                if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {
                    String payload = https.getString();
                    Serial.println(payload);
                }
            } 
            else {
                Serial.printf("[HTTPS] GET... failed, error: %s\n", https.errorToString(httpCode).c_str());
            }

            https.end();
        } 
        else {
            Serial.printf("[HTTPS] Unable to connect\n");
        }
    }
    delete client;
} 
else {
    Serial.println("Unable to create client");
}

元コードはこちら

こんなコードでhttps通信を行おうとしましたが、その時にエラーとして
「[HTTPS] GET… failed, error: connection refused」
が出ました。
root Certificateに問題があるのかと思いましたが、他のスケッチでは動いていたので原因となるのはおかしいと思い、Core debug levelをveboseで実行してみると、原因がわかりました。
エラーメッセージは「connection refused」ですが、ヒープメモリ不足でこのエラーになっていました。

接続先やroot Certificateでも差があると思いますが、https通信を行う直前で

ESP.getFreeHeap()

で、
約60,000ではエラー
約90,000では正常
でした。

HttpsClientはヒープメモリを十分に確保して使いましょう。

カテゴリー: Arduino関連, ESP32 | コメントする

M5Stamp C3+ArduinoのWi-Fi接続不具合2

前回(M5Stamp C3+ArduinoのWi-Fi接続不具合)の続きです。

Arduino ボードマネージャで「M5Stack」のバージョン2.0.2で不具合が発生していました。
最近、2.0.3がリリースされていましたが、このバージョンでも不具合は解消していません。

  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, pass);
  Serial.print("\nconnecting...");
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");
  }

こんなコードでも接続が完了出来ません。
何か記述の仕方が変わったのでしょうか…

引き続き2.0.1を使い続けています。

カテゴリー: Arduino関連, ESP32 | コメントする

M5Stamp C3とM5Stamp C3U

M5Stamp C3とM5Stamp C3UはESPRESSIF ESP32-C3 RISC-Vマイコンを搭載するモジュールです。
ESP32-C3はシングルコア、動作クロックも160MHzで、ESP8266の後継の色が濃い様なマイコンです。

M5Stamp C3とM5Stamp C3Uの違いは以下の表の通りです。

モデルマイコンIO数ボタンIOUSBチップUSBインターフェース機能価格
M5STAMP-C3ESP32-C313G3CH9102Download / SerialUS$5.78
M5STAMP-C3UESP32-C314G9Download / JTAG / CDC SerialUS$5.50

価格は5個売りの1個単価としています。

どちらを選ぶかですが、価格差はほぼ無いので、無難なのはUSBチップの乗っている「STAMP-C3」方だと思います。

M5STAMP-C3U でプログラムダウンロードモードに入る方法

  1. M5STAMP-C3Uの電源を切ります
  2. センターボタン(G9)を押したままPCに接続します
  3. USBポートとして認識されればプログラムダウンロードができます

または

センターボタン(G9)を押したままリセットボタンを押すことでもUSBポートとして認識されます

M5Stamp C3U でUSB CDCを有効にする方法

デフォルトではUSB CDC(Universal Serial Bus Communications Device Class)は有効になっていません。C3UのシリアルポートをUSB経由でUART0としてスタートさせるには、IDEを使用してプログラムオプションをダウンロードする前にオプションを有効にしてUSB CDCにしてください。
(Arduinoユーザーはツールメニュー>USB CDC on Boot-Enabledで有効にできます。IDFユーザーはESP IDFオフィシャルドキュメントを参照してください)

カテゴリー: ESP32 | コメントする

日本と世界の日の出日の入り時間(検索式版)の検索不具合

日本と世界の日の出日の入り時間(検索式版)の検索はGoogleのGeocoding APIを使用していますが、利用の方法が変わっており、いつからかわかりませんが、ページとしてうまく機能しない状態になっていました。
ご不便をおかけしていました。

修正を行ったので現在は検索機能も使用できます。

https://www.motohasi.net/SunriseSunset/WorldSunJC.php

カテゴリー: このサイト全般, 更新記録 | コメントする

M5Stamp C3+ArduinoのWi-Fi接続不具合2

M5Stamp C3+ArduinoのWi-Fi接続で不具合が発生する現象が報告されています。
Arduino ボードマネージャで「M5Stack」のバージョン2.0.2がそれに該当する様です。
「ESP32」も同様でバージョン2.0.2とESP32C3の組み合わせでWi-Fi接続で不具合が発生します。

現時点出来る対策は「M5Stack」、「ESP32」ともに、バージョン2.0.1を使用することです。
バージョン2.0.1では不具合は発生しません。

カテゴリー: Arduino関連, ESP32 | コメントする

M5Stamp C3+ArduinoのWi-Fi接続不具合

M5Stamp C3+ArduinoのWi-Fi接続で不具合が発生する現象が報告されています。
Arduino ボードマネージャで「M5Stack」のバージョン2.0.2がそれに該当する様です。

近日中に解決するでしょうが、記録として残しておきます。

初めて使うM5Stamp C3を使った際に、今までArduinoで使用してきたよくあるWi-Fiに接続するコード

  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, pass);
  Serial.print("\nconnecting...");
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");
  }

が、接続完了にならず、調べたところ不具合ありだった…という事の様です。
M5Stamp C3のWi-Fiに不具合があるかもと思い

WiFi.scanNetworks();

を実行してみたところ、スキャンはできました。
Wi-Fiの不具合ではなく、コネクションの不具合の様です。

カテゴリー: Arduino関連, ESP32 | コメントする

トップページのアクセスをHTTPSにリダイレクト

サイトのトップページ
http://www.motohasi.net
でアクセスされた方を強制的に
https://www.motohasi.net
にリダイレクトする仕組みを導入しました。

2017年7月からhttps接続へ対応、
2019年5月からゆるくhttpsへリダイレクトをしていましたが、以降、トップページは完全にリダイレクトします。

カテゴリー: web関連, このサイト全般 | コメントする

M5StickC/Plus用Wi-SUN HATキットをArduinoで使う

M5StickC/Plus用Wi-SUN HATキットArduinoで使う時の情報です。
「きっと何かに役立つでしょ!?」さんのブログで紹介・販売されているM5StickC/Plus用Wi-SUN HATキットですが、バージョンが複数ありバージョンによってM5StickC/Plus側から見えるBP35A1の通信ポートが違うようです。

Rev 0.1 では tx = 0, rx = 36
Rev 0.2 では tx = 0, rx = 26 (2020/8/31以降)

となるようです。
入手したM5StickC/Plus用Wi-SUN HATキットはRev 0.2でした。
Rev 0.2の基板には基板上にシルク印刷記載があります。
組み立てる前にリビジョン番号の確認をしておきましょう。

カテゴリー: ESP32 | コメントする