我的Arduino之路-实现物联网应用(3)-Arduino中文社区 - Powered by Discuz! Archiver

zhuhai 发表于 2019-2-20 16:52

我的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

ecstart 发表于 2019-2-22 12:02

!看好你一步步的成功 加油!:D

hupeilins 发表于 2019-4-12 22:20

我想问问你的两个库在哪里可以找得到?

hupeilins 发表于 2019-4-12 22:50

dht11的库从哪里来的??
页: [1]
查看完整版本: 我的Arduino之路-实现物联网应用(3)