初次尝试ESP8266+Onenet实现数据上传和读取-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 60703|回复: 73

初次尝试ESP8266+Onenet实现数据上传和读取

  [复制链接]
发表于 2018-12-18 23:48 | 显示全部楼层 |阅读模式
本帖最后由 水哥小白 于 2018-12-18 23:48 编辑

1. 引言      最近需要做和物联网相关的小项目,需要将数据传到Onenet,并能够回传Onenet端发送的信号。上网搜索了相关的信息,发现有较简单的ESP8266模块,支持Arduino IDE进行编程,因为之前接触过Arduino,就果断上某宝购买一块小板进行测试,花费15.8块大洋。搜索了几天,发现网上关于ESP8266和Onenet的教程还是挺多的,但是大部分写得不太详细,对于新手只需要做一个小项目来说或许有些困难,所以我特意做了些整理,能够让新手直接上手实现基于Onenet平台和ESP8266的物联网创意。

2. 器材和方法
2.1 器材
       控制器:ESP8266模块*1  
       传感器:DHT11温度湿度传感器*1  ESP8266自带LED*1
ESP8266.PNG     ESP8266         
dht.PNG DHT11





2.2 编程前的配置
2.2.1 ESP8266配置
      
       接线很简单,LED采用ESP8266模块自带的LED(D2),传感器DHT11的连接方式如下:
ESP8266
DHT11
5V
+
G
-
D3
out
       接线完成后我们需要给Arduino IDE配置相应的开发环境,如下:
              第一步 启动Arduino IDE,然后选择 文件-->首选项,将以下网址填入后点击好。
                         http://arduino.esp8266.com/stable/package_esp8266com_index.json
配置1.png


               第二步 点击 工具-->开发板-->开发板管理器, 下载ESP8266对应的开发板配置


配置2.png


               第三步 下载完成后重启Arduino IDE 选择对应的控制板 WeMos D1 R1
配置3.png


       至此,整个硬件部分的接线和配置就完成了,接下来,需要到Onenet平台进行配置。

2.2.2 Onenet平台配置

       进入Onenet网站,注册账号,登录到开发者中心。网址 https://open.iot.10086.cn/

       进入开发者中心界面后,点击 产品开发-->添加产品

onenet1.PNG

       填写相关的产品信息,根据实际情况填写,我这里给出的例子是用HTTP协议上传

onenet2.PNG           onenet3.PNG


        产品添加好后进入设备列表,点击右边的添加设备。

4.png

        输入设备的名称和编号

5.PNG

        点击添加后,会显示出刚才添加的设备

6.png

        记下我们的设备ID,一会会用到。点击右边的数据流,点击添加数据流模板

7.png

        创建一个数据流名叫LIGHT,用来存放一会控制LED的数据。至于要上传的温度和湿度数据流TEMPHUMI,我们一会通过设备端直接向云端创建,这里暂时不创建。
8.png

        回到产品概括中,记下我们的APIkey

9.png

        至此,Onenet配置完成,我们一会需要用到的东西有设备IDAPIkey和数据流LIGHT

3. 编程

      接下来就开始我们的ESP8266程序编写。在编程前我们需要了解一些简单的基础知识。设备通过HTTP与服务器通信,需要向服务器发送请求,服务器才能响应该请求,所以我们只需要用设备以HTTP对应的格式向Onenet服务器发送指令,发送后再解析我们收到的数据就可以了。对于上传和创建新的数据我们采用POST方式,对于读取数据流我们采用GET方式。具体更深的技术知识可以查看Onenet的技术文档,这里我们只需要知道我们所需要向服务器端发送指令的格式即可。

3.1上传温度和湿度数据
      对于POST创建数据流并上传数据的格式如下:

[mw_shl_code=arduino,true]POST /devices/你的设备ID/datapoints?type=3 HTTP/1.1\r\n
api-key:你的APIKEY\r\n
Host:api.heclouds.com\r\n
Content-Length: 你发送的数据长度\r\n
Connection: close\r\n\r\n
{"JASON"}
[/mw_shl_code]
      
      其中需要填写的信息有设备IDAPIkey发送的数据长度JASON数据。其中我们要创建的包含温度湿度的数据流以及他们的数值就写在JASON数据里。JASON数据的相关知识可以参考网上,而这里对于我们所需要上传的温度湿度来说,JASON数据写法如下(示例为将温度数据19和湿度数据49上传):

[mw_shl_code=arduino,true]{"TEMP":19,"HUMI":49}[/mw_shl_code]

至此我们就可以向服务器发送我们的温度和湿度数据了,Onenet会自己创建两个名为TEMPHUMI的数据流,并显示该数据流的具体数值。

