物联网开发之esp8266连接onenet控制板载小灯(一)

之前因为需要打比赛,需要开发物联网的内容,所以就自己学了一个多月的物联网知识,什么HTTP,MQTT,什么json格式什么的,搞得我一个头,整整两个那么大!!!
没有老师教这个,基本上是看B站的太极创客和CSDN的单片机菜鸟哥的文章自学的,求学之路,坎坎坷坷呀(叹气)所以如果写的有什么错误之类的,还评论指正

(一)创建设备

首先打开onenet的网址:https://open.iot.10086.cn/,注册一个账号,然后点击控制台
在这里插入图片描述
点击切换旧版(新版听说更新换代太快了),​​然后左侧就会出现一个小蓝点,把鼠标放到小蓝点上,就会看到“多协议接入”的字了,点击进入多协议接入
在这里插入图片描述
我
在这里插入图片描述
这里有好多好多好多种协议,我们今天主要做的是HTTP 协议的,所以点击HTTP协议,然后点击添加产品,产品名选择自己喜欢的,产品行业选择自己要开发大致相近的,比如说我要开发的是物联网的小灯,那么我的产品行业在智能家居,产品类别可以随便选选,其实这个在新版才有点差别,不做深入研究,了解就好。
在这里插入图片描述
在这里插入图片描述
点击立即添加设备,在设备列表添加自己的设备,然后如图所示,随便填填,点击确定
在这里插入图片描述
在这里插入图片描述

然后就生成了我们的设备,和大家说一说我们设备和产品的关系,产品是一种产品(说废话呢),设备是属于这个产品中的构成之一,比如说哈啰单车,他就是一种产品的名称,其中,每一辆哈啰单车都是他的设备,设备号就是他们的车牌号,不会重复。大致了解就好了。
打开设备的详情,在APIKey那里选择添加APIKey
在这里插入图片描述
然后就会生成一坨乱七八糟的看不懂的东西,这玩意,说人话就是,你的服务器的密码(key),加了密的密码。

记录下你的设备ID和APIKey,等等发送数据、接收数据要用。
在这里插入图片描述

(二)了解开发文档内容,发送数据给设备

点击右上角的文档中心,打开开发文档—>基础服务—>多协议接入,并在左侧列表选择开发指找到HTTP,选择协议接口列表,从中选择上传数据点,我们这篇以上传数据点的形式来上传数据,同学们可以以此类推,使用其他方式。
在这里插入图片描述
在这里插入图片描述
哈哈,我懂你们意思,是不是一头雾水?是不是头皮发麻?是不是头发一把一把的掉?我刚开始学这个的时候也是这样子在这里插入图片描述
别慌,这个时候我们再回到设备上去,选择下面的API调试(这个就是我们网址自带的调试工具),会看到请求方法里面有POST(上传),GET(获取),PUT(放置),DELETE(删除)
因为我们想上传数据,所以我们选择POST
在这里插入图片描述
回到开发文档,他的URL是这个
在这里插入图片描述

请求方式:POST
URL:http://api.heclouds.com/devices/device_id/datapoints
device_id:需要替换为自己的设备ID

所以我们需要把之前复制的设备id覆盖到device_id上去
比如我的设备id是736615010,那么我的URL就是:http://api.heclouds.com/devices/736615010/datapoints

一般device_id/的后面都是需要进行的操作,比如datapoints,就是数据点,加上post,就是上传数据点,比如datastreams就是数据流,根据开发者文档,GET+网址(URL)+/datastreams/temperature就是获取你这个数据流的数据。具体可以去看开发者文档

下面的APIKey 就是我们刚刚设备的APIkey了

其实在产品那里还有一个Master-APIkey,是所有这个产品的设备的密钥,通用,可以取代设备APIkey。

URL可以不填,反正我每天也能用。

然后我们把开发文档下面的请求参数实例给复制到我们的HTTP请求参数里面,我们HTTP发送的数据,是以Json格式的形式去发送的。

{
    "datastreams": [{
            "id": "temperature",
            "datapoints": [{
                    "at": "2013-04-22T00:35:43",
                    "value": "bacd"
                },
                {
                    "at": "2013-04-22T00:55:43",
                    "value": 84
                }
            ]
        },
        {
            "id": "key",
            "datapoints": [{
                    "at": "2013-04-22T00:35:43",
                    "value": {
                        "x": 123,
                        "y": 123.994
                    }
                },
                {
                    "at": "2013-04-22T00:35:43",
                    "value": 23.001
                }
            ]
        }
    ]
}

