顯示具有 Raspberry Pi 標籤的文章。 顯示所有文章
顯示具有 Raspberry Pi 標籤的文章。 顯示所有文章

2015年5月2日 星期六

Raspberry Pi體驗 :Watchdog(看門狗)


如果負責收集資料的樹莓派突然當機(不論是因為硬體或是軟體等問題),又無法經由網路遠端連線進去看狀況時,唯一的解決辦法就是讓管理者跑到樹莓派旁邊手動重開機,這樣的問題通常是很常見的。 為了避免這種當機後,手動重開機的麻煩,樹莓派的硬體上內建了一個看門狗(watchdog)的功能,它可以自動監控系統的運行狀況,當它發現系統卡在某個工作一直沒辦法跳出時,就會自動將系統重新開機。接下來看看怎麼做吧


  • 載入 watchdog 模組(bcm2708_wdog)

 要使用樹莓派的硬體看門狗,首先啟用 bcm2708_wdog 這個核心模組,編輯 /etc/modules 核心模組設定檔,加入這一行:

  1. Configure loading the module on startup:
  2. pi@raspberrypi ~ $ sudo nano /etc/modules
  3. Add this line at the end: bcm2708_wdog
  4.  如果想要立即啟用,可以執行
    pi@raspberrypi ~ $ sudo modprobe bcm2708_wdog

  •   安裝使用 watchdog 程式

  啟用 Linux 的核心模組之後,執行安裝

pi@raspberrypi ~ $ sudo apt-get install watchdog
  •  設定 watchdog 程式

  安裝好之後,編輯 /etc/watchdog.conf 這個設定檔,首先設定看門狗的設備檔案(device file),將 watchdog-device 註解拿掉:

 watchdog-device = /dev/watchdog

這個設定是用來設定 watchdog 這個軟體程式要監控的 device node,好讓程式可以知道要向誰進行回報,在 Raspberry Pi 裡面,預設的就是 /dev/watchdog

  1.  系統負載(loading)
    您可以設定系統負載的上限值,當 watchdog 發現系統負載超過這個上限值的時候,就會讓系統重新啟動。

    max-load-1 = 24
    max-load-5 = 18
    max-load-15 = 12
    這裡的數值是 /etc/watchdog.conf 的預設值,正常來說如果系統真的當機的話,系統的負載慧遠超過 25,這裡所設定的數值在系統正常的狀況下是不會重新啟動的。當然您可以依照自己的狀況來調整這個上限值。
  2. CPU 溫度
    監控樹莓派的 CPU 溫度,當溫度太高時,則關機:

    temperature-device = /sys/class/thermal/thermal_zone0/temp
    max-temperature = 80000
    /sys/class/thermal/thermal_zone0/temp 中儲存的數值是控樹莓派的 CPU 溫度,單位是攝氏千分之一度,我們這裡設定讓 CPU 在超過攝氏 80ᵒC 時重新啟動。而 watchdog 再溫度達到這個數值的 90%、95% 與 98% 時,也會先發出警告。
  3. 記憶體
    監控記憶體的使用量,當虛擬記憶體(virtual memory)太少時,則重新啟動:

    min-memory = 1
    這裡的記憶體單位是 pages,您可以用 getconf 查看自己系統的 page size 是多大:
    getconf PAGESIZE
    或是
    getconf PAGE_SIZE
    輸出會類似這樣
    4096
    以這個例子來說,一張 page 的大小就是 4096 bytes。
  4. 網路

    監控某個 IP 位址:
    ping = 172.31.14.1
    亦可用廣播位址監控整個 subnet 上的主機(這個要小心使用):
    ping = 172.26.1.255
    監控網路卡式否有流量:
    interface = eth0

  5. 檔案

    監控檔案是否可以正常存取,如果無法存取檔案,則重新啟動:
    file = /var/log/messages
    watchdog 會使用 stat 檢查檔案,如果傳回錯誤的話並不會重新啟動,如果 stat 在呼叫時卡住,超過一分鐘之後 watchdog 才會將系統重新啟動,這個狀況通常會發生 NFS 掛載的檔案系統上。
  6. 管理者 Email

    設定管理者的 Email,讓系統重新啟動或是關機前,以 Email 通知管理者:
    admin = admin@gtwang.org
  7. 即時監控模式

    在負載量比較大的系統中,watchdog 很容易被作業系統搬到記憶體的交換空間(swap),如果來不及搬回記憶體時,很容易造成系統不必要的重新啟動,如果想避免這樣的狀況,可以啟用即時監控模式(realtime),讓 watchdog 常駐在記憶體中:
    realtime = yes 
    
  • 讓系統啟動時自動執行 watchdog

