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

目录

前言

一、esp32刷MicroPython固件库

二、创建阿里云产品

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

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

3.创建产品及设备

4.编辑物模型并发布

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

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

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

四、设置产品规则引擎

五、应用层的实现


前言

最近做了个课设有点小心得,在这里记录下。


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

一、esp32刷MicroPython固件库

1、安装MicroPython开发环境uPyCraft

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

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

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

二、创建阿里云产品

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

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

3.创建产品及设备

4.编辑物模型并发布

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

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

三、读取温湿度及光照数据通过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)



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

eg:{"params":

{"Temp": %d ,

"Hum": %d ,

"Light": %d,

"Led":%d,

"Beep":%d},

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

四、设置产品规则引擎

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

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

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

处理数据

转发数据到phone设备的topic上

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

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

5.成功收到数据

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

测试

7.成功亮灯!!!!

五、应用层的实现

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

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

未完待续。。。。。。。

  • 19
    点赞
  • 212
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 19
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

要喝肥仔水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值