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

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5284|回复: 3

我的Arduino之路-实现物联网应用(3)

[复制链接]
发表于 2019-2-20 16:52 | 显示全部楼层 |阅读模式
本帖最后由 zhuhai 于 2019-2-20 17:08 编辑

温习下小目标:
1)能测量温湿度(已达到)
2)能远程查看温湿度,历史数据曲线表达,能用手机看曲线
3)能远程控制设备运行

上一步已经通过ESP8266连上网并实现将温湿度发送到另一台装有网络调试助手的电脑上,现在要找一台真正的TCP服务器来接收数据。网上转了一圈发现乐联网提供这样的免费服务,马上注册测试

第一步:注册
注册完后,个人信息中有个Userkey要记下:
1.png


再添加设备和传感器并记下设备标识和传感器标识
设备标识:01
2.png

传感器标识:
湿度传感器:H1
温度传感器:T1
3.png

上面三项信息(Userkey,设备标识,传感器标识)很重要,以后要用的
然后在线测试一下
http://www.lewei50.com/dev/apitest/3
4.png

回到设备管理页面,刷新后我们看到数据更新上去了
5.png

到这里为止我们只是在乐联网内部转圈成功

测试的具体方法参考开发者指南
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

6.png


在串口工具点扩展多字符串发送窗口,将下面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是湿度值


注:以上乐联部分要一口气发送出去,如有停顿会被服务器踢掉

7.png
服务器返回成功信息

再来看网页上的服务器端,刷新一下,湿度更新了

8.png


第三步:开发板+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);
}

服务器端查询的历史数据
9.png

小目标第二条实现,接下来要实现通过服务器对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

发表于 2019-2-22 12:02 | 显示全部楼层
!看好你一步步的成功 加油!
发表于 2019-4-12 22:20 | 显示全部楼层
我想问问你的两个库在哪里可以找得到?
发表于 2019-4-12 22:50 | 显示全部楼层
dht11的库从哪里来的??
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 11:36 , Processed in 0.108827 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表