2013年8月21日 星期三

樹莓派Raspberry透過arduino取得DHT-11溫度數據


DHT-11這個溫度和濕度感應器,在PCHOME購買,只花了55 NTD。


就像上面所說的,它可以偵測到0-50度,濕度是20%-95%,應該可以說是最基本型的感應器。如果需要更特別的功能,可能就得買更好的感應器了。

透過ARDUINO取得DHT-11溫度感應器的範例已經很多了,這邊也不在說明。

這邊研究的是,如何使用樹梅派,安裝PHP之後,利用網頁顯示溫度資訊。

首先,先參考網路範例,將 DHT-11安裝完畢。

修改arduino程式, 如果樹莓派傳送'T', 會回傳溫度。如果樹莓派傳送'M', 就回傳濕度。


#include <DHT11.h>
int pin=2;
DHT11 dht11(pin);
void setup()
{
  Serial.begin(9600);
  while (!Serial) {
      ; // wait for serial port to connect. Needed for Leonardo only
    }
}

void loop()
{
    int err;
    float temp, humi;
    if (Serial.available() > 0) {
    // read data
    int inByte = Serial.read();
    if((err=dht11.read(humi, temp))==0){
         
      switch (inByte) {
      case 'T':
        Serial.print(temp);   
        break;
      case 'M':  
        Serial.print(humi);
        break;
      default:
        Serial.print(inByte);
      }
    }
    delay(DHT11_RETRY_DELAY); //delay for reread
  }

}

如果直接使用php來連結USB到arduino,就會馬上碰到權限的問題。因為apache是使用apache這個權限在執行,預設是無法讀取到usb,自然也無法直接對arduino下達命令。

故使用root權限,撰寫以下SHELL,並設定crontab,讓系統每分鐘執行該SHELL,把結果導入到/var/www/html/log 這個檔案中。


#!/usr/bin/bash
#設定stty
stty -F /dev/ttyACM0 cs8 9600 ignbrk -brkint -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke noflsh -ixon -crtscts

#使用CAT 將ttyACMO的資訊導入到檔案
cat /dev/ttyACM0  > /var/www/html/log &

#休息一下 避免CAT還沒執行,就傳送訊息給ARDUINO。
sleep 1


#傳送T給ARDUINO
echo 'T' > /dev/ttyACM0

#砍掉CAT監控程式
kill -9 $(ps -ef | grep ACM0 | awk '{ print $2}' )



PHP再去開啟該檔案,就可以達到PHP讀取溫度的功能。
<?php

$file = fopen("log", "r");
$value = fgets($file);
print "The temperature is " . $value . "<br>";

// Close the file that no longer in use
fclose($file);

?>

crontab設定每分鐘去執行該SHELL

*/1 * * * * /var/www/html/shell.sh

結果如下

結論:

        樹莓派上面使用PHP來讀取ARDUINO有滿多的限制,主要就是因為APACHE是用apache這個帳號執行,而非root。當然我們可以把這些限制都移除,比方說用ROOT來執行APACHE,但是這又有很多安全上的疑慮。
        所以目前採用SHELL的方式,使用root身分執行crontab,設定每分鐘定期去撈取溫度資料,並存入到一個特定檔案中。再用PHP的開檔功能去讀取該檔案,取得溫度資料。目前測試正常。



2013年8月12日 星期一

RASPBERRY PI 連結arduino版

所需工具
  1. 樹莓派
  2. arduino mega 2560
  3. 七段顯示器
  4. 麵包版
  5. 線材, 電阻

買了樹莓派後,就心血來潮的把已經被快被蜘蛛網包覆的arduino拿出來了。

由於之前已經完成了一個arduino的七段顯示器實驗,請參考網址,就決定修改此功能,
將其修改為讓RASPBERRY PI 利用USB將數字傳輸給arduino後,
arduino接收數字後進行顯示的功能。

首先,先安裝一個pidora起來。安裝pidora的原因是因為我比較熟悉fedora的介面,等等可以用yum 來安裝相關資料。

安裝完成後,執行yum install arduino 就會將arduino進行安裝。
在X WINDOW環境上,開啟一個終端機,使用root權限,執行
 [root@raspi ]#arduino
即可開啟arduino程式。

