ESP32-C3入門チュートリアルネットワークの章(2. Wi-Fiネットワーク-Smart_configおよびBlueIF)

经过上一篇的WiFI入门篇,我们知道了WiFi初始化方式 和学会了WiFi的几种工作方式,
在实际应用中,环境复杂多变,在固件中输入SSID 的方式太不通用了,
所以肯定是需要学习一下如何在不同的环境中联网,就是所谓的配网。
ESP32-C3的配网方式有多种,本文主要说明测试 Smart方式 和 BlueIF方式。

序文

次のESP32-C3機能テストは、自社で設計した開発ボードに基づいています。

ESP32-C3の開発ボードを自分で作成します(Lichuang EDAを初めて使用する場合)(PCBが利用可能です)

開発環境は、VScodeプラグインに基づいて構築されたEspressifの公式ESP-IDFです。

ESP32-C3 VScode開発環境が構築されています(Espressifの公式ESP-IDF-WindowsとUbuntuのデュアル環境に基づいています)

ESP32-C3のWIFIの使用方法を学び、他の周辺機器は使用しないでください。

1.ESP32-C3配信ネットワーク

1.1SoftAP配信ネットワーク

ESP32-C3はWiFiホットスポットを確立します。ユーザーが携帯電話をこのホットスポットに接続した後、ユーザーはESP32に接続するためのWiFi情報を送信します。
この方法は非常に信頼性の高い方法であり、デバイス側のコードも単純です。
この例が見つかりません...

1.2Smartconfigネットワーク構成

Smartconfigは、公式のデモが提供されているため、この記事でテストするネットワーク配布方法です。
この方法では、通信リンクをヒットする必要はありません。モバイル端末は、WiFi情報を表すためにさまざまな長さのUDPブロードキャストパケットを送信します。ESP32-C3は、無差別モードで信号のカバレッジ内のすべてのデータフレームを監視し、特定の方法でWiFi情報を取得します。アルゴリズム。
この方法は簡単ですが、配電網の成功率は環境に大きく影響されます。

ESP32-C3 SmartConfigの紹介については、Espressifの公式Webサイトの説明リンクは次のとおりです。

Espressifの公式ESP32-C3SmartConfig
ここに画像の説明を挿入
の手順次の記事では、Smartconfigを使用してESP32-C3のネットワークを構成する方法について説明します。

1.3WEB配信ネットワーク

WEB配信ネットワークモードでは、パソコン側でネットワーク配信を完了できます。
最初の方法と同様に、ESP32-C3はWiFiホットスポットを確立し、携帯電話またはPCはブラウザーで構成Webページを開き、Webページでネットワーク構成を完了します。
この方法はSoftAP配信ネットワークと同じくらい信頼性がありますが、Webページを埋め込むためにデバイス側のスペースを占有する必要があるという欠点があります。

1.4BLE配信ネットワーク

BLE配信ネットワーク。ネットワーク配信にはBluetoothを使用してください。ESP32-C3はBLEをブロードキャストします。放送を受信した後、近くの携帯電話がBLEに接続するかどうかをユーザーに尋ねます。接続することを選択した場合、携帯電話はESP32-C3に情報を送信できます。
このプロセスでは、ユーザーはWiFiネットワークを切り替える必要はありませんが、Bluetoothをオンにする必要があり、ユーザーエクスペリエンスはSoftAP配信ネットワークよりも優れています。
この方法では、デバイス側にBluetooth関連のコードを追加する必要があります。これにより、ファームウェアのサイズが大きくなり、ネットワーク構成が完了する前に一定量のメモリを占有します。(FreeRTOSを使用して確立されたネットワーク構成タスクは、ネットワーク構成の完了後に削除できます。)

ESP32-C3のBluetooth配信ネットワークでは、公式が完全なソリューションであるBluFiを提供しています。
ESP32-C3 BluFiの紹介については、Espressifの公式ウェブサイトの説明リンクは次のとおりです。

Espressifの公式ESP32-C3BluFiの説明

