跳至主要內容

基于MQTT的智能光照案例

大约 5 分钟约 1525 字

基于MQTT的智能光照案例

  首先在物联数据中台中创建相应的项目,并进行页面端的发布/订阅测试。

输入项目名称:智能光照后点击确定

完成新建项目后界面可以对项目进行[查看]或[设置]
完成新建项目后界面可以对项目进行[查看]或[设置]

项目设置:

可以修改[项目名],查看[用户ID],[项目ID]

[用户ID]及[项目ID],编写客户端程序时需要使用。
[用户ID]及[项目ID],编写客户端程序时需要使用。

项目查看:

可进入对项目管理

可以对项目进行:[主题管理]、[智能物联]、[运行/停止项目]
可以对项目进行:[主题管理]、[智能物联]、[运行/停止项目]

主题管理:

新建主题操作

点击[主题管理],进行[新建主题] ,输入[主题名],选择[类别],完成后[确认]
点击[主题管理],进行[新建主题] ,输入[主题名],选择[类别],完成后[确认]
新建主题完成界面,对生成的主题可以进行[X](删除)和[属性](修改)、[查看](数据)操作
新建主题完成界面,对生成的主题可以进行[X](删除)和[属性](修改)、[查看](数据)操作
同样方法新建一个[主题名]为[Button]的主题,主题类别为“输出主题”
同样方法新建一个[主题名]为[Button]的主题,主题类别为“输出主题”

项目运行/停止操作

[运行项目]与[停止运行]可切换项目工作状态,点击主题[查看],可以查看数据详情。

查看主题

如果有上传数据,此处可以实时显示数据信息内容,要求处于[订阅状态]

查看主题与控制输出

可通过按钮或者输入的方式,针对[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时的效果
收到[Button]为1时的效果
收到[Button]为0时的效果
收到[Button]为0时的效果

完成编写发布订阅互 动程序

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]主题控制数据 (其数据由智能物联生成)

配置智能物联输入输出关系
配置智能物联输入输出关系
运行智能物联
运行智能物联

检验运行结果

当亮度小于等于200时呈现效果
当亮度小于等于200时呈现效果
当亮度大于200时呈现效果
当亮度大于200时呈现效果
上次编辑于: