ESP32例程实验之配网

1 实验简介

参考博文 《图文手把手教程–ESP32 一键配网(Smartconfig、Airkiss)

本章内容介绍给esp32配网的几种方式:

  1. 固定ssid与password配网
    即将ssid和password写入菜单配置或直接写入代码中;
  2. SoftAP配网
    ESP32 会建立一个 WiFi 热点(AP模式),用户将手机连接到这个热点后,将要连接的 WiFi 信息发送给 ESP32,ESP32得到ssid和password。
    优点:这种方式很可靠,成功率基本达到100%,设备端的代码也简单。
    缺点:需要手动切换手机wifi连接的网络,先连接到ESP32的AP网络,配置完成后再恢复连接正常wifi网络,操作上有一定的复杂性,会给用户带来一定的困扰。
    官方支持:没有提供Demo。
  3. Smartconfig配网
    ESP32处于混杂模式下,监听网络中的所有报文,手机APP将当前连接的ssid和password编码到UDP报文中,通过广播或者组播的方式发送报文,ESP32接收到UDP报文后解码,得到ssid和password,然后使用该组ssid和password去连接网络。
    优缺点:这种方式简洁,用户也很容易操作,但是配网成功率受环境影响较大。
    官方支持:有提供Demo,smart_config例程。
  4. Airkiss配网
    AirKiss是微信硬件平台提供的一种WIFI设备快速入网配置技术,要使用微信客户端的方式配置设备入网,需要设备支持AirKiss技术。Aiskiss的原理和smartconfig很类似,设备工作在混杂模式下,微信客户端发送包含ssid和password的广播包,设备收到广播包解码得到ssid和password,详细的可以参考微信官方的介绍。
    优缺点:这种方式简洁,用户也很容易操作,但是配网成功率受环境影响较大。
    官方支持:有提供Demo,smart_config例程。

1.1 固定ssid与password配网

  1. 参考工程 Espressif\frameworks\esp-idf-v5.2.1\examples\wifi\getting_started\station
  2. 使用命令 idf.py menuconfig 打开菜单配置并输入ssid、password。
    在这里插入图片描述
  3. 保存退出,执行命令 idf.py -p COM11 flash monitor ,COM11根据自己实际串口决定
    在这里插入图片描述
  4. 在程序中配置WiFi账号、密码
    station_example_main.c 文件配置wifi热点账号、wifi热点密码
    #define EXAMPLE_ESP_WIFI_SSID      "TP-LINK-4067"       /*wifi账号*/
    #define EXAMPLE_ESP_WIFI_PASS      "weijing418"         /*wifi密码*/
    #define EXAMPLE_ESP_MAXIMUM_RETRY  5                    /*wifi重连最大次数*/
    
    重新编译并烧录程序,效果与在配置菜单中配置一样。

1.2 Smartconfig配网

  1. 参考工程 Espressif\frameworks\esp-idf-v5.2.1\examples\wifi\smart_config
  2. 下载配网APP
    在这里插入图片描述
  3. 执行命令 idf.py -p COM11 flash monitor ,COM11根据自己实际串口决定
    在这里插入图片描述
  4. 打开手机APP EspTouch , 输入账号和密码,最后确认
    在这里插入图片描述
  5. 连接成功
    在这里插入图片描述
    在这里插入图片描述

1.2 使用 Airkiss 配网

  1. 参考工程 Espressif\frameworks\esp-idf-v5.2.1\examples\wifi\smart_config

  2. 修改配网方式,并执行命令 idf.py -p COM11 flash monitor ,COM11根据自己实际串口决定

    static void smartconfig_example_task(void * parm)
    {
    	...
        ESP_ERROR_CHECK( esp_smartconfig_set_type(SC_TYPE_AIRKISS) );
    	...
    }
    

    配网方式还可以修改为如下

    typedef enum {
        SC_TYPE_ESPTOUCH = 0,       /**< protocol: ESPTouch */
        SC_TYPE_AIRKISS,            /**< protocol: AirKiss */
        SC_TYPE_ESPTOUCH_AIRKISS,   /**< protocol: ESPTouch and AirKiss */
        SC_TYPE_ESPTOUCH_V2,        /**< protocol: ESPTouch v2*/
    } smartconfig_type_t;
    

    在这里插入图片描述

  3. 在微信公众号 乐鑫信号科技 操作Airkiss
    在这里插入图片描述
    在这里插入图片描述

  4. 连接成功
    在这里插入图片描述
    在这里插入图片描述

