我们将实施简化的气象站物联网解决方案。 我们将使用分线板上的小型传感器记录温度,大气压力和湿度。 虽然这三个数据点并非完全是一个完整的,专业的(业余爱好者较少)等级的天气解决方案,但它可以准确地向您显示从传感器向云发送数据的难易程度。

https://embed.notionlytics.com/wt/ZXlKd1lXZGxTV1FpT2lKaU56UXlOVGszTVdKaU56UTBOekpqWW1JM05HWXlOMk5oTVRZeFlXVTRaQ0lzSW5kdmNtdHpjR0ZqWlZSeVlXTnJaWEpKWkNJNklsZHNTR2hsVEZSUFdXeHpaVmRhUW1ZNU1YQmxJbjA9

我们将使用MQTT将数据发送到云来发布数据。 我们还将使用预订来监视连接到交换机的另一个数据元素(称为提要)。在这些项目中,我们使用网页上的按钮触发事件。 在这种情况下,我们将使用开关和对数据的订阅来打开和关闭传感器,如果打开则表示没有数据发布。 从这个意义上讲,我们的MicroPython解决方案成为一个传感器节点。

该项目的用户界面将使用MQTT服务的功能来构建,该功能允许您创建一个站点,该站点使用各种模块化组件(称为图块)(例如图形和刻度盘)显示数据。 如您所见,创建用户界面比我们在先前项目中编写的HTML容易得多。但它有一个局限性–仅显示自启动以来保存的数据。

MQTT介绍

至少在理论和概念上,发布/订阅模型已经存在了一段时间。 也有实现角色的编程构造。 发布者将数据发布到允许订阅者获取数据的位置(服务器,数据库或结构化数据的存储库)。 因此,发布者是作家,订阅者是读者。

对于物联网项目和传感器网络,我们有一个或多个传感器节点或数据提供者将数据发送到存储库。 我们可以使用消息队列来记录包含数据的消息,而不是使用SQL这样的结构化存储机制。 订户订阅数据时,他们将按接收顺序获得消息并解析消息以获取数据。 因此,他们不必像在数据库服务器上那样添加数据抽象层。 在这种情况下,您只需要MQTT协议。

MQTT是一种简单且非常轻量级的协议(意味着它不需要庞大的库即可使用复杂的步骤集),可与MicroPython(和其他微控制器平台)一起使用。 由于MQTT基于消息队列,因此该协议非常容忍不可靠的数据传递。 而且由于不需要大量内存,因此可以在小型设备上使用。 这意味着MQTT是确保您的小型IOT设备可以在合理保证物联网MicroPython的情况下将数据发送到服务器(称为代理)的一种方法。

MQTT工作原理

MQTT基本服务包含三个组件:生成包含数据的消息的传感器节点或发布者,读取消息的客户端或订户以及存储将消息分发给订户的代理或服务器。 下图示了这三个组件如何工作的概念。

请注意,左侧有可以发布数据的传感器节点(用实线表示),右侧有可以订阅消息的客户端(用虚线表示),以及代理提供的可视化组件(用虚线表示)。 还请注意,存在可以发布和订阅的传感器节点,以及可以可视化数据和订阅消息的客户端。 实际上,您可以具有发布和订阅的任意组合。 我们将看到如何发布和订阅MicroPython项目中的消息。

客户端

MQTT客户端只是具有MQTT库的设备(或计算机),您可以使用该库对您的设备进行编程以向代理发送消息(发布)或从代理读取消息(订阅)。

代理

所需硬件

设置硬件

编程

了解MQTT库后,该项目的代码相对容易编写。我们将所有用于读取传感器和发布数据的代码放在一个类中。 然后,我们将在可在启动时从main.py代码模块调用的代码模块中使用该类。

MQTT驱动

天气类