ここに画像の説明を挿入
この記事では、BluFiを使用してESP32-C3のネットワークを構成する方法について説明します。

1.5Espressif配信ネットワークAPP

この記事では、Smart_configとBlueIFの2つのネットワーク配信方法をテストして説明します。次のテストを実行する前に、携帯電話で必要なアプリを準備できます。APPはEspressifの公式ウェブサイトからダウンロードできます。リンクは次のとおりです。

Espressif公式ウェブサイト配信ネットワークAPPダウンロードアドレス

ここに画像の説明を挿入
IOSはAppStoreで直接見つけることができ、より便利です
ここに画像の説明を挿入

2.Smart_configメソッド

Smart_configメソッドの公式の例は次のとおりです。
ここに画像の説明を挿入

2.1公式の例の基本テスト

上記の例を使用して、プロジェクトを作成し、最初に効果をテストします。もちろん、サンプルプロジェクトは実際のアプリケーションには適していませんが、実際の状況により適したものに変更します。

この例は最初に変更されていません。Smart_configの例では、コンパイルして直接書き込みます。リセット後、以下に示すように、Smart_configのバージョン番号を示すシリアルポート情報が表示されます。
ここに画像の説明を挿入

デバイス側での準備ができたら、携帯電話でEspTouch APPを開き、ネットワーク構成操作を実行します。手順は次の図のようになります(IOS):
ここに画像の説明を挿入
Androidアプリは同じです。
ここに画像の説明を挿入

このプロセス中、通常の状況では、シリアルポートから出力される次の情報を確認できます。
ここに画像の説明を挿入

パスワードが間違っている場合など、予期しない状況:
ここに画像の説明を挿入

2.2アプリケーションのテストを変更する

公式の例では、Smart_configメソッドの基本プロセスのデモのみを提供しています。上記のデモでは、以前のネットワーク構成が成功した場合でも、リセットするたびにSmart_configネットワーク構成モードになります。これは明らかに一致していません。実際のアプリケーションなので、一般的なアプリケーションに適したものになるようにプログラムを変更することをターゲットにする必要があります。

ステップバイステップで変更します。ネットワークが以前に構成されている場合は、最初にプログラムを作成します。プログラムは新しいラウンドのネットワーク構成操作を実行せず、 WiFiに直接接続します。解決策は、ネットワーク構成のコードの前にWi-Fi構成ステータスを確認することです。

ESP32-C3の以前の調査から、ESP32-C3のWiFi構成はNVSに保存されることがわかっているため、ネットワークを構成したことがある場合は、NVSによって保存されたWiFi構成にSSIDデータがあります。メモリに保存されたWiFi構成情報をesp_wifi_get_config取得して、SSIDがあるかどうかを確認できます
ここに画像の説明を挿入
。結果は次のようになります。
ここに画像の説明を挿入

上記のテストはサンプルプログラムよりも合理的ですが、別の環境に変更した場合、以前に構成したWiFiアカウントのパスワードを使用できず、上記の変更は要件を満たすことができません。同時に、上記はテスト専用です。 、プログラムはネットワークで直接設定されます。今後ネットワーク設定タスクを削除しない場合は、ある程度のメモリリソースを消費しますので、実際の使用にご注意ください。

そのため、再度変更する必要があります。特定の操作により、WiFi手動設定ネットワークやWiFi設定クリアなどの機能を利用し、これまでに学習・使用した周辺機器を使用してキーを押すことができます。ボタンのドライバーとアプリケーションについては、ブログ投稿を参照してください。

ESP32-C3学習テスト(2つ、GPIO割り込み、ボタンドライブテスト)

WiFi構成がクリアされています:

以前のブログ投稿に従って、最初にドライバーを移植しました。my_button.cファイルで、ボタン操作をesp_wifi_restore使用してネットワーク構成情報を削除します。
ここに画像の説明を挿入

この場合、ネットワーク構成情報を手動で削除できるため、リセット後にネットワークを再構成する必要があります。
ここに画像の説明を挿入

my_button.cソースコードについて

