esp32 + DHT11温湿度传感器+阿里云物联网平台实时数据显示 实现设备上云

1 课设目的

本课设是通过esp32板子搭配DHT11传感器,检测温度和湿度数据通过MQTT协议实时传输到阿里云物联网开发平台,实现设备上云。

2 阿里云环境准备

2.1开通物联网平台

我们先需要注册阿里云账号,然后开通物联网平台
网址:https://iot.console.aliyun.com/lk/summary/new

2.2 创建产品

在这里插入图片描述

当我们成功产品之后呢,将我们需要的信息记录下来:设备名以及地域名,本文提供完整的阿里云地域和可用区列表。每个地域完全独立。每个可用区完全隔离,但同一个地域内的可用区之间使用低时延链路相连。
地域和可用区之间的关系如下图所示:

在这里插入图片描述

我的设备所在地域是华北2,所以Region ID: cn-beijing

2.3查看 ProductKey, DeviceName,DeviceSecret信息

在这里插入图片描述

根据MQTT-TCP官方文档我们需要得知一机一密规则:

Y o u r P r o d u c t K e y . i o t − a s − m q t t . {YourProductKey}.iot-as-mqtt. YourProductKey.iotasmqtt.{YourRegionId}.aliyuncs.com:1883。这个是接入域名规则,其中:
${YourProductKey}:替换为设备所属产品的ProductKey。
${YourRegionId}:替换成我的设备区域ID
因此得到独一的接入域名

官方说明:

机一密、一型一密预注册认证方式:
使用设备证书(ProductKey、DeviceName和DeviceSecret)连接
mqttClientId:clientId+"|securemode=3,signmethod=hmacsha1,timestamp=13|"
mqttUsername: deviceName+"&"+productKey
mqttPassword: sign_hmac(deviceSecret,content)
根据格式要求就可以得出
CLIENT_ID = 123456|securemode=3,signmethod=hmacsha1|
username=‘mqtt_temp&g38qyn3gRew’
password=‘3484F5004B2392AE9C30B5CFDFD4D87802D3145E’
password需要用到一个密码生成工具,也可以用其他工具生成
file:///D:/Desktop/MQTT_Password/sign.html

2.4带通配符的自定义Topic

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210314003006357.png)

自定义主题中标识符是自己设定的,设定好之后不能更改,在后面的代码会用到。

2.5查看主题

在这里插入图片描述

当自定义完主题后会生成一个主题,将${deviceName}更改一下。
一个是设备属性上报,一个是云端相应属性上报,既就是每上报一条数据,平台会给个回复。
将以上内容都完成之后,就完成了环境的准备。
MQTT-TCP连接通信协议规范文档

3 本课设用到esp32 + DHT11

ESP32需要使用到MQTT库,使用网上开源的umqtt:https://github.com/micropython/micropython-lib/blob/master/umqtt.simple/umqtt/simple.py需要把这个文件导入到ESP32中。
温湿度:MicroPython本身内置了dht模块,支持DHT11、DHT22。
硬件连接
VCC <------>3V3
GND<------>GND
DAT <------>G4(根据自己定)
在这里插入图片描述

4 代码实现

from umqtt.simple import MQTTClient
from machine import Pin
import network
import time
import machine
import dht
from machine import Timer

SSID="LAPTOP-5G"
PASSWORD="lihuan12345"

SERVER ='106.15.83.29'#域名

CLIENT_ID = "123456|securemode=3,signmethod=hmacsha1|"   #设备ID
#PORT:端口号,库里面默认使用处理
username='mqtt_temp&g38qyn3gRew'
password='3484F5004B2392AE9C30B5CFDFD4D87802D3145E'
publish_TOPIC = '/sys/g38qyn3gRew/mqtt_temp/thing/event/property/post'
subscribe_TOPIC='/sys/g38qyn3gRew/mqtt_temp/thing/event/property/post_reply'
client=None
mydht=None
def sub_cb(topic, msg):
    print((topic, msg))
def ConnectWifi(ssid,passwd):
    global wlan
    wlan=network.WLAN(network.STA_IF)         #create a wlan object
    wlan.active(True)                         #Activate the network interface
    wlan.disconnect()                         #Disconnect the last connected WiFi
    wlan.connect(ssid,passwd)                 #connect wifi
    while(wlan.ifconfig()[0]=='0.0.0.0'):
        time.sleep(1)
    print(wlan.ifconfig())
 
def apptimerevent(mytimer):
    try:
        sensordata=ReadTemHum()
        mymessage='{"params": {"CurrentTemperature": %d ,"CurrentHumidity": %d }, "method": "thing.event.property.post"}'%(sensordata[0],sensordata[1])
        client.publish(topic=publish_TOPIC,msg= mymessage, retain=False, qos=0)
    except Exception as ex_results2:
        print('exception',ex_results2)
        mytimer.deinit()
def ReadTemHum():
    mydht.measure()
    tem=mydht.temperature()
    hum=mydht.humidity()
    data=[tem,hum]
    print(data)
    return data
    
