2017年3月31日 星期五

實作DHT22溫溼度紀錄器

先參考DHT 22的溫溼度計以SQLITE當資料庫 這兩篇,接著我們就來實作溫溼度紀錄器。

編輯一個python 程式 DHT2SQL.py

#!/usr/bin/python
import Adafruit_DHT
import sqlite3

def insertsql(temp,humi):
      conn = sqlite3.connect("/var/www/cgi-bin/envirm.db")
      cursor = conn.cursor()
      cursor.execute("insert into DHT22 Values(datetime('now','localtime'),'room1'," + str(temp) + "," + str(humi) + ")")
     conn.commit()

# Parse command line parameters.
sensor_args = { '11': Adafruit_DHT.DHT11,
                '22': Adafruit_DHT.DHT22,
                '2302': Adafruit_DHT.AM2302 }
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 ./DHT2SQL.py [11|22|2302] GPIOpin#')
    print('example: sudo ./DHT2SQL.py 2302 4 - Read from an AM2302 connected to GPIO #4')
    sys.exit(1)

humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
if humidity is not None and temperature is not None:
    print('Temp={0:0.1f}*  Humidity={1:0.1f}%'.format(temperature, humidity))
    insertsql(temperature,humidity)
else:
    print('Failed to get reading. Try again!')
    sys.exit(1)

先測試是否沒問題:

如沒問題就放到crontab,如下每2分鐘就自動記錄一次。

2016年8月22日 星期一

DHT 22的溫溼度計

DH 22是一個含有已校準數位信號輸出的溫濕度復合傳感器,其特行如下:
測濕範圍:   0-100%RH
測溫範圍:   -40~80℃
測濕精度:   ±2%RH
測溫精度:   ±0.5℃




硬體接線圖
安裝

sudo git clone https://github.com/adafruit/Adafruit_Python_DHT.git 

cd Adafruit_Python_DHT

sudo apt-get update

sudo apt-get install build-essential python-dev

sudo python setup.py install

cd examples

sudo ./AdafruitDHT.py 22 4

其中第1個參數 : 決定您使用的感測器。
11 : DHT 11 (此種溫濕度感測器很便宜,但不太準確,不建議)
22 : DHT 22
2302 : AM2302

其中第2個參數 : GPIO接腳,如下圖(此例子是接在GPIO 4):





有跑出溫溼度數據表示成功了!


2016年8月21日 星期日

以SQLITE當資料庫

SQLite是一個很小的 C 語言程式庫,且免費的資料庫軟體,因本身就完全包含資料庫引擎的功能,可以嵌入至其他程式中,完全不用額外的設定。

SQLite 屬於無伺服器架構 (Serverless),因此不需要安裝伺服器在主機上,提供了單檔案的資料庫功能。對於資源要求不高,應該是樹梅派當資料庫的不錯選擇吧(雖然有很多人安裝使用mysql)。

蘋果公司OS X自從10.4後把SQLite這套相當出名的資料庫軟體,放進了作業系統工具集裡。可見SQLite這套免費且實作大部分SQL-92標準的資料庫軟體,已漸漸受到矚目及歡迎。

SQLite 官網 https://sqlite.org/

SQLite logo:



就為大家介紹則怎麼在樹梅派使用SQLite,先從安裝開始吧!

sudo apt-get install sqlite3

新增一個資料庫:

sqlite3 envirm.db

先來熱身一下,做一些練習吧!

新增一個TABLE
CREATE TABLE DHT22(ttime DATETIME,zone TEXT,temp NUMERIC,humi NUMERIC);

插入(INSERT)資料於TABLE

INSERT INTO DHT22(ttime,zone,temp,humi) Values('2016-08-20 16:34:53','room1',28.7,73.4);

查詢(SELECT)出資料

SELECT * FROM DHT22 WHERE ttime > '2016-08-20 00:00:00';

更新(UPDATE)資料

UPDATE DHT22 SET ttime= datetime('now','localtime'),temp=26.1,humi=27.5 WHERE ttime='2016-08-20 16:34:53';

刪除(DELETE)資料

DELETE FROM DHT22 WHERE ttime = '2016-08-20 16:34:53';

刪除TABLE

DROP TABLE DHT22;

PI3設定WEB Server(Apache)

在PI3可以安裝apache2當WEB Server,下安裝指令
sudo apt-get install apache2 -y
如完成可以 http://localhost或http://IP,出現下面畫面就表示成功了。
須注意預設首頁在/var/www/html/index.html。

python 使用sqlite當資料庫無法執行UPDATE問題

在raspberry pi 3 使用apache2 當web server,使用sqlite3當資料庫,以python 當網頁CGI程式,其中有使用SQL command 去update 資料庫,卻一直無法UPDATE成功(以SELECT撈資料是正常的),捕捉一下訊息出現'attempt to write a readonly database'錯誤訊息,原因為apache2的默認賬戶是www-data,也不允許使用root啓動,對於網頁路徑的檔案操作權限可能會不足,所以需要修改owner加入www-data權限,需修改sqlite的資料庫檔案及其目錄owner權限如下範例:
sudo chown www-data:www-data /srv/mysite
sudo chown www-data:www-data /srv/mysite/DATABASE.sqlite

2016年8月14日 星期日

在Apache 以Python 視為 CGI 來源來執行

在Raspbian上安裝Apache2後想要以Python取代成為CGI的執行來源,一直不能成功,後來才解決,特記錄過程如下:

首先Google都說要修改/etc/apache2/sites-available下的000-default.conf檔,增加以下設定
ScriptAlias /cgi-bin/ /var/www/cgi-bin/


在/var/www/cgi-bin/下放了一段hi.py測試程式:
apache也restart了,可是一直顯示無法解譯Python的訊息(一直將#!usr/bin/python當文字輸出)
,加以下指令終於搞定!
sudo a2enmod cgi
sudo service apache2 restart
原來是mod_cgi module沒載入。
在 /etc/apache2/mods-enabled/ 有一個 symlink cgid.load。
假如沒有這個symlink,就要執行a2enmod cgi這個指令產生他。

2016年8月3日 星期三

修改PI 3解析度,以連接7吋LCD顯示幕

最近入手一片7吋LCD顯示幕(解析度為1024X600,HDMI介面,由拍賣網站截圖如下),接我的PI 3螢幕顯示都有問題,一直懷疑是否買到瑕疵品,可是接我的筆電是可以正常顯示的。

我的作業系統為Raspbian,Google一下發現只要修改TF卡上的config.txt,在最後新增以下代碼,果然可以正常顯示了。
  1. max_usb_current=1
  2. hdmi_group=2
  3. hdmi_mode=1
  4. hdmi_mode=87
  5. hdmi_cvt 1024 600 60 6 0 0 0