Hello Pi - Board raspberry Pi คอมพิวเตอร์จิ๋ว แต่ความสามารถไม่จิ๋ว - EP1 - BasicPi

                      สวัสดีครับหลังจากที่ห่างหายไปนาน วันนี้เราก็มาพบกับ บอร์ดคอมพิวเตอร์ขนาดจิ๋วที่ความสามารถครอบจักรวาลมากๆ ในราคาเพียง 30$ ต้นๆ แน่นอนครับตามหัวข้อเขากำลังพูดถึงเจ้า RasberryPi นั่นเอง สงสัยละสิว่าจะคอมพิวเตอร์ที่ชื่อเหมือนของหวานนี้มันคืออะไรและทำอะไรได้บ้างไปดูกันเลย !

















                   เจ้าบอร์ดนี้เป็นที่นิยมมากในหลายๆงานด้วยความที่ตัวมันเป็น open source ทำให้ community ที่ใช้งงานนั้นมีขนาดใหญ่มากๆ สามารถพัฒนางานต่างๆได้ด้วยเจ้านี่ไม่ว่าจะเป็นงาน IOT Robot AI image processing พลังของเจ้าตัวนี้ตัวเดียวสามารถเอาอยู่เจ้า สเป็คของเจ้าบอร์ด
Raspberry Pi 3 B ที่เราจะใช้ก็ตามนี้เลย

                  Broadcom BCM2837B0, Cortex-A53 (ARMv8) 64-bit SoC @1.4GHz
                  1GB LPDDR2 SDRAM
                  2.4GHz and 5GHz IEEE 802.11.b/g/n/ac wireless LAN
                  Bluetooth 4.2, BLE
                  Gigabit Ethernet over USB 2.0 (maximum throughput 300 Mbps)
                  Extended 40-pin GPIO header
                  Full-size HDMI
                  4 USB 2.0 ports
                  CSI camera port for connecting a Raspberry Pi camera
                  DSI display port for connecting a Raspberry Pi touchscreen display
                  4-pole stereo output and composite video port
                  Micro SD port for loading your operating system and storing data
                  5V/2.5A DC power input
                  Power-over-Ethernet (PoE) support (requires separate PoE HAT)


                 หลังจากที่รู้จักหน้าค่าตาของมันไปแล้วที่นี้ก็จะทำให้ดูเลยละกันว่าจะใช้งานมันได้อย่างไร?

1.Install 
                 step 1 : ดาวน์โหลด OS raspbian จาก http://www.raspberrypi.org/downloads/
                 step 2 : ดาวโหลดโปรแกรม Win32DiskImager จาก http://sourceforge.net/projects/win32diskimager/ และติดตั้งให้เรียบร้อย
                 Step 3: ใส่ SD card เข้ากับเครื่องคอมพิวเตอร์หรือ card reader
                 Step 4: เปิดโปรแกรม Win32 Disk Imager เลือก Dive เป็นไดรฟ์ของ Micro SD card และที่ช่อง Image File ให้เลือก OS (ตัว Raspbian ที่โหลดมาในขั้นตอนแรก) ที่เราจะทำการติดตั้งใน Micro SD card
                 Step 5: กดปุ่ม Write เพื่อติดตั้ง OS ลง Micro SD card แล้วกด YES เพื่อยืนยัน
                 Step 6: เมื่อติดตั้งเสร็จแล้วให้ถอด Micro SD card ออกจากคอมพิวเตอร์แล้วใส่ไปที่
Raspberry Pi ต่อไป

                 เท่านี้เราก็จะได้ บอร์ดที่พร้อมใช้งานแล้วครับ
2.Boot Up and Re,ote to desktop
                  Step 1: จ่ายไฟให้ Raspberry Pi ต่อ USB mouse และ key board พร้อมกับ HDMI Moniter ให้กับ Raspberry Pi
                  Step 2:ไปที่ Wireless & Wired Network Setting เลือก Network Setting ตั้งค่า Interface เป็น ethO เลือก Disable IPv6 ตั้งค่า IP เป็น 192.168.1.xx กด Apply, and Close
                  Step 3:ไปที่ Raspberry เลือก Preference > PRI Configuration เลือกเป็น Enable ทั้งหมด จากนั้นกฌกด OK หลังจากนี้เราก็สามารถ Remote เข้า Raspberry Pi ผ่าน Desktop ได้แล้ว
                  Step 4: ถอด keyboard mouse และ HDMI ออกจาก Pi แล้วต่อสาย Network LAN ระหว่าง Pi กับ NoteBook แทน
                  Step 5: fix IP notebook ของสาย LAN ที่ต่อกับ Pi ไปที่ Properties > Internet Protocol Version (TCP/IPv4) > Used thr following IP Address ตั้งเป็น 192.168.1.191 subnet เป็น 255.255.255.0 กด OK
                  Step 6: เรียกใช้งาน ด้วยโปรแกรม VNC viewer login: pi password:raspberry เพียงเท่านี้เราก็สามารถ remote เข้า Pi ผ่าน desktopwได้แล้วครับ
                  Step 7: หลังจากเราใช้งานครั้งแรกนั้นให้ทำการ BootUp โดยการเข้าไปที่หน้า Terminal แล้วพิมพ์คำสั่งนี้ sudo apt-get update  แล้วกด Enter เพื่อเป็นการอัพเดตโปรแกรม และคำสั่ง 
sudo apt-get upgrade กด Enter เพื่ออัพเกรดโปรแกรมเป็นเวอร์ชั่นล่าสุด กด Y เพื่อยืนยัน


3.Hello World! Raspberry Pi (ฺ Blink LED)
                 นี่คือขาต่างๆที่ควรรู้ของ Pi นะครับ ส่วนภาษาที่เขียนเราจะใช้ Python กัน


               Ex.1 Blink LED
                       -วงจร
                       ต่อ LED ขาบวกไปที่ขา 11 (GPIO17) ขาลบต่อไปที่ตัวต้านทาน 330 โอฆ์ม และเอาตัวต้านทาน ไปต่อกับ GND
                        -การทดลอง
                        เปิด menu > Programing > Python 3 > File > new window จากนั้นใส่โค๊ดตัวอย่างลงไป
import RPi.GPIO as GPIO #Add GPIO library to a Python sketch
import time #Add time library to a Python sketch
GPIO.setmode(GPIO.BOARD) #Setup GPIO using Board numbering
GPIO.setup(11, GPIO.OUT) #Setup pin 11 to output
while True:
             GPIO.output(11,GPIO.HIGH) #Set LED pin 8 to HIGH
             print("Input = 1, HIGH")
             time.sleep(0.5)
             GPIO.output(11,GPIO.LOW) #Set LED pin 8 to LOW
             print("Input = 0, LOW")
             time.sleep(0.5)     

                    จากนั้นก็ไปที่ File > save as ตั้งชื่อเป็น Blink.py บันทึกไฟล์ไว้ที่  /home/pi (ตำแหน่ง Default)
                    -ทดสอบ
                   ไปที่หน้า Terminal และพิมพ์คำสั่ง sudo Python Blink.py จะเห็นว่า LED จะติดดับครั้งละ 1 วิ สามารถ Ctrl + Z เพื่อยกเลิกการทำงานของโค๊ด


              Ex.2 INPUT/OUTPUT
                     -วงจร
                     ใช้ต่อจากวงจรของการทดลองที่ 1 และเพิ่มการใช้ขา 12(GPIO18) ต่อเข้ากับขาข้างหนึ่งของปุ่มกด และขาอีกด้านหนึ่งต่อ pull-up ลง GND
                      Code
import RPi.GPIO as GPIO #Add GPIO library to a Python sketch
import time #Add time library to a Python sketch
GPIO.setmode(GPIO.BOARD) #Setup GPIO using Board numbering
GPIO.setup(11, GPIO.OUT) #Setup pin 11 to output
GPIO.setup(12, GPIO.IN, pull_up_down=GPIO.PUD_UP)
#Setup pin 12 to input and Pull-Up
while True:
                  if (GPIO.input(12)==1): #Read Botton pin 7
                              GPIO.output(11,GPIO.HIGH) #Set LED pin 8 to HIGH
                               print("Input = 1, HIGH")
                  else:
                               GPIO.output(11,GPIO.LOW) #Set LED pin 8 to LOW
                                print("Input = 0, LOW")
                    time.sleep(0.5)

                 จากนั้นก็ เข้าที่ Terminal พิมพ์คำสั่ง sudo python button.py

                 Ex3.DHT-22 Sensor
                  DHT-22 Snsor เป็นเซ็นเซอร์วัดอุณหภูมิที่สามารถใช้งานกับ Raspberry Pi ได้ง่ายมากๆ
                  -วงจร
           
                  ก่อนจะใช้งาน DHT-22 ได้นั้นเราต้องทำการลงโมดูล DHT-22 กับ Python ก่อนโดยพิมพ์คำสั่งดังนี้             
           sudo apt-get update
           sudo apt-get install build-essential python-dev
           git clone https://github.com/addfruit/Adafruit_Python_DHT.git
           cd AdaFruit_Python_DHT
           sudo pyrhon setup.py install

                  สามารถพิมพ์คำสั่งเพื่อดูอุณหภูมิได้ดังนี้
            cd examples
            sudo ./AdafruitDHT.py 22 4

                  เราจะได้อุณหภูมิและความชื้อมา
                  หากเราต้องการแบบ real time ก็ต้องเขียนโค๊ดกันหน่อยย
           
                 
import sys
import time
import Adafruit_DHT
sensor = Adafruit_DHT.DHT22
pin = 4
while True:
           humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
           if humidity is not None and temperature is not None:
                    print 'Temp={0:0.1f}*C Humidity={1:0.1f}%'.format(temperature, humidity)
                    time.sleep(2)
           else:
                    print 'Failed to get reading. Try again!'


              Ex.4 Play with MAX7219 Display 
                   
             

import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
LATCH = 24 # CS
CLK = 23 # Clock
dataBit = 19 # DIN
GPIO.setup(LATCH, GPIO.OUT)
GPIO.setup(CLK, GPIO.OUT)
GPIO.setup(dataBit, GPIO.OUT)
# Setup IO
GPIO.output(LATCH, 0)
GPIO.output(CLK, 0)
def pulseCLK():
        GPIO.output(CLK, 1)
        time.sleep(.001)
        GPIO.output(CLK, 0)
        return
def pulseCS():
        GPIO.output(LATCH, 1)
        time.sleep(.001)
       GPIO.output(LATCH, 0)
       return
# shift byte into MAX7219
# MSB out first!
def ssrOut(value):
        for x in range(0,8):
                temp = value & 0x80
                if temp == 0x80:
                    GPIO.output(dataBit, 1) # data bit HIGH
                else:
                    GPIO.output(dataBit, 0) # data bit LOW
               pulseCLK()
               value = value << 0x01 # shift left
               return
# initialize MAX7219 4 digits BCD
def initMAX7219():
# set decode mode
        ssrOut(0x09) # address
        ssrOut(0x00); # no decode data
# ssrOut(0xFF) # 4-bit BCD decode eight digits
        pulseCS();
# set intensity
        ssrOut(0x0A) # address
        ssrOut(0x04) # 9/32s
        pulseCS()
# set scan limit 0-7
        ssrOut(0x0B); # address
        ssrOut(0x07) # 8 digits
# ssrOut(0x03) # 4 digits
        pulseCS()
# set for normal operation
        ssrOut(0x0C) # address
# ssrOut(0x00); // Off
         ssrOut(0x01) # On
         pulseCS()
# clear to all 0s.
          for x in range(0,9):
                ssrOut(x)
                ssrOut(0x0f)
                pulseCS()
          return
def writeMAX7219(digit, location, data):
      ssrOut(location)
      ssrOut(data | (digit<<7))
      pulseCS()
      return

def displayOff():
# set for normal operation
ssrOut(0x0C) # address
ssrOut(0x00); # Off
# ssrOut(0x01) # On
pulseCS()
return
def displayOn():
# set for normal operation
ssrOut(0x0C) # address
# ssrOut(0x00); # Off
ssrOut(0x01) # On
pulseCS()
return

Encode7Seg = [ 0b1111110,0b0110000,0b1101101,0b1111001,
0b0110011,0b1011011,0b1011111,0b1110000,
0b1111111,0b1111011,0b1110111,0b0011111,
0b1001110,0b0111101,0b1001111,0b1000111 ]
time.sleep(1)
initMAX7219()
while True:
             Tempp2 = 7
             Tempp1 = 6
             Tempp0 = 5
             Humid2 = 4
             Humid1 = 3
             Humid0 = 2
             writeMAX7219( 0, 8, Encode7Seg[Tempp2])
             writeMAX7219( 1, 7, Encode7Seg[Tempp1])
             writeMAX7219( 0, 6, Encode7Seg[Tempp0])
             writeMAX7219( 0, 5, 0b00001101) #Code=tabcdefgh
             writeMAX7219( 0, 4, Encode7Seg[Humid2])
             writeMAX7219( 1, 3, Encode7Seg[Humid1])
             writeMAX7219( 0, 2, Encode7Seg[Humid0])
             writeMAX7219( 0, 1, 0b00010111) #Code=tabcdefgh
             time.sleep(1)



TemppX = (int)(temperature * 10)
Tempp0 = TemppX % 10
TemppX = TemppX / 10
Tempp1 = TemppX % 10
TemppX = TemppX / 10
Tempp2 = TemppX % 10
HumidX = (int)(humidity * 10)
Humid0 = HumidX % 10
HumidX = HumidX / 10
Humid1 = HumidX % 10
HumidX = HumidX / 10
Humid2 = HumidX % 10


จะเห็นว่าอุณหภูมิจะมาแสดงบน Display ของเรานะครับ

           Ex.5 play with USB camera
             ก่อนอื่นให้ทำการติดตั้ง fswebcam ก่อนโดยก่อนพิมพ์คำสั่งใน Terminal ว่า
sudo apt-get install fswebcam
sudo apt-get install libjpeg8-dev
sudo apt-get install imagemagick

































ความคิดเห็น

บทความที่ได้รับความนิยม