除了讓 kernel 載入 bcm2708_wdog 模組外,我們也需要記得在開機的時候,自動啟動 watchdog 程式,這時候就可以透過 Debian 標準的方式,將 watchdog 程式加入到 init 程式裡面
pi@raspberrypi ~ $ update-rc.d watchdog defaults

若你希望現在開始就啟動 watchdog,則這樣作
pi@raspberrypi ~ $ /etc/init.d/watchdog start

  • 當機測試

安裝好看門狗之後,可以用這個 fork-bombs 測試一下,執行這個指令之後,它會不停重複 fork 出新的行程,造成系統當機:
:(){ :|:& };:

正常來說,執行這個指令稿之後,系統就會馬上當住,您可以透過這個方式測試看門狗是否會讓系統重新啟動。
  • 請不要在一般的 Linux 主機上執行 fork-bombs,它會造成系統當機!
正常在執行 fork-bombs 之後,系統負載會在幾秒之內迅速上升,然後重新開機
!!!!!Ensure that you saved all open data before you run this command! Otherwise they will be lost!

參考資料
  1. http://blog.gtwang.org/iot/raspberry-pi/raspberry-pi-hardware-watchdog/
  2. http://raspberrypi.link-tech.de/doku.php?id=watchdog
  3. http://coldnew.github.io/blog/2013/12/13_b1756.html

2015年4月18日 星期六

Raspberry Pi體驗 :Raspberry Pi 安裝OpenCV


  • 安裝 OpenCV 編譯相關套件
  • sudo apt-get install libopencv-dev
  • sudo  apt-get install build-essential
  • sudo  apt-get install cmake
  • sudo  apt-get install pkg-config
  • sudo  apt-get install libgtk-3-dev libgtk-3-0(sudo  apt-get install libgtk2.0-dev libgtk2.0)
  • sudo  apt-get install zlib1g-dev
  • sudo  apt-get install libpng-dev
  • sudo  apt-get install libjpeg-dev
  • sudo  apt-get install libtiff-dev
  • sudo  apt-get install libjasper-dev
  • sudo  apt-get install libavcodec-dev
  • sudo  apt-get install libhdf5-dev
  • sudo  apt-get install swig
  • sudo  apt-get install libv4l-dev
  • 下載OPEN CV 
下載OpenCV2.4.10for Linux 利用透過wget+檔案的網址
wget http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.10/opencv-2.4.10.zip/download
說明:紅字為版本,載下來的檔案會放在資料夾pi中,檔名為download

  • 解壓縮 並建立 編譯暫存資料夾

可透過點選該檔案按右鍵,"解壓縮到此"
然後一下步驟執行
  1. cd opencv-2.4.9 (進入解壓縮的資料夾)
  2. mkdir release (建立資料夾release)
  3. cd release (進入release資料夾)
  • 編譯及安裝 OpenCV
  1. cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local .. (如下圖)
  2. sudo apt-get update
  3. make (Raspberry Pi 安裝需要10小時請耐心等候Raspberry Pi 2: < 2.8 hours,按完就可以去睡覺了)
  4. sudo make install
執行CMAKE後

  • 定義環境變數
  1. sudo nano /etc/bash.bashrc
進入文件後(使用VI指令也可以),在文件的末端添加以下 環境變數 並存檔, 內容如下:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
加入後按Ctrl+O存檔,再按Ctrl+X離開文件

  • 開始試用OpenCV吧
  1. 先確認安裝的版本  pkg-config --modversion opencv
  2.  執行測試確認套件是否可運作  ,按Ctrl+X離開
    cd ~/opencv-2.4.5/release/bin ./opencv_test_core
  3.  新增一個 sample code 執行編譯與測試 CASE1
    nano showimage.cpp (新增一個.cpp檔),內容如下:
    #include “highgui.h"
    int main( int argc, char **argv )
    {
    IplImage *img = cvLoadImage( argv[1] );
    cvNamedWindow("ShowImage ", CV_WINDOW_AUTOSIZE);
    cvShowImage("ShowImage ", img);
    cvWaitKey(0);
    cvReleaseImage(&img);
    cvDestroyWindow("ShowImage ");
    }
    CASE2 (新增一個display_image.cpp檔),
    #include
    #include
    #include
    using namespace cv;
    using namespace std;
    int main( int argc, char** argv ) {
        if( argc != 2) {
         cout <<" Usage: display_image ImageToLoadAndDisplay" << endl;
         return -1;
        }
        Mat image;
        // Read the file
        image = imread(argv[1], CV_LOAD_IMAGE_COLOR);
        if(! image.data ) { // Check for invalid input
            cout <<  "Could not open or find the image" << std::endl ;
            return -1;
        }
        // Create a window for display.
        namedWindow( "Display window", WINDOW_AUTOSIZE );
        // Show our image inside it.
        imshow( "Display window", image );
        // Wait for a keystroke in the window
        waitKey(0);
        return 0;
    }
  • 使用 g++ 編譯