#include <string.h>
#include "esp_log.h"
#include "iot_button.h"
#include "driver/gpio.h"
#include "button_gpio.h"
#include "my_button.h"


static const char* TAG = "my_button";

#define IO_SWITCH_BUTTON 7

static void button_single_click_cb(void *arg){
    
    
    uint8_t *num = (uint8_t *)arg;
    uint32_t gpio_num = *num;
    ESP_LOGI(TAG, "BTN%d: BUTTON_SINGLE_CLICK\n", gpio_num);
}

static void button_long_press_start_cb(void *arg){
    
    
    uint8_t *num = (uint8_t *)arg;
    uint32_t gpio_num = *num;
    ESP_LOGI(TAG, "BTN%d: BUTTON_LONG_PRESS_START\n", gpio_num);
    ESP_LOGI(TAG, "Manual get into smartconfig...");

    /*
    test fail.. Manual get into smartconfig,no need 
    */
    // esp_wifi_restore();
    // wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
    // ESP_ERROR_CHECK( esp_wifi_init(&cfg) );
    // ESP_ERROR_CHECK( esp_wifi_set_mode(WIFI_MODE_STA) );
    // ESP_ERROR_CHECK( esp_wifi_start() );
    // ESP_ERROR_CHECK( esp_smartconfig_set_type(SC_TYPE_ESPTOUCH) );
    // smartconfig_start_config_t cfg = SMARTCONFIG_START_CONFIG_DEFAULT();
    // ESP_ERROR_CHECK( esp_smartconfig_start(&cfg) );
}

static void button_press_repeat_cb(void *arg){
    
    
    uint8_t *num = (uint8_t *)arg;
    uint32_t gpio_num = *num;
    ESP_LOGI(TAG, "BTN%d: BUTTON_PRESS_REPEAT\n",gpio_num);   
    ESP_LOGI(TAG, "restore all wifi set...");
    esp_wifi_restore();    
}

void button_start()
{
    
    
    //初始化按键
    button_config_t cfg = {
    
    
        .type = BUTTON_TYPE_GPIO,
        .gpio_button_config = {
    
    
            .gpio_num = IO_SWITCH_BUTTON,
            .active_level = 0,
        },
    };
    button_handle_t gpio_btn = iot_button_create(&cfg);
    if(NULL == gpio_btn) {
    
     ESP_LOGE(TAG, "Button create failed"); }
    iot_button_register_cb(gpio_btn, BUTTON_SINGLE_CLICK, button_single_click_cb);            //短按
    iot_button_register_cb(gpio_btn, BUTTON_LONG_PRESS_START, button_long_press_start_cb);    //长按
    iot_button_register_cb(gpio_btn, BUTTON_PRESS_REPEAT, button_press_repeat_cb);            //连续短按
}


2.3詳細を変更する

公式のサンプルプロジェクトはより厳密です。ネットワーク構成の操作はタスクであり、このタスクはWiFiの初期化後、WIFI_EVENTイベントWIFI_EVENT_STA_START
ここに画像の説明を挿入
最後に、ネットワーク構成が完了した後、タスクを削除できます。SC_EVENTイベントSC_EVENT_SEND_ACK_DONEが発生します。メモリスペースを解放します。
ここに画像の説明を挿入

ただし、上記のテストでは、公式の例では、入力するたびに配布ネットワーク操作が実行されることも示されています。変更後、配布ネットワーク操作に入ることができない場合がありますが、このタスクは引き続き作成され、配布ネットワークに移動しません。そのステップでは、タスクは常に存在し、このメモリスペースを占有します。

したがって、ap状態に接続した後、タスクを削除することをお勧めします。
ここに画像の説明を挿入
このセクションの説明は、ネットワーク配信方法とは関係ありませんが、そのような場所を見つけた場合は、注意して簡単に説明する必要があります。 。

3.BlueIFメソッド

BlueIFメソッドの公式の例は次のとおりです。
ここに画像の説明を挿入

3.1パーティションテーブルの変更

