ESP8266 SmartConfig一键配网

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ESP8266 SmartConfig一键配网相关的知识,希望对你有一定的参考价值。

ESP8266 SmartConfig一键配网

    Wi-Fi 配网,指由外部向 Wi-Fi 设备提供 SSID 和密码(PSW),让 Wi-Fi 设备可以连接指定的热点或路由器,并加入后者所建立的 Wi-Fi 网络。

      对于具备丰富人机界面包括屏幕/键盘的设备,例如电脑或手机,可以直接输入 SSID/PSW 进行连接。

      对于不具备丰富人机交互界面的物联网 Wi-Fi 设备,例如智能灯、扫地机器人等,则可以借助手机等智能设备,以某种配网方式将 SSID/PSW 传递该设备。

      ESP8266支持安卓、ios 的 Smart Config(APP)/AirKiss(微信)一键配网。

1.基本原理

   1.设备进入 Wi-Fi 混杂模式(promiscuous mode)以监听捕获周围的 Wi-Fi 报文。由于设备暂未联网,且 Wi-Fi 网络的数据帧已通过加密,设备无法获取 payload 的内容,但可以获取报文的某些特征数据,例如每个报文的长度。同时对于某些数据帧,例如 UDP 的广播包或多播包,其报文的帧头结构比较固定,较容易识别。

      2.此时在手机 App 或者小程序侧,即可通过发送 UDP 的广播包多播包,并利用报文的特征,例如长度变化进行编码。

     3.将目标 Wi-Fi 路由器的 SSID/PSW 字符以约定的编码方式发送出去,设备端在捕获到 UDP 报文后,按约定的方式进行解码,即可得到目标 Wi-Fi 路由器的相关信息并进行联网。

2.配网流程

      SmartConfig 方式配网,每个厂商的编码方式和报文选择上有自己的协议,对于 ESP8266,采用的协议是乐鑫 ESP-TOUCH协议。

  • 基于该协议,设备端在连接 Wi-Fi 路由器成功后,将会告知手机端自己的 IP 地址。
  • 此时手机端可以通过数据通道,例如 TCP/UDP 通讯将后台提供的配网 Token 发送给设备,并由设备转发至物联网后台,依据 Token 进行设备绑定。

     目前腾讯连连小程序已支持采用 ESP-TOUCH 协议进行 SmartConfig 配网,并提供相应的 小程序 SDK。

     SmartConfig 方式配网及设备绑定的示例流程图如下:

ESP8266

3.ESP8266 SmartConfig模式配置

  ESP8266指令集中就有SmartConfig模式配置,该模式仅支持在 ESP8266 单 station 模式下调用。

AT+CWSTARTSMART  开启 SmartConfig
//⽆无论 SmartConfig 成功与否,都请调⽤用 “AT+CWSTOPSMART”释放快连占⽤的内存
AT+CWSTOPSMART 停⽌止 SmartConfig

ESP8266

ESP8266

topic: $thing/up/service/ProductID/DeviceName
payload: "method":"app_bind_token","clientToken":"client-1234","params": "token":"6xx82618a9d529a2ee777****528a0fd"

3.1 程序示例

/*开启Smart模式*/
u8 ESP8266_SetSmartMode(u8 *server_ip,u16 server_port)

char buff[200];
printf("进入smart配网模式\\r\\n");
u16 time1=0,time2=0;;
if(Esp8266_SendCmdCheckStat("AT+CWSTARTSMART\\r\\n","OK"))return 1;//开启Smart失败
usart3_cnt=0;
usart3_flag=0;
while(1)

if(usart3_flag)

usart3_rx_buff[usart3_cnt]=\\0;
printf("rx:%s\\r\\n",usart3_rx_buff);
if(strstr((char *)usart3_rx_buff,"smartconfig connected wifi"))//连接热点成功

usart3_cnt=0;
usart3_flag=0;
printf("2.关Smart模式\\r\\n");
if(Esp8266_SendCmdCheckStat("AT+CWSTOPSMART\\r\\n","OK"))return 2;
break;

else

usart3_cnt=0;
usart3_flag=0;
memset(usart3_rx_buff,0,sizeof(usart3_rx_buff));


Delay_Ms(1);
time1++;
time2++;
if(time2>=100)

LED1=!LED1;

if(time1>=65530)return 3;//超时退出

