第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > STM32+ESP8266+MQTT微信小程序Smartconfig一键配网接入腾讯物联网平台

STM32+ESP8266+MQTT微信小程序Smartconfig一键配网接入腾讯物联网平台

时间:2019-07-01 14:07:17

相关推荐

STM32+ESP8266+MQTT微信小程序Smartconfig一键配网接入腾讯物联网平台

STM32+ESP8266+MQTT微信小程序Smartconfig一键配网接入腾讯物联网平台

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

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

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

Smartconfig 模式AirKiss协议配网

原理介绍请参考腾讯云物联网开发文档AirKiss配网开发

腾讯云平台接入参考:ESP8266接入腾讯云

Smartconfig模式配置参考:Smartconfig配置

腾讯云物联网平台网页端配置

1.登录腾讯云平台,进入交互开发,选择配网引导。

2.选择配网方式为AirKiss协议配网。点保存后即可生成二维码。

3.使用微信扫一扫二维码,或者通过微信小程序腾讯连连扫一扫二维码,进行配网。

4.开始配网,等待配网完成。

配网调试信息

5.微信小程序腾讯连连查看设备信息

程序设计

1.设置WIFI工作模式为:STA+TCPClinet

/****************STA+TCPclinet初始化*************/u8 Esp8266_STA_TCPclinet_Init(u8 *wifi_name,u8 *wifi_key,u8 *server_ip,u16 server_port){char buff[100];/*退出透传模式*/u16 i=0;u8 stat=0;for(i=0;i<5;i++){Usartx_SendString(USART3,(u8 *)"+++");//退出透传模式Delay_Ms(500);if(Esp8266_SendCmdCheckStat("AT\r\n","OK\r\n")==0){i=0;break;}}if(i!=0){printf("1.退出透传模式失败\r\n");return 0x7f;}printf("2.模块复位\r\n");if(Esp8266_SendCmdCheckStat("AT+RST\r\n","OK\r\n"))return 1;Delay_Ms(1000);Delay_Ms(1000);printf("3.关回显\r\n");if(Esp8266_SendCmdCheckStat("ATE0\r\n","OK\r\n"))return 2; printf("4.设置模式STA\r\n");if(Esp8266_SendCmdCheckStat("AT+CWMODE=1\r\n","OK"))return 4;if(ESP8266_GetWifi_Stat())//查询WIFI连接状态,未连接成功则进入配网模式{BEEP=1;Delay_Ms(100);BEEP=0;Delay_Ms(100);BEEP=1;Delay_Ms(100);BEEP=0;stat=1;//进入配网模式标志位 if(ESP8266_SetSmartMode())return 4;//配网失败 }printf("5.设置单连接\r\n");if(Esp8266_SendCmdCheckStat("AT+CIPMUX=0\r\n","OK"))return 5;snprintf(buff,sizeof(buff),"AT+CIPSTART=\"TCP\",\"%s\",%d\r\n",server_ip,server_port);//printf("buff:%s\r\n",buff);printf("6.连接服务器\r\n");if(Esp8266_SendCmdCheckStat(buff,"OK"))return 6; printf("7.配置透传模式\r\n");if(Esp8266_SendCmdCheckStat("AT+CIPMODE=1\r\n","OK\r\n"))return 7;printf("8.开始发送数据\r\n");if(Esp8266_SendCmdCheckStat("AT+CIPSEND\r\n",">"))return 8;if(stat)return 0x80;//进入配网模式并且正常退出else return 0;//未进入配网模式,正常退出}

2.smartconfig配网函数

/*开启Smart模式*/u8 ESP8266_SetSmartMode(void){char buff[200];printf("1.进入smart配网模式\r\n");u32 time1=0,time2=0;if(Esp8266_SendCmdCheckStat("AT+CWSTARTSMART\r\n","OK"))return 0x81;//开启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 0x82; 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)//配网模式100ms闪烁一次{time2=0;LED1=!LED1;}if(time1>=1000*300)return 0x83;//超时退出}printf("3.显示端口\r\n");if(Esp8266_SendCmdCheckStat("AT+CIPDINFO=1\r\n","OK"))return 0x84;printf("4.查询IP\r\n");if(ESP8266_GetIP())return 0x85; printf("5.设置要连接的UDP\r\n"); snprintf(buff,sizeof(buff),"AT+CIPSTART=\"UDP\",\"%s\",8266,8266,0\r\n",esp8266_info.esp8266_ip);if(Esp8266_SendCmdCheckStat(buff,"OK\r\n"))return 0x86; printf("6.网络数据解析\r\n");if(ESP8266_NetworkConfig())return 7; printf("7.模块复位\r\n");if(Esp8266_SendCmdCheckStat("AT+RST\r\n","OK\r\n"))return 0x87;Delay_Ms(1000);Delay_Ms(1000); return 0;}

3.微信小程序配网数据订阅与发布

//微信小程序配网数据订阅与发布#define SET_WEIXIN_TOPIC "$thing/down/service/LA54WTHWL3/Smart_123"//订阅#define POST_WEIXIN_TOPIC "$thing/up/service/LA54WTHWL36/Smart_123"//发布

微信小程序topic订阅与发布参考腾讯云物联网平台资料

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值{//订阅微信topicif(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);}}}

示例工程:/download/weixin_44453694/18845106

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。