点击执行请求,发送数据到服务器
在这里插入图片描述
这个时候去我们的设备详情里面,点击数据流展示,可以看到我们成功发送到我们服务器的数据和数据流名称。

数据的以可以流动(变动)数据的方式在onenet里面储存着,这就是数据流
数据点的数据,会根据数据名自动生成数据流名称,并将其对应的数据进行储存

在这里插入图片描述
因为我们的数据名不叫官方给的“temperature”和“key”,所以我们要对官方给的请求示例进行更改,具体怎么改呢?我也不会。OK 本章完,谢谢大家。
在这里插入图片描述

因为我们新手开发json,很容易就将他的格式弄错了,他的格式要求很严格(超严格,比你高三班主任还严格),所以我们需要借助json开发工具,直接百度搜索json格式开发工具基本上就能找到了,将我们的官方请求示例复制上去,他就会自动格式化了
在这里插入图片描述
这时候再来看看我们的官方文档:在这里插入图片描述
图中红色的这些是必须的,我们给他留着,其他的随便改改,把数据流名称(也就是变量名)改成你自己的就行了,比如我的名称是led1(我后面代码也会用led1来操作)。
具体能删什么,能改什么,要学会看数据点的开发文档(很重要),比如at,文档里面说是设置的是发送的时间,我们如果不需要设置发送的时间的话,删掉就好了。
当然,json格式也很重要,有时间我可能大概应该||如果我不懒的话,就会有几率出一篇专门讲json格式的了,大家当务之急是先学会怎么使用esp8266和onenet进行物联网操作,进行成功一次物联网的使用之后,后面当然是一帆风顺啦~~~~~

这时候,加亿点点我们的思考,就可以修改成功了,比如我这样:
在这里插入图片描述

{
    "datastreams": [{
            "id": "led1",
            "datapoints": [{
                    "value": "1"
                }           ]
        }
     ]
}

看不懂?没关系,你可能只是英语和我一样烂而已,听我再罗里吧嗦一句:
上面那一段json代码的意思是

{
    "数据流": [
        {
            "数据流名称": "led1",
            "数据流的数据(数据点)": [
                {
                    "数据的值": "1"
                }
            ]
        }
    ]
}

看到了吗?我们能改的两个很明显就出来了,led1(名字),数据的值(value),都是可以随你改的,这样子翻译成中文也很容易理解json的意思了,那些标点符号都是json该有的标点符号,具体大家可以去看看太极创客的物联网开发视频,有很详细的讲解。

在这里插入图片描述
点击发我们led1灯的数据流就会收到这个了在这里插入图片描述

(三)在线控制,编辑应用(调试)

在这里插入图片描述

应用管理–添加应用–随便写写
在这里插入图片描述
选择下面的小手机图标在这里插入图片描述
在这里插入图片描述
从开关里面拖个开关过去在这里插入图片描述
配置如右图所示,点击右上角预览,就可以post数据到我们的数据流led1中去了。
在这里插入图片描述

在这里插入图片描述
接下来教怎么获取数据流数据(详情参考开发文档):
在这里插入图片描述

请求方式:GET
URL:
http://api.heclouds.com/devices/device_id/datastreams/datastream_id
device_id:需要替换为设备ID
datastream_id:需要替换为数据流ID

比如我的:
http://api.heclouds.com/devices/736615010/datastreams/led1
在这里插入图片描述

返回来的数据是这样的:
{
    "errno": 0,
    "data": {
        "update_at": "2021-06-22 16:03:21",
        "id": "led1",
        "create_time": "2021-06-22 15:17:33",
        "current_value": 0
    },
    "error": "succ"
}
errno:0表示没有错误
update_at是上一次更新数据的时间
id(名称):led1
create_time是创建时间
current_value:0 是目前的数据是0
error:succ表示获取成功

(四)使用arduino IDE开发esp8266 连接onenet

先安装esp8266的库,推荐使用离线包,或者最新版的米思齐的方式去安装下载。

链接:https://pan.baidu.com/s/1ufE2SMyFR8OmAayjqlQMHg
提取码:1234
离线包下载地址

安装完之后,打开arduinoIDE,输入以下代码,可以就可以对我们的esp8266进心开关灯的控制了


