RaspLass
(Draft)
RaspLass 是以 Raspberry PI 做為 LASS (Location Aware Sensing System) 偵測系統開發的相關技術討論,本篇說明以 Raspberry PI 來接收 PM2.5(G3)模組、 GPS模組、DHT22溫溼度模組,再以 MQTT 的通訊協定傳的送的架構與程式範例。在 Raspberry PI 是以 RaspBain (RPi 上的 Debain) 和 Python (Python 2.7.9) 為測試開發的基礎工具。
1. 所需準備的硬體
- A 部份 (一般練習 RaspBerry PI 所需要的基本配件)
- Raspberry Pi 2 Model B (建議先以 version2 有多個 USB 較為方便)
- HDMI 線+支援 HDMI 的螢幕
- USB鍵盤、滑鼠
- SD讀卡器(寫入 Raspbian作業系統用)
- MINI USB 接頭的電源供應器(最好可以)
- 安裝網路(以下以選一)
- 1. Ethernet
- 2. WIFI
- 3. USB 3G 網卡
- B 部份 (RaspLass 所需要的基本配件,也可選擇單一模組運行)
- 1. PM2.5 偵測器G3
- 圖中與 USB 連線中有一個 PL2303 電路,是 USB 轉 TTL 模組,類似的模組有不同廠的線材或是其他的替代選項可以參考 G3 的各接腳和數據格式可以參考以下網址:
- 1. http://tw.taobao.com/item/43750623059.htm?spm=a1z3o.7695283.0.0.n47YP4
- 2. http://tw.taobao.com/item/523804465624.htm?spm=a1z3o.7406521.101.28.b0Tcxl&abtest=_AB-LR492-LR501-LR517-LR895-PR492-PR501-PV517_2373-PV895_2352
- 2. DHT22(溫溼度計偵測模組)
- DHT22 (也可使用 DHT11 的偵測模組,但精確度較差) 有三條接線,Vcc 接到 RPi 上 第 1 個接腳 (3.3v DC Power), GND 接到 RPi 上第 39 個接腳接地(Ground),而訊號的部份 DOut 的接到 RPi 上第 11 個(GPIO17)接腳。
- Raspberry Pi 2 的接腳配置可參考 http://iot.eclipse.org/java/tutorial/
-
- 3. GPS
- 採用的是 GTPA010 gps module(是以前測試無人機上汰換下來的舊的,所以看上去舊舊的),也需 USB 轉 TTL 此處用的是 FTDI 的 FT232 模組,另一端用 mini USB 接上 RPi 上的 USB 插槽上。
- 4. USB 轉 TTL 模組
- 用了兩種 USB 轉 TTL 的模組:
- 1. PL2303 (接 PM2.5 的 G3)
- 2. FTDI 的 FT232 (接 GPS)
2. 安裝 RaspBian
- 這一部份是 RaspBian 的基本安裝,包括了裝好基本的作業和網路環境。
- 準備工作,請先下載以下的映象檔和寫入 SD 卡的工具程式(Window 環境),完成後將處理好的 SD 卡插入 Raspberry PI 的板子 SD 卡的插槽中,接上螢幕(HDMI)和鍵盤、滑鼠,再接上電源就可以開機了。
- 2.1 下載 RaspBian image
- https://www.raspberrypi.org/downloads/raspbian/
- 請選擇 Debian Jessie 的版本
- 2.2 下載工具程式win32diskimager
- http://sourceforge.net/projects/win32diskimager/
- 2.3 安裝網路
- 請以各人的安裝環境進行網路設定,以下三種任選一種皆可。
- 1. Ethernet
- 直接連接網路線,再看是否需要設定固定 IP 或是 DHCP
- 2. WIFI
- 建議可參考以下文件
- https://www.raspberrypi.com.tw/2152/setting-up-wifi-with-the-command-line/
- 3. USB 3G 網卡
- 建議可參考以下文件
- https://www.raspberrypi.com.tw/771/how-to-setup-a-usb-3g-modem-on-raspberry-pi
- 完成以上設定後若無法使用固定 IP 則可以使用螢幕上的圖型介面,直接使用終端機功能,並切換成 root 的身份
-
- 若設定固定 IP 則可以利用 ssh 由遠端連線,或以 再以 window 遠端桌面連上操作
2.4. 基本 Configuration
- 請執行 raspi-config 設定:
- 1. Expand Filesystem 好讓你所使用的 SD 其他部份的容量可以擴充
- 2. 更改系統預設的密碼: RaspBain 安裝好預設的帳號是 pi 密碼是 raspberry 建議裝好後就更改
- 3. 更改語系 Internationalisation Options
- 可參考 http://blogger.gtwang.org/2014/12/raspberry-pi-chinese-input-method.html
- 4. 中文碼的顯示討論:
- 可參考 https://www.facebook.com/RaspberryPiTaiwan/posts/836951476425465
3. 安裝 Python 所需套件
- RaspBian 安裝好後已經有 python 的語言和執行環境,要安裝套件請直接開啟終端機環境,以 root 身份以 pip 工具安裝以下所需套件
- 3.1 pyserial (python 讀取 Serial 資料)
- 安裝請執行 pip install pyserial
- 3.2 Adafruit_DHT (python 讀取 DHTxx 系列溫溼度資料)
安裝請執行 pip install Adafruit-DHT
- 安裝請參考 https://github.com/adafruit/Adafruit_Python_DHT
- 3.3 pynmea2 (python 讀取 GPS 的 nmea 資料格式)
- 安裝請執行 pip install pynmea2
- 3.4 paho-mqtt (python 讀取、發送 mqtt 訊息)
- 安裝請執行 pip install paho-mqtt
安裝好後可執行 pip list 可看到目前已安裝好的 python 套件
4. 安裝 RaspLASS 程式
- https://github.com/MISNUK/RaspLASS
- 建議先分別測試各模組程式再整合
4.1 測試 PM2.5 G3 模組
- G3 模組以 PL2303 接上 RPi 的 USB 插槽後,執行
- root@raspberrypi:~/RaspLASS# lsusb
- Bus 001 Device 005: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
- Bus 001 Device 004: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
- 以上 FT232 USB-Serial 所接的是 GPS 模組
- PL2303 Serial Port 所接的是 PM2.5 G3 模組
-
- echo `udevadm info --name=/dev/ttyUSB0 --attribute-walk | sed -n ’s/\s*ATTRS{\(\(devnum\)\|\(busnum\)\)}==\"\([^\"]\+\)\"/\1\ \4/p’ | head -n 2 | awk ’{$1 = sprintf("%s:%03d", $1, $2); print $1;}’`
- 若結果為 busnum:001 devnum:004 則可知 PL2303 Serial Port 也就是 PM2.5 的 G3 模組接在 /dev/ttyUSB0
- 程式 https://github.com/MISNUK/RaspLASS/blob/master/PM2.5/ReadPM25_G3.py 中第 4 行,請填上 /dev/ttyUSB0
- G3 的 Baudrate 為 9600
- ser=serial.Serial("/dev/ttyUSB0", baudrate=9600)
- 設定完後,可測試執行 ReadPM25_G3.py 程式:
- root@raspberrypi:~/RaspLASS/PM2.5# python ReadPM25_G3.py
- 424d00140035004800600029003b0053073c002867000309 => 原始資料
- pm1_cf: 53 => PM1.0 在 CF=1
- pm25_cf: 72 => PM2.5 在 CF=1
- pm10_cf: 96 => PM10 在 CF=1
- pm1: 41 => PM1.0 在大氣環境下
- pm25: 59 => PM2.5 在大氣環境下 ==> 目標欄位
- pm10: 83 => PM10 在大氣環境下
- 424d00140035004800600029003b0053073c002867000309
- pm1_cf: 53
- pm25_cf: 72
- pm10_cf: 96
- pm1: 41
- pm25: 59
- pm10: 83
- 可參照 http://tw.taobao.com/item/43750623059.htm?spm=a1z3o.7695283.0.0.n47YP4 中的資料欄位的說明
4.2 測試 DHT22 模組
- DHT22 的訊號線 DOut 的接到 RPi 上第 11 個(GPIO17)接腳。
- 在 程式 https://github.com/MISNUK/RaspLASS/blob/master/DHT22/ReadDHT.py 中第 7 行
- pin =17 (即表示 GPIO17) 參照 RPi 的接腳圖
-
- 設定完後,可測試執行 ReadPM25_G3.py 程式:
- root@raspberrypi:~/RaspLASS/DHT22# python ReadDHT.py
- Temp=23.2*C Humidity=69.3%
- Temp=23.0*C Humidity=71.6%
- Temp=23.0*C Humidity=71.6%
-
- 附註: 若使用的為 DHT11 的模組可將程式 中第 5 行換成 DHT11 在輸出時以整數輸出即可(DHT11 溫溼度只到整數位)
- sensor = Adafruit_DHT.DHT11
4.3 測試 GPS 模組