首页 > 其他分享 >ESP8266 SmartConfig一键配网

ESP8266 SmartConfig一键配网

时间:2022-12-03 12:02:23浏览次数:49  
标签:stat ESP8266 配网 printf Fi SmartConfig usart3 buff

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 SmartConfig一键配网_ESP8266

3.ESP8266 SmartConfig模式配置

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

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

ESP8266 SmartConfig一键配网_智能配网_02

ESP8266 SmartConfig一键配网_智能配网_03

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 SmartConfig一键配网_物联网_04

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

ESP8266 SmartConfig一键配网_物联网_05

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

ESP8266 SmartConfig一键配网_Smart Config_06

标签:stat,ESP8266,配网,printf,Fi,SmartConfig,usart3,buff
From: https://blog.51cto.com/u_15688123/5904889

相关文章

  • ESP8266开发之arduino环境搭建
    ESP8266开发之arduino环境搭建1.Arduino简介    Arduino是一款便捷灵活、方便上手的开源电子原型平台。包含硬件(各种型号的Arduino板)和软件(ArduinoIDE)。由一个欧洲......
  • 首发:徐亦达团队新论文推荐(ECCV2020):端到端多人多视角3d动态匹配网络
    徐亦达团队在ECCV2020上发表了一篇机器学习论文End-to-endDynamicMatchingNetworkforMulti-viewMulti-person3dPoseEstimation(端到端多人多视角3d动态匹配网络)论文......
  • MAIXIII(爱芯派)的一种配网并安装nmtui的实现方法
    关于一种MAIXIII(爱芯派)的一种配网并安装nmtui的实现方法特别感谢sipped的大佬鼠以及多位群友这几天提供的帮助与支持!0.目录一,MAIXIII简介二,到手图展示三,具体操作......
  • ESP8266--SDK开发(驱动WS2812B)
    文章目录​​一、WS2812彩灯介绍​​​​二、效果展示​​​​三、七色灯代码​​​​附:彩虹七色码值​​一、WS2812彩灯介绍WS2812是一个集控制电路与发光电路于一体的智能......
  • 门控自匹配网络
    https://aclanthology.org/P17-1018/Introduction在BiDAF模型问世后,机器阅读理解模型的研究主要是在交互层,特别是上下文编码和注意力机制的创新。R-net就是典型的代表,R-n......
  • esp8266闪存文件系统<FS.h>
        1.存储的文件是编译后的;用闪存文件系统时要申请空间   2.SPIFFS.begin();启用闪存文件系统;3. SPIFFS.format();格式化SPIFFS.open(file_name......
  • ESP8266+ST7789(240*240)TFT显示屏
    ESP8266+ST7789(240*240)TFT显示屏运行环境:❤操作系统:windows10x64❤IDE:Arduino1.8.15❤运行库1:TFT_eSPI❤运行库2:ESP8266❤开发板硬件:ESP8266-CH340,S......
  • 用esp8266向外界发送网络信号
    #include<ESP8266WiFi.h>constchar*ssid="fengzhihean";constchar*password="12345678";voidsetup(){Serial.begin(115200);WiFi.softAP(ssid,password);......
  • ESP8266 WIFI 模块
    发送“AT”(AT指令集后要换行),AT+RST复位一下模块配置ESP8266的工作模式为sta,输入AT+CWMODE=1AT+CWLAP扫描附近的无线AT+CWJAP="CIMS-GUEST","a1b2c3d4e5f6"AT+CWQAP......
  • ESP8266基于Arduino的环境配置
    ESP8266基于Arduino的环境配置运行环境:❤操作系统:windows10x64❤Arduino版本:Arduino1.8.15❤开发板:ESP8266(基于CH340)一、安装CH340驱动链接:https://pan.baid......