STM32+ESP8266+MQTT微信小程序SoftAP一键配网接入腾讯物联网平台
STM32+ESP8266+MQTT微信小程序SoftAP一键配网接入腾讯物联网平台
Wi-Fi 配网,指由外部向 Wi-Fi 设备提供 SSID 和密码(PSW),让 Wi-Fi 设备可以连接指定的热点或路由器,并加入后者所建立的 Wi-Fi 网络。
对于具备丰富人机界面包括屏幕/键盘的设备,例如电脑或手机,可以直接输入 SSID/PSW 进行连接。
对于不具备丰富人机交互界面的物联网 Wi-Fi 设备,例如智能灯、扫地机器人等,则可以借助手机等智能设备,以某种配网方式将 SSID/PSW 传递该设备。
SoftAP模式配网
原理介绍请参考腾讯云物联网开发文档SoftAP配网开发
腾讯云平台接入参考:ESP8266接入腾讯云
ESP8266_UDP通信配置UDP传输示例
腾讯云物联网平台网页端配置
1.登录腾讯云平台,进入交互开发,选择配网引导。
2.选择配网方式为AirKiss协议配网。点保存后即可生成二维码。
3.使用微信扫一扫二维码,或者通过微信小程序腾讯连连扫一扫二维码,进行配网。
4.开始配网,配置热点信息。
5.开始配网,等待配网完成。
6. 配网调试信息
7. 查看设备是否上线
程序设计
2.SoftAP配网函数
/*SoftAP配网*/u8 ESP8266_SoftAP_MOde(void){ u8 token[]="{\"cmdType\":2,\"productId\":\"LA57WTHWi2\",\"deviceName\":\"Smart_123\",\"protoVersion\":\"2.0\"}\r\n";//连接状态信息 char *p=NULL; char data[256]; char buff[100]; u8 i=0; u32 time1=0,time2=0; usart3_cnt=0; usart3_flag=0; while(1) { if(usart3_flag) { usart3_rx_buff[usart3_cnt]='\0'; printf("rx=%s",usart3_rx_buff); //+IPD,97,192.168.4.2,52021:{"cmdType":1,"ssid":"wbyq_wifi","password":"12345678","token":"df4a4c90abee98c9a443ae8ffd8cc16b" p=strstr((char *)usart3_rx_buff,"+IPD"); if(p) { strcpy(data,p);//将接收到的数据拷贝一份保存 p+=strlen("+IPD"); p+=1; while(*p!=',' && *p!='\0')p++; p++;//跳过字符',',获取到IP地址起始位置 i=0; //IP地址解析 while(*p!=',' && *p!='\0') { buff[i++]=*p++; } buff[i]='\0'; strcpy((char *)esp8266_info.esp8266_ip,buff); //端口号解析 p++; i=0; while(*p!=':' && *p!='\0') { buff[i++]=*p++; } buff[i]='\0'; esp8266_info.esp8266_prot=atoi(buff);//字符串转整数 //printf("ip=%s:%d\r\n",esp8266_info.esp8266_ip,esp8266_info.esp8266_prot); printf("ret:%d\r\n",Esp8266_UDP_SendData((u8*)esp8266_info.esp8266_ip,esp8266_info.esp8266_prot,token));//上报连接状态 } ESP8266_GetData(data,(char *)esp8266_info.esp8266_name,"ssid");//WIFI名 ESP8266_GetData(data,(char *)esp8266_info.esp8266_key,"password");//密码 ESP8266_GetData(data,(char *)esp8266_info.token,"token");//token数据,需要返回给平台// printf("wifi_name:%s\r\n",esp8266_info.esp8266_name);// printf("wifi_key:%s\r\n",esp8266_info.esp8266_key); // printf("wifi_token:%s\r\n",esp8266_info.token); LED1=1; return 0; } Delay_Ms(1); time1++; time2++; if(time2>=100) { time2=0; LED1=!LED1; } if(time1>=1000*300) { LED1=1; break;//超时退出 } } return 1;}
3.微信小程序配网数据订阅与发布
//微信小程序配网数据订阅与发布#define SET_WEIXIN_TOPIC "$thing/down/service/LA54WTHWL3/Smart_123"//订阅#define POST_WEIXIN_TOPIC "$thing/up/service/LA54WTHWL36/Smart_123"//发布
4.主函数
int main(){ int i=0,key;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辅助串口接收数据,20msTIMx_Init(TIM4,72,20000);//通过定时器2辅助串口接收数据,20msDS18B20_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 || stat==0x80)break;printf("stat=%d\r\n",stat); }printf("服务器连接成功\r\n");while(1){MQTT_Init();if(MQTT_Connect(ClientID,Username,Password)==0)break;Delay_Ms(500);printf("正在连接....\r\n");}printf("连接成功\r\n"); if(stat==0x80)//进入配网模式需要给微信小程序返回token值 { //订阅微信topic if(MQTT_SubscribeTopic(SET_WEIXIN_TOPIC,0,1))printf("订阅失败\r\n"); //返回平台数据,告知微信连连连接服务器成功 snprintf(mqtt_message,sizeof(mqtt_message),"{\"method\":\"app_bind_token\",\"clientToken\":\"client-1234\",\"params\": {\"token\":\"%s\"}}",esp8266_info.token); MQTT_PublishData(POST_WEIXIN_TOPIC,mqtt_message,0); //Smart_home{"method":"app_bind_token_reply","clientToken":"client-1234","code":0,"status":"success"} 配网成功后微信小程序返回数据 } //订阅物联网平台数据 stat=MQTT_SubscribeTopic(SET_TOPIC,0,1); if(stat)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>=2000){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);}}}
示例工程:https://download.csdn.net/download/weixin_44453694/18845106