3.2读取服务器数据

      因为我们采用了HTTP模式,需要服务器向设备发送的指令只能通过设备不断向服务器发送读取请求,然后才能不断地接收到服务器发来的数据流信息。
      对于GET请求读取数据流信息需要上传的格式如下:

[mw_shl_code=arduino,true]GET /devices/你的设备ID/datapoints?datastream_id=LIGHT HTTP/1.1\r\n
api-key:你的APIKEY\r\n
Host:api.heclouds.com\r\n
Connection: close\r\n\r\n[/mw_shl_code]
      
      其中需要填写的信息有设备IDAPIkey。注意我这里已经填好了需要读取的数据流为LIGHT

      向服务器发送信息后,服务器会以JASON数据回复一段信息,我们只需要读取出里面我们需要的数据即可,下面是一个服务器发送回来信息的示例:
get.PNG

      我们可以看到,此时LIGHT的值为1023。

3.3总体代码

      为了方便使用ESP8266和直接获取JASON数据回中我们需要信息,我们需要向代码中添加ESP8266WiFi.hArduinoJson.h两个库。为了方便使用DHT11传感器,我们需要向代码中添加DHT.h的库。
      代码中需要修改的部分如下,将xxxxxxxx修改为你自己的参数:
[mw_shl_code=arduino,true]#define LED 2
#define DHTPIN 3 // 传感器连接到D3 -- Sensor to D3
#define DHTTYPE DHT11 // DHT 11

const char ssid[] = "xxxxxxxx"; // 使用时请修改为当前你的 wifi 名称 -- Please use your own wifi ssid
const char password[] = "xxxxxxxx"; // 使用时请修改为当前你的 wifi 密码 -- Please use your own wifi password
const char OneNetServer[] = "api.heclouds.com";
const char APIKEY[] = "xxxxxxxx"; // 使用时请修改为你的API KEY -- Please use your own API KEY
int32_t DeviceId = xxxxxxxx; // 使用时请修改为你的设备ID -- Please use your own device ID[/mw_shl_code]

       其它代码在附件里,注释都已经写好了,具体的可以参考附件里的信息。数据的上传和读取采用postData()readData()两个函数来实现。
代码.zip (3.93 KB, 下载次数: 2043)
4.效果
      
      代码上传完成后,打开串口,我们发现我们会向服务器发送POST信息和GET信息,并返回GET的结果
POST.PNG get2.png get.PNG


      登录Onenet平台,我们的数据流就会发送到服务器了。
ssl.png


      我们可以选择左边的应用管理,创建一个UI界面来显示和控制相应地数据流信息。

yy1.png

      最终在服务器上就可以通过UI界面来显示温度和湿度并且控制我们的LED灯了。
yy2.png









发表于 2019-3-3 13:00 | 显示全部楼层
我把json库重新安装了5.13.x版本就可以了
6.x的版本不行
参考以下:
https://stackoverflow.com/questions/51906646/staticjsonbuffer-was-not-declared-in-this-scope-using-feather-huzzah-esp8266
 楼主| 发表于 2019-1-19 13:46 | 显示全部楼层
qq957606954 发表于 2019-1-11 16:48
是用arduino编写的吗

是的用Arduino IDE。
发表于 2019-1-5 19:03 | 显示全部楼层
有没有APP可以显示与控制呢
发表于 2019-1-7 22:10 | 显示全部楼层
POST和GET的接口都有了,要APP干嘛?
发表于 2019-1-8 09:38 | 显示全部楼层
怎么老是容易掉线呢?  有点纠结。
图片1.png
发表于 2019-1-11 13:49 | 显示全部楼层
请问有app吗
发表于 2019-1-11 14:49 来自手机 | 显示全部楼层
DHT的库在哪哇
发表于 2019-1-11 16:48 | 显示全部楼层
是用arduino编写的吗
发表于 2019-1-11 17:04 | 显示全部楼层
本帖最后由 chensr 于 2019-1-14 22:21 编辑

奇怪了我碰上灵异事件了,老是提示DHT传感器无法读取
发表于 2019-1-15 09:54 | 显示全部楼层
Failed to read from DHT sensor!
Failed to read from DHT sensor!
一直都是这样提示
 楼主| 发表于 2019-1-19 13:32 | 显示全部楼层
chensr 发表于 2019-1-5 19:03
有没有APP可以显示与控制呢

你可以通过手机浏览器,登录onenet平台的网站,和电脑进入方式一样到你编写的可视界面那里,就可以控制啦。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-28 00:42 , Processed in 0.436773 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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