您好,登錄后才能下訂單哦!
?
?
?
達成目標:
?
??利用Rapberry Pi 驅(qū)動MQ-2煙霧報警模塊,對信息進行采集和提取。
?
?
1.準備樹莓派(Raspberry Pi)一個
?
2.MQ-2有害氣體檢測模塊
?
3.杜邦線若干
?
4.SD卡一張以及一個讀卡器
?
?
?
?
?
?
?
?
??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/
?
?
?
??這是一款廣泛應(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ū)動電路 ???
?
?
?
?
?
?
?
?
? ?絕大多數(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。
?
?
?
? ? 首先,到前面我貼上去的官網(wǎng)上下載系統(tǒng)鏡像文件,點進DOWNLOADS,看到有兩種系統(tǒng):“NOOBS”和“Raspbian ”,我選擇了Raspbian,,然后會看到兩個版本的鏡像,其中左邊有“DESKTOP”是帶有桌面的操作系統(tǒng),相反右邊的是最小化安裝的系統(tǒng)鏡像,建議身邊如果能方便的獲取顯示器,來通過HDML接入,那么就選擇有桌面的操作系統(tǒng),因為我這里主要是完成項目,所以就不選帶桌面系統(tǒng)的鏡像了。
?
?
? ? 官方系統(tǒng)鏡像界面的截圖:
?
?
?
?
?
??下載好之后,通過一個軟件“Win32DiskImager”,來燒錄系統(tǒng),在Device選擇讀卡器顯示的外部設(shè)備,Image File選擇剛剛下載好,并且解壓完成的鏡像文件,然后點擊Write,進行寫入操作,因為我是最小化的鏡像系統(tǒng),所以只需幾分鐘就完成系統(tǒng)的燒錄,你們稍等片刻,也就完成了。
?
?
??燒錄軟件截圖:
?
?
?
注意:一般情況下Raspbian系統(tǒng)是不帶有SSH遠程連接功能的,因此想要開啟功能,需要進入燒錄好的鏡像系統(tǒng)
文件當中(通過讀卡器),新建一個空白的文本文件,名為“ssh”,不需要改后綴,然后就可以進行下一步了
?
??插上網(wǎng)線,通過路由器可以得知分配給開始Raspbian的IP,然后通過SSH遠程登錄。
?
這里需要注意的是,默認用戶是“pi”,密碼是“raspberry”,SSH遠程連接“ssh pi@192.168.1.1 ”,輸入密碼即可
?
?
??下面是以pi用戶連接樹莓派后的截圖:
?
?
?
?
?
?
??一般情況下,我們都是以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:
?
進入文件:
vim /etc/systemd/system/getty.target.wants/getty\@tty1.service找到: ExecStart=-/sbin/agetty --noclear %I $TERM
改為: ExecStart=-/sbin/agetty --autologin root --noclear %I $TERM
?
?
??下圖為更改配置后的截圖:
?
?
?
?
?
?
??配置鏡像源,是為了方便后面部署各類軟件,解決依賴關(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內(nèi)置WiFi設(shè)備,因此只需要在網(wǎng)絡(luò)配置文件當中,把WiFi名稱和密碼寫進去,那么每次啟動機器都會去讀取文件,自動連接WiFi。
?
- 找到文件并寫入: vim /etc/wpa_supplicant/wpa_supplicant.conf
network={
ssid="WiFi名稱"
psk="WiFi密碼"
}
?
?
?
?
??由于Raspberry原產(chǎn)地為英國,因此鍵盤布局為英式鍵盤,許多鍵位都不一樣,因此需要更改鍵盤布局,首先執(zhí)行下面兩個操作:
?
首先安裝輸入法配置,才可以更換鍵盤布局:
apt install fcitx
- 然后輸入:
raspi-config
進入偽圖形化配置界面,選擇配置“keyboard layout”,選擇US鍵盤布局,保存后退出,重啟即可。
?
?
?
?
?
?
?
?
?
??在Raspbian系統(tǒng)當中,為了Raspberry愛好者方便的自定義自己的板子,因此選擇原生支持了當今最主流的編程語言Python,無論是Python2,還是Python3都有安裝,為了方便的安裝GPIO庫,強烈建議先安裝pip工具,這個工具類似于apt和yum,可以自動解決安裝第三方庫時的依賴關(guān)系,非常好用。
?
?
??我將在下面使用Python3作為代碼執(zhí)行的平臺,下面是包含的所有Python工具
?
?
安裝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”。
?
?
下面為是所有可用方法的截圖:
?
?
?
?
?
?
下面簡單介紹其中比較常用的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的引腳圖:
?
?
?
??上面有個地方指出的:“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”定義的。
?
?
?
?
?
?
?
?
?
??在這里需要知道的是,Python的GPIO庫只能接受引腳的高低電平的變化,因此只需要接線三個引腳就好:5V電源,地線,和DO接口,我選擇以“BOARD”規(guī)則定義引腳,也就是36號引腳連接MQ-2的DO口,認真對應(yīng)上面給出的引腳圖,下面是我接好后的圖:
?
??MQ-2連線:
?
?
?
??Raspberry連線:
?
?
?
?
?
??接下來開始寫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() # 清理運行完成后的殘余
?
\#chmod +x test.py
\#./test.py
?
?
??然后會跳出"OK"的字樣,每0.1秒一次,當通過打火機的去伸到MQ-2報警器跟前時,就會彈出一個“DANGEROUS”,說明檢測到有害氣體了,下面放圖,我的實驗結(jié)果:
?
?
?
??說明模塊工作正常,可以檢測有害氣體,并且這個程序也是基本上沒有什么問題的,后面需要停止的話,按下“Ctrl+C”停止腳本運作就好了。
?
注意
??在Python2當中,因為語法的變化,當腳本當中有中文的情況下,在開頭加上“# encoding=utf-8”;并且“print( )”方法是沒有括號的,只有引號,并且異常處理后面可能有語法也不一樣,需要讀者注意因。
?
?
??實際在后面結(jié)合Zabbix進行數(shù)據(jù)的監(jiān)控和統(tǒng)計,是不需要輸出的,因此這里只是為了效果直觀,而加進去“print( )”語句,為了達到目的,我后面會把它放在Cron計劃任務(wù)當中,在一開機的時候,就開始后臺執(zhí)行這個程序,并且沒有輸出,但是會實時記錄引腳的高低電平。
?
??對于如何獲取到這個值,并以什么方式進行存儲,在后面我會研究,這里可能會遇到Zabbix的二次開發(fā)的問題。
?
?
?
?
?
?
?
?
??????????????????? ??????????????????????????--------Zabbix項目部分我會在后面幾個星期做好,未完待續(xù).......
免責(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)容。