目录
前言
一、esp32刷MicroPython固件库
二、创建阿里云产品
1.注册阿里云账号并登录控制台
2.找到物联网平台中的公共实例进入
3.创建产品及设备
4.编辑物模型并发布
5.最后找到刚创建的产品设备查看DeviceSecret一键复制
6.打开mqtt单片机编程工具将刚才复制的设备证书复制进去得到设备三元组用于后面的编程
三、读取温湿度及光照数据通过mqtt上传阿里云
四、设置产品规则引擎
五、应用层的实现
本人是个物联网小白,最近做了个课设有点小心得,在这里记录下。
内容主要是基于esp32读取温湿度以及光照强度然后连接路由器通过mqtt协议上传数据到阿里云服务器,最后显示到微信小程序界面,并且可以通过发布主题达到控制传感层的led以及蜂鸣器。
1、安装MicroPython开发环境uPyCraft
2.选择固件库的.bin文件和COM口刷固件
3.按住esp32开发板的BOOT按钮,直到出现如下界面,则刷新开始
3.运行如下代码,如果esp32开发板上的led闪烁则成功。
代码如下:
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模拟器成功实现了数据的传输,接下来就可以开始编写微信小程序实现数据的显示及底层的控制
小程序端的具体实现代码等下次有空在搞
未完待续。。。。。。。