Jamyy's Weblog

Raspberry Pi 溫濕度感測器學習心得

by Jamyy on 五月.15, 2016, under Linux

  1. 組裝溫濕度感測器套件, 將溫濕度感測器接入 Raspberry Pi
  2. 由 Raspberry Pi 取得環境溫濕度數據, 交給 Linux Server 產出 Cacti 圖表記錄溫濕度變化

環境:

  • Raspberry Pi Model B Rev.2 (單核心, 512MB RAM): 運行 Raspbian wheezy
  • Linux Server (雙核心, 8GB RAM): 運行 CentOS 6.7, cacti-0.8.8

讓 Raspberry Pi 取得環境溫濕度數據

Step 1. 準備材料

  1. Raspberry Pi 主機
  2. 4GB 以上 SD Card, 寫入 Raspbian (wheezy) 作業系統
    • Windows 環境: 使用 Win32 Disk Imager 將 Raspbian image 寫入 SD Card
    • Linux 環境: 以 dd 指令將 Raspbian image 寫入 SD Card ( ref )
  3. 溫濕度感測器

Step 2. 組裝溫濕度感測器, 並將溫濕度感測器接上 Raspberry Pi

Ref: 【教學】樹莓派raspberry B+之安裝DHT22+PI溫度濕度感測測試 | 湯姆群情報站

Step 3. 在 Raspberry Pi 安裝 Adafruit_Python_DHT

$ sudo update
$ sudo apt-get install build-essential python-dev
$ git clone https://github.com/adafruit/Adafruit_Python_DHT.git
$ cd Adafruit_Python_DHT
$ sudo python setup.py install
$ cd examples
$ sudo ./AdafruitDHT.py 2302 4

Temp=28.3*  Humidity=60.0%

以圖表呈現溫濕度變化

環境:

  • Raspberry Pi: 提供溫濕度數據
  • Linux Server: 向 Raspberry Pi 取得溫濕度數據, 以 Cacti 產出溫濕度變化圖表


Step 1. 在 Raspberry Pi 操作: 使用固定 IP, 啟用 sshd, 修改 AdafruitDHT.py 程式碼

$ sudo vi /etc/network/interfaces

iface eth0 inet static
  address 192.168.1.10
  netmask 255.255.255.0
  gateway 192.168.1.1
  dns-nameserver 192.168.1.1

$ sudo service networking restart
$ sudo apt-get install openssh-server
$ echo "UseDNS no" | sudo tee -a /etc/ssh/sshd_config
$ sudo service ssh reload
$ cp ~/Adafruit_Python_DHT/examples/AdafruitDHT.py ~/am2302.py
$ vi ~/am2302.py

# 修改前: 每次執行都要輸入參數
if len(sys.argv) == 3 and sys.argv[1] in sensor_args:
    sensor = sensor_args[sys.argv[1]]
    pin = sys.argv[2]
else:
    print('usage: sudo ./Adafruit_DHT.py [11|22|2302] GPIOpin#')
    print('example: sudo ./Adafruit_DHT.py 2302 4 - Read from an AM2302 connected to GPIO #4')
    sys.exit(1)

# 修改後: 直接在程式中設定好相關參數
sensor = Adafruit_DHT.AM2302
pin = 4

# ---

# 修改前: 輸出格式為 Temp=28.1*  Humidity=60.1%
print('Temp={0:0.1f}*  Humidity={1:0.1f}%'.format(temperature, humidity))

# 修改後: 輸出格式為 temp:28.1 humidity:60.1
print('temp:{0:0.1f} humidity:{1:0.1f}'.format(temperature, humidity))

$ echo "pi ALL=(ALL:ALL) NOPASSWD: /home/pi/am2302.py" | sudo tee -a /etc/sudoers

Step 2. 在 Linux Server 操作: 定時向 Raspberry Pi 取得溫濕度數據

製作金鑰免密碼登入 Raspberry Pi
$ ssh-keygen
$ ssh-copy-id -i ~/.ssh/id_rsa.pub pi@192.168.1.10

撰寫 Shell Script 向 Raspberry Pi 取得溫濕度數據
$ vi ~/bin/am2302.sh && chmod +x $_

#!/bin/bash

CHK=/tmp/am2302.tmp
OK=/tmp/am2302.dat

while true; do
	ssh pi@192.168.1.10 "sudo ~/am2302.py" > $CHK
	[ -n "$(cat $CHK)" ] && cat $CHK > $OK && break
	sleep 3
done

排程自動執行取得溫濕度數據的 Shell Script
$ crontab -e

MAILTO=""

# 3, 13, 23, 33, 43, 53 分執行
*/3 * * * * /home/user/bin/am2302.sh

# 8, 18, 28, 38, 48, 58 分執行
*/8 * * * * /home/user/bin/am2302.sh

Step 3. 安裝 Cacti, 建立取樣程式

安裝 Cacti
$ sudo yum install epel-release
$ sudo yum install cacti

(Cacti 初始化過程請見這篇)

建立取樣程式
$ sudo vi /var/lib/cacti/scripts/am2302.pl

#!/usr/bin/perl

open(PROCESS, "cat /tmp/am2302.dat |");
$result = <PROCESS>;
close(PROCESS);

print "$result";

Step 4. 設定 Cacti 產出溫濕度圖表

依照下列順序進行設定

  1. Data Input Methods
  2. DataTemplates
  3. Data Sources
  4. Graph Templates
  5. Graph Management

設定畫面截圖



:, , , ,