当前位置: 首页 > 网络应用技术

Rasalbell Pi+DS18B20+运河实施温度警报系统

时间:2023-03-06 16:48:38 网络应用技术

  本文中使用的所有技术和相应版本如下:Raspberry Pi 4B;温度传感器:DS18B20;Python:3.7.3;数据库:MariadB-10.0.28;运河(服务器/客户端):1.1.3;Java:1.8;Javax邮件:1.5.4

  项目的地址:GITEE:温度警报系统:基于Raspberry Pi+DS18B20+运河以实现温度警报系统(Gitee.com)

  最近,我突然想到了温度警报系统的简单实现:可能通过DS18B20收集室内温度,Raspberry School循环读取室内温度值,并在达到温度警报阈值后,我将警报信息写入数据库。同时,设置一个简单的服务器,并在Raspberry Pi中对数据库的数据更改事件进行部件进行操纵实时监视,并发送电子邮件以提醒获得温度警告。

  整个系统可以分为集合层,通信层和警报层。系统结构如下图所示:

  由于整个过程是线性处理的,因此整个系统也很容易理解。

  借助系统架构和简单的想法实施,让我们考虑如何将系统拆卸成小任务,然后一一解决。

  对于数据收集层,困难在于Raspberry Pi如何读取传感器收集的温度信息。

  那些玩过单个芯片微型计算机的人知道,对于模拟信号(温度),我们需要一个AD芯片将模拟信号转换为8位,12个位或16位数字信号并将其发送到单芯片微型计算机以高水平和低级别的形式处理。温度抽样精度取决于AD芯片的数量。这种方法非常复杂。

  常用的温度传感器(例如DS18B20)直接输出数字信号,具有较小的体积和强大的抗渗透能力。包装后只有三个引脚,可以大大节省处理器的IO资源。当使用Raspberry Pi集成时,您可以通过驱动程序将温度直接写入Raspberry Pi的设备文件,从而节省每个人的硬件驱动的开发成本,并且不需要在各种定时处理逻辑中麻烦它。

  因此,如果集成了Raspberry Pi和DS18B20,我们可以使用Python读取设备文件以获取温度信息。

  我选择的系统的通信层选择了运河监视MySQL数据库更改的解决方案(不要问我为什么这么麻烦(? ̄ ̄▽)?,询问它在最近的工作中使用?)。

  通信层还有许多其他选择:

  这里还有一个很好的方法来在这里编写数据库。您可以从数据中提取数据来分析数据,以便将来需要数据。(嗯,这是强行的好处吗?)

  确定计划后,实现相对简单。我们需要整个通信层:1。将Python写入MySQL数据库;2.构建运河服务器监视数据库;3.提交监督消息。

  发送警报电子邮件没有困难。当时我纠结的地方是如何获取运河监测的消息。无论是使用Rockeymq还是Kafka。无论使用两者之一,构建服务器都更加麻烦。当我想到它时,我实际上想放弃运河。

  稍后,当我看到运河本身还意识到一个简单的客户端客户 - 客户通信时,我直接移动了它,然后对其进行了简要修改。

  因此,警报的技术点是:1。通过运河客户获取服务器交付的消息;2.发送警报邮件。

  总结,实现一个简单的温度警报系统,以完成以下步骤:

  系统中使用的DS18B20如下图所示:

  温度测量模块总共具有3PIN,分别为VCC,GND和DQ(数据引脚)。由于DS18B20通过一个引脚传输数据,因此它使用一个电线通信协议来传输数据。模块和Raspberry的PINPI显示在下表中:

  VCCPIN 1个物理销(板编码)。该系统使用的DS18B20 20支持3?5.5V的工作电压,因此覆盆子可以连接到3.3V或5V.GNDPIN 6个物理销(板代码)DQPIN 7实物销(板7实物(板)(板)编码);BCM编码4;函数名称gpio.7.使用PIN,因为Raspberry Pi默认使用PIN 7用作单线通信引脚。DB18B20的PIN可以与Raspberry Pi连接到Dupont Line(请记住在下面连接它关闭电源)。

  我通常通过SSH连接Raspberry Pi,因此我无法直接通过GUI打开Raspberry Pai单行的总函数。连接到WiFi,您可以参考获得Raspberry Pi IP地址的方式。获取IP地址后,您可以通过SSH远程连接)

  步骤如下:

  1.修改启动配置文件

  2.在文件的最后一行中,添加以下配置。Raspberry Pi默认使用PIN 7(物理引脚,板编码;该引脚的BCM编码为4)作为单个总线引脚,但我们也可以手动指定其他引号。foot.foot。

  覆盆子PI的引脚包括:物理销(即板编码);功能名称;BCM编码;Wiringpi编码。在此处发布了PIN比较表,以防止所有人犯错误。

  PS:确保连接到PIN,否则将无法在设备文件中找到相应的温度测量模块设备文件。像连接的开头一样,只能在设备文件中找到的设备文件,并且无法读取温度。

  3.重新启动覆盆子学校

  4.使用以下命令检查是否打开了学校行协议。

  如果在终端中可以看到以下输出,则意味着单个总线协议已打开。

  5.在终端中输入以下两个行命令。如果没有输出,单线已开始初始化,可以收集温度。

  1.输入系统设备目录:

  2.如果上述成功执行,则可以看到当前目录中的开头有一个文件夹。该文件夹的名称表示连接连接的温度传感器设备的数量。不同的设备数字可能不一致。

  3.输入设备文件夹。文件夹下的文件文件。该文件存储传感器的样品温度。我们执行以下命令以查看我们在文件中写的内容。

  第一行更熟悉两个单词:CRC和YSE。使用圆形冗余验证后获得的数据有效。

  第二行代表电流温度值,但应将其分为1 1,以算作摄氏度。图显示电流值为27.437°C。

  这部分相对简单。您只需要使用Python的内置OS和时间模块即可。在这里,您仅应用核心代码。所有代码都可以转到Gitee/github地址以查看:

  由于Raspbian OS基于Debian,因此我们可以使用APT命令直接下载MySQL。

  执行上述命令后,终端将打印以下信息。它表明Raspberry Pi的操作系统不支持MySQL,这也是Oracle MySQL后的痛苦。但是及时信息告诉我们我们告诉我们我们可以使用Mariadb-Server,此处反映了开源的好处。

  接下来,我们安装Mariadb-Server

  初始安装后,我们可以使用以下命令来修改根帐户的密码(是的,“ 123456”的永久密码的神)

  然后使用登录命令登录到Mariabd

  PS:登录后,我们可能想尝试使用NAVICAT或其他客户端远程登录测试,但是有一个错误消息,其中一个错误代码为10061

  在这一点上,我们可以如下解决:

  Python关于MySQL的泥泞相对简单。您可以参考Python3 MySQL数据库连接-PymySQL驱动程序可以快速启动。

  需要在这里注明:PymySQL是Python3的库,它使用pip3安装。以及默认情况下,我在一开始就录制的覆盆子学校。python3。有关详细信息,您可以参考python2.7构建的python2.7升级到python33

  掌握了如何使用Python执行CRUD操作后,您可以直接看到与项目相关的核心代码:

  在这里,我没有选择在Raspberry Pi中设置运河服务器,而是另一台用于施工的虚拟机。

  我选择1.1.3.当您选择版本时,您还需要注意。客户端和服务器版本最好一致;高版本MySQL最好选择高版本的运河。否则,会有各种问题,例如,我在低转换运河连接高版本MySQL中存在错误问题。

  建造运河服务器的方法如下:

  我使用官方网站随附的示例测试案例的这一部分,并对其进行一些修改。

  首先,项目中引入了以下依赖性:

  然后在运河示例中复制副本,然后编写一个工具类以发送电子邮件以完成监视和发送电子邮件。有关详细的代码,您可以参考Gitee或Github。

  从下面的结果可以看出,在开始时,已经询问了传感器的温度值。超过32.5°C后,输出已立即发送。这次,想法(底部黑色部分是Idea Console)也输出相应的日志。等待1到2s后,邮箱中的邮件也到达。