基于树莓派(Raspberry Pi)平台的MQ-2烟雾报警

发布时间:2020-02-24 14:18:01 作者:我的openresty
来源:网络 阅读:6228

一、前期准备

 
 
 
达成目标:
 
  利用Rapberry Pi 驱动MQ-2烟雾报警模块,对信息进行采集和提取。

 
 
1.准备树莓派(Raspberry Pi)一个
 
2.MQ-2有害气体检测模块
 
3.杜邦线若干
 
4.SD卡一张以及一个读卡器
 
 
 
 
 

二、各个器件介绍

 
 

1.树莓派(Raspberry Pi)

 
  Raspberry Pi是一个英国小型组织慈善组织The Raspberry Pi Foundation发行的一款针对电脑业余爱好者,学生,以及小型企业等用户的迷你电脑,预装的是Linux操作系统,体积非常小巧,在最新款的Raspberry Pi 3 Model B,搭载了高通的ARMv8的高性能CUP,并且包含1GB RAM,引脚数上升到40个。
 

    较上一代的优点:
              1.首先处理器是新一代四核心Broadcom BCM2837 64位ARMv8 处理器,并且处理器速度最高可达1.2GHz,必要时还可以超频。</font>
              2.第二是新添加了板载BCM43143 WiFi芯片,无需WiFi网络适配器。

    Raspberry Pi官网:https://www.raspberrypi.org/ 

 
 

2.MQ-2有害气体检测模块

 
  这是一款广泛应用于家庭和工厂的气体泄漏检测装置,适用于液化气、甲烷、丙烷、丁烷、酒精、氢气、烟雾等有害气体的检测。
 

 
 
 
 
 

三、Raspberry Pi部署操作系统

 
 

1.概述

 
   绝大多数开源Linux社区都有树莓派Arm架构的操作系统,比如基于Debian的Raspbian系统和Ubuntu mate系统,这是两款对树莓派支持性最好的系统,并且在国内也有镜像源,对于一个开发板来说,这是可能是最重要的。
   我个人强烈推荐Raspbian系统,它本身的命令其实和服务器端的Debian操作命令相同,但是更大的优点在于:国内有诸多知名大学网站都有Raspbian系统镜像源,很是方便;因为开始我玩儿的是Centos系列的操作系统,比较熟悉命令以及其他配置方式,并且在Centos的官方网站也有专门为Raspberry Pi开发的基于Arm架构的系统镜像,但是安装完你会发现,镜像源很是不方便 0.0。
 
 

2.部署Raspbian系统

 
    首先,到前面我贴上去的官网上下载系统镜像文件,点进DOWNLOADS,看到有两种系统:“NOOBS”和“Raspbian ”,我选择了Raspbian,,然后会看到两个版本的镜像,其中左边有“DESKTOP”是带有桌面的操作系统,相反右边的是最小化安装的系统镜像,建议身边如果能方便的获取显示器,来通过HDML接入,那么就选择有桌面的操作系统,因为我这里主要是完成项目,所以就不选带桌面系统的镜像了。
 
 
    官方系统镜像界面的截图:
 
基于树莓派(Raspberry Pi)平台的MQ-2烟雾报警
 
 
 

3.烧制系统

 
  下载好之后,通过一个软件“Win32DiskImager”,来烧录系统,在Device选择读卡器显示的外部设备,Image File选择刚刚下载好,并且解压完成的镜像文件,然后点击Write,进行写入操作,因为我是最小化的镜像系统,所以只需几分钟就完成系统的烧录,你们稍等片刻,也就完成了。
 
 
  烧录软件截图:
 
基于树莓派(Raspberry Pi)平台的MQ-2烟雾报警
 
 

注意:一般情况下Raspbian系统是不带有SSH远程连接功能的,因此想要开启功能,需要进入烧录好的镜像系统
文件当中(通过读卡器),新建一个空白的文本文件,名为“ssh”,不需要改后缀,然后就可以进行下一步了

 
  插上网线,通过路由器可以得知分配给开始Raspbian的IP,然后通过SSH远程登录。
 

这里需要注意的是,默认用户是“pi”,密码是“raspberry”,SSH远程连接“ssh pi@192.168.1.1 ”,输入密码即可

 
 

  下面是以pi用户连接树莓派后的截图:
 

基于树莓派(Raspberry Pi)平台的MQ-2烟雾报警
 
 
 
 

4.更改默认登录用户

 
  一般情况下,我们都是以root用户的身份去操作系统的,这样权利更大,也更方便做一些普通用户很难做到的事情,根据下面:
 
 

