谷动谷力

 找回密码
 立即注册
查看: 1565|回复: 0
打印 上一主题 下一主题
收起左侧

如何使用Thingsboard通过MQTT进行Raspberry Pi GPIO控制

[复制链接]
跳转到指定楼层
楼主
发表于 2021-1-18 10:34:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器设置

您将需要访问Thingsboard服务器。使用LiveDemo或《安装指南》来安装Thingsboard。

硬件和插脚列表

RaspberryPi-我们将使用RaspberryPi3ModelB,但您也可以使用其他任何型号

引线和相应的电阻

阴阳跳线

接线图

将允许控制所有可用GPIO引脚的状态,我们建议在这些引脚上连接一些LED以提高可视性。您可以使用此步骤所附的基本架构。您也可以为每个LED添加一个电阻。

步骤2:对RaspberryPi进行编程

MQTT库安装

以下命令将安装MQTTPython库:

$sudopipinstallpaho-mqtt

应用程序源代码

我们的应用程序由经过注释的单个python脚本组成。源代码可在此处获取。

您将需要修改THINGSBOARD_HOST常量以匹配Thingsboard服务器安装IP地址或主机名。如果您正在使用实时演示服务器,请使用“demo.thingsboard.io”。

ACCESS_TOKEN常量的值对应于预先配置的演示数据中的示例RaspberryPi设备。。如果您正在使用实时演示服务器,请获取预配置的“RaspberryPi演示设备”的访问令牌。

importpaho.mqtt.clientasmqtt

importRPi.GPIOasGPIO

importjson

THINGSBOARD_HOST=‘YOUR_THINGSBOARD_IP_OR_HOSTNAME’

ACCESS_TOKEN=‘RASPBERRY_PI_DEMO_TOKEN’

#WeassumethatallGPIOsareLOW

gpio_state={7:False,11:False,12:False,13:False,15:False,16:False,18:False,22:False,29:False,

31:False,32:False,33:False,35:False,36:False,37:False,38:False,40:False}

#ThecallbackforwhentheclientreceivesaCONNACKresponsefromtheserver.

defon_connect(client,userdata,rc):

print(‘Connectedwithresultcode’+str(rc))

#SubscribingtoreceiveRPCrequests

client.subscribe(‘v1/devices/me/rpc/request/+’)

#SendingcurrentGPIOstatus

client.publish(‘v1/devices/me/attributes’,get_gpio_status(),1)

#ThecallbackforwhenaPUBLISHmessageisreceivedfromtheserver.

defon_message(client,userdata,msg):

print‘Topic:’+msg.topic+‘Message:’+str(msg.payload)

#DecodeJSONrequest

data=json.loads(msg.payload)

#Checkrequestmethod

ifdata[‘method’]==‘getGpioStatus’:

#ReplywithGPIOstatus

client.publish(msg.topic.replace(‘request’,‘response’),get_gpio_status(),1)

elifdata[‘method’]==‘setGpioStatus’:

#UpdateGPIOstatusandreply

set_gpio_status(data[‘params’][‘pin’],data[‘params’][‘enabled’])

client.publish(msg.topic.replace(‘request’,‘response’),get_gpio_status(),1)

client.publish(‘v1/devices/me/attributes’,get_gpio_status(),1)

defget_gpio_status():

#EncodeGPIOsstatetojson

returnjson.dumps(gpio_state)

defset_gpio_status(pin,status):

#OutputGPIOsstate

GPIO.output(pin,GPIO.HIGHifstatuselseGPIO.LOW)

#UpdateGPIOsstate

gpio_state[pin]=status

#UsingboardGPIOlayout

GPIO.setmode(GPIO.BOARD)

forpiningpio_state:

#SetoutputmodeforallGPIOpins

GPIO.setup(pin,GPIO.OUT)

client=mqtt.Client()

#Registerconnectcallback

client.on_connect=on_connect

#Registedpublishmessagecallback

client.on_message=on_message

#Setaccesstoken

client.username_pw_set(ACCESS_TOKEN)

#ConnecttoThingsboardusingdefaultMQTTportand60secondskeepaliveinterval

client.connect(THINGSBOARD_HOST,1883,60)

try:

client.loop_forever()

exceptKeyboardInterrupt:

GPIO.cleanup()

运行应用程序

此简单命令将启动应用程序:

pythongpio.py

步骤3:数据可视化

为简化此说明,我们在每个Thingboard安装中可用的演示数据中都包含了“RaspberryPIGPIO演示仪表板”。当然,您可以修改此仪表板:调整,添加,删除小部件等。您可以通过以租户管理员身份登录来访问此仪表板。

在本地安装的情况下:

登录名:tenant@thingsboard.org

密码:租户

如果是实时演示服务器:

登录名:您的实时演示用户名(电子邮件)

密码:您的实时演示密码

有关如何获取帐户的更多详细信息,请参见实时演示页面。

登录后,打开Dashboards-》RaspberryPIGPIODemoDashboard页面。您应观察带有GPIO控制和状态面板的演示仪表板。现在,您可以使用控制面板切换GPIO的状态。结果,您将在设备和状态面板上看到LED状态更改。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|深圳市光明谷科技有限公司|光明谷商城|Sunshine Silicon Corpporation ( 粤ICP备14060730号|Sitemap

GMT+8, 2024-4-26 21:03 , Processed in 0.089384 second(s), 32 queries .

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表