1.WIFI智能配網(wǎng)簡(jiǎn)介
Wi-Fi 配網(wǎng),指由外部向 Wi-Fi 設(shè)備提供 SSID 和密碼(PSW),讓 Wi-Fi 設(shè)備可以連接指定的熱點(diǎn)或路由器,并加入后者所建立的 Wi-Fi 網(wǎng)絡(luò)。
對(duì)于具備豐富人機(jī)界面包括屏幕/鍵盤的設(shè)備,例如電腦或手機(jī),可以直接輸入 SSID/PSW 進(jìn)行連接。
對(duì)于不具備豐富人機(jī)交互界面的物聯(lián)網(wǎng) Wi-Fi 設(shè)備,例如智能燈、掃地機(jī)器人等,則可以借助手機(jī)等智能設(shè)備,以某種配網(wǎng)方式將 SSID/PSW 傳遞該設(shè)備。
配網(wǎng)有多種方式,包括 SmartConfig、softAP、Airkiss 等,各自的特點(diǎn)比較如下:
配網(wǎng)方式 | 特點(diǎn) |
---|---|
WPS | 存在安全性問(wèn)題 |
SmartConfig | 較便捷,但一般為各廠商采用私有協(xié)議,兼容性和互操作性較差 |
softAP | 適配性兼容性較好,但手機(jī)端需要做兩次 Wi-Fi 連接設(shè)置的切換,步驟較復(fù)雜 |
Airkiss | 操作便捷無(wú)需熱點(diǎn)配置,但為微信客戶端私有協(xié)議,需設(shè)備端適配兼容 |
ble combo | 操作便捷,但需要設(shè)備端支持 Wi-Fi+BLE 的 Combo 芯片方案 |
下面我們將以SmartConfig配網(wǎng)模式為例實(shí)戰(zhàn)應(yīng)用。相關(guān)操作步驟可參考騰訊云平臺(tái)SmartConfig 配網(wǎng)開(kāi)發(fā)文檔
SmartConfig 配網(wǎng)開(kāi)發(fā)文檔:https://cloud.tencent.com/document/product/1081/48405
SmartConfig智能配網(wǎng)主要便于物聯(lián)網(wǎng)設(shè)備接入云平臺(tái),只需相應(yīng)app或者相關(guān)微信小程序(例騰訊連連)即可讓設(shè)備快速入圍,接入服務(wù)器。下面以微信小程序騰訊連連、云平臺(tái)為騰訊云服務(wù)器,接入?yún)f(xié)議為MQTT3.1為例說(shuō)明。
2.配網(wǎng)流程
1.在騰訊云平臺(tái)選擇智能配網(wǎng)模式。
2.通過(guò)騰訊連連小程序進(jìn)入配網(wǎng)模式,則可以在物聯(lián)網(wǎng)開(kāi)發(fā)平臺(tái)服務(wù)獲取到當(dāng)次配網(wǎng)的 Token值;
3.配網(wǎng)調(diào)試信息
4.微信小程序騰訊連連查看設(shè)備信息
3.軟件設(shè)計(jì)
3.1 設(shè)置WIFI工作模式為:STA+TCPClinet,獲取wifi連接狀態(tài),連接失敗則進(jìn)入配網(wǎng)模式,最終實(shí)現(xiàn)騰訊云平臺(tái)連接
/****************STA+TCPclinet初始化*************/
u8 Esp8266_STA_TCPclinet_Init(u8 *wifi_name,u8 *wifi_key,u8 *server_ip,u16 server_port)
{
char buff[100];
/*退出透?jìng)髂J?/
u16 i=0;
u8 stat=0;
for(i=0;i<5;i++)
{
Usartx_SendString(USART3,(u8 *)"+++");//退出透?jìng)髂J? Delay_Ms(500);
if(Esp8266_SendCmdCheckStat("ATrn","OKrn")==0)
{
i=0;
break;
}
}
if(i!=0)
{
printf("1.退出透?jìng)髂J绞n");
return 0x7f;
}
printf("2.模塊復(fù)位rn");
if(Esp8266_SendCmdCheckStat("AT+RSTrn","OKrn"))return 1;
Delay_Ms(1000);
Delay_Ms(1000);
printf("3.關(guān)回顯rn");
if(Esp8266_SendCmdCheckStat("ATE0rn","OKrn"))return 2;
printf("4.設(shè)置模式STArn");
if(Esp8266_SendCmdCheckStat("AT+CWMODE=1rn","OK"))return 4;
if(ESP8266_GetWifi_Stat())//查詢WIFI連接狀態(tài),未連接成功則進(jìn)入配網(wǎng)模式
{
BEEP=1;
Delay_Ms(100);
BEEP=0;
Delay_Ms(100);
BEEP=1;
Delay_Ms(100);
BEEP=0;
stat=1;//進(jìn)入配網(wǎng)模式標(biāo)志位
if(ESP8266_SetSmartMode())return 4;//配網(wǎng)失敗
}
printf("5.設(shè)置單連接rn");
if(Esp8266_SendCmdCheckStat("AT+CIPMUX=0rn","OK"))return 5;
snprintf(buff,sizeof(buff),"AT+CIPSTART="TCP","%s",%drn",server_ip,server_port);
// printf("buff:%srn",buff);
printf("6.連接服務(wù)器rn");
if(Esp8266_SendCmdCheckStat(buff,"OK"))return 6;
printf("7.配置透?jìng)髂J絩n");
if(Esp8266_SendCmdCheckStat("AT+CIPMODE=1rn","OKrn"))return 7;
printf("8.開(kāi)始發(fā)送數(shù)據(jù)rn");
if(Esp8266_SendCmdCheckStat("AT+CIPSENDrn",">"))return 8;
if(stat)return 0x80;//進(jìn)入配網(wǎng)模式并且正常退出
else return 0;//未進(jìn)入配網(wǎng)模式,正常退出
}
3.2 smartconfig配網(wǎng)函數(shù)
本函數(shù)主要共能為配置WIFI 模式為Smart配網(wǎng)模式,連接WIFI熱點(diǎn),獲取token信息上報(bào)到服務(wù)器。
/*開(kāi)啟Smart模式*/
u8 ESP8266_SetSmartMode(void)
{
char buff[200];
printf("1.進(jìn)入smart配網(wǎng)模式rn");
u32 time1=0,time2=0;
if(Esp8266_SendCmdCheckStat("AT+CWSTARTSMARTrn","OK"))return 0x81;//開(kāi)啟Smart失敗
usart3_cnt=0;
usart3_flag=0;
while(1)
{
if(usart3_flag)
{
usart3_rx_buff[usart3_cnt]='?';
printf("rx:%srn",usart3_rx_buff);
if(strstr((char *)usart3_rx_buff,"smartconfig connected wifi"))//連接熱點(diǎn)成功
{
usart3_cnt=0;
usart3_flag=0;
printf("2.關(guān)Smart模式rn");
if(Esp8266_SendCmdCheckStat("AT+CWSTOPSMARTrn","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)//配網(wǎng)模式100ms閃爍一次
{
time2=0;
LED1=!LED1;
}
if(time1>=1000*300)return 0x83;//超時(shí)退出
}
printf("3.顯示端口rn");
if(Esp8266_SendCmdCheckStat("AT+CIPDINFO=1rn","OK"))return 0x84;
printf("4.查詢IPrn");
if(ESP8266_GetIP())return 0x85;
printf("5.設(shè)置要連接的UDPrn");
snprintf(buff,sizeof(buff),"AT+CIPSTART="UDP","%s",8266,8266,0rn",esp8266_info.esp8266_ip);
if(Esp8266_SendCmdCheckStat(buff,"OKrn"))return 0x86;
printf("6.網(wǎng)絡(luò)數(shù)據(jù)解析rn");
if(ESP8266_NetworkConfig())return 7;
printf("7.模塊復(fù)位rn");
if(Esp8266_SendCmdCheckStat("AT+RSTrn","OKrn"))return 0x87;
Delay_Ms(1000);
Delay_Ms(1000);
return 0;
}
3.3.微信小程序配網(wǎng)數(shù)據(jù)訂閱與發(fā)布
通過(guò)訂閱微信小程序信息,獲取token值,將獲取到的信息上報(bào)到微信小程序,從而實(shí)現(xiàn)設(shè)備配網(wǎng)。
//微信小程序配網(wǎng)數(shù)據(jù)訂閱與發(fā)布
#define SET_WEIXIN_TOPIC "$thing/down/service/LA54WTHWL3/Smart_123"http://訂閱
#define POST_WEIXIN_TOPIC "$thing/up/service/LA54WTHWL36/Smart_123"http://發(fā)布
3.4 主函數(shù)
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);//通過(guò)定時(shí)器2輔助串口接收數(shù)據(jù),20ms
TIMx_Init(TIM4,72,20000);//通過(guò)定時(shí)器2輔助串口接收數(shù)據(jù),20ms
DS18B20_Init();
// RTC_Init();//RTC初始化
printf("初始化完成rn");
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=%drn",stat);
}
printf("服務(wù)器連接成功rn");
while(1)
{
MQTT_Init();
if(MQTT_Connect(ClientID,Username,Password)==0)break;
Delay_Ms(500);
printf("正在連接....rn");
}
printf("連接成功rn");
if(stat==0x80)//進(jìn)入配網(wǎng)模式需要給微信小程序返回token值
{
//訂閱微信topic
if(MQTT_SubscribeTopic(SET_WEIXIN_TOPIC,0,1))printf("訂閱失敗rn");
//返回平臺(tái)數(shù)據(jù),告知微信連連連接服務(wù)器成功
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"} 配網(wǎng)成功后微信小程序返回?cái)?shù)據(jù)
}
//訂閱物聯(lián)網(wǎng)平臺(tái)數(shù)據(jù)
stat=MQTT_SubscribeTopic(SET_TOPIC,0,1);
if(stat)printf("訂閱失敗rn");
while(1)
{
if(usart3_flag)
{
for(i=0;i=5000)
{
time=0;
MQTT_SentHeart();//發(fā)送心跳包
}
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);
}
}
}
;i++)>
審核編輯:湯梓紅
-
服務(wù)器
+關(guān)注
關(guān)注
12文章
8975瀏覽量
85098 -
wi-fi
+關(guān)注
關(guān)注
14文章
2098瀏覽量
124247 -
智能配電
+關(guān)注
關(guān)注
0文章
93瀏覽量
9932
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論