上記の例に従って新しく作成されたプロジェクトは、コンパイルに問題はありませんが、書き込みと実行後に次の問題が発生し、再起動し続け
ここに画像の説明を挿入
ます:図のプロンプトを見ると、esp_imageが大きすぎ、デフォルトですパーティションテーブルのユーザーパーティションがイメージに適合しません。

NVSの使用に関するブログ投稿で、パーティションテーブルを簡単に紹介しました。

ESP32-C3学習テスト(8、NVS-不揮発性ストレージの使用)

ただし、公式の紹介を確認する必要があります:ESP32-C3フラッシュパーティションテーブル

以前のブログ投稿によると、次の図に示すように、デフォルトのパーティションテーブルではアプリのパーティションはわずか1M(つまり、1048576KB)であることがわかっています。
ここに画像の説明を挿入
したがって、上記の問題が発生するため、パーティションテーブルを変更する必要があります。私たち自身。

VScodeプラグイン開発を使用しています。SDK構成はVScodeで直接見つけることができます。
ここに画像の説明を挿入

最初の列で、ユーザーのパーティションテーブルの使用を選択します。
ここに画像の説明を挿入

次に、サンプルプロジェクトで名前が付けられpartitions.csvた。
ここに画像の説明を挿入
設定が完了し、最初のコンパイルに問題があります。問題は次のとおりです。
ここに画像の説明を挿入
後で、partitions.csv場所がた。メインフォルダと同じディレクトリ:
ここに画像の説明を挿入

上記の問題を解決するには、フラッシュサイズを変更する必要があります。
ここに画像の説明を挿入

引き続きSDK設定で、Serial Flasher Configを検索し、4MBを選択します。
ここに画像の説明を挿入

コンパイルは成功し、ダウンロードして書き込み、別の問題を見つけます。デフォルトの例の一部のパーティションの初期化は対応している必要がLabelあり、エラーは次のとおりであるため、パーティションテーブルの一部の名前を任意に変更することはできません。
ここに画像の説明を挿入

最後の変更は次のpartitions.csvとおりですが、最終的には正常です
ここに画像の説明を挿入
partitions.csv。file:

# Name,   Type, SubType, Offset,   Size, Flags
# Note: if you change the phy_init or app partition offset, make sure to change the offset in Kconfig.projbuild
nvs,            data,   nvs,             0x9000,  0x6000,
phy_init,       data,   phy,             0xf000,  0x1000,
factory,        app,   factory,          0x10000, 2M,

3.2配電ネットワークテストの例

上記のパーティションテーブルの変更が完了すると、書き込みプログラムは次のように実行されます。
ここに画像の説明を挿入


ここに画像の説明を挿入
それでも変更し、ボタン操作を追加し、WiFi構成情報を削除し、ネットワーク構成のBlueIFメソッドを十分に体験します。ボタン操作のコードは、WiFi構成を削除する上記の構成ネットワークと同じです。変更するもう1つの場所です。つまり、Bluetooth方式を使用します。、Bluetoothには名前を付ける必要があり、次のようにblufi_init.c変更します。
ここに画像の説明を挿入

次に、再起動してプロセス全体を開始します。システムをリセットして再起動すると、次のようにこの位置で停止します。
ここに画像の説明を挿入

EspBlufi次に、 APPを介して携帯電話で操作し
ここに画像の説明を挿入ここに画像の説明を挿入
ます。ネットワーク構成を成功させるための最終的なアプリインターフェイスは次のとおりです。
ここに画像の説明を挿入

上記のネットワーク配信プロセスでは、下の図に示すように、各ステップの対応する効果がシリアルポートを介してデバイス側でも観察できます。
ここに画像の説明を挿入
これまでに、BlueIFネットワーク配信方法を正常に完了しました。ここでは、主にメソッドの使用方法を学びます。原則に従わない場合は、後で学習する必要があるときに追加します。問題が発生した場合は、公式ドキュメントを確認することを忘れないでください。

おすすめ

転載: blog.csdn.net/weixin_42328389/article/details/122894350