#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>

const char *ssid     = "adan";//这里写入网络的ssid
const char *password = "88888888";//wifi密码
const char *host = "183.230.40.33";//onenet的网关节点
byte mark, a, b;
WiFiClient client;
const int tcpPort = 80;//修改为你建立的Server服务端的端口号,此端口号是创建服务器时指定的。
uint8_t LED = 2;           //esp8266--01s的板载小灯是2号引脚
String led1;

void setup() {
  Serial.begin(115200);
  pinMode(LED, OUTPUT);
  delay(10);
  Serial.println();
  Serial.print("Connecting to ");//会通过usb转tll模块发送到电脑,通过ide集成的串口监视器可以获取数据。
  Serial.println(ssid);
  WiFi.begin(ssid, password);//启动
  //在这里检测是否成功连接到目标网络,未连接则阻塞。
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.println(".");
  }
  //几句提示
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  // 设置睡眠模式(可选参数:WIFI_NONE_SLEEP、WIFI_LIGHT_SLEEP、WIFI_MODEM_SLEEP )
  WiFi.setSleepMode(WIFI_LIGHT_SLEEP);
  delay(2000);
}

void loop() {
  jian_Cha();
  get_Shu_Ju();
  post_Shu_Ju();
  print_Shu_Ju();
}



void post_Shu_Ju()//上传数据
{   a++;
    if (client.connected()) {              //若连接成功,就发送POST 请求上报数据
    b++;
    String url = "http://api.heclouds.com/devices/XXXXXXXX/datapoints?type=3";  //参数type=3表示用 简洁数据格式,735131939是你在移动OneNET上创建的设备ID 不是产品的ID!!!! 一定要记住
    client.print(String("POST ") + url + " HTTP/1.1\r\n");                                             //使用HTTP/1.1协议
    client.print(String("api-key: ") + "Y3B9HobXXXXXXXXLAm6PnYaM=\r\n");           //一定要改为设备的API key,不是产品的API key!!!! 一定要记住
    client.print(String("Host: ") + "api.heclouds.com\r\n");
    String data = "{'led':" + String(b) + ",'led0':" + String(a) + "}";
    //   Serial.write("data:");
    //   Serial.print(data);
    //   Serial.print(String(data.length()));
    //   Serial.print("Content-Length:" + String(data.length()) + "\r\n\r\n");
    client.print("Content-Length:" + String(data.length()) + "\r\n\r\n");
    client.print(data);
  }
  // client.stop();                     //关闭HTTP客户端
  delay(4000);
}



void get_Shu_Ju() //获取数据
{
  if (client.connected()) {
    String url = "http://api.heclouds.com/devices/7XXXXXX10/datastreams/led1?type=3";  //735131939是你在移动OneNET上创建的设备ID 不是产品的ID!!!! 一定要记住
    client.print(String("GET ") + url + " HTTP/1.1\r\n");                                             //使用HTTP/1.1协议
    client.print(String("api-key: ") + "Y3B9HXXXXXXXXXXXXXR4LAm6PnYaM=\r\n");           //一定要改为设备的API key,不是产品的API key!!!! 一定要记住
    client.print(String("Host: ") + "api.heclouds.com\r\n\r\n");
    delay(4000);
  }
}

void print_Shu_Ju()    //打印数据
{
  String shuju;
  while (client.available())//available()表示是否可以获取到数据
  {
    shuju += char(client.read());
    delay(2);
    mark = 1;
  }

  if (mark == 1)   //获取到数据后 就可以对数据进心处理了  比如点灯
  {
    Serial.println(shuju); //串口打印我们的数据
    led1  = String(shuju).substring(295, 296);        //赋值led灯是shuju的第295个数据到第296个数据
    Serial.println(led1); //串口打印我们的数据

    if (led1 == "1") {
      digitalWrite(LED, HIGH);
    }
    if (led1 == "0") {
      digitalWrite(LED, LOW);
    }
    mark = 0;     //清除获取的数据的标志位
  }
}


void jian_Cha()   //检查  检查是否连接的上服务器,如果没连接 就一直在连接,并且卡死在这里  出不去
{
  while (!client.connected())//若未连接到服务端,则客户端进行连接。
  {
    if (!client.connect(host, tcpPort))//实际上这一步就在连接服务端,如果连接上,该函数返回true,就可以跳出这个函数了
    {
      Serial.print("connection....");
      delay(500);
    }
  }
}







