背景知识视频教程
2020年完成Python开发:从零到精通 - viadeanviadean.comPython 大型课程:构建10个实际应用程序viadean.com掌握MQTT - viadeanviadean.com
我们要使车辆处理许多命令,以检查所有零件如何协同工作。 我们要执行以下命令:
{'CMD': 'LOCK_DOORS'}{'CMD': 'TURN_OFF_PARKING_LIGHTS'}{'CMD': 'SET_MAX_SPEED', 'MPH': 10}{'CMD': 'SET_MIN_SPEED', 'MPH': 1}{'CMD': 'TURN_ON_ENGINE'}{'CMD': 'TURN_ON_HEADLIGHTS'}{'CMD': 'ACCELERATE'}{'CMD': 'ROTATE_RIGHT', 'DEGREES': 45}{'CMD': 'ACCELERATE'}{'CMD': 'TURN_ON_PARKING_LIGHTS'}{'CMD': 'BRAKE'}{'CMD': 'TURN_OFF_ENGINE'}
{'CMD': 'LOCK_DOORS'}{'CMD': 'TURN_OFF_PARKING_LIGHTS'}{'CMD': 'SET_MAX_SPEED', 'MPH': 10}{'CMD': 'SET_MIN_SPEED', 'MPH': 1}{'CMD': 'TURN_ON_ENGINE'}{'CMD': 'TURN_ON_HEADLIGHTS'}{'CMD': 'ACCELERATE'}{'CMD': 'ROTATE_RIGHT', 'DEGREES': 45}{'CMD': 'ACCELERATE'}{'CMD': 'TURN_ON_PARKING_LIGHTS'}{'CMD': 'BRAKE'}{'CMD': 'TURN_OFF_ENGINE'}
{'CMD': 'LOCK_DOORS'}{'CMD': 'TURN_OFF_PARKING_LIGHTS'}{'CMD': 'SET_MAX_SPEED', 'MPH': 10}{'CMD': 'SET_MIN_SPEED', 'MPH': 1}{'CMD': 'TURN_ON_ENGINE'}{'CMD': 'TURN_ON_HEADLIGHTS'}{'CMD': 'ACCELERATE'}{'CMD': 'ROTATE_RIGHT', 'DEGREES': 45}{'CMD': 'ACCELERATE'}{'CMD': 'TURN_ON_PARKING_LIGHTS'}{'CMD': 'BRAKE'}{'CMD': 'TURN_OFF_ENGINE'}
{'CMD': 'LOCK_DOORS'}{'CMD': 'TURN_OFF_PARKING_LIGHTS'}{'CMD': 'SET_MAX_SPEED', 'MPH': 10}{'CMD': 'SET_MIN_SPEED', 'MPH': 1}{'CMD': 'TURN_ON_ENGINE'}{'CMD': 'TURN_ON_HEADLIGHTS'}{'CMD': 'ACCELERATE'}{'CMD': 'ROTATE_RIGHT', 'DEGREES': 45}{'CMD': 'ACCELERATE'}{'CMD': 'TURN_ON_PARKING_LIGHTS'}{'CMD': 'BRAKE'}{'CMD': 'TURN_OFF_ENGINE'}
{'CMD': 'LOCK_DOORS'}{'CMD': 'TURN_OFF_PARKING_LIGHTS'}{'CMD': 'SET_MAX_SPEED', 'MPH': 10}{'CMD': 'SET_MIN_SPEED', 'MPH': 1}{'CMD': 'TURN_ON_ENGINE'}{'CMD': 'TURN_ON_HEADLIGHTS'}{'CMD': 'ACCELERATE'}{'CMD': 'ROTATE_RIGHT', 'DEGREES': 45}{'CMD': 'ACCELERATE'}{'CMD': 'TURN_ON_PARKING_LIGHTS'}{'CMD': 'BRAKE'}{'CMD': 'TURN_OFF_ENGINE'}
{'CMD': 'LOCK_DOORS'}{'CMD': 'TURN_OFF_PARKING_LIGHTS'}{'CMD': 'SET_MAX_SPEED', 'MPH': 10}{'CMD': 'SET_MIN_SPEED', 'MPH': 1}{'CMD': 'TURN_ON_ENGINE'}{'CMD': 'TURN_ON_HEADLIGHTS'}{'CMD': 'ACCELERATE'}{'CMD': 'ROTATE_RIGHT', 'DEGREES': 45}{'CMD': 'ACCELERATE'}{'CMD': 'TURN_ON_PARKING_LIGHTS'}{'CMD': 'BRAKE'}{'CMD': 'TURN_OFF_ENGINE'}
{'CMD': 'LOCK_DOORS'}{'CMD': 'TURN_OFF_PARKING_LIGHTS'}{'CMD': 'SET_MAX_SPEED', 'MPH': 10}{'CMD': 'SET_MIN_SPEED', 'MPH': 1}{'CMD': 'TURN_ON_ENGINE'}{'CMD': 'TURN_ON_HEADLIGHTS'}{'CMD': 'ACCELERATE'}{'CMD': 'ROTATE_RIGHT', 'DEGREES': 45}{'CMD': 'ACCELERATE'}{'CMD': 'TURN_ON_PARKING_LIGHTS'}{'CMD': 'BRAKE'}{'CMD': 'TURN_OFF_ENGINE'}
{'CMD': 'LOCK_DOORS'}{'CMD': 'TURN_OFF_PARKING_LIGHTS'}{'CMD': 'SET_MAX_SPEED', 'MPH': 10}{'CMD': 'SET_MIN_SPEED', 'MPH': 1}{'CMD': 'TURN_ON_ENGINE'}{'CMD': 'TURN_ON_HEADLIGHTS'}{'CMD': 'ACCELERATE'}{'CMD': 'ROTATE_RIGHT', 'DEGREES': 45}{'CMD': 'ACCELERATE'}{'CMD': 'TURN_ON_PARKING_LIGHTS'}{'CMD': 'BRAKE'}{'CMD': 'TURN_OFF_ENGINE'}
{'CMD': 'LOCK_DOORS'}{'CMD': 'TURN_OFF_PARKING_LIGHTS'}{'CMD': 'SET_MAX_SPEED', 'MPH': 10}{'CMD': 'SET_MIN_SPEED', 'MPH': 1}{'CMD': 'TURN_ON_ENGINE'}{'CMD': 'TURN_ON_HEADLIGHTS'}{'CMD': 'ACCELERATE'}{'CMD': 'ROTATE_RIGHT', 'DEGREES': 45}{'CMD': 'ACCELERATE'}{'CMD': 'TURN_ON_PARKING_LIGHTS'}{'CMD': 'BRAKE'}{'CMD': 'TURN_OFF_ENGINE'}
{'CMD': 'LOCK_DOORS'}{'CMD': 'TURN_OFF_PARKING_LIGHTS'}{'CMD': 'SET_MAX_SPEED', 'MPH': 10}{'CMD': 'SET_MIN_SPEED', 'MPH': 1}{'CMD': 'TURN_ON_ENGINE'}{'CMD': 'TURN_ON_HEADLIGHTS'}{'CMD': 'ACCELERATE'}{'CMD': 'ROTATE_RIGHT', 'DEGREES': 45}{'CMD': 'ACCELERATE'}{'CMD': 'TURN_ON_PARKING_LIGHTS'}{'CMD': 'BRAKE'}{'CMD': 'TURN_OFF_ENGINE'}
{'CMD': 'LOCK_DOORS'}{'CMD': 'TURN_OFF_PARKING_LIGHTS'}{'CMD': 'SET_MAX_SPEED', 'MPH': 10}{'CMD': 'SET_MIN_SPEED', 'MPH': 1}{'CMD': 'TURN_ON_ENGINE'}{'CMD': 'TURN_ON_HEADLIGHTS'}{'CMD': 'ACCELERATE'}{'CMD': 'ROTATE_RIGHT', 'DEGREES': 45}{'CMD': 'ACCELERATE'}{'CMD': 'TURN_ON_PARKING_LIGHTS'}{'CMD': 'BRAKE'}{'CMD': 'TURN_OFF_ENGINE'}
{'CMD': 'LOCK_DOORS'}{'CMD': 'TURN_OFF_PARKING_LIGHTS'}{'CMD': 'SET_MAX_SPEED', 'MPH': 10}{'CMD': 'SET_MIN_SPEED', 'MPH': 1}{'CMD': 'TURN_ON_ENGINE'}{'CMD': 'TURN_ON_HEADLIGHTS'}{'CMD': 'ACCELERATE'}{'CMD': 'ROTATE_RIGHT', 'DEGREES': 45}{'CMD': 'ACCELERATE'}{'CMD': 'TURN_ON_PARKING_LIGHTS'}{'CMD': 'BRAKE'}{'CMD': 'TURN_OFF_ENGINE'}
确保Mosquitto服务器或您可能要在此示例中使用的任何其他MQTT服务器正在运行。
启动MQTT.fx并按照
单击“订阅”,然后在“订阅”按钮左侧的下拉菜单中输入Vehicles / vehiclepi01 / executecommands。 然后,单击“订阅”按钮。 MQTT.fx将在左侧显示一个新面板,其中包含我们已订阅且QoS级别为0的主题过滤器。
然后,执行以下行以在要用作使用Linux或macOS的MQTT客户端的任何计算机或设备中启动车辆控制器示例:
python3 subscribe_with_paho.py
在Windows中,您必须执行以下行:
python subscribe_with_paho.py
保持代码在本地计算机或在此示例中选择用作车辆控制器的IoT板上运行。
在MQTT.fx中,单击“发布”,然后在“发布”按钮左侧的下拉菜单中输入Vehicles / vehiclepi01 / commands。 单击QoS 2,因为我们要使用QoS级别2。
在“发布”按钮下方的文本框中输入以下文本:{'CMD': 'LOCK_DOORS'}
然后,单击“发布”按钮。 MQTT.fx会将输入的文本发布到QoS级别为2的指定主题。
转到窗口,您可以在其中看到由Python代码生成的输出,该输出接收消息并控制车辆。 如果在IoT板上运行代码,则可能正在使用SSH终端或连接到IoT板上的屏幕。 如果您在本地计算机上运行代码,请根据所使用的操作系统转到“终端”或“命令提示符”。 您将看到以下输出:
Result from connect: Connection Accepted.Received message payload: b'{'CMD': 'LOCK_DOORS'}'vehiclepi01: Locking doors
Result from connect: Connection Accepted.Received message payload: b'{'CMD': 'LOCK_DOORS'}'vehiclepi01: Locking doors
Result from connect: Connection Accepted.Received message payload: b'{'CMD': 'LOCK_DOORS'}'vehiclepi01: Locking doors
该代码已使用命令接收到消息,Vehicle实例执行了lock_doors方法,并且输出显示了执行此代码的结果。
返回MQTT.fx,单击“订阅”,您将看到一条带有以下有效负载的新消息到达了Vehicles / vehiclepi01 / executedcommands主题:{'SUCCESSFULLY_PROCESSED_COMMAND':'LOCK_DOORS'}。 以下屏幕快照显示了MQTT.fx中收到的消息:
现在,对前面显示的列表中包含的每个命令重复以下过程。 我们希望我们的车辆控制应用程序处理QoS级别为2的MQTT消息中接收到的每个命令。删除现有文本,然后在“发布”按钮下的文本框中输入JSON字符串的文本,然后单击“发布”按钮。 MQTT.fx会将输入的文本发布到QoS级别为2的指定主题:
{'CMD': 'TURN_OFF_PARKING_LIGHTS'}{'CMD': 'SET_MAX_SPEED', 'MPH': 10}{'CMD': 'SET_MIN_SPEED', 'MPH': 1}{'CMD': 'TURN_ON_ENGINE'}{'CMD': 'TURN_ON_HEADLIGHTS'}{'CMD': 'ACCELERATE'}{'CMD': 'ROTATE_RIGHT', 'DEGREES': 45}{'CMD': 'ACCELERATE'}{'CMD': 'TURN_ON_PARKING_LIGHTS'}{'CMD': 'BRAKE'}{'CMD': 'TURN_OFF_ENGINE'}
{'CMD': 'TURN_OFF_PARKING_LIGHTS'}{'CMD': 'SET_MAX_SPEED', 'MPH': 10}{'CMD': 'SET_MIN_SPEED', 'MPH': 1}{'CMD': 'TURN_ON_ENGINE'}{'CMD': 'TURN_ON_HEADLIGHTS'}{'CMD': 'ACCELERATE'}{'CMD': 'ROTATE_RIGHT', 'DEGREES': 45}{'CMD': 'ACCELERATE'}{'CMD': 'TURN_ON_PARKING_LIGHTS'}{'CMD': 'BRAKE'}{'CMD': 'TURN_OFF_ENGINE'}
{'CMD': 'TURN_OFF_PARKING_LIGHTS'}{'CMD': 'SET_MAX_SPEED', 'MPH': 10}{'CMD': 'SET_MIN_SPEED', 'MPH': 1}{'CMD': 'TURN_ON_ENGINE'}{'CMD': 'TURN_ON_HEADLIGHTS'}{'CMD': 'ACCELERATE'}{'CMD': 'ROTATE_RIGHT', 'DEGREES': 45}{'CMD': 'ACCELERATE'}{'CMD': 'TURN_ON_PARKING_LIGHTS'}{'CMD': 'BRAKE'}{'CMD': 'TURN_OFF_ENGINE'}
{'CMD': 'TURN_OFF_PARKING_LIGHTS'}{'CMD': 'SET_MAX_SPEED', 'MPH': 10}{'CMD': 'SET_MIN_SPEED', 'MPH': 1}{'CMD': 'TURN_ON_ENGINE'}{'CMD': 'TURN_ON_HEADLIGHTS'}{'CMD': 'ACCELERATE'}{'CMD': 'ROTATE_RIGHT', 'DEGREES': 45}{'CMD': 'ACCELERATE'}{'CMD': 'TURN_ON_PARKING_LIGHTS'}{'CMD': 'BRAKE'}{'CMD': 'TURN_OFF_ENGINE'}
{'CMD': 'TURN_OFF_PARKING_LIGHTS'}{'CMD': 'SET_MAX_SPEED', 'MPH': 10}{'CMD': 'SET_MIN_SPEED', 'MPH': 1}{'CMD': 'TURN_ON_ENGINE'}{'CMD': 'TURN_ON_HEADLIGHTS'}{'CMD': 'ACCELERATE'}{'CMD': 'ROTATE_RIGHT', 'DEGREES': 45}{'CMD': 'ACCELERATE'}{'CMD': 'TURN_ON_PARKING_LIGHTS'}{'CMD': 'BRAKE'}{'CMD': 'TURN_OFF_ENGINE'}
{'CMD': 'TURN_OFF_PARKING_LIGHTS'}{'CMD': 'SET_MAX_SPEED', 'MPH': 10}{'CMD': 'SET_MIN_SPEED', 'MPH': 1}{'CMD': 'TURN_ON_ENGINE'}{'CMD': 'TURN_ON_HEADLIGHTS'}{'CMD': 'ACCELERATE'}{'CMD': 'ROTATE_RIGHT', 'DEGREES': 45}{'CMD': 'ACCELERATE'}{'CMD': 'TURN_ON_PARKING_LIGHTS'}{'CMD': 'BRAKE'}{'CMD': 'TURN_OFF_ENGINE'}
{'CMD': 'TURN_OFF_PARKING_LIGHTS'}{'CMD': 'SET_MAX_SPEED', 'MPH': 10}{'CMD': 'SET_MIN_SPEED', 'MPH': 1}{'CMD': 'TURN_ON_ENGINE'}{'CMD': 'TURN_ON_HEADLIGHTS'}{'CMD': 'ACCELERATE'}{'CMD': 'ROTATE_RIGHT', 'DEGREES': 45}{'CMD': 'ACCELERATE'}{'CMD': 'TURN_ON_PARKING_LIGHTS'}{'CMD': 'BRAKE'}{'CMD': 'TURN_OFF_ENGINE'}
{'CMD': 'TURN_OFF_PARKING_LIGHTS'}{'CMD': 'SET_MAX_SPEED', 'MPH': 10}{'CMD': 'SET_MIN_SPEED', 'MPH': 1}{'CMD': 'TURN_ON_ENGINE'}{'CMD': 'TURN_ON_HEADLIGHTS'}{'CMD': 'ACCELERATE'}{'CMD': 'ROTATE_RIGHT', 'DEGREES': 45}{'CMD': 'ACCELERATE'}{'CMD': 'TURN_ON_PARKING_LIGHTS'}{'CMD': 'BRAKE'}{'CMD': 'TURN_OFF_ENGINE'}
{'CMD': 'TURN_OFF_PARKING_LIGHTS'}{'CMD': 'SET_MAX_SPEED', 'MPH': 10}{'CMD': 'SET_MIN_SPEED', 'MPH': 1}{'CMD': 'TURN_ON_ENGINE'}{'CMD': 'TURN_ON_HEADLIGHTS'}{'CMD': 'ACCELERATE'}{'CMD': 'ROTATE_RIGHT', 'DEGREES': 45}{'CMD': 'ACCELERATE'}{'CMD': 'TURN_ON_PARKING_LIGHTS'}{'CMD': 'BRAKE'}{'CMD': 'TURN_OFF_ENGINE'}
{'CMD': 'TURN_OFF_PARKING_LIGHTS'}{'CMD': 'SET_MAX_SPEED', 'MPH': 10}{'CMD': 'SET_MIN_SPEED', 'MPH': 1}{'CMD': 'TURN_ON_ENGINE'}{'CMD': 'TURN_ON_HEADLIGHTS'}{'CMD': 'ACCELERATE'}{'CMD': 'ROTATE_RIGHT', 'DEGREES': 45}{'CMD': 'ACCELERATE'}{'CMD': 'TURN_ON_PARKING_LIGHTS'}{'CMD': 'BRAKE'}{'CMD': 'TURN_OFF_ENGINE'}
{'CMD': 'TURN_OFF_PARKING_LIGHTS'}{'CMD': 'SET_MAX_SPEED', 'MPH': 10}{'CMD': 'SET_MIN_SPEED', 'MPH': 1}{'CMD': 'TURN_ON_ENGINE'}{'CMD': 'TURN_ON_HEADLIGHTS'}{'CMD': 'ACCELERATE'}{'CMD': 'ROTATE_RIGHT', 'DEGREES': 45}{'CMD': 'ACCELERATE'}{'CMD': 'TURN_ON_PARKING_LIGHTS'}{'CMD': 'BRAKE'}{'CMD': 'TURN_OFF_ENGINE'}
转到窗口,您可以在其中看到由Python代码生成的输出,该输出接收消息并控制车辆。 您将看到以下输出,指示已接收并处理了所有命令:
参阅MQTT消息控制车辆Python实践:测试和改进 - viadeanviadean.com