Arduino DHT11 树莓派上传温湿度数据至OneNET云

话不多说,应用发布链接如下,望各位大佬指正
温湿度检测

一、Arduino与DHT11连接

Arduino DHT11
VCC VCC
GND GND
D8 DATA

二、Arduino与树莓派的通信

Arduino具有丰富的外部接口,与树莓派的IO口最大的不同在于Arduino具有模拟输入接口,可以测量IO口上的模拟值。Arduino与Raspberry通过串口(Serial)通信的方案一般有两种,一是通过树莓派GPIO串口通信,第二种是通过USB串口通信。其中,Arduino与Raspberry通过USB串口不仅稳定,而且不用连接复杂的线缆。
当然,我采用USB串口通信。

三、Arduino代码

前提Arduino IDE 安装了DHT11的库
//DHT11.ino
#include 
dht11 DHT11;
#define DHT11PIN 8
void setup(){
  Serial.begin(9600);
}
 
void loop(){
      float chk = DHT11.read(DHT11PIN);
    if(Serial.available()>0)
   {
    char c=Serial.read();
    //Serial.println(c);
    if(c=='a')
    {
      Serial.println(c);
      Serial.println((float)DHT11.humidity, 2);
    }
    else if(c=='b')
    {
      Serial.println(c);
      Serial.println((float)DHT11.temperature, 2);
    }
}
}

四、树莓派python代码

  • 在实际完成是我开始无法接收到Arduino的数据,或者可以说是接收到了一个空数据
  • 解决方法:判断数据长度以接收(之前用循环语句测试出了温湿度数据长度均为10)
#encoding:utf-8
import urllib2
import json
import time
import datetime
import serial  
import random
import os
 
APIKEY = '***ycbCrDk3**********9YaQkw='  #改成你的APIKEY
  
def read1(key):
    ser=serial.Serial("/dev/ttyUSB0",9600,timeout=1)
    #也有可能是ttyACM0,跟Arduino的出产厂商和型号有关
    try:
        while 1:
            ser.write(key)
            #print("output:"+key)
            time.sleep(1)
            ser.isOpen()
            response = ser.readline()
            res=ser.inWaiting()
            #print response
            #print res
            if res==10:
                print("output:"+key)
                print response
                #print res
                break
        return response
    except:
        ser.close()


def http_put(key):
    val = read1(key) #获取Arduino的数据
    CurTime = datetime.datetime.now()
    url='http://api.heclouds.com/devices/52*******/datapoints'
    #52*******为设备号
    values={'datastreams':[{"id":"temp","datapoints":[{"at":CurTime.isoformat(),"value":val}]}]}
    #print(type(val))
    if key=='a':
        values={'datastreams':[{"id":"humidity","datapoints":[{"at":CurTime.isoformat(),"value":val}]}]}
        print("humidity:",val)
    if key=='b':
        values={'datastreams':[{"id":"temperature","datapoints":[{"at":CurTime.isoformat(),"value":val}]}]}
        print("temperature:",val)
    jdata = json.dumps(values)                  # 对数据进行JSON格式化编码
    #打印json内容
    print jdata
    #print val
    request = urllib2.Request(url, jdata)
    request.add_header('api-key', APIKEY)
    request.get_method = lambda:'POST'          # 设置HTTP的访问方式
    request = urllib2.urlopen(request)
    return request.read()

str = ("a","b")
while True:
        for i in str:     
                resp = http_put(i)
                time.sleep(0.5)

五、最终效果

Arduino DHT11 树莓派上传温湿度数据至OneNET云_第1张图片

你可能感兴趣的:(物联网,Arduino,树莓派,oneNET,温湿度)