溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

基于樹莓派(Raspberry Pi)平臺的MQ-2煙霧報警

發(fā)布時間:2020-02-24 14:18:01 來源:網(wǎng)絡(luò) 閱讀:6217 作者:我的openresty 欄目:系統(tǒng)運維

一、前期準備

?
?
?
達成目標:
?
??利用Rapberry Pi 驅(qū)動MQ-2煙霧報警模塊,對信息進行采集和提取。

?
?
1.準備樹莓派(Raspberry Pi)一個
?
2.MQ-2有害氣體檢測模塊
?
3.杜邦線若干
?
4.SD卡一張以及一個讀卡器
?
?
?
?
?

二、各個器件介紹

?
?

1.樹莓派(Raspberry Pi)

?
??Raspberry Pi是一個英國小型組織慈善組織The Raspberry Pi Foundation發(fā)行的一款針對電腦業(yè)余愛好者,學(xué)生,以及小型企業(yè)等用戶的迷你電腦,預(yù)裝的是Linux操作系統(tǒng),體積非常小巧,在最新款的Raspberry Pi 3 Model B,搭載了高通的ARMv8的高性能CUP,并且包含1GB RAM,引腳數(shù)上升到40個。
?

    較上一代的優(yōu)點:
              1.首先處理器是新一代四核心Broadcom BCM2837 64位ARMv8 處理器,并且處理器速度最高可達1.2GHz,必要時還可以超頻。</font>
              2.第二是新添加了板載BCM43143 WiFi芯片,無需WiFi網(wǎng)絡(luò)適配器。

    Raspberry Pi官網(wǎng):https://www.raspberrypi.org/ 

?
?

2.MQ-2有害氣體檢測模塊

?
??這是一款廣泛應(yīng)用于家庭和工廠的氣體泄漏檢測裝置,適用于液化氣、甲烷、丙烷、丁烷、酒精、氫氣、煙霧等有害氣體的檢測。
?

  • 有四個引腳:
    VCC:輸入5V正極電流
    GND:接電源負極
    DO:TTL高低電平輸出端
    AO:模擬電壓輸出端
  • TTL輸出靈敏度調(diào)節(jié):
    此電位器只針對TTL,也就是DO輸出靈敏度進行調(diào)節(jié)。
    順時針調(diào)節(jié)靈敏度增高,逆時針調(diào)節(jié)靈敏度降低。
  • 具有以下優(yōu)點:
    ???廣泛的探測范圍
    ???高靈敏、快速的相應(yīng)恢復(fù)
    ???優(yōu)異的穩(wěn)定性、壽命成長
    ???簡單的驅(qū)動電路 ???

?
?
?
?
?

三、Raspberry Pi部署操作系統(tǒng)

?
?

1.概述

?
? ?絕大多數(shù)開源Linux社區(qū)都有樹莓派Arm架構(gòu)的操作系統(tǒng),比如基于Debian的Raspbian系統(tǒng)和Ubuntu mate系統(tǒng),這是兩款對樹莓派支持性最好的系統(tǒng),并且在國內(nèi)也有鏡像源,對于一個開發(fā)板來說,這是可能是最重要的。
? ?我個人強烈推薦Raspbian系統(tǒng),它本身的命令其實和服務(wù)器端的Debian操作命令相同,但是更大的優(yōu)點在于:國內(nèi)有諸多知名大學(xué)網(wǎng)站都有Raspbian系統(tǒng)鏡像源,很是方便;因為開始我玩兒的是Centos系列的操作系統(tǒng),比較熟悉命令以及其他配置方式,并且在Centos的官方網(wǎng)站也有專門為Raspberry Pi開發(fā)的基于Arm架構(gòu)的系統(tǒng)鏡像,但是安裝完你會發(fā)現(xiàn),鏡像源很是不方便 0.0。
?
?

2.部署Raspbian系統(tǒng)

?
? ? 首先,到前面我貼上去的官網(wǎng)上下載系統(tǒng)鏡像文件,點進DOWNLOADS,看到有兩種系統(tǒng):“NOOBS”和“Raspbian ”,我選擇了Raspbian,,然后會看到兩個版本的鏡像,其中左邊有“DESKTOP”是帶有桌面的操作系統(tǒng),相反右邊的是最小化安裝的系統(tǒng)鏡像,建議身邊如果能方便的獲取顯示器,來通過HDML接入,那么就選擇有桌面的操作系統(tǒng),因為我這里主要是完成項目,所以就不選帶桌面系統(tǒng)的鏡像了。
?
?
? ? 官方系統(tǒng)鏡像界面的截圖:
?
基于樹莓派(Raspberry Pi)平臺的MQ-2煙霧報警
?
?
?

3.燒制系統(tǒng)

