基于树莓派(Raspberry Pi)平台的MQ-2烟雾报警系统以及结合Zabbix监控的实现(一)

一、前期准备

达成目标:
 
  利用Rapberry Pi 驱动MQ-2烟雾报警模块,对信息进行采集和提取,而后Zabbix监控系统来收集和处理信息采集到的信息。

 
 
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有害气体检测模块

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

  • 有四个引脚:
    VCC:输入5V正极电流
    GND:接电源负极
    DO:TTL高低电平输出端
    AO:模拟电压输出端
  • TTL输出灵敏度调节:
    此电位器只针对TTL,也就是DO输出灵敏度进行调节。
    顺时针调节灵敏度增高,逆时针调节灵敏度降低。
  • 具有以下优点:
    ???广泛的探测范围
    ???高灵敏、快速的相应恢复
    ???优异的稳定性、寿命成长
    ???简单的驱动电路 ???

三、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接入,那么就选择有桌面的操作系统,因为我这里主要是完成项目,所以就不选带桌面系统的镜像了。
 
 
? ? 官方系统镜像界面的截图:
 

3.烧制系统

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

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

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

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

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

4.更改默认登录用户

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

  • 首先切换root用户,激活root用户的密码配置选项:

    [email protected]:~ $ sudo passwd root
    Enter new UNIX password:
    Retype new UNIX password:
    passwd: password updated successfully

  • 然后解锁root用户:

    [email protected]:~ $ sudo passwd --unlock root
    passwd: password expiry information changed.

  • 最后切换root用户:

    [email protected]:~ $ su root
    Password:

  • 但是由于Raspbian系统默认是以“pi”用户登录树莓派的,也就是说即使上面激活了root用户,也无法通过:“ssh [email protected]”去登陆,因此还需要进行下面操作。

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

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

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


 

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/ 重庆大学镜像(中西部用户)

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

  • 进入文件: vim /etc/apt/sources.list
    >注释其他语句,并且,加上下面的语句:
    >deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian stretch main contrib non-free rpi
  • 要注意的是 : 配置上的源,后面有个“stretch”字段,它代表的是第九代Debian系统,其他字段的有:第七代系统“wheezy”,第八代系统“Jessie”,因为在Raspberry Pi的官网一般下载的都是最新的系统,并且这一代系统极大的扩展和发挥了Raspberry性能,因此建议安装这个版本的系统。
    ??通过命令:“lsb_release -a” 可以看到系统的版本,所以务必配置镜像文件之前,查一下系统版本哦。

这是我的系统版本:
 

6.配置无限路由(WiFi)

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

  • 找到文件并写入: vim /etc/wpa_supplicant/wpa_supplicant.conf
    >network={
    ssid="WiFi名称"
    psk="WiFi密码"
    }

7.键盘布局配置

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

  • 首先安装输入法配置,才可以更换键盘布局:
    >apt install fcitx
  • 然后输入:
    >raspi-config
    >>进入伪图形化配置界面,选择配置“keyboard layout”,选择US键盘布局,保存后退出,重启即可。

四、部署和应用GPIO库

1.部署Pip和GPIO

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

  • 安装pip:
    ??apt install pip3
    >注意如果出现问题,显示无法安装,则使用下面命令:
    >>apt-get install *pip -y
  • 通过pip安装GPIO模块:
    ??pip3 install gpio
  • 验证GPIO模块是否安装成功并导入:
    ??#python3
    ??\>>>import RPi.GPIO as GPIO
    ??\>>>GPIO.setmode(GPIO.BOARD)

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

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

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

下面为是所有可用方法的截图:
 

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的引脚图:
 

??上面有个地方指出的:“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连线:
 

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() # 清理运行完成后的残余
  • 开始执行程序:

    \#chmod +x test.py
    \#./test.py

    ??然后会跳出"OK"的字样,每0.1秒一次,当通过打火机的去伸到MQ-2报警器跟前时,就会弹出一个“DANGEROUS”,说明检测到有害气体了,下面放图,我的实验结果:
     

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

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

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

原文地址:http://blog.51cto.com/13479737/2087546

时间: 2024-10-16 13:41:26

基于树莓派(Raspberry Pi)平台的MQ-2烟雾报警系统以及结合Zabbix监控的实现(一)的相关文章

如何从公网登录访问树莓派Raspberry Pi

外网登录访问树莓派Raspberry Pi 本地的树莓派 Raspberry Pi,只能在局域网内访问,怎样从公网也能登录访问树莓派 Raspberry Pi? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动树莓派 Raspberry Pi系统 树莓派 Raspberry Pi是基于ARM的嵌入式Linux系统,默认的sshd端口是22. 2. 实现步骤 2.1 下载并解压holer软件包 Holer软件包:holer-linux-arm.tar.gz Holer支持多种ARM版

