樹莓派將DHT11溫度溼度上傳到阿里雲物聯網平臺

樹莓派將DHT11溫度溼度上傳到阿里雲物聯網平臺

1、自定義功能

在這裏插入圖片描述
在這裏插入圖片描述
添加的過程就是如此,因爲溫度是有小數點的,所以用float比較好,其他的比如時間等等也可以使用text類型,視情況而定。
定義好之後就可以發佈了,當前只有一個溫度,還需要添加是溼度。


2、環境準備
  • 下載Node.js
  • 安裝mtqq庫
npm install aliyun-iot-mqtt -S
  • 安裝阿里雲SDK
sudo pip install aliyun-python-sdk-core
sudo pip install aliyun-python-sdk-iot
3、代碼
#-*- coding: utf-8 -*-
import aliyunsdkiotclient.AliyunIotMqttClient as iot
import json
import multiprocessing
import time
import random
import RPi.GPIO as gpio
import sys
import os
options = {
    'productKey': '你的產品號',
    'deviceName': '你的產品名稱',
    'deviceSecret': '密碼',
    'port': 1883,
    'host': 'iot-as-mqtt.cn-shanghai.aliyuncs.com'
}

def GetDTH():
    gpio.setwarnings(False)
    gpio.setmode(gpio.BCM)
    time.sleep(1)
    data = []

    def delay(i):  # 20*i usdelay
        a = 0
        for j in range(i):
            a + 1

    j = 0
    # start work
    gpio.setup(21, gpio.OUT)
    # gpio.output(12,gpio.HIGH)
    # delay(10)
    gpio.output(21, gpio.LOW)
    time.sleep(0.02)
    gpio.output(21, gpio.HIGH)
    i = 1
    i = 1

    # wait to response
    gpio.setup(21, gpio.IN)

    while gpio.input(21) == 1:
        continue

    while gpio.input(21) == 0:
        continue

    while gpio.input(21) == 1:
        continue
    # get data

    while j < 40:
        k = 0
        while gpio.input(21) == 0:
            continue

        while gpio.input(21) == 1:
            k += 1
            if k > 100: break
        if k < 20:
            data.append(0)
        else:
            data.append(1)
        j += 1

    print("Sensor is working")
    # get temperature
    humidity_bit = data[0:8]
    humidity_point_bit = data[8:16]
    temperature_bit = data[16:24]
    temperature_point_bit = data[24:32]
    check_bit = data[32:40]

    humidity = 0
    humidity_point = 0
    temperature = 0
    temperature_point = 0
    check = 0

    for i in range(8):
        humidity += humidity_bit[i] * 2 ** (7 - i)
        humidity_point += humidity_point_bit[i] * 2 ** (7 - i)
        temperature += temperature_bit[i] * 2 ** (7 - i)
        temperature_point += temperature_point_bit[i] * 2 ** (7 - i)
        check += check_bit[i] * 2 ** (7 - i)

    tmp = humidity + humidity_point + temperature + temperature_point
   
    if check == tmp:
        print("temperature is ", temperature, ".", temperature_point, "*C", "wet is ", humidity, ".", humidity_point,
               "%")
        s=temperature+temperature_point*0.1
        m=humidity+humidity_point*0.1
        return s,m
    else:
        print("file")
        return 0, 0


host = options['productKey'] + '.' + options['host']



def on_message(client, userdata, msg):

    print(msg.payload)
    setjson = json.loads(msg.payload)


def on_connect(client, userdata, flags_dict, rc):
    print("Connected with result code " + str(rc))


def on_disconnect(client, userdata, flags_dict, rc):
    print("Disconnected.")


def worker(client):
    topic = '/sys/' + options['productKey'] + '/' + options['deviceName'] + '/thing/event/property/post'
    while True:
        file =open("/sys/class/thermal/thermal_zone0/temp",'r')
        temp = float(file.read())/1000
        file.close()
        time.sleep(5)
        T, H = GetDTH()
        print('T=', T, 'H=', H)

        if T != 0 or H != 0:
            payload_json = {
                'id': int(time.time()),
                'params': {
                    'CurrentTemperature':temp,
                    'Temperature': T,  # random.randint(20, 30),
                    'Humidity': H,  # random.randint(40, 50)
                },
                'method': "thing.event.property.post"
            }

            print('send data to iot server: ' + str(payload_json))
            client.publish(topic, payload=str(payload_json))


if __name__ == '__main__':
    client = iot.getAliyunIotMqttClient(options['productKey'], options['deviceName'], options['deviceSecret'],
                                        secure_mode=3)
    client.on_connect = on_connect
    client.on_disconnect = on_disconnect
    client.on_message = on_message
    client.connect(host=host, port=options['port'], keepalive=60)

    p = multiprocessing.Process(target=worker, args=(client,))
    p.start()
    client.loop_forever()

裏面的代碼是可以直接可以使用的,修改好自己的產品信息,然後將DHT11中數據引腳修改一下就可以了。然後注意的是params中的key要與阿里雲定義的標識符相同,運行之後纔會傳送到阿里雲中去。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章