?
??下載好之后,通過一個軟件“Win32DiskImager”,來燒錄系統(tǒng),在Device選擇讀卡器顯示的外部設(shè)備,Image File選擇剛剛下載好,并且解壓完成的鏡像文件,然后點擊Write,進行寫入操作,因為我是最小化的鏡像系統(tǒng),所以只需幾分鐘就完成系統(tǒng)的燒錄,你們稍等片刻,也就完成了。
?
?
??燒錄軟件截圖:
?
基于樹莓派(Raspberry Pi)平臺的MQ-2煙霧報警
?
?

注意:一般情況下Raspbian系統(tǒng)是不帶有SSH遠程連接功能的,因此想要開啟功能,需要進入燒錄好的鏡像系統(tǒng)
文件當中(通過讀卡器),新建一個空白的文本文件,名為“ssh”,不需要改后綴,然后就可以進行下一步了

?
??插上網(wǎng)線,通過路由器可以得知分配給開始Raspbian的IP,然后通過SSH遠程登錄。
?

這里需要注意的是,默認用戶是“pi”,密碼是“raspberry”,SSH遠程連接“ssh pi@192.168.1.1 ”,輸入密碼即可

?
?

??下面是以pi用戶連接樹莓派后的截圖:
?

基于樹莓派(Raspberry Pi)平臺的MQ-2煙霧報警
?
?
?
?

4.更改默認登錄用戶

?
??一般情況下,我們都是以root用戶的身份去操作系統(tǒng)的,這樣權(quán)利更大,也更方便做一些普通用戶很難做到的事情,根據(jù)下面:
?
?

  • 首先切換root用戶,激活root用戶的密碼配置選項:

    pi@raspberrypi:~ $ sudo passwd root
    Enter new UNIX password:
    Retype new UNIX password:
    passwd: password updated successfully

    ?

  • 然后解鎖root用戶:

    pi@raspberrypi:~ $ sudo passwd --unlock root
    passwd: password expiry information changed.

    ?

  • 最后切換root用戶:

    pi@raspberrypi:~ $ su root
    Password:

    ?

  • 但是由于Raspbian系統(tǒng)默認是以“pi”用戶登錄樹莓派的,也就是說即使上面激活了root用戶,也無法通過:“ssh root@192.168.1.1”去登陸,因此還需要進行下面操作。

進入文件:
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.配置鏡像源

?

??配置鏡像源,是為了方便后面部署各類軟件,解決依賴關(guān)系。
好在官方給出了軟件鏡像名單:
?
??http://www.raspbian.org/RaspbianMirrors
?

??這里包括了世界各地的大學(xué)或者教育機構(gòu)網(wǎng)站提供了Raspbian軟件鏡像,極大的方便了喜歡玩轉(zhuǎn)樹莓派的愛好者,我在其中節(jié)選了幾個大學(xué)提供的鏡像地址,供大家參考:
?

http://mirror.sysu.edu.cn/raspbian/raspbian 中山大學(xué)鏡像源(南方用戶)
http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ 清華大學(xué)鏡像源(北方用戶)
http://mirrors.ustc.edu.cn/raspbian/raspbian/ 中科大鏡像源(中部用戶)
http://mirrors.cqu.edu.cn/Raspbian/raspbian/ 重慶大學(xué)鏡像(中西部用戶)

?

??因為我離北京比較近,所以選擇了清華的鏡像源,速度快 穩(wěn)定。
?

  • 進入文件: vim /etc/apt/sources.list

    注釋其他語句,并且,加上下面的語句:
    deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian stretch main contrib non-free rpi

  • 要注意的是 : 配置上的源,后面有個“stretch”字段,它代表的是第九代Debian系統(tǒng),其他字段的有:第七代系統(tǒng)“wheezy”,第八代系統(tǒng)“Jessie”,因為在Raspberry Pi的官網(wǎng)一般下載的都是最新的系統(tǒng),并且這一代系統(tǒng)極大的擴展和發(fā)揮了Raspberry性能,因此建議安裝這個版本的系統(tǒng)。
    ??通過命令:“l(fā)sb_release -a” 可以看到系統(tǒng)的版本,所以務(wù)必配置鏡像文件之前,查一下系統(tǒng)版本哦。

?
?
這是我的系統(tǒng)版本:
?
基于樹莓派(Raspberry Pi)平臺的MQ-2煙霧報警
?
?
?

6.配置無限路由(WiFi)

?
??Raspberry內(nèi)置WiFi設(shè)備,因此只需要在網(wǎng)絡(luò)配置文件當中,把WiFi名稱和密碼寫進去,那么每次啟動機器都會去讀取文件,自動連接WiFi。

