Esp32读取温湿度数据通过mqtt上传阿里云平台

目录

 

前言

一、esp32刷MicroPython固件库

二、创建阿里云产品

1.注册阿里云账号并登录控制台

2.找到物联网平台中的公共实例进入

3.创建产品及设备

4.编辑物模型并发布

5.最后找到刚创建的产品设备查看DeviceSecret一键复制

6.打开mqtt单片机编程工具将刚才复制的设备证书复制进去得到设备三元组用于后面的编程

三、读取温湿度及光照数据通过mqtt上传阿里云

四、设置产品规则引擎

五、应用层的实现


 

前言

本人是个物联网小白,最近做了个课设有点小心得,在这里记录下。


内容主要是基于esp32读取温湿度以及光照强度然后连接路由器通过mqtt协议上传数据到阿里云服务器,最后显示到微信小程序界面,并且可以通过发布主题达到控制传感层的led以及蜂鸣器。

一、esp32刷MicroPython固件库

1、安装MicroPython开发环境uPyCraft

Esp32读取温湿度数据通过mqtt上传阿里云平台_第1张图片

2.选择固件库的.bin文件和COM口刷固件

Esp32读取温湿度数据通过mqtt上传阿里云平台_第2张图片

Esp32读取温湿度数据通过mqtt上传阿里云平台_第3张图片

3.按住esp32开发板的BOOT按钮,直到出现如下界面,则刷新开始

Esp32读取温湿度数据通过mqtt上传阿里云平台_第4张图片

3.运行如下代码,如果esp32开发板上的led闪烁则成功。

Esp32读取温湿度数据通过mqtt上传阿里云平台_第5张图片

二、创建阿里云产品

1.注册阿里云账号并登录控制台

Esp32读取温湿度数据通过mqtt上传阿里云平台_第6张图片

 

2.找到物联网平台中的公共实例进入

Esp32读取温湿度数据通过mqtt上传阿里云平台_第7张图片

3.创建产品及设备

Esp32读取温湿度数据通过mqtt上传阿里云平台_第8张图片

 

Esp32读取温湿度数据通过mqtt上传阿里云平台_第9张图片

4.编辑物模型并发布

Esp32读取温湿度数据通过mqtt上传阿里云平台_第10张图片

Esp32读取温湿度数据通过mqtt上传阿里云平台_第11张图片

5.最后找到刚创建的产品设备查看DeviceSecret一键复制

Esp32读取温湿度数据通过mqtt上传阿里云平台_第12张图片

6.打开mqtt单片机编程工具将刚才复制的设备证书复制进去得到设备三元组用于后面的编程

Esp32读取温湿度数据通过mqtt上传阿里云平台_第13张图片

 

三、读取温湿度及光照数据通过mqtt上传阿里云

代码如下:

from umqtt.simple import MQTTClient
from machine import ADC, Pin
import network
import time
import machine
import dht
from machine import Timer
#wifi账号密码
SSID="dmx"
PASSWORD="dmx12593"
#阿里云mqtt服务器域名(改成自己的)
SERVER ='a1mryuZf1Md.iot-as-mqtt.cn-shanghai.aliyuncs.com'
#三元组(找到mqtt工具上对应的改)
CLIENT_ID = "esp32|securemode=3,signmethod=hmacsha1,timestamp=789|"   
username='esp32&a1mryuZf1Md'
password='91eb97701704ffb99977a313c74a7502b8cecb3e'
#这个topic改成matt工具的属性上报那一行
publish_TOPIC = '/sys/a1mryuZf1Md/esp32/thing/event/property/post'
subscribe_TOPIC ='/a1mryuZf1Md/esp32/user/dmx123'
client=None
mydht=None
def sub_cb(topic, msg):  
     print(msg)
    
     if msg == b'{"Led":1}':
       led.value(1)
     elif msg == b'{"Led":0}':
       led.value(0)
     elif msg == b'{"Beep":1}':
       beep.value(1)
     elif msg == b'{"Beep":0}':
       beep.value(0)
      

    
def ConnectWifi(ssid,passwd):   #连接wifi
    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:
        wsData=ReadTemHum()
        Light=ReadLight()
        Led=led.value()
        Beep=beep.value()
        
        mymessage='{"params": {"Temp": %d ,"Hum": %d ,"Light": %d,"Led":%d,"Beep":%d}, "method": "thing.event.property.post"}'%(wsData[0],wsData[1],Light,Led,Beep)
        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
    
def ReadLight():
   adcData=mylight.read()
   Lightvalu=10240000/(adcData*1.1)-2500 #adc转换
   Light=round(Lightvalu)  #取整
   print(Light)
   return Light
    
if __name__=='__main__':
    try:
        mydht=dht.DHT11(machine.Pin(4)) 
        mylight=ADC(machine.Pin(34))
        led=Pin(2,Pin.OUT)
        beep=Pin(5,Pin.OUT)
        led.value(0)
        beep.value(0)
        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)



Esp32读取温湿度数据通过mqtt上传阿里云平台_第14张图片

Esp32读取温湿度数据通过mqtt上传阿里云平台_第15张图片

注意:这里上传的数据格式因为阿里云物模型上报规定需要加上params及method。还有上传的数据的键值 需要和你设置的物模型的标识符一致

 

eg:{"params":

{"Temp": %d ,

"Hum": %d ,

"Light": %d,

"Led":%d,

"Beep":%d},

"method": "thing.event.property.post"}

Esp32读取温湿度数据通过mqtt上传阿里云平台_第16张图片

四、设置产品规则引擎

规则引擎中的云产品流转主要是为了实现两个设备之间的通信,从一个设备的topic转发到另一个设备的topic,从而实现数据的传输。也就是说可以将感知层获得的数据转发到应用层显示。下面开始设置云产品流转规则:

1.首先需要在同一个产品中继续创建一个设备phone代表应用端拿到esp32发过来的数据

Esp32读取温湿度数据通过mqtt上传阿里云平台_第17张图片

2.然后创建规则引擎用于转发数据

处理数据

Esp32读取温湿度数据通过mqtt上传阿里云平台_第18张图片

转发数据到phone设备的topic上

Esp32读取温湿度数据通过mqtt上传阿里云平台_第19张图片

3.然后用阿里云的mqtt调试助手模拟应用端接收数据

Esp32读取温湿度数据通过mqtt上传阿里云平台_第20张图片

4.最后订阅云流转中转发的topic

Esp32读取温湿度数据通过mqtt上传阿里云平台_第21张图片

5.成功收到数据

Esp32读取温湿度数据通过mqtt上传阿里云平台_第22张图片

Esp32读取温湿度数据通过mqtt上传阿里云平台_第23张图片

6.最后最后,在同理创建一个由phone设备转发到esp32设备的规则引擎,用于转发数据控制传感层的led和蜂鸣器。

Esp32读取温湿度数据通过mqtt上传阿里云平台_第24张图片

测试

Esp32读取温湿度数据通过mqtt上传阿里云平台_第25张图片

Esp32读取温湿度数据通过mqtt上传阿里云平台_第26张图片

7.成功亮灯!!!!

五、应用层的实现

前面用的mqtt模拟器成功实现了数据的传输,接下来就可以开始编写微信小程序实现数据的显示及底层的控制

Esp32读取温湿度数据通过mqtt上传阿里云平台_第27张图片

小程序端的具体实现代码等下次有空在搞

未完待续。。。。。。。

 

你可能感兴趣的:(物联网,mqtt,阿里云,小程序,python)