借助onenet平台,温湿度远端采集

 

    对传感器什么的感兴趣有一段时间了,入手了adiuno初级的配套零件,对着B站有模有样的学了起来。
一、本地回显    

      我买的是国产的Arduino uno板子,意大利的板子会贵些。先是安装Arduino IDE,就是板子的开发软件,再安装CH340G芯片USB的驱动,就可以对Arduino板写程序了,Arduino板上有许多供输入输出的引脚,还有一些5V、GED引脚。
     我测试了温湿度的程序,温湿度传感器用的是DHT11,这个也要下驱动“DHT_sensor_library-1.4.0”和“Adafruit_Sensor”,连上16*2的LCD显示屏也要下载驱动“LiquidCrystal_I2C”,编码,上传。程序可显示温湿度,当温度超过25度时,蜂鸣器(D7引脚)报警,
硬件连接方法:
1. 连接LCD: PCF8574T模块4pin(Gnd, Vcc, SDA i2c数据, SCL i2c时钟) 连接至Arduino接口 Gnd -> Gnd, Vcc -> Vcc, SDA -> A4, SDL -> A5
2. 连接YL-47 DHT11: Gnd -> Gnd, Vcc -> Vcc, Data-> D4

Arduino uno代码如下:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>
LiquidCrystal_I2C lcd(0x27,16,2);
DHT dht(4,DHT11);
void setup() {
 pinMode(7,OUTPUT);
 lcd.init();
 lcd.backlight();
 Serial.begin(9600);
 dht.begin(); //DHT开始工作
lcd.setCursor(0,0); // line 0, pos 0
lcd.print("Good lucky!");
lcd.setCursor(0,1);
lcd.print("Waiting...");
delay(1100);
}

void loop() {
 // 两次检测之间,要等几秒钟,这个传感器有点慢。
  delay(2500);
  // 读温度或湿度要用250毫秒
  float h = dht.readHumidity();//读湿度
  float t = dht.readTemperature();//读温度,默认为摄氏度
  float f = dht.readTemperature(true);
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println("Failed to read from DHT sensor!");
    lcd.setCursor(0,0); // line 0, pos 0
    lcd.print("Time out error");
    lcd.setCursor(0,1); // line 0, pos 0
    lcd.print("               ");
    return;
  }
  Serial.print("Humidity: ");//湿度
  Serial.println(h);
  Serial.print("Temperature: ");//温度
  Serial.print(t);
  Serial.println(" ℃ ");
  lcd.setCursor(0,0); // line 0, pos 0
  lcd.print("Hum:");
  lcd.print(h);
  lcd.print(" %     ");
  lcd.setCursor(0,1); // line 1, pos 0
  lcd.print("Tem:");
  lcd.print(t);
  lcd.write(0xDF);
  lcd.print("C");
  delay(1000);
  if (t > 25) {
  tone(7,587);
  delay(1500);
  }else{
    noTone(7);
    }
}

本地的回显:

二、与中移onenet平台对接

       中移ONENET是中国移动物联网开放平台是由中国移动打造的PaaS物联网开放平台。平台能够帮助开发者轻松实现设备接入与设备连接,提供综合性的物联网解决方案,我用的是非常常用的HTTP协议接入的,平台还支持MQTT和自己独有的EDP协议等接入。

      想要把温湿度显示到远端,就要加上ESP8266板子,ESP8266带WIFI模块,首先我是利用TCP调试助手,在局域网中实现温湿度显示,局域网手机APP我用的是nettorch,要保持手机APP和ESP8266同一网段即可。ESP8266代码如下:

include <ESP8266WiFi.h>

//wifi密码及ssid
const char *ssid     = "HUAWEI-xxxx";
const char *password = "xxxxxxxx";
//目标服务器ip即端口号
const char *host = 192.168.3.14; //服务器手机局域网IP
const int tcpPort = 80;                 //Server服务端的端口号

WiFiClient client;//tcpclient实例

void setup() {
  //启动串口通信
  Serial.begin(9600);

  delay(10);

  //连接到WiFi
  WiFi.begin(ssid, password);

  //处理未连接异常
  while(WiFi.status() != WL_CONNECTED)
  {
    delay(100);
  }
}

void loop() {
  //处理未连接到服务器异常
  while(!client.connected())
  {
    if(!client.connect(host, tcpPort))
    {
      delay(500);
    }
  }
  //透传数据
  while (client.available())//读取到的数据转发到到串口
  {
      uint8_t c = client.read();
      Serial.write(c);
  }


  if (Serial.available())//串口读取到的转发到wifi,因为串口是一位一位的发送所以在这里缓存完再发送
  {
      size_t counti = Serial.available();
      uint8_t sbuf[counti];
      Serial.readBytes(sbuf, counti);
      client.write(sbuf, counti);

  }

}

局域网测试好后,就要上云了,在ONENET注册,选择“HTTP”协议,再创建产品,创建产品时会产生Master-APIkey和设备ID,这个会在接入时用到。

ESP8266上需要修改如下,其他命令都一样。

const char *host = "api.heclouds.com"; //若无DNS,使用Server服务端的IP 183.230.40.33
const int tcpPort = 80;                 //Server服务端的端口号

