一、MQTT透傳AT固件
安信可提供的燒錄WiFi固件工具:
鏈接: https://docs.ai-thinker.com/%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B72
安信可提供的固件庫鏈接: https://docs.ai-thinker.com/%E5%9B%BA%E4%BB%B6%E6%B1%87%E6%80%BB
經過測試,選擇這個不可以,因為是4MB 的,上述用到的兩款 ESP8266 是 1MB(8Mbit)flash的模組,應該使用
二、如何刷固件
手頭有的 ESP8266:
燒錄工具
可直接連接使用(ESP-01S 和 ESP-01均可使用)
需要注意這個模塊僅僅只是轉接口,而不能實現向上面那個燒錄模塊一樣完成燒錄(ESP-01S 和 ESP-01均可使用)。
TTL 轉 USB 下載器,
可以使用,但是,經過測試,(測試接線方法如下)
我只完成了對 ESP-01S 的燒寫(燒錄過程中需要上電提示時,需要將 3.3V 重插拔),對 ESP-01 操作無效。
后查閱資料后,還需要將 EN 接 3.3 V,即:
燒錄軟件設置:
燒錄好之后的測試連接:
對于ESP-01S ,只需要將 IO0 那根線去掉,即四根線:
對于ESP-01 ,需要將 IO0 那根線去掉,EN 還需要加上,即五根線:
AT 測試使用串口助手即可。(已上傳 CSDN)。
上圖中的軟件也不是那么好用,不推薦了。。。。
三、MQTT服務器
MQTT服務器測試鏈接: https://www.emqx.com/zh/mqtt/public-mqtt5-broker
將
將域名:broker.emqx.io放到網址轉 IP 地址鏈接: https://ip138.com/中解析出 ip 地址,方便在代碼中進行使用。
解析結果如下:
用第一個 ip 地址就可行(不好用,用然也物聯(lián)的 test.ranye-iot.net(47.92.129.18))。
需要下載證書并安裝。
四、AT 指令
程序中涉及到的 AT 指令
AT\r\n
AT+RESTORE\r\n
ATE0\r\n
AT+MQTTUSERCFG=0,1,"clientld","admin","admin",0,0,""\r\n
AT+MQTTCONN=0,"3.82.39.163",1883,0\r\n
AT+MQTTSUB=0,"esp8266_rxd",1\r\n
AT+MQTTPUB=0,"esp8266_txd","{\"LAMP\":\"OFF\"}",0,0\r\n
AT+CWMODE=1\r\n
樂鑫 Espressif 官方提供的 AT 指令使用手冊和說明的鏈接: https://docs.espressif.com/projects/esp-at/zh_CN/latest/esp32/AT_Command_Set/index.html
知識點
Station 模式 和 SoftAP 模式
五、程序
安信可提供的基于 STM32 AT指令開發(fā)的鏈接: https://docs.ai-thinker.com/esp8266/examples/at_demo
視頻教程作者就是根據上面的示例代碼進行修改,然后在 STC12C5A60S2 + ESP8266 上實現了。
下面是總結的思路流程(這里作為程序1):
程序1 的流程是:
1、發(fā)送恢復出廠默認設置指令將模塊恢復成出廠設置:AT+RESTORE
2、關閉回顯:ATE0
3、選擇 ESP8266 的工作模式:AT+CWMODE=1
4、ESP8266 連接外部的 WiFi,AT+CWJAP= “pSSID”,“pPassWord”
5、MQTT配置用戶屬性 AT+MQTTUSERCFG=0,1,“clientld”,“admin”,“admin”,0,0,“”
6、連接 MQTT 服務器:AT+MQTTCONN=0,“3.82.39.163”,1883,0
7、訂閱指定連接的 MQTT 主題,可重復多次訂閱不同的 topic:AT+MQTTSUB=0,“esp8266_rxd”,1
8、while 主循環(huán)中實現定時發(fā)布:如果連接上了MQTT服務器,就定時發(fā)布信息:AT+MQTTPUB=0,“esp8266_txd”,“{“LAMP”:“OFF”}”,0,0
程序配網
此外,還有智能配網的操作演示,有兩種方式:ESP-Touch 和 Airkiss,
使用串口助手直接操作 ESP8266 模塊,可用。
此外,根據自身的開發(fā)經驗,有下面的使用體會:
操作過機智云平臺的基于 ESP8266 的項目(遠程寵物室),可以使用兩種方式進行配網,通過按鍵(長按和短按),不同配網方式,有指示燈提示。由于此種印象,就有了使用按鍵進行配網的想法。而在示例代碼中,要么是在初始化部分將網給配好,要么是使用多個 while(1) 循環(huán)的方式(配置聯(lián)網成功后才接著執(zhí)行最后的 while(1) 函數體),并沒有結合按鍵的配網方式。因此,如果要想使用按鍵來進行配網,則不太清楚如何操作了。
因此,暫緩按鍵結合配網的實現方式,而是仍然通過串口命令的方式來進行(也就是在示例程序的基礎上進行修改)。
程序2 的流程是:
1、模塊復位:AT+RST
2、關閉回顯:ATE0
3、選擇ESP8266的工作模式:AT+CWMODE=1
4、查詢WIFI連接狀態(tài):AT+CWJAP?
如果返回結果是 +CWJAP: 或者 WIFI GOT IP,說明連接成功。
否則,嘗試連接在程序中設置好的 WiFi ,如果連接成功就退出。否則,就嘗試配網的方式。
5、配網部分程序如下:
while(esp8266_GetWifi_Stat("AT+CWJAP?\r\n", "+CWJAP:", "WIFI GOT IP")== 0)
{
printf("Connecting to WiFi...\r\n");
//說明沒有連接上網絡,先嘗試連接在程序中設置好的WiFi
if(esp8266_JoinAP(User_ESP8266_SSID, User_ESP8266_PWD))
{
printf("1-Join AP OK.\r\n");
}
else
{
esp8266_SetSmartMode();
if(esp8266_Net_Mode_Choose(STA))
{
printf("2-SET STA OK.\r\n");
if(esp8266_Send_AT_Cmd("AT+CWAUTOCONN=1\r\n", "OK"))
{
printf("3-AT+CWAUTOCONN=1 OK.\r\n");
if(esp8266_Send_AT_Cmd("AT+CWSTARTSMART=3\r\n", "OK"))
{
printf("4-AT+CWSTARTSMART=3 OK.\r\n");
if(esp8266_WiteConnect("smartconfig connected wifi"))
{
if(esp8266_Send_AT_Cmd("AT+CWSTOPSMART\r\n", "OK"))
{
printf("5-AT+CWSTOPSMART OK.\r\n");
}
else
{
printf("6-AT+CWSTOPSMART Fail.\r\n");
goto start;
}
}
}
}
}
}
}
printf("WiFi Connection Successful.\r\n");
bit esp8266_WiteConnect(char *ack1)
{
bit ack = 0;
unsigned int config_Delay = 5;
do
{
if(recv_flag)
{
recv_flag = 0;
if(strstr((const char*)recv_buf,ack1))
{
ack = 1;
printf("Wite Connect Success.\r\n");
recv_buf[recv_cnt] = '\0';
printf("%s\r\n", recv_buf);
memset(recv_buf, 0, recv_cnt);
recv_cnt = 0;
break;
}
else
{
recv_buf[recv_cnt] = '\0';
printf("%s\r\n", recv_buf);
memset(recv_buf, 0, recv_cnt);
recv_cnt = 0;
}
}
Delay_Xms(1000);
}while(config_Delay--);
return ack;
}
/**************************查詢 WiFi 連接狀態(tài)***************************/
bit esp8266_GetWifi_Stat(char *cmd, char *ack1, char *ack2)
{
bit ack = 0;
unsigned int config_Delay = 3;
uart2_SendString(cmd);
printf("Detecting WiFi status...\r\n");
do
{
if(recv_flag)
{
recv_flag = 0;
if(strstr((const char*)recv_buf,ack1)|| strstr((const char*)recv_buf,ack2))
{
ack = 1;
recv_buf[recv_cnt] = '\0';
printf("%s\r\n", recv_buf);
memset(recv_buf, 0, recv_cnt);
recv_cnt = 0;
break;
}
else
{
printf("WIFI DISCONNECT.\r\n");
memset(recv_buf, 0, recv_cnt);
recv_cnt = 0;
}
}
Delay_Xms(1000);
}while(config_Delay--);
return ack;
}
6、MQTT配置用戶屬性 AT+MQTTUSERCFG=0,1,“clientld”,“admin”,“admin”,0,0,“”
7、連接 MQTT 服務器:AT+MQTTCONN=0,“3.82.39.163”,1883,0
8、訂閱指定連接的 MQTT 主題,可重復多次訂閱不同的 topic:AT+MQTTSUB=0,“esp8266_rxd”,1
9、while 主循環(huán)中實現定時發(fā)布:如果連接上了MQTT服務器,就定時發(fā)布信息:AT+MQTTPUB=0,“esp8266_txd”,“{“LAMP”:“OFF”}”,0,0
程序中有個地方:
if(esp8266_Send_AT_Cmd("AT+RESTORE\r\n", "OK"))
{
printf("RESTORE OK\r\n");
}
RESTORE是恢復出廠設置,應該改成復位(RST)
if(esp8266_Send_AT_Cmd("AT+RST\r\n", "OK"))
{
printf("RST OK\r\n");
}
在 MQTT 客戶端軟件中的操作如下:
MQTT服務器如上圖所示。程序中的 client_id 是 clientID,所以不能再用這個了,我就另外起了個名字:MQTT_FX_Client 。
在程序中,訂閱了 esp8266_rxd,
因此,點擊 Publish 后,串口能夠接收到:
與此同時,程序還會向 esp8266_txd 每隔一段時間發(fā)送數據,文章來源:http://www.zghlxwxcb.cn/news/detail-824525.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-824525.html
到了這里,關于51單片機ESP8266的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!