g++ -lopencv_highgui -lopencv_core -o showimage showimage.cpp

編譯時要加上連結用的函式庫 -lopencv_highgui -lopencv_core,如果不清楚該加哪些,可以直接使用 pkg-config 把所有的 OpenCV 函式庫都放進去:
g++ `pkg-config --cflags --libs opencv` -o showimage showimage.cpp
(注意:pkg..前面的小符號不是單引號,否則會發生error,而是鍵盤 ESC 鍵下面那個鍵對應的符號)
如果可以正常編譯出來 display_image 這個執行檔,就表示 OpenCV 已經安裝成功了,這個測試程式可以顯示指定的圖檔:
./showimage lena.jpg

測試範例執行成功
  • 測試透過RPI webCam with open cv
  1. sudo nano WebCam.cpp  內容如下(參考網友之sample code)
    #include "opencv2/highgui/highgui.hpp"
    
    using namespace cv;
    
    int main()
    {
        Mat image;
        
        VideoCapture cap;      //capture的宣告
        cap.open(0);           //0 為預設camera
        
        while(cap.isOpened())  //確認camera能開啓
        {
            cap>>image;        //截取影像到image裡方法        
            if (!image.empty()) 
             imshow("Webcam live", image);
            
            waitKey(33);//避免CPU負荷,給點delay時間
            //實際上一般webcam的framerate差不多33ms
        }
        
        return 0;
    }
  • 使用 g++ 編譯
  1. g++ `pkg-config --cflags --libs opencv` WebCam.cpp -o WebCam
  • 執行程式
  1.  ./WebCam



參考文獻
  1. http://blog.cavedu.com/raspberrypi-%E5%96%AE%E6%9D%BF%E9%9B%BB%E8%85%A6/%E5%AE%89%E8%A3%9Dopencv-%E6%96%BC-raspberry-pi-banana-pi/
  2. http://www.pyimagesearch.com/2015/02/23/install-opencv-and-python-on-your-raspberry-pi-2-and-b/
  3. http://blogger.gtwang.org/2015/01/raspberry-pi-install-opencv.html
  4. http://rexkingworld.blogspot.tw/2014/01/opencv-raspberry-pi.html
  5. http://boywhy.blogspot.tw/2014/12/raspberry-pi-raspberry-pi-opencvwebcam.html 
  6. http://blog.oscarliang.net/raspberry-pi-face-recognition-opencv/ 
  7. https://github.com/tasanakorn/rpi-mmal-demo/tree/develop
  8. https://www.youtube.com/watch?v=b2kGPWxJybo
  9. https://www.youtube.com/watch?v=WeLET1tZPaE

2015年1月2日 星期五

Raspberry Pi體驗 ;試玩Camera 、設定MJPG Stream Server




假如和我一樣買的是Raspberry Pi Camera 或想嘗試安裝 MJPG Stream Server,可參考下列步驟:

  • 安裝Raspberry Pi Camera 硬體
可參考官方影片安裝Camera的方式

  •  安裝必要的套件套件並安裝 MJPG Stream
pi@raspberrypi ~ $ sudo apt-get install subversion libjpeg8-dev imagemagick libv4l-dev
pi@raspberrypi ~ $ svn co https://svn.code.sf.net/p/mjpg-streamer/code/
pi@raspberrypi ~ $ cd mjpg-streamer/mjpg-streamer
pi@raspberrypi ~ $ make
pi@raspberrypi ~ $ sudo make install

  • 啟動MJPG Stream Server
pi@raspberrypi ~ $ cd mjpg-streamer/mjpg-streamer
pi@raspberrypi ~ $ ./mjpg_streamer -i "./input_uvc.so -r 320x240 -f 1" -o "./output_http.so -w ./www"