if __name__=='__main__':
    try:
        mydht=dht.DHT11(machine.Pin(4)) 
        ConnectWifi(SSID,PASSWORD)
        client = MQTTClient(CLIENT_ID, SERVER,0,username,password,60)     #create a mqtt client
        print(client)
        client.set_callback(sub_cb)                         #set callback
        client.connect()                                    #connect mqtt
        client.subscribe(subscribe_TOPIC)                   #client subscribes to a topic
        mytimer=Timer(0)
        mytimer.init(mode=Timer.PERIODIC, period=5000,callback=apptimerevent)
        while True:
            client.wait_msg()                                #wait message          
    except Exception  as ex_results:
        print('exception1',ex_results)
    finally:
        if(client is not None):
            client.disconnect()
        wlan.disconnect()
        wlan.active(False)
 

在这里插入图片描述

4 总结

本次课设让我懂得了如何让设备上云的流程,DHT11传感器传感器用途,在这个艰辛的历程中,我在网上找到过很多教程,但是版本各有不同,在查阅资料的过程我是理解设备上云的流程吧,利用阿里云物联网平台的说明文档,配合书本,大概清楚是怎么回事,代码也出现很多BUG,最终也一一解决了,总的来说,我觉得这一次真是学到了东西,接下来我会利用这个物联网平台的数据接口,做一个APP或者微信小程序,将数据真正利用起来,再而就是加多的传感器做一个小项目。

参考文献…
[1]MicroPython入门 电子工业出版社
[2] https://blog.csdn.net/freemote/article/details/105322722
[3]阿里云物联网平台说

  • 21
    点赞
  • 217
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: ESP8266是一款集成了Wi-Fi模块的51单片机,可以实现物联网应用。湿度传感器是一种用于测量环境中度和湿度的设备。 在使用ESP8266和51单片机搭建湿度传感器时,首先需要连接湿度传感器到单片机的引脚。传感器通常有三个引脚,分别是VCC、GND和DATA。通过将VCC引脚连接到单片机的电源引脚,GND引脚连接到单片机的地引脚,然后将DATA引脚连接到单片机的一个可用IO引脚上。 在软件方面,我们可以使用Arduino IDE编写代码来读取传感器数据并将其发送到云端或通过串口输出。通过使用适当的库,我们可以简化与传感器的通信过程。 编写代码时,我们可以首先初始化串口进行输出,并初始化湿度传感器。然后,我们可以设置一个定时器来定期读取传感器数据。读取数据后,我们可以将数据发送到预定的目的地,例如通过Wi-Fi发送到服务器或通过串口发送到电脑。 在实际应用中,我们可以将ESP8266和51单片机与湿度传感器一起使用,以监测室内或室外的度和湿度变化。这可以用于自动化系统,例如自动调节空调或通风系统,以保持适宜的湿度。 总而言之,使用ESP8266和51单片机搭建湿度传感器可以实现湿度数据实时监测和远程传输,为物联网应用提供了可靠的基础。 ### 回答2: ESP8266是一款高性能、低功耗的Wi-Fi模块,适用于物联网项目。而51单片机是常用的微控制器,具有广泛的应用领域。湿度传感器用于测量环境的度和湿度,并将数据传输到控制器进行处理。 在使用ESP8266和51单片机进行湿度传感器的编程时,需先连接湿度传感器到单片机的GPIO引脚上。然后,通过相应的电路和代码,可以读取湿度传感器数据。 首先,在代码中需引入相应的库文件,例如DHT库以支持湿度传感器的读取。然后,定义所需的引脚和变量,配置单片机的GPIO引脚,以便与传感器通信。 接下来,通过相应的函数,读取湿度传感器的数值。将传感器返回的数值进行解析,得到度和湿度的数值。 最后,可以将得到的湿度数据通过ESP8266模块通过Wi-Fi连接发送到云服务器或其他设备上。这样,可以实现远程监控湿度数据的功能。 总之,使用ESP8266和51单片机结合湿度传感器可以实现湿度数据的监测和传输。这对于需要对环境进行实时监测的物联网项目非常实用。 ### 回答3: ESP8266是一款功能强大的Wi-Fi模块,而51单片机是一种常用的嵌入式控制器。湿度传感器是一种用于测量环境度和湿度的设备。 ESP8266和51单片机可以配合使用湿度传感器实现对环境湿度的监测和数据传输功能。具体的实现方式可以是,通过51单片机来读取湿度传感器数据,然后利用ESP8266模块的Wi-Fi功能,将数据发送到云端或其他设备。 在实际应用中,可以通过编程来配置ESP8266和51单片机之间的通信协议,使它们能够互相连接和传递数据。同时,还可以利用ESP8266模块的强大功能,如TCP/IP协议栈和Web服务器功能,使湿度数据可以通过互联网远程访问和监测。这样,用户可以通过手机、电脑等设备随时随地获取湿度数据,而无需实时接触传感器。 此外,为了保证湿度传感器的准确性和稳定性,在设计和制作过程中需要注意一些细节。例如,选择合适的传感器,注意传感器的精度和响应时间;同时,需合理布置电路和引脚连接,以及合理选择电源和信号线的布线方式,以避免干扰和故障。 总的来说,通过ESP8266和51单片机配合使用湿度传感器,可以实现对环境湿度的远程监测和数据传输,为用户提供更便利和智能化的环境管理解决方案。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值