參考以下圖一,將arduino的USB接到樹梅派上面.
圖一

 修改arduino程式,將 Serial.begin(9600);  加入到setup段落。
 目的是為了要設定鮑率。

 另外, LOOP段 修改如下:

     void loop() {
         int incomingByte = 0;
         if (Serial.available() > 0) {
                // read the incoming byte:
                incomingByte = Serial.read();
                incomingByte = incomingByte - 48;
                if (incomingByte >0 && incomingByte < 10){
                  sevenSegWrite(incomingByte);
                  // say what you got:
                  Serial.print("I received: ");
                  Serial.println(incomingByte, DEC);
                }
        }
              
        delay(1000);         
      }

 其中,-48的原因是因為接收到的為ascii碼,需減去48才能還原為數字。
 接著將程式上傳到arduino。
 執行arduino的tools==> Serial Port ==> 選擇 /dev/ttyACM0
 執行arduino的tools==> Serial Monitor 傳送 123456789到arduino,效果如影片一。
 影片一
就像影片裡,樹梅派傳送 123456789到arduino, arduino收到後,就將其做顯示到七段顯示器的動作。

很多人會用python來做傳輸,比方說這個例子 ==> 範例
原文的arduino寫法 ==> 範例

2013年8月8日 星期四

樹莓派raspberry pi 安裝XBMC


總共花了1799買了以下幾個東西。
        1. Raspberry Pi Model B (512 MB)
        2. 透明外殼
        3. 8G的記憶卡
        4. 散熱片

安裝方式:
        1. 硬體:將透明外殼組好後,將HDMI線,鍵盤,滑鼠,網路接上。接上後如圖1.1。
                      (樹梅派本身無電源裝置,所以電源可以先不接,避免樹莓派直接開機)
圖1.1

        樹莓派預設只有兩個USB插槽,所以以這個例子,我使用了一個USB HUB外接,這樣就不用擔心USB PORT不足的問題(如圖1.2)。

圖1.2
         2. 軟體:軟體的部份,其實是很簡單的。
              最快的方式是直接安裝已經打包處裡好的raspbmc作業系統。
              網址為: http://www.raspbmc.com/wiki/user/windows-installation/
              如果有求知慾望,可以仔細研究以上連結的內容,下面是簡化的方式。

         2.1 WINDOWS用戶,請下載
               http://download.raspbmc.com/downloads/bin/installers/raspbmc-win32.zip
              將一張SD卡放入到讀卡機中後,
              解開壓縮檔案後,執行installer.exe (或是文件裡的setup.exe)
              執行後,應該會出現以下畫面。
              勾選該張SD卡後,將I accept the license agreement 打勾。
              點選install。

              此時,該安裝程式會安裝相關資料到該SD卡上面。
圖2.1.1
         2.2 LINUX用戶或是MAC用戶請參考
                http://www.raspbmc.com/wiki/user/os-x-linux-installation/

         3.  安裝完畢後,當然就是把SD卡插入到樹梅派上了。
              由於樹莓派本身無電源開關,接上電源後,系統就會開機了。
              如圖3.1, 開機後應該所有的燈號都會亮。

 圖 3.1

         系統需要連結網路,如果網路不通,就會出現以下錯誤(圖3.2)。
  圖 3.2
         通知你需要15-20分(圖3.3)。
  圖 3.3
         進行磁碟分割(圖3.4)。
  圖 3.4
         下載相關資料(圖3.5) , 建議你去喝杯咖啡。 
  圖 3.5
          進行安裝。(圖3.6)
  圖 3.6
          進入到XBMC。(圖3.7)
 
  圖 3.7

          完全不會LAG。(圖3.8)(不會斷斷續續,或是完全無畫面)
                  

圖3.8

         4. 結論 
              樹莓派規格如下:
  • SoC Broadcom BCM2835 (CPU, GPU, DSP, and SDRAM)
  • CPU: 700 MHz ARM1176JZF-S core (ARM11 family)
  • GPU: Broadcom VideoCore IV, OpenGL ES 2.0, 1080p30 h.264/MPEG-4 AVC high-profile decoder
  • Memory (SDRAM): 512 Megabytes
  • Video outputs: Composite RCA, HDMI
  • Audio outputs: 3.5 mm jack, HDMI
  • Onboard storage: SD, MMC, SDIO card slot
  • 10/100 Ethernet RJ45 onboard network
  • Storage via SD/ MMC/ SDIO card slot
        參考來源: http://www.raspberrypi.com.tw/
        可以發現樹莓派本身採用ARM CPU,不過只有700 MHZ。測試了一些別的LINUX系統後,如果跑X WINDOWS的GUI程式,速度不是很好。但是如果執行TERMINAL指令模式,其實還不錯。令外,他有內建GPU,該GPU本身支援解碼,所以使用XBMC看電影,基本上是不會LAG,跑的非常順。