在同一個 lan 的電腦打開瀏覽器輸入你的 ip:8080 (i.e. http://192.168.1.10:8080/?action=snapshot)

惡夢發生之訊息

原因是你的 V4L driver 不支援你的 camera, 所以沒有 /dev/video0
可依下列步驟執行
  1. wget http://www.linux-projects.org/listing/uv4l_repo/lrkey.asc && sudo apt-key add ./lrkey.asc
  2. 打開/etc/apt/source.list,並新增下列資訊(注意修改權限)deb http://www.linux-projects.org/listing/uv4l_repo/raspbian/ wheezy main
  3. sudo apt-get updatesudo apt-get install uv4l uv4l-raspicam
  4. 重開機
  5. 關閉 uv4l 的程序, 並更新
    sudo pkill uv4l
    sudo apt-get update (非必要, 建議執行)
    sudo apt-get install uv4l-uvc
    sudo apt-get install uv4l-xscreen
    sudo apt-get install uv4l-mjpegstream
  6.  重開機, 再啟動./mjpg_streamer -i "./input_uvc.so -r 320x240 -f 1" -o "./output_http.so -w ./www"
  7. 發生第二個噩夢 /dev/video0 does not support streaming i/o, 
  8. 因為之後都要靠 uv4l 的 library 驅動所以我們要稍微調整指令
    pi@raspberrypi ~ $ cd mjpg-streamer/mjpg-streamer
    LD_PRELOAD=/usr/lib/uv4l/uv4lext/armv6l/libuv4lext.so mjpg_streamer -i "./input_uvc.so" -o "./output_http.so -w ./www"
  9. 如果不行請試試uv4l --driver raspicam --auto-video_nr --extension-presence=1 
  10. 啟動後,假設 Raspberry PI 的 IP 為 192.168.1.1我們可以透過瀏覽器觀看我們影像http://192.168.1.1:8080/,如有支援Motion JPEG Video (MJPG) 編碼的播放器來看,我們可以KEY打http://192.168.1.1:8080/?action=stream觀看
影像呈現成果
我們也可以嘗試縮短指令,可以下列步驟
  • /home/pi/.bashrc 最下面加上 :
    export MJPG_STREAMER_PATH=/home/pi/mjpg-streamer/mjpg-streamer
    alias run-mjpg='LD_PRELOAD=/usr/lib/uv4l/uv4lext/armv6l/libuv4lext.so 
    ${MJPG_STREAMER_PATH}/mjpg_streamer -i "${MJPG_STREAMER_PATH}/input_uvc.so"
     -o "${MJPG_STREAMER_PATH}/output_http.so -w ${MJPG_STREAMER_PATH}/www"'
  • 存檔後重新讀取 .bashrc
    pi@raspberrypi ~ $ source .bashrc
  • 執行簡短指令 run-mjpg
    pi@raspberrypi ~ $ run-mjpg


參考資料
  1. http://jex.logdown.com/posts/176969-raspberry-pi-camera-mjpg-streamer-server
  2. http://gsyan888.blogspot.tw/2013/04/raspberry-pi-webcam-mjpg-streamer.html
  3. http://jacobsalmela.com/raspberry-pi-webcam-using-mjpg-streamer-over-internet/
  4. http://www.linux-projects.org/modules/sections/index.php?op=viewarticle&artid=14
  5. http://www2.nsysu.edu.tw/csmlab/unix/vi_command.htm 
  6. http://blogger.gtwang.org/2015/01/raspberry-pi-usb-webcam.html

2014年12月20日 星期六

Raspberry Pi體驗:安裝設定Raspberry Control,建立屬於你的物聯網吧!!


我們可以經由Raspberry Control 軟體且透過Android App來控制我的們RPI,近年穿戴設備的崛起Raspberry Control 即將更新至2.0(LINK) ,透過SERVER、CLIENT及穿戴式設備三者建立資料傳遞,示意圖如下(圖片來源至www.lukasz-skalski.com)

RPI Control 2.0 架構圖

假設你和我一樣都還沒安裝過舊版的話(如有請先參考該高手的說明),那我們就開始吧:

安裝Raspberry Control 2.0,依下列指令輸入:wget -O - http://goo.gl/NNK7T | tar xzvf -


執行Run installation script 依下列指令輸入:
pi@raspberrypi ~ $ cd rpc_installer
pi@raspberrypi ~ $ ./rpc_utils --install

重後重開機
Reboot now (strongly recommended)? [y/n] y



完成第一步Raspberry Control 的安裝。安裝好了軟體之後,要使用樹莓派與手機做搭配還需要作設定。

下載安裝Remote Control APP
  • 至google play 下載Raspberry Control 到Android 手機






  • 開啟APP並輸入RPI剛才取得的 IP Address 及在 Raspberry Pi 的帳號及密碼
  • 點選 Settings。設定 SSH Hostname or IP 、username、password、SSH Port,順便可調整放大Font Size。


  • 連線時點選 Remote,輸入帳密後,我們就可以透過手機螢幕直接下指令控制RPI。
最後,以控制LED為測試



參考資料
  1. http://www.lukasz-skalski.com/tag/raspberry-control/
  2. http://ruten-proteus.blogspot.tw/2013/03/Android-Control-RaspberryPi.html#!/2013/03/Android-Control-RaspberryPi.html
  3. http://www.lukasz-skalski.com/raspberry-control/
  4. http://codebangers.com/how-to-setup-your-raspberry-pi-to-use-raspberry-pi-android-app/