基于MQTT的智能光照案例
大约 5 分钟约 1525 字
基于MQTT的智能光照案例
首先在物联数据中台中创建相应的项目,并进行页面端的发布/订阅测试。

输入项目名称:智能光照后点击确定
![完成新建项目后界面可以对项目进行[查看]或[设置]](/docs/assets/image/extra_chouce/7-2-2.png)
项目设置:
可以修改[项目名],查看[用户ID],[项目ID]
![[用户ID]及[项目ID],编写客户端程序时需要使用。](/docs/assets/image/extra_chouce/7-2-4.png)
项目查看:
可进入对项目管理
![可以对项目进行:[主题管理]、[智能物联]、[运行/停止项目]](/docs/assets/image/extra_chouce/7-2-5.png)
主题管理:
新建主题操作
![点击[主题管理],进行[新建主题] ,输入[主题名],选择[类别],完成后[确认]](/docs/assets/image/extra_chouce/7-2-6.png)
和[属性](修改)、[查看](数据)操作](/docs/assets/image/extra_chouce/7-2-7.png)
![同样方法新建一个[主题名]为[Button]的主题,主题类别为“输出主题”](/docs/assets/image/extra_chouce/7-2-8.png)
项目运行/停止操作


[运行项目]与[停止运行]可切换项目工作状态,点击主题[查看],可以查看数据详情。
查看主题
如果有上传数据,此处可以实时显示数据信息内容,要求处于[订阅状态]
查看主题与控制输出
可通过按钮或者输入的方式,针对[Button]主题,发布一个动作指令
智能物联:
设置主题间的相对逻辑关系,可用于输入与输出的关系约束
可以用于[增加]、[删除]主题间的逻辑关联
项目应用
查看配置好的[智能光照]项目的[用户ID]与[项目ID],复制后用于编写程序。

编写客户端程序,完成数据采集,并以主题名[Light]发布消息。

程序代码
from npython import * ##导入硬件相关库文件。
#智能光照测试
# 网络连接参数
ipserver="NYT_510_2.4G" #热点名称
ippass="88837306" #热点密码
#网络连接
ip=wifi.connect(ipserver,ippass)
print(ip)
oled.print(1,1,"ip="+ip,1)
# '配置网络并连接网络,其中热点名称与密码需按实际用的进行修改。'
# MQTT连接参数
server ="121.5.75.157" # MQTT服务器地址
port =1883 # MQTT服务器端口号
userId="1005"
projectId="RLO3kpH961o89dZFZlc6Lzq8iXEdtESM"
#配置MQTT
mqtt.config(server,port,projectId=projectId,userId=user
Id,keepalive=50)
#连接服务器
mqtt.connect()
# 配置MQTT服务器连接并连接到服务器,
# 其中MQTT服务器的IP地址需按实际连接的进行修改,
# 用户ID与项目ID需按实际用的进行修改。
while True:
#提示信息
oled.print(4,2,"当前环境参数",1)
data1=light.read() #获取板载光敏数据
oled.print(1,3,"光敏:"+str(data1),1)
#发布消息
mqtt.publish("Light",str(data1))#发布光敏数据
time.sleep(2)#每隔2秒上传1次数据
# 循环采集数据并发布消息,间隔2秒。
程序运行效果


网络连接与服务器连接操作
网络连接
# 网络连接参数
ipserver="NYT_510_2.4G" #热点名称
ippass="88837306" #热点密码
#网络连接
ip=wifi.connect(ipserver,ippass)
print(ip)
oled.print(1,1,"ip="+ip,1)
服务器连接
# MQTT连接参数
server ="121.5.75.157" # MQTT服务器地址
port =1883 # MQTT服务器端口号
userId="1005"
projectId="RLO3kpH961o89dZFZlc6Lzq8iXEdtESM"
#配置MQTT
mqtt.config(server,port,projectId=projectId,userId=user
Id,keepalive=50)
#连接服务器
mqtt.connect()
回调函数:用于接收到 消息后的回应(操作)程 序。参考程序回应操作 是当收到[Button]为1 时,左RGB灯亮红灯, 右RGB灯亮绿灯;当收到[Button]为0时,左右 RGB灯熄灭。
topicname='Button'#回调函数主题名
#回调函数
def event(topic,msg):#回调函数
data=str(msg.decode('uft-8'))
oled.print(1,5,data,1)#屏幕显示返回消息内容
print(str(topic)+str(data))
data1=eval(data) #转成词典
if topic ==(projectId+'/'+topicname).encode('utf-8'):
if data1['msg']=='1':
rgb.write_left(255,0,0)#左测显示红灯
rgb.write_right(0,255,0)#右测显示绿灯
time.sleep(1)
if data1['msg']=='0':
rgb.write_left(0,0,0)
rgb.write_right(0,0,0)
订阅[Button]的消息程 序代码
#订阅主题消息
mqtt.subscribe("Button",event) #按钮控制RGB灯光
while True:
#等待消息接收
mqtt.check_msg()#检查服务器待处理消息
time.sleep(2)#每隔2秒
通过服务器发送控制 测试操作,并查看客户 端的执行结果。

通过服务器发送控制测试操作,并查看客户端的执行结果
![收到[Button]为1时的效果](/docs/assets/image/extra_chouce/7-3-6.png)
![收到[Button]为0时的效果](/docs/assets/image/extra_chouce/7-3-7.png)
完成编写发布订阅互 动程序
topicname='Button'#回调函数主题名
#回调函数
def event(topic,msg):#回调函数
data=str(msg.decode('uft-8'))
oled.print(1,5,data,1)#屏幕显示返回消息内容
print(str(topic)+str(data))
带数据采集消息发布与 消息订阅处理程序的循 环程序代码。
#订阅主题消息
mqtt.subscribe("Button",event) #按钮控制RGB灯光
while True:
#提示信息
oled.print(4,2,"当前环境参数",1)
data1=light.read() #获取板载光敏数据
oled.print(1,3,"光敏:"+str(data1),1)
#发布消息
mqtt.publish("Light",str(data1))#发布光敏数据
time.sleep(1)#每隔1秒上传1次数据
#等待消息接收
mqtt.check_msg()#检查服务器待处理消息
配置智能物联并运行 智能物联。注意:智能物 联须在[项目运行]时才 起作用,并且须在控制 项目工作状态的界面, 可看到收到的[Light]主 题的数据和生成的 [Button]主题控制数据 (其数据由智能物联生成)


检验运行结果


