需要工具:Arduino IDE 配置好esp8266環境
ESP8266開發板(此處用的esp8266-01s 帶5v繼電器如下圖)
串口工具TTL隨便什么芯片(但作者剛好帶了一個PL2303HXA的芯片(網上有驅動下載安裝后,一插拔又讓聯系供貨商),結果找不到其他ch340芯片了)
流程: 下載好開發環境和 代碼包,地址:https://cloud.bemfa.com/docs/#/?id=_22-%e6%8e%a7%e5%88%b6%e5%8d%95%e7%89%87%e6%9c%ba
然后連接設備 燒錄。 完成
巴法雲官網里面有接入文檔:https://bemfa.com/
手頭上暫時有幾個esp8266的板子
ESP8266-01/S的外觀區別

其他的也可以更具實際需求修改代碼
1 //********************需要修改的部分*******************// 2 3 #define DEFAULT_STASSID "QQqun:51798659" //WIFI名稱,區分大小寫,不要寫錯 4 #define DEFAULT_STAPSW "51798659" //WIFI密碼 5 String UID = "QQ群:51798659----------"; //用戶私鑰,可在控制台獲取,修改為自己的UID 6 String TOPIC = "light002"; //主題名字,可在控制台新建 7 const int LED_Pin = 0; //單片機LED引腳值 ESP8266-01S用這個腳 8 9 //**************************************************//

串口芯片驅動裝好后就會有串口COMX
串口連接8266
GND->GND
VCC->3.3v
TX<->RX
GPIO0->GND
RST->GND燒錄前按下上電
然后就是串口選好和開發板選好

准備燒錄
還沒傳輸數據前 要按住rst上電放開手即可。gpio0一定要接入gnd
隨后用的以前有個小E開發板來接的

