600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 树莓派将DHT11温度湿度上传到阿里云物联网平台

树莓派将DHT11温度湿度上传到阿里云物联网平台

时间:2023-03-12 09:47:05

相关推荐

树莓派将DHT11温度湿度上传到阿里云物联网平台

树莓派将DHT11温度湿度上传到阿里云物联网平台

1、自定义功能

添加的过程就是如此,因为温度是有小数点的,所以用float比较好,其他的比如时间等等也可以使用text类型,视情况而定。

定义好之后就可以发布了,当前只有一个温度,还需要添加是湿度。

2、环境准备
下载Node.js安装mtqq库

npm install aliyun-iot-mqtt -S

安装阿里云SDK

sudo pip install aliyun-python-sdk-coresudo pip install aliyun-python-sdk-iot

3、代码

#-*- coding: utf-8 -*-import aliyunsdkiotclient.AliyunIotMqttClient as iotimport jsonimport multiprocessingimport timeimport randomimport RPi.GPIO as gpioimport sysimport osoptions = {'productKey': '你的产品号','deviceName': '你的产品名称','deviceSecret': '密码','port': 1883,'host': 'iot-as--'}def GetDTH():gpio.setwarnings(False)gpio.setmode(gpio.BCM)time.sleep(1)data = []def delay(i): # 20*i usdelaya = 0for j in range(i):a + 1j = 0# start workgpio.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 = 1i = 1# wait to responsegpio.setup(21, gpio.IN)while gpio.input(21) == 1:continuewhile gpio.input(21) == 0:continuewhile gpio.input(21) == 1:continue# get datawhile j < 40:k = 0while gpio.input(21) == 0:continuewhile gpio.input(21) == 1:k += 1if k > 100: breakif k < 20:data.append(0)else:data.append(1)j += 1print("Sensor is working")# get temperaturehumidity_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 = 0humidity_point = 0temperature = 0temperature_point = 0check = 0for 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_pointif check == tmp:print("temperature is ", temperature, ".", temperature_point, "*C", "wet is ", humidity, ".", humidity_point,"%")s=temperature+temperature_point*0.1m=humidity+humidity_point*0.1return s,melse:print("file")return 0, 0host = 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())/1000file.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_connectclient.on_disconnect = on_disconnectclient.on_message = on_messageclient.connect(host=host, port=options['port'], keepalive=60)p = multiprocessing.Process(target=worker, args=(client,))p.start()client.loop_forever()

里面的代码是可以直接可以使用的,修改好自己的产品信息,然后将DHT11中数据引脚修改一下就可以了。然后注意的是params中的key要与阿里云定义的标识符相同,运行之后才会传送到阿里云中去。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。