2 程序优化

例程中的Smart_config 配网,每次复位ESP32后,又得重新配网,不符合实际的应用,这里对代码进行修改,使配网的信息(帐号和密码)被保存在 NVS 中,每次配网之前读取NVS中的信息,如果未配网过,则进行配网操作,如果已经配网过,则直接连接路由器。

2.1 复位后,如果之前有配网,则直接连接路由器,否则执行配网程序

  1. 在执行 esp_wifi_set_config(WIFI_IF_STA, &wifi_config) 函数之后,之前配网的账号和密码会保存到 NVS 中
  2. 修改程序如下
static void smartconfig_example_task(void * parm)
{
    EventBits_t uxBits;
    wifi_config_t my_wifi_config;

    // 获取wifi配置信息,如果配置过,就直接连接wifi
    esp_wifi_get_config(ESP_IF_WIFI_STA, &my_wifi_config);
    if (strlen((char*)my_wifi_config.sta.ssid) > 0)
    {
        ESP_LOGI(TAG, "alrealy set, ssid is :%s,password is :%s,start connect", my_wifi_config.sta.ssid,my_wifi_config.sta.password);
        esp_wifi_connect();
    }
    else // 如果没有配置过,就进行配网操作
    {
        ESP_LOGI(TAG, "have no set, start to config");
        ESP_ERROR_CHECK( esp_smartconfig_set_type(SC_TYPE_ESPTOUCH_AIRKISS) );//支持APP ESPTOUCH和微信AIRKISS
        smartconfig_start_config_t cfg = SMARTCONFIG_START_CONFIG_DEFAULT();
        ESP_ERROR_CHECK( esp_smartconfig_start(&cfg) );
    }
    ...
}

执行命令 idf.py -p COM11 flash monitor ,COM11根据自己实际串口决定
在这里插入图片描述

2.2 重新配网,删除原来配网保存的信息

2.2.1 擦除整个flash(仅用于调试时)

  1. 执行 esptool.py erase_flash 擦除整个flash,再次烧录程序就会重新开始手动配网

2.2.2 执行esp_wifi_restore()函数

  1. 通过触发按键,例如长按10秒来调用esp_wifi_restore()函数,重置配网信息,具体做法这里就不说了,网上找一个现成的按键驱动来关联实现即可。
  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用ESP32的WiFi库连接WiFi热点,然后使用声音传感器模块来检测声音强度。以下是一些基本的步骤: 1. 连接ESP32到WiFi热点: ```c #include <WiFi.h> const char* ssid = "YOUR_SSID"; const char* password = "YOUR_PASSWORD"; void setup() { Serial.begin(115200); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } Serial.println("Connected to WiFi"); } void loop() { // Your code here } ``` 2. 连接声音传感器模块: 连接模块的引脚到ESP32的对应引脚,例如: - VCC -> 3.3V - GND -> GND - Analog Out -> A0 3. 读取声音传感器模块输出的模拟信号: ```c int sensorPin = 34; // A0 void setup() { Serial.begin(115200); } void loop() { int sensorValue = analogRead(sensorPin); Serial.println(sensorValue); delay(100); } ``` 这个程序会每100毫秒读取一次声音传感器的值,并在串口输出。 4. 控制声音传感器: 你可以根据声音传感器的值来控制一些操作,例如控制一个蜂鸣器的开关: ```c int sensorPin = 34; // A0 int buzzerPin = 25; void setup() { Serial.begin(115200); pinMode(buzzerPin, OUTPUT); } void loop() { int sensorValue = analogRead(sensorPin); if (sensorValue > 500) { // 如果声音传感器的值大于500 digitalWrite(buzzerPin, HIGH); // 打开蜂鸣器 } else { digitalWrite(buzzerPin, LOW); // 关闭蜂鸣器 } delay(100); } ``` 这个程序会每100毫秒读取一次声音传感器的值,如果传感器的值大于500,就会打开蜂鸣器。否则,蜂鸣器会关闭。 希望这些代码能够帮助你连接WiFi热点并控制声音传感器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值