树莓派raspberry pi配置

(1)国际化语言 树莓派初装系统之后,首次启动会出现“raspi-config”工具,如下图:(若不是初次启动,在命令模式下,请输入 sudo raspi-config 命令,即可调出此界面.若在图形桌面下,打开桌面的 LXT 客户端,输入 sudo raspi-config 命令也可以调出这个工具.   1.如上图,通过键盘上下键,将蓝条,移动到第 4 步“Internationalisation Options”,回车进入,会出现下图:   2.如上图,“Change Locale“,就是汉

树莓派(Raspberry Pi)搭建简单的lamp服务

树莓派(Raspberry Pi)搭建简单的lamp服务: 1. LAMP 的安装 sudo apt-get install apache2 mysql-server mysql-client php5 php5-gd php5-mysql –安装mysql.apache.php sudo chmod 777 /var/www/ –设置web目录的权限 2. phpmyadmin 安装 sudo apt-get install phpmyadmin –安装后选择apache2 3.配置 sudo

安装树莓派 Raspberry PI

安装树莓派 树莓派终于到货了,是这个样子的 上面有一行日期是 Raspberry PI (c) 2011.12 下载镜像,写入SD卡 http://www.raspberrypi.org/downloads/ 选择这个镜像: RASPBIAN Debian 2014-01-07 780M的压缩包,很大的样子 似乎还有个NOOBS的安装方式,完全无感 顺便展示一下SD卡,通过查阅可用SD卡列表,似乎是支持个别的64G Class10的卡的,就像这个,编号是 Transcend SDXC 64G C

树莓派(raspberry pi)学习4: 更改键盘布局(转)

树莓派(raspberry pi)用了几次后,发现键盘老是按错,一些字符打不出来或打错 这个问题,折腾我半天.还是把心得分享一下吧 上网查,发现是键盘布局不对,树莓派(raspberry pi)是英国产品,默认键盘布局是英国(GB),我们用的键盘布局一般是美国(US)的 更改键盘布局,命令如下: sudo dpkg-reconfigure keyboard-configuration 进入后,选通用的101键PC键盘 按tab键,到OK,按Enter确定 在键盘layout选择中,选Other

树莓派(raspberry pi)学习11: 将树莓派变成一个Web服务器(转)

将树莓派变成一个Web服务器,通过访问网页,就可以控制树莓派,比如:查看摄像头\开灯等等. 一想到Linux Web服务器,我们首先想到的是,Apache + MySql + Php. 树莓派可以安装这个LAMP系列,但Apache 和 MySql对于树莓派这个小小的机器,太重了,主要是消耗内存多\速度慢\占用磁盘大(约200M吧) 所以要安装一个轻量级的Web服务器. 经试用,推荐组合为:  nginx + php + sqlite nginx 是个轻量级的Web服务器,比Apache不差 s

树莓派(Raspberry Pi Model B+)无显示器和无线网卡上手指南

树莓派(Raspberry Pi Model B+)无显示器和无线网卡上手指南 最近买了一块树莓派板子(Raspberry Pi Model B+)平时作学习之用,只买了块裸板没有显示器和网卡(现在觉得完全没有必要去买显示器),在搭建环境的时候就遇到了一些问题,现在对在搭建树莓派环境遇到的问题做一个总结. 现在我知道的能够连接到树莓派的方法一共有四种,分别是串口终端操作.局域网.PC直连和手机USB网络共享,后面3种方法都是通过ssh的方式登陆树莓派(装好VNC-server后也可以用VNC查看

树莓派 Raspberry Pi 吐槽SD卡TF卡的朋友看过来

有图有真相.不多说了. 做广告了(实在其实真不是啊)认准防水型啊. 用手电筒照一照,铅笔画条线,然后就可以上剪刀了. 效果如下. 树莓派 Raspberry Pi 吐槽SD卡TF卡的朋友看过来

树莓派(raspberry pi) 系统在SD卡上安装Linux

刚刚拿到一只Simon同学出借的树莓派(raspberry pi) ,准备一张4GB的SD卡,准备跑一下Linux. 在Windows 7上用 工具 Win32DiskImager写入img到SD卡上,报错,失败. 好在俺有Linux vmware虚拟机,在虚拟机上搞,执行命令 sudo dd bs=1M if=2012-12-16-wheezy-raspbian.img  of=/dev/sdb tips: 错误:接电启动树莓派,派上只有红色的Power灯亮,HDMI电视机上没有输出. 原因: