?
一、環(huán)境介紹
WIFI: ESP8266
協(xié)議: MQTT
二、前言
這里的 WIFI型號不重要、主控MCU不重要,連接的物聯(lián)網(wǎng)平臺也不重要。
要完成本章節(jié)的內(nèi)容,只要會熟悉某款單片機(jī)的編程、了解基本的網(wǎng)絡(luò)編程,明白MQTT協(xié)議、能讀懂每個物聯(lián)網(wǎng)云平臺的幫助文檔都可以完成最終的效果。


?


?
三、功能介紹
前面有幾篇內(nèi)容都介紹了如何使用在騰訊物聯(lián)網(wǎng)平臺創(chuàng)建設(shè)備,完成微信小程序與設(shè)備進(jìn)行交互;這些設(shè)備代碼里的連接的WIFI名稱和密碼都是固定,只能通過每次修改程序、編譯、下載才能更改。一個正常的物聯(lián)網(wǎng)智能設(shè)備,這樣操作肯定是不合理的,所以這篇內(nèi)容就完成如何使用微信小程序一鍵配網(wǎng),完成設(shè)備的WIFI切換、連接。
現(xiàn)在我們購買的智能設(shè)備都有自己的配網(wǎng)方式,比如: 小米的很多設(shè)備,小愛音箱,攝像頭,掃地機(jī)器人等。這些設(shè)備買回來之后,用戶可以參考說明書,完成對設(shè)備的配置,讓設(shè)備連接上家里的WIFI,完成網(wǎng)絡(luò)連接。
本次我以智能鎖為產(chǎn)品模型,在騰訊物聯(lián)網(wǎng)平臺創(chuàng)建一個設(shè)備,使用STM32F103系統(tǒng)板+ESP8266+LED燈完成智能鎖產(chǎn)品的模擬開發(fā);用戶設(shè)備端可以按下指定的按鍵進(jìn)入配網(wǎng)模式,打開騰訊官方的微信小程序,掃描產(chǎn)品二維碼,根據(jù)步驟完成對設(shè)備的配網(wǎng)操作。
騰訊物聯(lián)網(wǎng)支持了好幾種配網(wǎng)模式,我這里選擇的是“softAP”模式來完成配網(wǎng)操作。
softAP 模式配網(wǎng)的原理介紹: 正常情況下我們買回來的新設(shè)備內(nèi)部是沒有我們自己家WIFI的信息的,也就是說這個設(shè)備上電之后自己不知道該連接哪一個WIFI;這時我們就需要想辦法把我們自己家里的WIFI名稱、WIFI密碼告訴這個設(shè)備,這個設(shè)備就可以去連接了。 那問題是怎么去告訴設(shè)備這些信息? 設(shè)備一般都有進(jìn)入配網(wǎng)模式的按鈕,進(jìn)入配網(wǎng)模式之后,會將設(shè)備內(nèi)部的WIFI設(shè)置成“softAP”模式,也就是設(shè)備自己會創(chuàng)建一個WIFI熱點(diǎn)出來并創(chuàng)建UDP服務(wù)器監(jiān)聽連接,這時我們打開騰訊官方的微信小程序,按照指引去連接這個WIFI,連上之后,微信小程序會通過UDP協(xié)議將WIFI的配置信息傳輸給設(shè)備WIFI,設(shè)備WIFI收到之后,再切換模式為STA模式,去連接目標(biāo)WIFI,連接成功之后,登錄云平臺,綁定設(shè)備,完成配網(wǎng)。 這其中的交互協(xié)議,后面再細(xì)說。
四、在騰訊云平臺上創(chuàng)建智能鎖
本章節(jié)只會展示幾個關(guān)鍵步驟,如果之前沒有使用過騰訊物聯(lián)網(wǎng)云平臺可以參考這里學(xué)習(xí)一遍:STM32+ESP8266+MQTT協(xié)議連接騰訊物聯(lián)網(wǎng)開發(fā)平臺_DS小龍哥的博客-CSDN博客


?
功能很簡單,只有一個屬性,就是鎖的開關(guān)狀態(tài)。