进入文件:
vim /etc/systemd/system/getty.target.wants/getty\@tty1.service

找到: ExecStart=-/sbin/agetty --noclear %I $TERM
改为: ExecStart=-/sbin/agetty --autologin root --noclear %I $TERM

 
 
  下图为更改配置后的截图:

 
基于树莓派(Raspberry Pi)平台的MQ-2烟雾报警
 
基于树莓派(Raspberry Pi)平台的MQ-2烟雾报警

 
 
 

5.配置镜像源

 

  配置镜像源,是为了方便后面部署各类软件,解决依赖关系。
好在官方给出了软件镜像名单:
 
  http://www.raspbian.org/RaspbianMirrors
 

  这里包括了世界各地的大学或者教育机构网站提供了Raspbian软件镜像,极大的方便了喜欢玩转树莓派的爱好者,我在其中节选了几个大学提供的镜像地址,供大家参考:
 

http://mirror.sysu.edu.cn/raspbian/raspbian 中山大学镜像源(南方用户)
http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ 清华大学镜像源(北方用户)
http://mirrors.ustc.edu.cn/raspbian/raspbian/ 中科大镜像源(中部用户)
http://mirrors.cqu.edu.cn/Raspbian/raspbian/ 重庆大学镜像(中西部用户)

 

  因为我离北京比较近,所以选择了清华的镜像源,速度快 稳定。
 

 
 
这是我的系统版本:
 
基于树莓派(Raspberry Pi)平台的MQ-2烟雾报警
 
 
 

6.配置无限路由(WiFi)

 
  Raspberry内置WiFi设备,因此只需要在网络配置文件当中,把WiFi名称和密码写进去,那么每次启动机器都会去读取文件,自动连接WiFi。

 

 
 
 

7.键盘布局配置

 
  由于Raspberry原产地为英国,因此键盘布局为英式键盘,许多键位都不一样,因此需要更改键盘布局,首先执行下面两个操作:
 

 
 
 
 
 

四、部署和应用GPIO库

 
 
 

1.部署Pip和GPIO

 
  在Raspbian系统当中,为了Raspberry爱好者方便的自定义自己的板子,因此选择原生支持了当今最主流的编程语言Python,无论是Python2,还是Python3都有安装,为了方便的安装GPIO库,强烈建议先安装pip工具,这个工具类似于apt和yum,可以自动解决安装第三方库时的依赖关系,非常好用。
 
 
  我将在下面使用Python3作为代码执行的平台,下面是包含的所有Python工具
 
基于树莓派(Raspberry Pi)平台的MQ-2烟雾报警

 

*发现上述命令都没有报错,并且按下Table键,补全所有内置方法

 
 
 
特别注意:为什么不是安装RPi.GPIO???

        RPi.GPIO库是我在Raspberry官网上看到的支持I/O状态读取的一个库,但是我按照网上很多博客上查的,执行安装命令:“pip install RPi.GPIO”,总是报错,要么就是安装成功以后会在“import ”这个模块的时候,出现错误,很是费解,以为是版本的问题,发现自己安装的是最新版本,但总是调不起来这个库,我因此也没有什么好的解决方法,偶然发现,直接执行命令,安装“pip installgpio”貌似是安装了另一个版本的GPIO库,并且是可以正常调用的,我在之后在Centos7虚拟机上做了测试,发现也是可以的,那么我就选择用“gpio”代替“RPi.GPIO”。

 
 

下面为是所有可用方法的截图:
 
基于树莓派(Raspberry Pi)平台的MQ-2烟雾报警
 
 
 

2.常用的GPIO用法

 
 
下面简单介绍其中比较常用的GPIO用法:
 

1.导入GPIO模块
        import RPi.GPIO as GPIO  

 

2.将GPIO引脚设置为BOARD模式
        GPIO.setmode(GPIO.BOARD) 

 

3.设置GPIO引脚通道 作为输入
        GPIO.setup(pin,GPIO.IN)  

 

4.设置初始化为高电平
        GPIO.setup(pin,GPIO.OUT,initial=GPIO.HIGH) 

 

5.软件实现上/下拉:
        GPIO.setup(pin,GPIO.IN,pull_up_down=GPIO.PUD_UP)
        GPIO.setup(pin,GPIO.IN,pull_up_down=GPIO.PUD_DOWN)

 

6.边缘检测,该函数是对一个引脚进行监听
        GPIO.add_event_detect(channel, GPIO.RISING) 

 

7.清除所有资源
        GPIO.cleanup()    

 
 