然后我们对我的代码进行一些小改动:
在这里插入图片描述
然后是post函数里面:

在这里插入图片描述
接着是get函数里面:
在这里插入图片描述

在这里插入图片描述

点击工具,选择Generic ESP8266 Module(esp8266通用,esp8266有很多种分类,没特殊要求选通用的就好),然后编译,上传,ok搞定。

这个时候就可以在我们的串口上看到我们的数据了:

在这里插入图片描述

因为我现实中还有期末作业,以及各种事情要去做,所以还有很多细节的东西,比如说怎么样用arduino解析json格式,怎么样用索引去找数据“{}”(我代码里面是一个一个的去找,这样子多多少少有点人工智障的味道),以及怎么样用App Inventor 去做一个app去发送信号控制,还有就是#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>,这两个库函数的函数解释,等等。这些等我有空再做一下了,大家初步对物联网有一个认识,这终归是件好事,说白了,物联网很简单的,看我的循环函数(void loop函数),总共就三个东西,一是发送数据,二是获取数据,三是打印数据处理数据,就这么简单。

所以,大家跟着做到这里,基本上可以对物联网有一个初步的了解和认识了。
喜欢的话,可以点个关注,以后有空,可以更新一下物联网后续和其他知识- -+
在这里插入图片描述

  • 11
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
连接 OneNet 平台需要以下几个步骤: 1. 注册 OneNet 账号并创建设备 首先,你需要注册一个 OneNet 账号,登录后创建一个设备。在设备创建页面,你可以设置设备名称、类型、描述等信息。创建成功后,你会得到设备的 ID 和 API Key,这些信息在后面的开发中会用到。 2. 准备 ESP8266 开发环境 ESP8266 是一款常用的物联网开发,在连接 OneNet 之前,需要先搭建好 ESP8266 的开发环境。具体步骤如下: - 下并安装 Arduino IDE; - 安装 ESP8266 开发支持,可以参考官方文档; - 在 Arduino IDE 中选择 ESP8266 开发,并设置好端口和上传速率。 3. 编写 ESP8266 代码 编写 ESP8266 代码,实现连接 OneNet 平台并上传数据。具体步骤如下: - 首先,在代码中定义设备 ID 和 API Key; - 然后,通过 WiFi 模块连接无线网络; - 接着,连接 OneNet 平台并建立 TCP 连接; - 最后,上传数据到 OneNet 平台。 下面是一个示例代码,你可以根据自己的需要进行修改: ``` #include <ESP8266WiFi.h> #include <WiFiClient.h> const char* ssid = "your_SSID"; // 无线网络名称 const char* password = "your_PASSWORD"; // 无线网络密码 const char* server = "api.heclouds.com"; // OneNet 平台地址 const char* device_id = "your_DEVICE_ID"; // 设备 ID const char* api_key = "your_API_KEY"; // API Key WiFiClient client; void setup() { Serial.begin(9600); delay(10); // 连接无线网络 Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); } void loop() { // 连接 OneNet 平台 if (!client.connect(server, 6002)) { Serial.println("Connection failed"); return; } // 上传数据到 OneNet 平台 String data = "{\"datastreams\":[{\"id\":\"temperature\",\"datapoints\":[{\"value\":\"25.5\"}]}]}"; String url = "/devices/" + String(device_id) + "/datapoints"; String header = "POST " + url + " HTTP/1.1\r\n" + "Host: " + String(server) + "\r\n" + "api-key: " + String(api_key) + "\r\n" + "Content-Type: application/json\r\n" + "Content-Length: " + String(data.length()) + "\r\n\r\n"; client.print(header + data); delay(1000); } ``` 4. 部署 OneNet 平台 部署 OneNet 平台,接收 ESP8266 上传的数据,并进行处理。具体步骤如下: - 登录 OneNet 控制台,选择“产品开发”->“数据流转”; - 在“数据流转”页面,选择“HTTP 服务”并创建一个新的 HTTP 服务; - 在“HTTP 服务”页面,设置好服务名称、URL 和数据格式,并保存; - 最后,部署服务并测试是否能够接收 ESP8266 上传的数据。 至此,ESP8266 连接 OneNet 平台的详细教程就介绍完了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

创客阿蛋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值