Arduino uno上再加入如下代码:

String url = "/devices/664881066/datapoints?type=3";  //参数type=3表示用 简洁数据格式,664881066的设备ID
Serial.println(String("POST ")+url+" HTTP/1.1");                                                 //使用HTTP/1.1协议
Serial.println(String("api-key:")+"MwdhDyLRHHsLNpLI3gqN3Bi29EQ=");             //需改为自己的主密钥 即Master-APIkey
Serial.println(String("Host:")+"api.heclouds.com");
Serial.println("Connection:close");
Serial.println("Content-Length:29");
 //Serial.print("{\"datastreams\":[{\"id\":\"SoilHUM\",\"datapoints\":[{\"value\":");
//Serial.print(h);
//Serial.println("}]}]}");
 // delay(1000);
Serial.println("");
Serial.print("{\"TEM\":");
Serial.print(t);
Serial.print(",");
Serial.print("\"SoilHUM\":");
Serial.print(h);
Serial.println("}");

这样,就能在ONENET网站上或是ONENET的APP手机上查看家里的温湿度了:

我的全部家当,加了一个继电器模块,想控制LED小灯,需要数据的交互,可能HTTP协议就不行了,再琢磨吧。

 

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 要将温湿度数据上传到OneNet平台,您需要使用ESP8266模块与OneNet API进行通信。以下是一个简单的ESP8266代码示例,用于上传温湿度数据到OneNet平台: ``` #include <ESP8266WiFi.h> #include <WiFiClient.h> #include <OneWire.h> #include <DallasTemperature.h> #define ONE_WIRE_BUS 2 // Replace with your OneNet API Key and Device ID const char* apiKey = "Your OneNet API Key"; const char* deviceId = "Your OneNet Device ID"; OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); WiFiClient client; void setup() { Serial.begin(115200); WiFi.begin("Your SSID", "Your Password"); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } sensors.begin(); } void loop() { sensors.requestTemperatures(); float temperature = sensors.getTempCByIndex(0); float humidity = sensors.getHumidity(); if (isnan(temperature) || isnan(humidity)) { Serial.println("Failed to read temperature and humidity from DHT sensor!"); return; } if (client.connect("api.heclouds.com", 80)) { String data = String("{\"temperature\":") + String(temperature) + String(",\"humidity\":") + String(humidity) + String("}"); String url = String("/devices/") + String(deviceId) + String("/datapoints"); client.println(String("POST ") + url + String(" HTTP/1.1")); client.println(String("Host: api.heclouds.com")); client.println(String("api-key: ") + apiKey); client.println("Connection: close"); client.println("Content-Type: application/json"); client.print("Content-Length: "); client.println(data.length()); client.println(); client.println(data); Serial.println("Data sent to OneNet!"); } else { Serial.println("Failed to connect to OneNet!"); } delay(60000); } ``` 在代码中,您需要将“Your OneNet API Key”和“Your OneNet Device ID”替换为您自己的API Key和Device ID。此外,您还需要将温湿度数据上传到OneNet平台上,可以使用ESP8266模块和DHT11传感器实现。下面是一个基本的代码框架,可以帮助您开始: ```c++ #include <ESP8266WiFi.h> #include <OneWire.h> #include <DallasTemperature.h> #include <WiFiClient.h> #include <ESP8266HTTPClient.h> // 替换成您的网络信息 const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; const char* server = "api.heclouds.com"; String device_id = "your_DEVICE_ID"; String api_key = "your_API_KEY"; #define ONE_WIRE_BUS 2 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); void setup() { Serial.begin(115200); WiFi.begin(ssid, password); Serial.println("Connecting to WiFi"); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("."); } Serial.println("Connected to WiFi"); sensors.begin(); } void loop() { sensors.requestTemperatures(); float temperature = sensors.getTempCByIndex(0); float humidity = getHumidity(); // 通过DHT11传感器获取湿度值 if (isnan(temperature) || isnan(humidity)) { Serial.println("Failed to read from sensor"); return; } // 将温湿度数据上传到OneNet平台WiFiClient client; HTTPClient http; String url = "/devices/" + device_id + "/datapoints?type=3"; String payload = "{\"temperature\":{\"value\":\"" + String(temperature) + "\"},\"humidity\":{\"value\":\"" + String(humidity) + "\"}}"; if (http.begin(client, server, url)) { http.addHeader("api-key", api_key); http.addHeader("Content-Type", "application/json"); int httpCode = http.POST(payload); String response = http.getString(); Serial.println(httpCode); Serial.println(response); http.end(); } else { Serial.println("Unable to connect"); } delay(10000); } float getHumidity() { // 读取DHT11传感器的数据并计算湿度值 // 在这里添加您自己的代码 return 0.0; } ``` 在此代码中,您需要将代码中的网络信息(ssid和password)替换为您自己的Wi-Fi网络信息,将设备ID(device_id)和API密钥(api_key)替换为您在OneNet平台上创建的设备ID和API密钥。 此代码使用HTTP POST请求将温湿度数据上传到OneNet平台上。请注意,此代码仅上传了温湿度数据,并且假设您已经可以通过DHT11传感器获取湿度值。如果您还没有设置DHT11传感器,请在函数getHumidity()中添加您自己的代码以读取DHT11传感器的数据并计算湿度值。 希望这可以帮助您开始将温湿度数据上传到OneNet平台上。 ### 回答2: ESP8266是一款基于WiFi模块的微控制器,可以用于上传温湿度等数据到云平台OneNetOneNet是中国移动打造的物联网平台,提供了丰富的API接口和开发文档,支持数据收集、存储、分析和展现等多项功能。 ESP8266与温湿度传感器相结合,可以很方便地上传温湿度数据到OneNet平台进行实时监控和数据分析。下面介绍一下具体操作流程: 1. 连接ESP8266与温湿度传感器 根据传感器型号,连接相应的引脚,例如DHT11传感器可以连接到ESP8266的GPIO4引脚。确保连接无误后,上电开机。 2. 配置ESP8266参数 使用串口助手等工具连接ESP8266,输入命令 AT+GMR 查询当前固件版本。如果需要升级固件版本,可以参考官方文档进行操作。 配置ESP8266的WiFi连接信息,包括SSID和密码等参数。命令示例:AT+CWJAP="your_SSID","your_password" 3. 安装OneNet SDK 下载OneNet平台的ESP8266 SDK库文件,解压缩至Arduino库目录下。打开Arduino IDE,选择 “文件->示例->OneNET”下的“DeviceResourceWriter”例程,修改其中的APIKey、设备ID等参数,编译并上传到ESP8266。 4. 读取传感器数据并上传 在程序中添加读取温湿度传感器数据的函数,例如dht11.read(),获取温湿度传感器采集到的数据,使用OneNet SDK提供的API接口上传数据至OneNet平台,例如onenet_dp_add_float("temperature", data1),其中temperature为数据流名称,data1为温度值。 5. 监控与数据分析 在OneNet平台上注册账号,并创建相应的数据流和数据点。通过数据分析工具,可以对上传的温湿度数据进行实时监控和数据分析,例如绘制温湿度变化曲线,并设置报警门限等功能。 总之,使用ESP8266与OneNet平台结合,可以轻松实现温湿度等数据的实时监控和数据分析,对于物联网应用开发具有重要意义。 ### 回答3: ESP8266是一种用于物联网应用的Wi-Fi模块,它可以用于将温湿度数据上传到OneNet平台上,以方便用户实现对数据的远程监控和控制。 在进行ESP8266连接OneNet平台之前,需要先搭建好本地环境。用户可以通过复制ESP8266库中的样例代码,进行修改后上传到模块中,从而实现温湿度数据的上传。主要的代码如下: #include “ESP8266WiFi.h” //引用ESP8266WiFi库 #define ONENET_SERVER “api.heclouds.com” //OneNet平台服务器地址 #define ONENET_PORT 80 //OneNet平台API接口端口号 #define APIKEY “**********” //OneNet平台APIKEY WiFiClient client; //定义WiFiClient对象,用于与OneNet平台通信 float temp,hum; void setup() { Serial.begin(115200); //设置串口波特率为115200 WiFi.begin(“your WIFI name”,”your WIFI password”); //连接WiFi网络 while (WiFi.status() != WL_CONNECTED) { //等待连接成功 delay(1000); //每隔1秒检查一次状态 Serial.print(“.”); //在串口监视器上输出连接进度 } } void loop() { temp = 获取温度数据; hum = 获取湿度数据; String body = “{\”datastreams\”:[{\”id\”:\”temp\”,\”datapoints\”:[{\”value\”:\””; body += temp; body += “\”}]},{\”id\”:\”hum\”,\”datapoints\”:[{\”value\”:\””; body += hum; body += “\”}]}]}”; //设置上传数据的格式 if (client.connect(ONENET_SERVER, ONENET_PORT)) { //连接OneNet平台 Serial.println(“connected”); //在串口监视器上输出连接状态 String url = “/devices/”; url += DEVICEID; url += “/datapoints”;//设置数据上传地址 String header = “POST “+url+” HTTP/1.1\r\n”; header += “Host: “; header += ONENET_SERVER; header += “\r\napi-key: “; header += APIKEY; header += “\r\nContent-Type: application/json\r\n”; header += “Content-Length: “; header += body.length(); header += “\r\n\r\n”; //设置HTTP头 String message = header + body; client.print(message); //发送HTTP请求 Serial.println(message); //在串口监视器上输出请求信息 delay(5000); //每间隔5秒上传一次数据 } client.stop(); //停止连接 } 需要注意的是,代码中的DEVICEID需要根据用户在OneNet平台上创建的设备ID进行修改。此外,获取温湿度数据的函数需要自行编写,以保证数据的准确性和实时性。 上传温湿度数据到OneNet平台上后,用户可以在平台上创建相应的数据流和图表,实现对数据的可视化分析和实时监控。同时,OneNet平台也支持与其他应用程序的集成,例如微信公众号,用户可以通过微信公众号实时获取温湿度数据的变化,实现更加高效和方便的数据管理。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值