借助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个

红包金额最低5元

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

抵扣说明:

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

余额充值