下面给出Raspberry Pi的引脚图:
 
基于树莓派(Raspberry Pi)平台的MQ-2烟雾报警

 
 
  上面有个地方指出的:“GPIO引脚设置为BOARD模式”,这里还有另一种定义引脚的方式,在RPi.GPIO中,同时支持树莓派上的两种GPIO引脚编号。第一种编号是BOARD编号,这和树莓派电路板上的物理引脚编号相对应。使用这种编号的好处是:硬件将是一直可以使用的,而不用担心树莓派的版本问题。在更替版本或者系统的时候,不必重写代码。
 
  第二种编号是BCM规则,是更底层的工作方式,它和Broadcom的片上系统中信道编号相对应。在使用一个引脚时,用户需要查找信道号和物理引脚编号之间的对应规则。对于不同的树莓派版本,编写的脚本文件也可能是无法通用的。
例如:上图当中的“GPIO 16”和“36”号引脚就是指的同一个,而对应的前者就是通过BCM定义的,后者是通过“BOARD”定义的。
 
 
 
 
 

五、应用实践

 
 
 

1.Raspberry Pi 和 MQ-2之间的连线

 
  在这里需要知道的是,Python的GPIO库只能接受引脚的高低电平的变化,因此只需要接线三个引脚就好:5V电源,地线,和DO接口,我选择以“BOARD”规则定义引脚,也就是36号引脚连接MQ-2的DO口,认真对应上面给出的引脚图,下面是我接好后的图:

 
  MQ-2连线:
 
基于树莓派(Raspberry Pi)平台的MQ-2烟雾报警
 
 
  Raspberry连线:
 
基于树莓派(Raspberry Pi)平台的MQ-2烟雾报警
 
 
 

2.模块测试

 
  接下来开始写Python代码,用于测试连线,以及模块的功能是否完好,根据上面的介绍的简答的几个GPIO库方法,以及简单的逻辑,写出如下代码:
 

#! /usr/bin/env python3
import RPi.GPIO as GPIO # 导入库,并进行别名的设置
import time

CHANNEL=36 # 确定引脚口。按照真实的位置确定
GPIO.setmode(GPIO.BOARD) # 选择引脚系统,这里我们选择了BOARD
GPIO.setup(CHANNEL,GPIO.IN,pull_up_down=GPIO.PUD_DOWN)
#初始化引脚,将36号引脚设置为输入下拉电阻,因为在初始化的时候不确定的的引电平,因此这样设置是用来保证精准,(但是也可以不写“pull_up_down=GPIO.PUD_DOWN”)

# 带有异常处理的主程序
try:
         while True: # 执行一个while死循环
          status=GPIO.input(CHANNEL) # 检测36号引脚口的输入高低电平状态
          #print(status) # 实时打印此时的电平状态
          if status == True: # 如果为高电平,说明MQ-2正常,并打印“OK”
                        print ( ' 正常 ' )      
           else:    # 如果为低电平,说明MQ-2检测到有害气体,并打印“dangerous”
                        print ( ' 检测到危险气体 ! ! ! ' )
           time.sleep(0.1) # 睡眠0.1秒,以后再执行while循环
except KeyboardInterrupt: # 异常处理,当检测按下键盘的Ctrl+C,就会退出这个>脚本
            GPIO.cleanup() # 清理运行完成后的残余

 

  说明模块工作正常,可以检测有害气体,并且这个程序也是基本上没有什么问题的,后面需要停止的话,按下“Ctrl+C”停止脚本运作就好了。
 

注意
  在Python2当中,因为语法的变化,当脚本当中有中文的情况下,在开头加上“# encoding=utf-8”;并且“print( )”方法是没有括号的,只有引号,并且异常处理后面可能有语法也不一样,需要读者注意因。

 
 
  实际在后面结合Zabbix进行数据的监控和统计,是不需要输出的,因此这里只是为了效果直观,而加进去“print( )”语句,为了达到目的,我后面会把它放在Cron计划任务当中,在一开机的时候,就开始后台执行这个程序,并且没有输出,但是会实时记录引脚的高低电平。
 
  对于如何获取到这个值,并以什么方式进行存储,在后面我会研究,这里可能会遇到Zabbix的二次开发的问题。
 
 
 
 
 
 
 
 
                                              --------Zabbix项目部分我会在后面几个星期做好,未完待续.......

推荐阅读:
  1. Raspberry pi 蓝牙音响播放
  2. Raspberry pi做成无线热点

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

raspberry zabbix 嵌入式

上一篇:python列表生成式应用案例

下一篇:Linux命令

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》