| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> 树莓派+DS18B20+Canal 实现 温度报警系统 -> 正文阅读 |
|
[嵌入式]树莓派+DS18B20+Canal 实现 温度报警系统 |
1、系统架构最近突然想到一种温度报警系统的简单实现思路:大概就是通过DS18B20采集室内温度,树莓派循环读取室内温度值,达到温度报警阈值后,向数据库中写入报警信息。同时搭建一台简单服务器并且在其上部署一台Canal实时监听树莓派中数据库的数据变更事件,获取后发送邮件提醒温度预警。 整个系统可以分为采集层、通信层、告警层。系统结构如下图所示:
2、系统拆解有了系统架构和简单实现思路后,让我们来思考下如何将系统拆解成一个个小任务并逐个解决。 2.1、数据采集层对于数据采集层来说,难点在于树莓派如何读取传感器采集的温度信息。 玩过单片机的都知道,对于模拟信号(温度),我们需要一个AD芯片将模拟信号转换成8位、12位或16位的数字信号以高低电平的形式发送给单片机进行相应处理。温度采样精度取决于AD芯片的位数。这种方式处理非常复杂。 而DS18B20这种常用的温度传感器直接输出数字信号,体积小,抗干扰能力强。并且封装好后只有三根引脚,能够极大节省处理器的IO资源。与树莓派集成使用时,可以通过驱动将温度直接写入树莓派的设备文件中,节省大家的硬件驱动开发成本,也不用困扰在各种时序处理逻辑上。 因此,树莓派与DS18B20集成使用,我们可以使用Python读取设备文件的方式获取温度信息。 2.2、通信层系统的通信层我选用了Canal监听MySQL数据库变更的方案(不要问我为什么搞这么麻烦 (~ ̄▽ ̄)~ ,问就是最近工作中用到了🙃)。 通信层还有很多其它方案的选择:
这里使用写数据库的方式还有一种好处,可以在以后有需要的时候将数据提取出来进行数据分析。(好吧,这就是在强行好处🤣) 方案确定了以后,实现就比较简单了。整个通信层我们需要:1、实现Python写入MySQL数据库;2、搭建Canal服务器监听数据库;3、将监听消息投递出去。 2.3、告警层告警层的邮件发送没有什么难点,当初我纠结的地方就在于如何获取Canal监听的消息,是使用RockeyMQ还是Kafka,无论使用两个中的其中一个都还需要搭建一台服务器,感觉还是比较麻烦。当初想到这里的时候我其实是有点想放弃Canal了。 后来看到Canal自己也实现一套简单客户端Canal-Client通信,我就直接将其代码搬了过来,然后简单修改了下。 因此告警层技术点在于:1、通过Canal客户端获取服务器投递的消息;2、发送告警邮件。 2.4、小结总结一下,要实现一个简单的温度报警系统,要完成以下几个步骤:
3、具体实现3.1、树莓派连接DS18B20系统使用的DS18B20如下图所示: 该测温模块总共3Pin,分别位VCC、GND和DQ(Data Pin)。由于DS18B20只通过一根引脚传递数据,因此其使用的是**单总线(One Wire)**通讯协议传输数据。模块与树莓派的引脚连接如下表所示:
将DB18B20的引脚与树莓派使用杜邦线连接起来即可(记得最好在断电情况下连接)。 3.2、开启树莓派单总线协议我一般都是通过SSH连接树莓派的,因此无法通过GUI直接开启树莓派单线总功能。需要通过修改启动配置文件的方式开启。(无屏幕、键盘配置,树莓派启动连接wifi,以及获取树莓派IP地址的方式可以参考这里,获取到IP地址后,便可以通过SSH远程连接了) 开启步骤如下: 1、 修改启动配置文件
2、 在文件中的最后一行加如下配置,树莓派默认使用Pin 7(物理引脚,BOARD编码;该引脚的BCM编码为4)作为单总线引脚,但我们也可以手动指定其它引脚。
树莓派的引脚有:物理引脚(即BOARD编码);功能名;BCM编码;wiringPi编码。这里贴一张引脚对照表,防止大家出错。
3、 重启树莓派
4、 使用如下命令校验单总线协议是否开启。
如果能在终端中看到如下输出则代表单总线协议已经开启。
3.3、获取温度值1、 进入系统设备目录:
2、 如果以上都成功执行了,可以看到当前目录下存在一个
第一行比较熟悉就是CRC、YSE两个单词了。大概可以猜出使用循环冗余校验后得到的数据是有效的。 第二行 3.4、Python循环读取温度值这一部分比较简单,只需要使用Python的内置os、time模块就行了,这里只贴核心代码,全部代码可以到Gitee/GitHub地址去看:
3.5、树莓派安装MySQL由于树莓派系统 Raspbian OS 是基于 Debian 的,因此我们可以直接使用apt命令直接下载MySQL。
执行上述命令后,终端会打印如下信息。说明树莓派的操作系统不支持MySQL,这也是MySQL被Oracle收购后的痛苦。但提示信息告诉我们可以使用mariadb-server,开源的好处就在这里体现了出来。
接下来我们安装mariadb-server
初始安装后我们可以使用如下命令修改root账号的密码(没错,"123456"永远的密码之神)
然后使用登录命令就可以登录到mariabd中了
ps:登录过后,我们可能想尝试使用Navicat或其它客户端远程登录测试,但出现错误码为10061的错误信息
此时我们可以按照如下方式解决:
3.6、Python写入MySQLPython关于MySQL的CRUD比较简单,大家可以参考Python3 MySQL 数据库连接 - PyMySQL 驱动快速上手即可。 这里有点需要注意:PyMySQL是Python3的库,使用pip3安装。而我一开始烧录的树莓派系统只默认携带Python2。因此,大家可以将原系统中的Python2卸载,然后安装Python3,具体可以参考将树莓派内置的 Python2.7 升级成 Python3 掌握了如何用Python对MySQL进行CRUD操作后就可以直接看项目相关的核心代码了:
3.7、搭建Canal-Server这里我并未选择在树莓派中搭建Canal-Server,而是另起一台虚拟机进行搭建。 Canal版本我选择的是1.1.3。大家在版本选择的时候也需要注意下,客户端和服务端版本最好一致;高版本MySQL最好选择高版本Canal。否则出现各种问题,比如我就出现了低版本Canal连接高版本MySQL出现密码加密方式错误的问题。 搭建Canal-Server的方式如下:
3.8、使用Canal-Client并发送邮件这一部分我使用的是Canal官网自带的example测试用例,并在其上进行一些修改而成。 首先在工程当中引入了如下依赖:
然后将canal-example中的 4、成果展示由下面的结果可以看出:开始时一直在轮询传感器温度值,超过32.5℃后,立马输出已经发送邮件。此时IDEA(即最下面黑色部分为IDEA的控制台)也输出了相应的日志。等待1~2s后,邮箱中的邮件也到达了。 |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 3:31:37- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |