วันอังคารที่ 29 ตุลาคม พ.ศ. 2556

Raspberry Pi kernel with Frame Buffer 1.8" TFT support LAB5

Raspberry Pi kernel with Frame Buffer TFT support




รายการอุปกรณ์
-ชุด Raspberry pi
-SD Card 4G Class4 ขั้นต่ำ-OS Raspbian "2013-09-25-wheezy-raspbian.zip" http://www.raspberrypi.org/downloads
-DHT11, DHT22
-WIFI USB / LAN Wires
-Breadboard+Jumper Wires
-Mount+Keyboard

การใช้จอขนาดเล็กที่ 1.8 TFT จำเป็นต้องมีการตั้งค่าของ kernel เพื่อให้สามารถใช้งานจอกับ Raspberry pi ได้

การเชื่อต่อระหว่างจอ 1.8 TFT กับ Raspberry Pi ให้เชื่อต่อดังรูป



ทำการอัพเดทระบบก่อนครับด้วย

#sudo apt-get update

จากนั้นทำการอัพเดทจาก github

#sudo wget https://raw.github.com/Hexxeh/rpi-update/master/rpi-update -O /usr/bin/rpi-update && sudo chmod +x /usr/bin/rpi-update



ทำการคอนฟิก Enable SPI


#sudo raspi-config

จากนั้นเข้าไปแก้ไขไฟล์  /etc/modprobe.d/raspi-blacklist.conf จากนั้นทำการคอมเม้น  #blacklist spi-bcm2708 ดังรูป


#sudo nano /etc/modprobe.d/raspi-blacklist.conf


อัพเดท kernel

#sudo mv /lib/modules/$(uname -r) /lib/modules/$(uname -r).bak
#sudo REPO_URI=https://github.com/notro/rpi-firmware rpi-update

จากนั้นเพิ่ม module ไปยัง start-up

#sudo nano /etc/modules

จากนั้นเพิ่มข้างล่างนี้เข้าไปใน /etc/modules

fbtft_device name=sainsmart18 rotate=3


หลังจากนั้นเข้าไปแก้ไข /boot/cmdline.txt

#sudo nano /boot/cmdline.txt

จากนั้นเพิ่มข้อความข้างล่างนี้ไว้บนในไฟล์ /boot/cmdline.txt แล้วคอมเม้น ข้อความตัวเก่าออกให้เป็นดังรูป 

dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait fbcon=map:10 fbcon=rotate:1 fbcon=font:MINI4x6


เป็นอันเสร็จในการคอนฟิกจอ TFT 1.8 จากนั้นสั่ง

ต่อไปทำการคอนฟิก Desktop (Default) เพื่อที่จะสามารถใช้ Terminal จากจอ TFT ได้เลย โดยมันจะไม่แสดงหน้าจอหลักแล้วครับ

#sudo raspi-config

เลือก Enable Boot to Desktop/Scratch >> Console Text console,requiring login (default)



 กด ok ระบบถามให้รีบูทระบบใหม่ตกลงแล้วเริ่มระบบใหม่
รอดูผลการทำงาน


จากนั้นทดสอบจอ TFT ด้วยการเข้า X-windows

#sudo FRAMEBUFFER=/dev/fb1 startx



 เล่นหนังออกจอ TFT ให้ติดตั้ง mplayer ด้วย

#sudo apt-get install -y mplayer

แล้วลองดาวน์โหลดหนังมาทดสอบการแสดงผลของจอ TFT


เล่นหนังด้วยคำสั่ง

#sudo mplayer -nolirc -vo fbdev2:/dev/fb1 -x 160  -y 128 -zoom test.mpg


การดูภาพด้วยจอ TFT ให้ติดตั้ง

#sudo apt-get install fbi

โหลดภาพและใช้คำสั่งแสดงภาพออกหน้าจอ TFT 1.8 โดย filepicture เลียนเป็นชื่อไฟล์ภาพของเรา

#wget http://glynrob.com/wp-content/uploads/RaspberryPi_Logo.png
#sudo fbi -noverbose -T 1 -a -d /dev/fb1 RaspberryPi_Logo.png




**การหยุดไฟลืที่รันอยู่โดยกด ctrl+c หรือ ctrl+z**





วันจันทร์ที่ 28 ตุลาคม พ.ศ. 2556

Temperature and Humidity Moniter Graph With Raspberry pi LAB4

28 ตุลาคม 2013 เวลา 22:51 น.

รายการอุปกรณ์
-ชุด Raspberry pi -SD Card 4G Class4 ขั้นต่ำ-OS Raspbian "2013-09-25-wheezy-raspbian.zip" http://www.raspberrypi.org/downloads-DHT11, DHT22-WIFI USB / LAN Wires-Breadboard+Jumper Wires-Mount+Keyboard


DHT11, DHT22 เป็นอุปกรณ์ที่ใช้วัดอุณหภูมิและวัดความชื้นโดยเราจะเก็บเป็นไฟล์ temp.log จากนั้นให้ web application ดึงข้อมูลเหล่านี้ไปแสดงกราฟโดยเรียกใช้งานผ่านหน้าเว็บบราวเซอร์

การเชื่อมต่อ GPIO ของ Raspberry pi กับ DHT11, DHT22
RPi VCC (pin 1)   >>   DHT11 pin 1
RPi GPIO4 (pin 7)   >>   DHT11 pin 2
RPi GND (pin 6)    >>   DHT11 pin 4


ติดตั้งโปรแกรม git-core build-essential ด้วย

#sudo apt-get install git-core build-essential

ทำการดึง  wiringPi C library เพื่อจะ compile

#git clone git://git.drogon.net/wiringPi

เข้าไปยังไดเร็กทอรี่ wiringPi

#cd wiringPi

คอมไฟล์ไฟล์ build  ด้วย

#sudo ./build

จากนั้นสร้างไฟล์ dht11.c

#sudo nano dht11.c 

จากนั้น coppy code ข้างล่างนี้เข้าไปยังไฟล์ dht11.c

#include <wiringPi.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#define MAX_TIME 85
#define DHT11PIN 7
#define ATTEMPTS 5
int dht11_val[5]={0,0,0,0,0};
int dht11_read_val()
{
  uint8_t lststate=HIGH;
  uint8_t counter=0;
  uint8_t j=0,i;
  for(i=0;i<5;i++)
     dht11_val[i]=0;
  pinMode(DHT11PIN,OUTPUT);
  digitalWrite(DHT11PIN,LOW);
  delay(18);
  digitalWrite(DHT11PIN,HIGH);
  delayMicroseconds(40);
  pinMode(DHT11PIN,INPUT);
  for(i=0;i<MAX_TIME;i++)
  {
    counter=0;
    while(digitalRead(DHT11PIN)==lststate){
      counter++;
      delayMicroseconds(1);
      if(counter==255)
        break;
    }
    lststate=digitalRead(DHT11PIN);
    if(counter==255)
       break;
    // top 3 transistions are ignored
    if((i>=4)&&(i%2==0)){
      dht11_val[j/8]<<=1;
      if(counter>16)
        dht11_val[j/8]|=1;
      j++;
    }
  }
  // verify checksum and print the verified data
  if((j>=40)&&(dht11_val[4]==((dht11_val[0]+dht11_val[1]+dht11_val[2]+dht11_val[3])& 0xFF)))
  {
    printf("%d.%d,%d.%d\n",dht11_val[0],dht11_val[1],dht11_val[2],dht11_val[3]);
    return 1;
  }
  else
    return 0;
}
int main(void)
{
  int attempts=ATTEMPTS;
  if(wiringPiSetup()==-1)
    exit(1);
  while(attempts)
  {
    int success = dht11_read_val();
    if (success) {
      break;
    }
    attempts--;
    delay(500);
  }
  return 0;
} 

จากนั้น save ไฟล์ dht11.c ด้วย   ctrl+x กด y กด enter
แล้วทำการ Compile and execute source code จาก dht11.c ไปเป็น dht11

#sudo gcc -o dht11 dht11.c -L/usr/local/lib -lwiringPi
#sudo ./dht11

จากนั้นทำการกำหนดค่าเพื่อตั้งเวลาในการเก็บค่าอุณหภูมิและความชื้นไว้ในไฟล์ temp.log

#sudo crontab -e

แล้วเพิ่มไว้ในส่วนล่างสุดของ crontab

* * * * * echo `date +\%Y\%m\%d\%H\%M\%S`,`/home/pi/wiringPi/dht11` >> /home/pi/temp.log


จากนั้นทำการ start  service เพื่อเรื่มทำงาน
#sudo service cron start
#sudo update-rc.d cron defaults

จากนั้นอ่านค่า วันที่  อุณหภูมิ และความชื้น เพื่อนำข้อมมูลเหล่านั้นมาแสดงเป็น graphing โดยใช้ library Javascript โดยจำเป็นต้องสร้างเว็บเพจ HTML

ติดตั้ง apache2 แล้วสร้างไฟล์ temp.html

#sudo apt-get install apache2
#sudo apt-get update
#sudo ln -s /home/pi/temp.log /var/www/temp.log
#cd /var/www/
#sudo nano temp.html

แล้วนำ code ด้านล่างนี้เพิ่มเข้ามาในไฟล์  temp.html


<html>
<head>
<script type="text/javascript" src="dygraph-combined.js"></script>
</head>
<body>
<div id="graphdiv" style="width:750px; height:400px;"></div>
<script type="text/javascript">
  function addZero(num)
  {
    var s=num+"";
    if (s.length < 2) s="0"+s;
    return s;
  }
  function dateFormat(indate)
  {
    var hh = addZero(indate.getHours());
    var MM = addZero(indate.getMinutes());
    //var ss = addZero(indate.getSeconds());
    var dd = addZero(indate.getDate());
    var mm = addZero(indate.getMonth()+1);
    var yyyy = addZero(indate.getFullYear());
    return dd+'/'+mm+' '+hh+':'+MM;
  }
  g = new Dygraph(
    document.getElementById("graphdiv"),
    "temp.log",
    {
      xValueParser: function(x) {
        var date = new Date(x.replace(
          /^(\d{4})(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)$/,
          '$4:$5:$6 $2/$3/$1'
        ));
        return date.getTime();
      },
      axes: {
        x: {
          ticker: Dygraph.dateTicker,
          axisLabelFormatter: function(x) {
            return dateFormat(new Date(x));
          },
          valueFormatter: function(x) {
            return dateFormat(new Date(x));
          }
        }
      },
      labelsDivWidth: 310,
      rollPeriod: 30,
      strokeWidth: 2.0,
      labels: ['Date','Humidity (%)','Temp (&deg;C)']
    }
  );
</script>
</body>
</html>

จากนั้น save ไฟล์ temp.html ด้วย ctrl+x กด y กด enter
จากนั้นเปิดเว็บบราวเซอร์เพื่อตรวจสอบกราฟ ด้วย ip ของ Raspberry pi เช่น
http://10.0.0.105/temp.html   ดังรูป


**การหยุดไฟลืที่รันอยู่โดยกด ctrl+c หรือ ctrl+z**

https://www.youtube.com/channel/UCDs7h_zNn444ONo5J3Ot3iQ/videos?sort=dd&view=0&shelf_id=1