?

  • 找到文件并寫入: vim /etc/wpa_supplicant/wpa_supplicant.conf

    network={
    ssid="WiFi名稱"
    psk="WiFi密碼"
    }

?
?
?

7.鍵盤布局配置

?
??由于Raspberry原產(chǎn)地為英國,因此鍵盤布局為英式鍵盤,許多鍵位都不一樣,因此需要更改鍵盤布局,首先執(zhí)行下面兩個操作:
?

  • 首先安裝輸入法配置,才可以更換鍵盤布局:

    apt install fcitx

  • 然后輸入:

    raspi-config

    進入偽圖形化配置界面,選擇配置“keyboard layout”,選擇US鍵盤布局,保存后退出,重啟即可。

?
?
?
?
?

四、部署和應(yīng)用GPIO庫

?
?
?

1.部署Pip和GPIO

?
??在Raspbian系統(tǒng)當中,為了Raspberry愛好者方便的自定義自己的板子,因此選擇原生支持了當今最主流的編程語言Python,無論是Python2,還是Python3都有安裝,為了方便的安裝GPIO庫,強烈建議先安裝pip工具,這個工具類似于apt和yum,可以自動解決安裝第三方庫時的依賴關(guān)系,非常好用。
?
?
??我將在下面使用Python3作為代碼執(zhí)行的平臺,下面是包含的所有Python工具
?
基于樹莓派(Raspberry Pi)平臺的MQ-2煙霧報警

?

  • 安裝pip:
    ??apt install pip3

    注意如果出現(xiàn)問題,顯示無法安裝,則使用下面命令:

    apt-get install *pip -y

  • 通過pip安裝GPIO模塊:
    ??pip3 install gpio

  • 驗證GPIO模塊是否安裝成功并導(dǎo)入:
    ??#python3
    ??\>>>import RPi.GPIO as GPIO
    ??\>>>GPIO.setmode(GPIO.BOARD)

*發(fā)現(xiàn)上述命令都沒有報錯,并且按下Table鍵,補全所有內(nèi)置方法

?
?
?
特別注意:為什么不是安裝RPi.GPIO???

        RPi.GPIO庫是我在Raspberry官網(wǎng)上看到的支持I/O狀態(tài)讀取的一個庫,但是我按照網(wǎng)上很多博客上查的,執(zhí)行安裝命令:“pip install RPi.GPIO”,總是報錯,要么就是安裝成功以后會在“import ”這個模塊的時候,出現(xiàn)錯誤,很是費解,以為是版本的問題,發(fā)現(xiàn)自己安裝的是最新版本,但總是調(diào)不起來這個庫,我因此也沒有什么好的解決方法,偶然發(fā)現(xiàn),直接執(zhí)行命令,安裝“pip installgpio”貌似是安裝了另一個版本的GPIO庫,并且是可以正常調(diào)用的,我在之后在Centos7虛擬機上做了測試,發(fā)現(xiàn)也是可以的,那么我就選擇用“gpio”代替“RPi.GPIO”。

?
?

下面為是所有可用方法的截圖:
?
基于樹莓派(Raspberry Pi)平臺的MQ-2煙霧報警
?
?
?

2.常用的GPIO用法

?
?
下面簡單介紹其中比較常用的GPIO用法:
?

1.導(dǎo)入GPIO模塊
        import RPi.GPIO as GPIO  

?

2.將GPIO引腳設(shè)置為BOARD模式
        GPIO.setmode(GPIO.BOARD) 

?

3.設(shè)置GPIO引腳通道 作為輸入
        GPIO.setup(pin,GPIO.IN)  

?

4.設(shè)置初始化為高電平
        GPIO.setup(pin,GPIO.OUT,initial=GPIO.HIGH) 

?

5.軟件實現(xiàn)上/下拉:
        GPIO.setup(pin,GPIO.IN,pull_up_down=GPIO.PUD_UP)
        GPIO.setup(pin,GPIO.IN,pull_up_down=GPIO.PUD_DOWN)

?

6.邊緣檢測,該函數(shù)是對一個引腳進行監(jiān)聽
        GPIO.add_event_detect(channel, GPIO.RISING) 

?

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

?
?
下面給出Raspberry Pi的引腳圖:
?
基于樹莓派(Raspberry Pi)平臺的MQ-2煙霧報警

?
?
??上面有個地方指出的:“GPIO引腳設(shè)置為BOARD模式”,這里還有另一種定義引腳的方式,在RPi.GPIO中,同時支持樹莓派上的兩種GPIO引腳編號。第一種編號是BOARD編號,這和樹莓派電路板上的物理引腳編號相對應(yīng)。使用這種編號的好處是:硬件將是一直可以使用的,而不用擔心樹莓派的版本問題。在更替版本或者系統(tǒng)的時候,不必重寫代碼。
?
??第二種編號是BCM規(guī)則,是更底層的工作方式,它和Broadcom的片上系統(tǒng)中信道編號相對應(yīng)。在使用一個引腳時,用戶需要查找信道號和物理引腳編號之間的對應(yīng)規(guī)則。對于不同的樹莓派版本,編寫的腳本文件也可能是無法通用的。
例如:上圖當中的“GPIO 16”和“36”號引腳就是指的同一個,而對應(yīng)的前者就是通過BCM定義的,后者是通過“BOARD”定義的。
?
?
?
?
?