/*连接服务器*/
if(Esp8266_SendCmdCheckStat("AT+CIPMUX=0\\r\\n","OK"))return 4;;
snprintf(buff,sizeof(buff),"AT+CIPSTART=\\"TCP\\",\\"%s\\",%d\\r\\n",server_ip,server_port);
//printf("buff:%s\\r\\n",buff);
printf("9.连接服务器\\r\\n");
if(Esp8266_SendCmdCheckStat(buff,"OK"))return 5;
printf("配置透传模式\\r\\n");
if(Esp8266_SendCmdCheckStat("AT+CIPMODE=1\\r\\n","OK\\r\\n"))return 6;
printf("开始发送数据\\r\\n");
if(Esp8266_SendCmdCheckStat("AT+CIPSEND\\r\\n",">"))return 7;
return 0;

4.功能实现

初始化硬件,ESP8266模式配置,连接物联网平台。

int main()

int i=0;
u8 stat=0;
u32 time=0;
u16 cnt=0;
float temp;
Beep_Init();//蜂鸣器初始化
Led_Init();//LED初始化
Key_Init();//按键初始化
Usartx_Init(USART1,115200,72);
Usartx_Init(USART3,115200,36);
TIMx_Init(TIM2,72,20000);//通过定时器2辅助串口接收数据,20ms
TIMx_Init(TIM4,72,20000);//通过定时器2辅助串口接收数据,20ms
DS18B20_Init();
// RTC_Init();//RTC初始化
printf("初始化完成\\r\\n");
while(1)

stat=Esp8266_STA_TCPclinet_Init((u8 *)WIFI_NAME,(u8 *)WIFI_PASSWORD,(u8 *)SERVER_IP,SERVER_PORT);
if(stat==0)break;
if(stat==6)i++;
if(i>=3)

stat=ESP8266_SetSmartMode((u8 *)SERVER_IP,SERVER_PORT);
if(stat==0)break;

printf("stat=%d\\r\\n",stat);

printf("服务器连接成功\\r\\n");
while(1)

MQTT_Init();
stat=MQTT_Connect(ClientID,Username,Password);
if(stat==0)break;
Delay_Ms(500);
printf("正在连接....\\r\\n");

printf("连接成功\\r\\n");
stat=MQTT_SubscribeTopic(SET_TOPIC,0,1);
if(stat)printf("订阅失败\\r\\n");
else printf("订阅成功\\r\\n");
while(1)

if(usart3_flag)

for(i=0;i<usart3_cnt;i++)

printf("%c",usart3_rx_buff[i]);

printf("\\r\\n");
usart3_cnt=0;
usart3_flag=0;

Delay_Ms(1);
time++;
cnt++;
if(time>=5000)

time=0;
MQTT_SentHeart();//发送心跳包

if(cnt>=5000)

cnt=0;
temp=DS18B20_GetTemp()*0.0625;
sprintf(mqtt_message,"\\"method\\":\\"report\\",\\"clientToken\\":\\"123\\",\\"params\\":\\"LED1\\":1,\\"temp\\":%.2f,\\"L\\":356",temp);//温度
MQTT_PublishData(POST_TOPIC,mqtt_message,0);



  EspTouch工具下载:​ESP-TOUCH​  

      ESP-TOUCH 协议采用的是 Smart Config(智能配置)技术来帮助用户将嵌入了 ESP8266EX 的设备连接至 Wi-Fi 网络。用户只需在手机上进行简单操作即可实现智能配置。

  • 运行效果:

      采用由乐鑫科技提供的​ESP-TOUCH​​应用APP,将WIFI热点信息通过smartConfig模式传输给ESP8266模块。最终实现设备上网,连接物联网平台。

首先需要将自己的手机连接上目标热点,然后打开ESP-TOUCH软件,输入目标热点的密码,然后等待ESP8266响应。

ESP8266

      串口终端调试信息:WIFI模式配置、进入smartConfig模式获取WIFI热点信息,连接物联网平台。

ESP8266

      物联网平台连接成功,微信小程序端查看云端推送的温度数据和光照强度,可通过开关远程控制目标设备。

ESP8266

以上是关于ESP8266 SmartConfig一键配网的主要内容,如果未能解决你的问题,请参考以下文章

ESP8266+微信配网smartconfig,esp32可用

Arduino ESP8266 SmartConfig配网+EEPROM保存+OLED显示

STM32+ESP8ESP8266+SoftAP一键配网接入物联网平台

物联网 WIFI 一键配置原理(smartconfig) ESP8266/QCA4004 参考

Arduino ESP32SmartConfig配网

Arduino ESP32SmartConfig配网+NTP时间获取