?
這里可以配置微信小程序的詳細(xì)參數(shù),配網(wǎng)的設(shè)置也這個頁面上:


?
下面進(jìn)行配網(wǎng)設(shè)置:


?
選擇配網(wǎng)模式:


?
這個頁面比較重要,需要將設(shè)備進(jìn)入配網(wǎng)的方法告訴用戶,引導(dǎo)用戶去操作,完成進(jìn)入配網(wǎng)模式:


?


?


?
保存之后,打開微信小程序“騰訊連連”,掃描右下角的這個二維碼,進(jìn)行配網(wǎng),完成設(shè)備添加。(一般正常產(chǎn)品,會將這個二維碼打印出來,貼在設(shè)備上,方便用戶掃描)
(提示: 做這一步,要先設(shè)計好設(shè)備端的程序,設(shè)備上電能正常的運(yùn)行,才能做)


?
下面是手機(jī)上的截圖: (根據(jù)頁面上的提示操作設(shè)備)


?


?


?
按下開發(fā)板子上的S2進(jìn)入配網(wǎng)模式:


?
在串口上也可以看到提示信息。


?


?
這時繼續(xù)操作微信小程序上的步驟,選擇設(shè)備的WIFI進(jìn)行連接: 之后在下一個頁面會自動等待配網(wǎng)成功(沒有截圖),設(shè)備配網(wǎng)成功之后會出現(xiàn)提示,這時設(shè)備就已經(jīng)在線了


?


?

?


?
打開控制臺已經(jīng)看到設(shè)備上線了:


?
這時進(jìn)入小程序頁面,就可以對智能鎖進(jìn)行操作了:


?
到此,配網(wǎng)已經(jīng)完成,接下來就介紹設(shè)備端的代碼。
五、STM32設(shè)備端代碼--這才是核心
關(guān)于配網(wǎng)的流程,在騰訊官網(wǎng)有詳細(xì)介紹,看這里:物聯(lián)網(wǎng)開發(fā)平臺 softAP 配網(wǎng)開發(fā) - 設(shè)備端開發(fā)指南 - 文檔中心 - 騰訊云


?
由于關(guān)聯(lián)代碼較多,這里只提供主要的邏輯代碼,其他的代碼可以自己下載完整源碼查看:基于STM32+ESP8266設(shè)計智能鎖(支持微信小程序一鍵配網(wǎng)連接騰訊云平臺).7z_STM32+ESP8266-嵌入式文檔類資源-CSDN下載

