如何使用Thingsboard通过MQTT进行Raspberry Pi GPIO控制
服务器设置您将需要访问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状态更改。
页:
[1]