我的Arduino之路-实现物联网应用(3)
本帖最后由 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 TTLTX RXGND GND CH_PD 3.3VVCC 3.3VRX 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)Host:open.lewei50.com6)Content-Length:30 //30是下面第9条的字符长度7)Connection: close8) //这里要发送一个回车符9)[{"Name":"H1","Value":"71.7"}] //这是服务器要解析的字串,H1是湿度传感器标识,71.7是湿度值
注:以上乐联部分要一口气发送出去,如有停顿会被服务器踢掉
服务器返回成功信息
再来看网页上的服务器端,刷新一下,湿度更新了
第三步:开发板+ESP8266+ DHT11接线图不上了,直接上代码:#include<dht11.h>#include<stdlib.h>dht11DHT11;#defineDHT11PIN 8intcount=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();//重启程序} } }
//LeWeivoid send_data(String sendstr){Serial1.print("POST/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("Host:open.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=71ESP8266模块 上传数据 到 乐联网http://bbs.21ic.com/icview-1722550-1-1.html教程1 教你玩转乐联网 远程温湿度查看器https://www.arduino.cn/thread-5197-1-1.htmlESP8266WiFi模块接入乐为物联平台https://blog.csdn.net/csdnhuaong/article/details/71052872
!看好你一步步的成功 加油!:D 我想问问你的两个库在哪里可以找得到? dht11的库从哪里来的??
页:
[1]