最終代碼(需要更具自己的修改):
1 /* 2 * 天貓精靈控制 3 * 2020-05-12 4 * QQ交流群:824273231 5 * 官網https://bemfa.com 6 */ 7 #include <WiFiClient.h> 8 #include <ESP8266WiFi.h> 9 10 11 //巴法雲服務器地址默認即可 12 #define TCP_SERVER_ADDR "bemfa.com" 13 //服務器端口,tcp創客雲端口8344 14 #define TCP_SERVER_PORT "8344" 15 16 //********************需要修改的部分*******************// 17 18 #define DEFAULT_STASSID "QQqun:51798659" //WIFI名稱,區分大小寫,不要寫錯 19 #define DEFAULT_STAPSW "51798659" //WIFI密碼 20 String UID = "QQ群:51798659----------"; //用戶私鑰,可在控制台獲取,修改為自己的UID 21 String TOPIC = "light002"; //主題名字,可在控制台新建 22 const int LED_Pin = 0; //單片機LED引腳值 ESP8266-01S用這個腳 23 24 //**************************************************// 25 26 27 28 //最大字節數 29 #define MAX_PACKETSIZE 512 30 //設置心跳值30s 31 #define KEEPALIVEATIME 30*1000 32 33 34 35 //tcp客戶端相關初始化,默認即可 36 WiFiClient TCPclient; 37 String TcpClient_Buff = ""; 38 unsigned int TcpClient_BuffIndex = 0; 39 unsigned long TcpClient_preTick = 0; 40 unsigned long preHeartTick = 0;//心跳 41 unsigned long preTCPStartTick = 0;//連接 42 bool preTCPConnected = false; 43 44 45 46 //相關函數初始化 47 //連接WIFI 48 void doWiFiTick(); 49 void startSTA(); 50 51 //TCP初始化連接 52 void doTCPClientTick(); 53 void startTCPClient(); 54 void sendtoTCPServer(String p); 55 56 //led 控制函數 57 void turnOnLed(); 58 void turnOffLed(); 59 60 61 62 /* 63 *發送數據到TCP服務器 64 */ 65 void sendtoTCPServer(String p){ 66 67 if (!TCPclient.connected()) 68 { 69 Serial.println("Client is not readly"); 70 return; 71 } 72 TCPclient.print(p); 73 Serial.println("[Send to TCPServer]:String"); 74 Serial.println(p); 75 } 76 77 78 /* 79 *初始化和服務器建立連接 80 */ 81 void startTCPClient(){ 82 if(TCPclient.connect(TCP_SERVER_ADDR, atoi(TCP_SERVER_PORT))){ 83 Serial.print("\nConnected to server:"); 84 Serial.printf("%s:%d\r\n",TCP_SERVER_ADDR,atoi(TCP_SERVER_PORT)); 85 86 String tcpTemp=""; //初始化字符串 87 tcpTemp = "cmd=1&uid="+UID+"&topic="+TOPIC+"\r\n"; //構建訂閱指令 88 sendtoTCPServer(tcpTemp); //發送訂閱指令 89 tcpTemp="";//清空 90 91 preTCPConnected = true; 92 preHeartTick = millis(); 93 TCPclient.setNoDelay(true); 94 } 95 else{ 96 Serial.print("Failed connected to server:"); 97 Serial.println(TCP_SERVER_ADDR); 98 TCPclient.stop(); 99 preTCPConnected = false; 100 } 101 preTCPStartTick = millis(); 102 } 103 104 105 /* 106 *檢查數據,發送心跳 107 */ 108 void doTCPClientTick(){ 109 //檢查是否斷開,斷開后重連 110 if(WiFi.status() != WL_CONNECTED) return; 111 112 if (!TCPclient.connected()) {//斷開重連 113 114 if(preTCPConnected == true){ 115 116 preTCPConnected = false; 117 preTCPStartTick = millis(); 118 Serial.println(); 119 Serial.println("TCP Client disconnected."); 120 TCPclient.stop(); 121 } 122 else if(millis() - preTCPStartTick > 1*1000)//重新連接 123 startTCPClient(); 124 } 125 else 126 { 127 if (TCPclient.available()) {//收數據 128 char c =TCPclient.read(); 129 TcpClient_Buff +=c; 130 TcpClient_BuffIndex++; 131 TcpClient_preTick = millis(); 132 133 if(TcpClient_BuffIndex>=MAX_PACKETSIZE - 1){ 134 TcpClient_BuffIndex = MAX_PACKETSIZE-2; 135 TcpClient_preTick = TcpClient_preTick - 200; 136 } 137 preHeartTick = millis(); 138 } 139 if(millis() - preHeartTick >= KEEPALIVEATIME){//保持心跳 140 preHeartTick = millis(); 141 Serial.println("--Keep alive:"); 142 sendtoTCPServer("cmd=0&msg=keep\r\n"); 143 } 144 } 145 if((TcpClient_Buff.length() >= 1) && (millis() - TcpClient_preTick>=200)) 146 {//data ready 147 TCPclient.flush(); 148 Serial.println("Buff"); 149 Serial.println(TcpClient_Buff); 150 if((TcpClient_Buff.indexOf("&msg=on") > 0)) { 151 turnOnLed(); 152 }else if((TcpClient_Buff.indexOf("&msg=off") > 0)) { 153 turnOffLed(); 154 } 155 TcpClient_Buff=""; 156 TcpClient_BuffIndex = 0; 157 } 158 } 159 160 void startSTA(){ 161 WiFi.disconnect(); 162 WiFi.mode(WIFI_STA); 163 WiFi.begin(DEFAULT_STASSID, DEFAULT_STAPSW); 164 } 165 166 167 168 /************************************************************************** 169 WIFI 170 ***************************************************************************/ 171 /* 172 WiFiTick 173 檢查是否需要初始化WiFi 174 檢查WiFi是否連接上,若連接成功啟動TCP Client 175 控制指示燈 176 */ 177 void doWiFiTick(){ 178 static bool startSTAFlag = false; 179 static bool taskStarted = false; 180 static uint32_t lastWiFiCheckTick = 0; 181 182 if (!startSTAFlag) { 183 startSTAFlag = true; 184 startSTA(); 185 Serial.printf("Heap size:%d\r\n", ESP.getFreeHeap()); 186 } 187 188 //未連接1s重連 189 if ( WiFi.status() != WL_CONNECTED ) { 190 if (millis() - lastWiFiCheckTick > 1000) { 191 lastWiFiCheckTick = millis(); 192 } 193 } 194 //連接成功建立 195 else { 196 if (taskStarted == false) { 197 taskStarted = true; 198 Serial.print("\r\nGet IP Address: "); 199 Serial.println(WiFi.localIP()); 200 startTCPClient(); 201 } 202 } 203 } 204 //打開燈泡 205 void turnOnLed(){ 206 Serial.println("Turn ON"); 207 digitalWrite(LED_Pin,LOW); 208 } 209 //關閉燈泡 210 void turnOffLed(){ 211 Serial.println("Turn OFF"); 212 digitalWrite(LED_Pin,HIGH); 213 } 214 215 216 // 初始化,相當於main 函數 217 void setup() { 218 Serial.begin(115200); 219 pinMode(LED_Pin,OUTPUT); 220 digitalWrite(LED_Pin,HIGH); 221 Serial.println("Beginning..."); 222 } 223 224 //循環 225 void loop() { 226 doWiFiTick(); 227 doTCPClientTick(); 228 }