完整項目源碼下載地址:https://download.csdn.net/download/xiaolong1126626497/19137788
main.c 代碼:
#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
#include "key.h"
#include "usart.h"
#include
#include "timer.h"
#include "bluetooth.h"
#include "esp8266.h"
#include "mqtt.h"
/*
智能鎖(自己的設(shè)備)
MQTT服務(wù)器地址: 106.55.124.154
MQTT服務(wù)器端口: 1883
MQTT客戶端ID: 3XM7FNOG4Llock
MQTT用戶名: 3XM7FNOG4Llock;12010126;F8Q4P;1624710719
MQTT登錄密碼: 5d87e9a5bf8ae6295493c263b91aaebc4311f3e95763efe7f31be76c8578f9ec;hmacsha256
訂閱主題: $thing/down/property/3XM7FNOG4L/lock
發(fā)布主題: $thing/up/property/3XM7FNOG4L/lock
發(fā)布消息: {"method":"report","clientToken":"123","params":{"lock":1}}
*/
#define SERVER_IP "106.55.124.154"http://服務(wù)器IP
#define SERVER_PORT 1883 //端口號
#define CONNECT_WIFI "_CMCC-Cqvn" //將要連接的路由器名稱 --不要出現(xiàn)中文、空格等特殊字符
#define CONNECT_PASS "_99pu58cb" //將要連接的路由器密碼
//騰訊物聯(lián)網(wǎng)服務(wù)器的設(shè)備信息
#define MQTT_ClientID "3XM7FNOG4Llock"
#define MQTT_UserName "3XM7FNOG4Llock;12010126;F8Q4P;1624710719"
#define MQTT_PassWord "5d87e9a5bf8ae6295493c263b91aaebc4311f3e95763efe7f31be76c8578f9ec;hmacsha256"
//訂閱與發(fā)布的主題
#define SET_TOPIC "$thing/down/property/3XM7FNOG4L/lock" //訂閱
#define POST_TOPIC "$thing/up/property/3XM7FNOG4L/lock" //發(fā)布
//微信小程序配網(wǎng)數(shù)據(jù)訂閱與發(fā)布
#define SET_WEIXIN_TOPIC "$thing/down/service/3XM7FNOG4L/lock"http://訂閱
#define POST_WEIXIN_TOPIC "$thing/up/service/3XM7FNOG4L/lock"http://發(fā)布
char mqtt_message[200];//上報數(shù)據(jù)緩存區(qū)
int main()
{
u32 time_cnt=0;
u32 i;
u8 key;
u8 stat=0;
//1.初始化需要使用的硬件
LED_Init();
BEEP_Init();
KEY_Init();
//2. 初始化串口1(打印調(diào)試信息)與串口3(與WIFI通信)
USART1_Init(115200);
TIMER1_Init(72,20000); //超時時間20ms
USART3_Init(115200);//串口-WIFI
TIMER3_Init(72,20000); //超時時間20ms
USART1_Printf("正在初始化WIFI請稍等.\n");
//3. 檢測WIFI硬件
while(1)
{
//如果硬件有問題. 蜂鳴器以300ms的頻率報警
if(ESP8266_Init())
{
delay_ms(300);
BEEP=!BEEP;
USART1_Printf("ESP8266硬件檢測錯誤.\n");
}
else
{
BEEP=0; //關(guān)閉蜂鳴器
break; //硬件沒有問題. 退出檢測
}
}
//4. 上電如果檢測到S2按鍵按下就表示需要進(jìn)入配網(wǎng)狀態(tài)
if(KEY_S2)
{
delay_ms(100);
if(KEY_S2)
{
while(1)//連接服務(wù)器
{
printf("進(jìn)入配網(wǎng)模式.....\n");
BEEP=1;
delay_ms(100);
BEEP=0;
//清除之前的WIFI連接信息(連接個無效的WIFI),防止默認(rèn)連接上 上次的WIFI,導(dǎo)致配網(wǎng)錯誤
ESP8266_SendCmd("AT+CWJAP="666","12345678"\r\n");
delay_ms(200);
stat=Esp8266_STA_TCPclinet_Init((u8 *)SERVER_IP,SERVER_PORT);
if(stat==0 || stat==0x80)break;
delay_ms(500);
printf("stat=%d\r\n",stat);
}
}
else
{
stat=0xFF;
}
}
else
{
stat=0xFF;
}
//連接默認(rèn)WIFI
if(stat==0xFF)
{
printf("連接默認(rèn)的WIFI.\n");
//非加密端口
USART1_Printf("WIFI:%d\n",ESP8266_STA_TCP_Client_Mode(CONNECT_WIFI,CONNECT_PASS,SERVER_IP,SERVER_PORT,1));
}
//2. MQTT協(xié)議初始化
MQTT_Init();
//3. 連接OneNet服務(wù)器
while(MQTT_Connect(MQTT_ClientID,MQTT_UserName,MQTT_PassWord))
{
USART1_Printf("服務(wù)器連接失敗,正在重試...\n");
delay_ms(500);
}
USART1_Printf("服務(wù)器連接成功.\n");
//3. 訂閱主題
if(MQTT_SubscribeTopic(SET_TOPIC,0,1))
{
USART1_Printf("主題訂閱失敗.\n");
}
else
{
USART1_Printf("主題訂閱成功.\n");
}
if(stat==0x80)//進(jìn)入配網(wǎng)模式需要給微信小程序返回token值
{
//訂閱微信topic
if(MQTT_SubscribeTopic(SET_WEIXIN_TOPIC,0,1))printf("訂閱失敗\r\n");
//返回平臺數(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)成功后微信小程序返回數(shù)據(jù)
}
while(1)
{
key=KEY_Scan(0);
if(key==2)
{
time_cnt=0;
sprintf(mqtt_message,"{"method":"report","clientToken":"123","params":{"lock":1}}");
MQTT_PublishData(POST_TOPIC,mqtt_message,0);
USART1_Printf("開鎖.\r\n");
}
else if(key==3)
{
time_cnt=0;
sprintf(mqtt_message,"{"method":"report","clientToken":"123","params":{"lock":0}}");
MQTT_PublishData(POST_TOPIC,mqtt_message,0);
USART1_Printf("關(guān)鎖\r\n");
}
if(USART3_RX_FLAG)
{
USART3_RX_BUFFER[USART3_RX_CNT]='\0';
for(i=0;i

ESP8266的核心代碼:
//存放ESP8266的詳細(xì)信息
struct ESP8266 esp8266_info;
/*SoftAP配網(wǎng)*/
u8 ESP8266_SoftAP_MOde(void)
{
u8 token[]="{"cmdType":2,"productId":"3XM7FNOG4L","deviceName":"lock","protoVersion":"2.0"}\r\n";//連接狀態(tài)信息
char *p=NULL;
char data[256];
char buff[100];
u8 i=0;
u32 time1=0,time2=0;
USART3_RX_CNT=0;
USART3_RX_FLAG=0;
while(1)
{
if(USART3_RX_FLAG)
{
USART3_RX_BUFFER[USART3_RX_CNT]='\0';
printf("rx=%s",USART3_RX_BUFFER);
//+IPD,97,192.168.4.2,52021:{"cmdType":1,"ssid":"wbyq_wifi","password":"12345678","token":"df4a4c90abee98c9a443ae8ffd8cc16b"
p=strstr((char *)USART3_RX_BUFFER,"+IPD");
if(p)
{
strcpy(data,p);//將接收到的數(shù)據(jù)拷貝一份保存
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);//字符串轉(zhuǎn)整數(shù)
//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));//上報連接狀態(tài)
}
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數(shù)據(jù),需要返回給平臺
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;
}
/*******************************************************************************************************************
**形參: wifi_name --WIFI名
** password --密碼
** remote_ip --遠(yuǎn)端IP地址(255.255.255.255為廣播地址)
** remote_prot --遠(yuǎn)端端口號
** localhost ---本地端口號
**返回值:0 --成功,
** 其它值 --失敗
**示例:ESP8266_UDP_STA_Mode("360WIFI_123","12345678","172.20.7.2",10500,8080);
*********************************************************************************************************************/
u8 ESP8266_UDP_STA_Mode(u8 *wifi_name,u8 *password,u8 *remote_ip,u16 remote_prot,u16 localprot)
{
char buff[100];
USARTx_StringSend(USART3,"+++"); //退出透傳模式
delay_ms(1000);
printf("重啟模塊.......\r\n");
USARTx_StringSend(USART3,"AT+RST\r\n");
delay_ms(1000);
delay_ms(1000);
printf("關(guān)回顯.......\r\n");
if(ESP8266_SendCmd("ATE0\r\n"))return 2;
printf("設(shè)置為STA模式.......\r\n");
if(ESP8266_SendCmd("AT+CWMODE=1\r\n"))return 3;
printf("連接WIFI.......\r\n");
snprintf(buff,sizeof(buff),"AT+CWJAP="%s","%s"\r\n",wifi_name,password);
if(ESP8266_SendCmd(buff))return 5;
printf("查詢IP.......\r\n");
if(ESP8266_SendCmd("AT+CIFSR\r\n"))return 6;
printf("建立UDP連接.....\r\n");
snprintf(buff,sizeof(buff),"AT+CIPSTART="UDP","%s",%d,%d,0\r\n",remote_ip,remote_prot,localprot);
if(ESP8266_SendCmd(buff))return 7;
printf("設(shè)置透傳.......\r\n");
if(ESP8266_SendCmd("AT+CIPMODE=1\r\n"))return 8;
printf("發(fā)送數(shù)據(jù).......\r\n");
USARTx_StringSend(USART3,"AT+CIPSEND\r\n");
return 0;
}
/****************STA+TCPclinet初始化*************
**
**
const char *STA_TCPCLINET[]=
{
"AT\r\n",//測試指令
"ATE0\r\n",//關(guān)回顯
"AT+CWMODE=1\r\n",//設(shè)置STA模式
"AT+RST\r\n",//模塊復(fù)位
"ATE0\r\n",//關(guān)回顯
"AT+CWJAP="HUAWEIshui","asdfghjkl12"\r\n",//連接wifi
"AT+CIPMUX=0\r\n",//設(shè)置單連接
"AT+CIFSR\r\n",//查詢IP
"AT+CIPSTART="TCP","192.168.43.204",8080\r\n",//連接服務(wù)器
"AT+CIPMODE=1\r\n",//設(shè)置透傳模式
"AT+CIPSEND\r\n",//開始發(fā)送數(shù)據(jù)
};
返回值: 0x7f --退出透傳模式失敗
** 0x80 --進(jìn)入配網(wǎng)模式正常退出
** 0 --未進(jìn)入配網(wǎng)模式正常退出
** 其他值 --異常退出
*****************************************************/
u8 Esp8266_STA_TCPclinet_Init(u8 *server_ip,u16 server_port)
{
char buff[100];
/*退出透傳模式*/
u8 i=0;
u8 stat=0;
u32 id;
for(i=0;i<5;i++)
{
USARTx_StringSend(USART3,"+++");//退出透傳模式
delay_ms(100);
if(Esp8266_SendCmdCheckStat("AT\r\n","OK\r\n")==0)
{
i=0;
break;
}
}
if(i!=0)
{
printf("退出透傳模式失敗\r\n");
return 0x7f;
}
printf("1.模塊復(fù)位\r\n");
if(Esp8266_SendCmdCheckStat("AT+RST\r\n","OK\r\n"))return 1;
delay_ms(1000);
delay_ms(1000);
printf("2.關(guān)回顯\r\n");
if(Esp8266_SendCmdCheckStat("ATE0\r\n","OK\r\n"))return 2;
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)志位
//查詢IP地址
printf("3.設(shè)置模式AP\r\n");
if(Esp8266_SendCmdCheckStat("AT+CWMODE=2\r\n","OK\r\n"))return 3;
printf("4.設(shè)置IP地址\r\n");
if(Esp8266_SendCmdCheckStat("AT+CIPAP=\"192.168.4.1\",\"192.168.4.1\",\"255.255.255.0\"\r\n","OK"))return 4;
printf("4.設(shè)置熱點(diǎn)信息\r\n");
id=*(vu32*)(0x1FFFF7E8);//使用STM32的ID作為WIFI名
snprintf((char *)esp8266_info.esp8266_name,sizeof(esp8266_info.esp8266_name),"wbyq_%d",id);
snprintf(buff,sizeof(buff),"AT+CWSAP=\"%s\",\"12345678\",1,4\r\n",esp8266_info.esp8266_name);
printf("wif_name:%s\r\n",esp8266_info.esp8266_name);
if(Esp8266_SendCmdCheckStat(buff,"OK\r\n"))return 5;
printf("5.顯示端口.......\r\n");
if(Esp8266_SendCmdCheckStat("AT+CIPDINFO=1\r\n","OK"))return 6;
printf("6.設(shè)置要連接的UDP\r\n");
if(Esp8266_SendCmdCheckStat("AT+CIPSTART=\"UDP\",\"192.168.4.255\",8266,8266,0\r\n","OK\r\n"))return 7;
printf("7.獲取微信小程序傳遞過來的熱點(diǎn)信息\r\n");
if(ESP8266_SoftAP_MOde())return 8;
printf("8.設(shè)置模式STA\r\n");
if(Esp8266_SendCmdCheckStat("AT+CWMODE=1\r\n","OK\r\n"))return 9;
printf("9.模塊復(fù)位\r\n");
if(Esp8266_SendCmdCheckStat("AT+RST\r\n","OK\r\n"))return 10;
delay_ms(1000);
delay_ms(1000);
printf("10.連接WIFI\r\n");
snprintf((char *)buff,sizeof(buff),"AT+CWJAP=\"%s\",\"%s\"\r\n",esp8266_info.esp8266_name,esp8266_info.esp8266_key);//字符串拼接
if(Esp8266_SendCmdCheckStat(buff,"WIFI GOT IP"))return 11;
}
printf("11.設(shè)置單連接\r\n");
if(Esp8266_SendCmdCheckStat("AT+CIPMUX=0\r\n","OK"))return 12;
snprintf(buff,sizeof(buff),"AT+CIPSTART=\"TCP\",\"%s\",%d\r\n",server_ip,server_port);
// printf("buff:%s\r\n",buff);
printf("12.連接服務(wù)器\r\n");
if(Esp8266_SendCmdCheckStat(buff,"OK"))return 13;
printf("13.配置透傳模式\r\n");
if(Esp8266_SendCmdCheckStat("AT+CIPMODE=1\r\n","OK\r\n"))return 14;
printf("14.開始發(fā)送數(shù)據(jù)\r\n");
if(Esp8266_SendCmdCheckStat("AT+CIPSEND\r\n",">"))return 15;
if(stat)return 0x80;//進(jìn)入配網(wǎng)模式并且正常退出
else return 0;//未進(jìn)入配網(wǎng)模式,正常退出
}
/**************************獲取WIFI連接狀態(tài)信息***************************/
u8 ESP8266_GetWifi_Stat(void)
{
u16 i=0;
u16 time=0;
u16 time2=0;
USART3_RX_CNT=0;
USART3_RX_FLAG=0;
USARTx_StringSend(USART3,"AT+CWJAP?\r\n");//查詢WIFI連接狀態(tài)
while(1)
{
if(USART3_RX_FLAG)
{
USART3_RX_BUFFER[USART3_RX_CNT]='\0';
printf("rx=%s\r\n",USART3_RX_BUFFER);
if(strstr((char *)USART3_RX_BUFFER,"+CWJAP") || strstr((char *)USART3_RX_BUFFER,"WIFI GOT IP"))
{
USART3_RX_CNT=0;
USART3_RX_FLAG=0;
LED1=1;
return 0;
}
else
{
USART3_RX_CNT=0;
USART3_RX_FLAG=0;
memset(USART3_RX_BUFFER,0,sizeof(USART3_RX_BUFFER));
}
}
delay_ms(10);
i++;
time++;
time2++;
if(time>=1000)
{
time=0;
USARTx_StringSend(USART3,"AT+CWJAP?\r\n");
}
if(time2>=300)
{
LED1=!LED1;
time2=0;
}
if(i>=100*60)
{
LED1=1;
break;
}
}
return 1;
}


?
?
-
mcu
+關(guān)注
關(guān)注
146文章
17886瀏覽量
361625 -
STM32
+關(guān)注
關(guān)注
2290文章
11018瀏覽量
362922 -
IOT
+關(guān)注
關(guān)注
187文章
4293瀏覽量
200959 -
ESP8266
+關(guān)注
關(guān)注
51文章
965瀏覽量
47065 -
MQTT
+關(guān)注
關(guān)注
5文章
673瀏覽量
23546
發(fā)布評論請先 登錄
如何讓esp8266 wifi模組和APP通信?
STM32+ESP8266怎么會上傳數(shù)據(jù)呢
使用STM32驅(qū)動ESP8266連接路由器
使用esp8266實現(xiàn)STM32聯(lián)網(wǎng)(最簡單USART方法)
ESP8266 修復(fù)刷完nodemcu固件后無法連接wifi網(wǎng)絡(luò)的故障

ch340非一鍵下載電路燒錄esp8266程序

STM32 + ESP8266 + MQTT協(xié)議連接OneNet

STM32 + ESP8266 + MQTT協(xié)議連接騰訊IOT平臺

智慧農(nóng)業(yè):STM32+ESP8266+騰訊物聯(lián)網(wǎng)+小程序

Esp8266連接器擴(kuò)展器開源項目

STM32+ESP8266連接電腦Qt網(wǎng)絡(luò)上位機(jī)——QT篇

ESP8266燒錄與機(jī)智云一鍵配網(wǎng)教程

評論