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 方式配网及设备绑定的示例流程图如下:
3.ESP8266 SmartConfig模式配置
ESP8266指令集中就有SmartConfig模式配置,该模式仅支持在 ESP8266 单 station 模式下调用。
AT+CWSTARTSMART – 开启 SmartConfig
//⽆无论 SmartConfig 成功与否,都请调⽤用 “AT+CWSTOPSMART”释放快连占⽤的内存
AT+CWSTOPSMART – 停⽌止 SmartConfig
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响应。
串口终端调试信息:WIFI模式配置、进入smartConfig模式获取WIFI热点信息,连接物联网平台。
物联网平台连接成功,微信小程序端查看云端推送的温度数据和光照强度,可通过开关远程控制目标设备。
标签:stat,ESP8266,配网,printf,Fi,SmartConfig,usart3,buff From: https://blog.51cto.com/u_15688123/5904889