五、應(yīng)用實踐

?
?
?

1.Raspberry Pi 和 MQ-2之間的連線

?
??在這里需要知道的是,Python的GPIO庫只能接受引腳的高低電平的變化,因此只需要接線三個引腳就好:5V電源,地線,和DO接口,我選擇以“BOARD”規(guī)則定義引腳,也就是36號引腳連接MQ-2的DO口,認真對應(yīng)上面給出的引腳圖,下面是我接好后的圖:

?
??MQ-2連線:
?
基于樹莓派(Raspberry Pi)平臺的MQ-2煙霧報警
?
?
??Raspberry連線:
?
基于樹莓派(Raspberry Pi)平臺的MQ-2煙霧報警
?
?
?

2.模塊測試

?
??接下來開始寫Python代碼,用于測試連線,以及模塊的功能是否完好,根據(jù)上面的介紹的簡答的幾個GPIO庫方法,以及簡單的邏輯,寫出如下代碼:
?

#! /usr/bin/env python3
import RPi.GPIO as GPIO # 導(dǎo)入庫,并進行別名的設(shè)置
import time

CHANNEL=36 # 確定引腳口。按照真實的位置確定
GPIO.setmode(GPIO.BOARD) # 選擇引腳系統(tǒng),這里我們選擇了BOARD
GPIO.setup(CHANNEL,GPIO.IN,pull_up_down=GPIO.PUD_DOWN)
#初始化引腳,將36號引腳設(shè)置為輸入下拉電阻,因為在初始化的時候不確定的的引電平,因此這樣設(shè)置是用來保證精準,(但是也可以不寫“pull_up_down=GPIO.PUD_DOWN”)

# 帶有異常處理的主程序
try:
         while True: # 執(zhí)行一個while死循環(huán)
          status=GPIO.input(CHANNEL) # 檢測36號引腳口的輸入高低電平狀態(tài)
          #print(status) # 實時打印此時的電平狀態(tài)
          if status == True: # 如果為高電平,說明MQ-2正常,并打印“OK”
                        print ( ' 正常 ' )      
           else:    # 如果為低電平,說明MQ-2檢測到有害氣體,并打印“dangerous”
                        print ( ' 檢測到危險氣體 ! ! ! ' )
           time.sleep(0.1) # 睡眠0.1秒,以后再執(zhí)行while循環(huán)
except KeyboardInterrupt: # 異常處理,當檢測按下鍵盤的Ctrl+C,就會退出這個>腳本
            GPIO.cleanup() # 清理運行完成后的殘余

?

  • 開始執(zhí)行程序:
    ?
    \#chmod +x test.py
    \#./test.py

    ?
    ?
    ??然后會跳出"OK"的字樣,每0.1秒一次,當通過打火機的去伸到MQ-2報警器跟前時,就會彈出一個“DANGEROUS”,說明檢測到有害氣體了,下面放圖,我的實驗結(jié)果:
    ?
    基于樹莓派(Raspberry Pi)平臺的MQ-2煙霧報警
    ?
    ?

??說明模塊工作正常,可以檢測有害氣體,并且這個程序也是基本上沒有什么問題的,后面需要停止的話,按下“Ctrl+C”停止腳本運作就好了。
?

注意
??在Python2當中,因為語法的變化,當腳本當中有中文的情況下,在開頭加上“# encoding=utf-8”;并且“print( )”方法是沒有括號的,只有引號,并且異常處理后面可能有語法也不一樣,需要讀者注意因。

?
?
??實際在后面結(jié)合Zabbix進行數(shù)據(jù)的監(jiān)控和統(tǒng)計,是不需要輸出的,因此這里只是為了效果直觀,而加進去“print( )”語句,為了達到目的,我后面會把它放在Cron計劃任務(wù)當中,在一開機的時候,就開始后臺執(zhí)行這個程序,并且沒有輸出,但是會實時記錄引腳的高低電平。
?
??對于如何獲取到這個值,并以什么方式進行存儲,在后面我會研究,這里可能會遇到Zabbix的二次開發(fā)的問題。
?
?
?
?
?
?
?
?
??????????????????? ??????????????????????????--------Zabbix項目部分我會在后面幾個星期做好,未完待續(xù).......

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI