ESP8266-01S GET POST 天猫精灵 APP控制 烧录教程 基于巴法云平台


需要工具: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 }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM