本帖最后由 zhuhai 于 2019-2-20 17:08 编辑
温习下小目标:
1)能测量温湿度(已达到)
2)能远程查看温湿度,历史数据曲线表达,能用手机看曲线
3)能远程控制设备运行
上一步已经通过ESP8266连上网并实现将温湿度发送到另一台装有网络调试助手的电脑上,现在要找一台真正的TCP服务器来接收数据。网上转了一圈发现乐联网提供这样的免费服务,马上注册测试
第一步:注册 注册完后,个人信息中有个Userkey要记下:
再添加设备和传感器并记下设备标识和传感器标识 设备标识:01
传感器标识: 湿度传感器:H1 温度传感器:T1
上面三项信息(Userkey,设备标识,传感器标识)很重要,以后要用的 然后在线测试一下 http://www.lewei50.com/dev/apitest/3
回到设备管理页面,刷新后我们看到数据更新上去了
到这里为止我们只是在乐联网内部转圈成功
测试的具体方法参考开发者指南 https://www.lewei50.com/dev/md?book=lewei&path=1AddDevice
第二步:TTL+ESP8266调试 接线图:
ESP8266 TTL TX RX GND GND CH_PD 3.3V VCC 3.3V RX TX
在串口工具点扩展多字符串发送窗口,将下面AT命令复制进去
WIFI部分: 1)AT //所有的AT命令都有ok返回,直到进入透传返回的是>符号 2)AT+CIPMODE=1 //设置为透传模式 3)AT+CIPMUX=0 //单连接模式 4)AT+CWMODE=1 //Station模式 5)AT+CWJAP="Unknown","39S*******" //连WIFI
乐联部分: 1)AT+CIPSTART="TCP","api.lewei50.com",80 //连接乐联TCP服务器 2)AT+CIPSEND //进入透传模式,从这里开始没有信息返回,直到全部数据发送出去 3)POST/api/V1/Gateway/UpdateSensors/01 HTTP/1.1 //这里的01是上面提到的设备标识 4)userkey: 84aec6180b244209b30e270b58******** //不说了 5)Hostpen.lewei50.com 6)Content-Length:30 //30是下面第9条的字符长度 7)Connection: close 8) //这里要发送一个回车符 9)[{"Name":"H1","Value":"71.7"}] //这是服务器要解析的字串,H1是湿度传感器标识,71.7是湿度值
注:以上乐联部分要一口气发送出去,如有停顿会被服务器踢掉
服务器返回成功信息
再来看网页上的服务器端,刷新一下,湿度更新了
第三步:开发板+ESP8266+ DHT11 接线图不上了,直接上代码: #include<dht11.h> #include<stdlib.h> dht11DHT11; #defineDHT11PIN 8 intcount=0;
void(*resetFunc) (void) = 0; //制造重启命令 #defineLW_USERKEY "84aec6180b244209b30e27********" // replace your key here#define LW_GATEWAY "01" #defineLW_GATEWAY "01"
#defineSB1 "T1" #defineSB2 "H1" voidsetup() { Serial.begin(9600); Serial1.begin(115200); intn=0; while(1) { Serial1.println("AT"); //指令测试 delay(500); if(Serial1.find("OK"))//接收指令正常则返回OK { Serial.println("ESP8266 :OK"); delay(2000); break; } else { Serial1.print("+++"); //退出透传 delay(5000); Serial.print("waiting...exit..TCP."); Serial.println(n); } delay(1000); n=n+1; if(n>5) { resetFunc();//重启程序 } }
connectWiFi(); delay(1000); Serial1.println("AT+CIPMUX=0");//单连接模式 delay(500); Serial1.println("AT+CWMODE=1");//透传模式 delay(500); Serial1.println("AT+CIPMODE=1");//STA模式 delay(500); Serial1.println("AT+CIPSERVER=0"); delay(500); Serial1.println("AT+CIPSEND");//进入透传开始发送数据 delay(5000); }
void loop() { intchk = DHT11.read(DHT11PIN); delay(500); Serial.print("Read sensor: "); switch (chk) { case DHTLIB_OK: Serial.println("DHT11 OK"); break; case DHTLIB_ERROR_CHECKSUM: Serial.println("Checksum error"); break; case DHTLIB_ERROR_TIMEOUT: Serial.println("Time out error"); break; default: Serial.println("Unknown error"); break; }
Stringsendstr ="[{\"Name\":\""; sendstr+=SB1; sendstr+="\",\"Value\":\""; sendstr+=(float)DHT11.temperature, 2; sendstr+="\"},{\"Name\":\""; sendstr+=SB2; sendstr+="\",\"Value\":\""; sendstr+= (float)DHT11.humidity, 2; sendstr+="\"}]"; send_data(sendstr); delay(3000); if(Serial1.find("OK")) { Serial.println("send LeWei server:OK"); } else { Serial.println("waiting LeWeiserver .."); }
delay(60000); }
void connectWiFi() { Serial1.println("AT+CWJAP=\"Unknown\",\"39Sanky****\""); intn=0; while(1) { delay(1000); if(Serial1.find("OK")) { Serial.println("WIFI link:OK"); delay(4000); connectserver(); break; } else { Serial.print("waiting...WIFI..."); Serial.println(n); } delay(1000); n=n+1; if(n>50) { resetFunc();//重启程序 } } }
void connectserver() { Serial1.println("AT+CIPSTART=\"TCP\",\"api.lewei50.com\",80"); intn=0; while(1) { if(Serial1.find("OK")) { delay(1000); Serial.println("TCP server:OK"); delay(2000); break; } else { delay(2000); Serial.print("waiting TCPserver.."); Serial.println(n); } n=n+1; if (n>50) { resetFunc();//重启程序 } } }
//LeWei void send_data(String sendstr) { Serial1.print("OST/api/V1/Gateway/UpdateSensors/"); Serial1.print(LW_GATEWAY); Serial1.println("HTTP/1.1"); delay(200); Serial1.print("userkey:"); Serial1.println(LW_USERKEY); delay(200); Serial1.println("Hostpen.lewei50.com"); delay(200); Serial1.print("Content-Length:"); Serial1.println(sendstr.length()); delay(200); Serial1.println("Connection:close"); delay(200); Serial1.println(); delay(200); Serial1.println(sendstr); delay(2000); Serial.println(sendstr); }
服务器端查询的历史数据
小目标第二条实现,接下来要实现通过服务器对arduino设备控制,任重而道远
参考文选(感谢作者们的分享精神): 开发者指南 http://www.lewei50.com/dev/apiList?version=1&sk=71 ESP8266模块 上传数据 到 乐联网 http://bbs.21ic.com/icview-1722550-1-1.html 教程1 教你玩转乐联网 远程温湿度查看器 https://www.arduino.cn/thread-5197-1-1.html ESP8266WiFi模块接入乐为物联平台 https://blog.csdn.net/csdnhuaong/article/details/71052872
|