Wednesday, January 30

WebIOPi : Control Raspberry Pi ‘s GPIO via web browser

เราทราบดีอยู่แล้วว่า Raspberry pi นั้น สามารถทำให้เป็น web Server ได้ และในขณะเดียวกัน ก็ยังมี GPIO เหลือไว้ให้นักพัฒนาไว้ทำอะไรเล่นได้แตกต่างจาก PC ทั่วไปที่ไม่มี GPIO ให้ใช้ ก็เลยมีคนคิดที่จะทำ web application ที่สามารถที่จะควบคุม GPIO ผ่านทางหน้าเว็บ วันนี้ เรามาติดตั้ง web application ตัวหนึุ่่งที่น่าสนใจสำหรับ Raspberry pi นั่นก็คือ WebIOPi

WebIOPi คือเว็บแอพลิเคชั่น ที่ออกแบบด้วยภาษา Python ซึ่งทำงานร่วมกับ REST framework  จุดประสงค์เพื่อให้การควบคุม GPIO ของ Raspberry Pi แสดงผล แบบ(เกือบจะ) Realtime ให้เห็นผ่านหน้าเว็บ โดยที่เราไม่ต้อง refresh หน้าเว็บ เมื่อ GPIO มีการเปลี่ยนแปลงสถานะ

"WebIOPi is developed and tested on Raspbian"

เพราะฉะนั้นใครทีใช้ Raspian อยู่แล้ว ก็ไม่น่ามีปัญหาอะไร ขั้นตอนติดตั้งไม่ยุ่งยากครับ เริ่มจากดาวน์โหลดไฟล์ แล้วก็ทำการรันสคริปต์ที่ติดตั้ง

wget http://webiopi.googlecode.com/files/WebIOPi-0.5.3.tar.gz
tar xvzf WebIOPi-0.5.3.tar.gz
cd WebIOPi-0.5.3
sudo ./setup.sh

รอสักครู่ จากนั้นก็สั่งให้ webiopi ทำงานด้วยการรันเซอร์วิส

sudo /etc/init.d/webiopi start

หากต้องการสั่งให้เซอร์วิสหยุดทำงาน ก็ตรงกันข้ามครับ

sudo /etc/init.d/webiopi stop

แต่ถ้าถูกใจแอพพลิเคชั่นนี้ และอยากให้ทำงานทุกครั้งที่เปิดเครื่องแล้วหล่ะก็ ให้กำหนดเป็นค่า default ตอนเปิดเครื่องไปเลย ด้วยคำสั่ง

sudo update-rc.d webiopi defaults

หลังจากนั้น เปิด web browser ของเราขึ้นมา แล้วกรอก URL ไปที่ไอพีของ Raspberry Pi ครับโดยใส่ port 8000 เข้าไปด้วย

เช่น ไอพีบอร์ด raspberry pi ของผมเป็น 192.168.2.105 จะได้ว่า  http://192.168.2.105:80000/webiopi/ ครับ

ทำการกรอก username / password ครับ ในที่นี้ถูกกำหนดเป็น webiopi รหัสผ่านก็ raspberry ครับ

จะปรากฏหน้าเว็บ จากนั้น ลองกำหนดให้ GPIO ใดๆ ก็ได้เป็น OUT แล้วลองเอา LED ต่อที่ pin นั้นๆ จากนั้นกดเปลี่ยนสถานะ หากเป็น Hi จะเปลี่ยนสีเป็นสีเหลืองที่หน้าเว็บ ที่หลอด LED ก็ควรจะติดด้วย

WebIOPi control Raspberry pi 's GPIO

ทดลองเปิดหน้าเว็บจากคอมพิวเตอร์เครื่องอื่น หรือเปิด browser เพิ่มอีก และดูผลการเปลี่ยนแปลง เราจะเห็นว่าหน้าเว็บแสดงผลได้แทบจะทันทีทันใด ที่มีการเปลี่ยนแปลงที่ GPIO ครับ นั่นก็เป็นเพราะ REST framework นั่นเอง

ลองติดตั้ง แล้วศึกษาตัวโปรเจคนี้ดูครับ รับรองได้ประโยชน์แน่นอน

แหล่งที่มา : http://code.google.com/p/webiopi/

อ่านเพิ่มเติม...

Saturday, January 19

Putty tip#1

เวลาผมใช้ คำสั่ง pstree หรือ tree บน putty terminal จะเจอปัญหาว่าไม่สามารถแสดงเส้นทาง โครงสร้างของไดเรกทอรีได้ วันนี้ก็เลยเอารูปการแก้ปัญหามาฝากครับ ลองไปปรับแต่งกันดู

putty

pstree คือ คำสั่งแสดงโครงสร้างของ process ที่ำกำลังทำงานอยู่ ณ ขณะนั้น ว่ามี process หลัก และ process ย่อย ซ้อนกันอยู่อย่างไร

tree คือ คำสั่งแสดงโครงสร้างของไดเรกทอรี่ และ ไฟล์ที่ซ้อนกันอยู่

เล็กๆ น้อยๆ สำหรับวันนี้ครับ มีความสุข เสาร์ อาทิตย์ นะครับ

อ่านเพิ่มเติม...

Raspberry pi play music from radio online

ง่ายๆก่อนนอนวันนี้เรามาลองทำ internet radio ฟังกันจาก Raspberry Pi ของเราดีกว่า ทำเสร็จแล้วก็กล่อมเรานอนไปเลย
1. ติดตั้งโปรแกรม mpd&mpc ง่ายๆแค่พิมพ์
sudo apt-get install mpd && sudo apt-get install mpc

2. เปิดไฟล์ /etc/mpd.conf มาแก้ไขด้วยคำสั่ง
sudo nano /etc/mpd.conf

3. เลื่อนแก้ไขดังนี้
bind_to_address "localhost"
แก้เป็น
#bind_to_address "localhost"

#mixer_type "software"
แก้เป็น
mixer_type "software"

กด Ctrl+x แล้วตอบ Y ออกมา
ที่แก้ไปอันแรกคือให้เราสามารถ remote คุมจากอุปกรณ์อื่นได้เช่น iPhone,Android
บรรทัดที่สองคือให้เราสามารถควบคุมระดับเสียงได้

4. เพื่อความชัวร์ว่าเสียงมันจะออกที่ช่อง audio พิมพ์
sudo amixer cset numid=3 1
อยากให้ไปดังที่ TV ผ่านสาย HDMI พิมพ์
sudo amixer cset numid=3 0

5. restart ทุกอย่างเพื่อ reload config ด้วยคำสั่ง
sudo service mpd restart

6. add สถานีที่ต้องการลงไป ดังนี้
mpc add http://205.164.62.11:5084/

7. ลองสั่งเล่นเพลงด้วยคำสั่ง mpc play

8. เพิ่มลดระดับเสียงได้คำสั่ง mpc volume 0-100

9. อย่าลืมเสียบลำโพงนะครับ

ราตรีสวัสดิ์ สำหรับสถานีที่ให้ไปเป็น Vocal jazz ที่แอดมินฟังนอนทุกคืนคลื่นนี้เพลงเค้าดีจริงๆ ใครอยากได้สถานีไหนลองมาโพสต์ขอได้ครับ

mpc add http://203.150.224.142:8000
เอาคลื่นไทยมาฝากนะครับ
ถ้ามีสองสถานีแบบนี้ใช้คำสั่ง mpc next หรือ mpc prev เพื่อเลื่อนสถานีนะครับ

raspberry pi play music from radio online

บทความจากแอดมิน Raspberry Pi 66 Club

อ่านเพิ่มเติม...

Sunday, January 13

Raspberry Pi : Getting started with pyfirmata

จากในครั้งก่อนๆ ถ้าจำได้ ที่ผมได้แนะนำเรื่องการใช้ Arduino มาเป็นแขนเป็นขาให้ Raspberry Pi (ย้อนกลับไปดู http://raspberry-pi-th.blogspot.com/2012/11/raspberry-pi-and-arduino-experiment.html) ในตอนนั้น เราได้เขียนโปรแกรมติดต่อระหว่างบอร์ด Arduino และ บอร์ด Raspberry Pi โดยใช้ python-serial จาก Raspberry pi ติดต่อผ่าน uart protocal โดยให้บอร์ด Arduino ทำหน้าที่รอรับคำสั่งจาก Raspberry Pi เราจะพบว่า ค่อนข้างจะลำบากในแง่ของการพัฒนา แต่ถ้าหากใครที่มีความชำนาญแล้ว อาจจะชอบสไตล์นี้ก็ไม่ว่ากัน แต่ ถ้าหากจะมีไลบรารี่ที่สามารถอำนวยความสะดวกได้หล่ะ ก็น่าจะทำให้เราสามารถลดระยะเวลาในการพัฒนาโปรแกรมได้ไม่น้อย

วันนี้ เราจะมาลองใช้ไลบรารีสำเร็จรูปที่ชื่อ pyfirmata ซึ่งจะต้องติดตั้งลงบน Raspberry Pi แทนการเขียนโค๊ดเพื่อติดต่อระหว่าง Raspberry Pi และ Arduino ผ่านทาง Serial Port

Firmata คือ โปรแกรมที่ถูกออกแบบโปรโตคอลอย่างง่าย ที่ใช้สำหรับควบคุมขา PIN ต่างๆ บนบอร์ด Arduino โดยจะทำงานบนบอร์ด Arduino ซึ่งจะคอยทำงานรับส่งคำสั่ง ผ่านทาง Serial port

pyfirmata คือ ไลบรารีสำเร็จรูปที่ถูกพัฒนาด้วยภาษาไพธอนให้ทำงานอยู่บน host ในที่นี้ เราจะให้มาทำงานบน Raspberry Pi คอยสั่งคำสั่งและรับค่าผ่าน Serial port เมื่อติดต่อกับ Arduino

สิ่งจำเป็นที่เราต้องมี คือ
- สาย USB สำหรับต่อจากบอร์ด Arduino กับ บอร์ด Raspberry Pi
- บอร์ด Raspberry Pi ที่เชื่อมต่อกับอินเตอร์เนต เพื่อดาวน์โหลด ติดตั้ง package pyfirmata
- บอร์ด arduino รุ่นใดก็ได้ ในที่นี้ ผมใช้ Arduino Duemilanover w/ATmega328

อันดับแรกให้ทำการติดตั้ง pyfirmata ลงบนบอร์ด Raspberry pi แต่เนื่องจากา pyfirmata นั้น ต้องการ python-serial โมดูลทำงานร่วมด้วย หากใครยังไม่เคยติดตั้ง จะต้องทำการติดตั้ง python-serial ก่อน  (ดูการติดตั้ง python-serial http://raspberry-pi-th.blogspot.com/2012/10/how-to-communicate-raspberry-pi-s.html)  และเนี่องจาก package pyfirmata ถูกเก็บไว้แบบ mecurial distributed source control เพราะฉะนั้นก่อนติดตั้ง เราจะต้องต้องติดตั้ง mecurial package ของ debian ซะก่อน ด้วยคำสั่ง

sudo apt-get mercurial

firmata source code control

เมื่อ Raspberry Pi ของเรามี python-serial และ mecurial เรียบร้อยแล้ว จากนี้ เราก็จะทำการติดตั้ง pyfirmata ด้วยคำสั่ง

hg clone https://bitbucket.org/tino/pyfirmata

เราจะได้โฟวเดอร์ pyfirmat มา จากนั้น เข้าไปในโฟวเดอร์ดังกล่าว

cd pyfirmata

แล้วติดตั้ง

sudo python setup.py install

หากไม่มีอะไรผิดพลาด เราน่าจะเรียกโมดูลนี้ได้ โดยเมื่อเราเข้าไปใช้ใน python console น่าจะเห็น function ต่างๆ ใน pyfirmata

sudo python
>>> import pyfirmata
>>> dir(pyfirmata)
['ANALOG', 'ANALOG_MESSAGE', 'Arduino', 'ArduinoMega', 'BOARDS', 'Board', 'DIGITAL', 'DIGITAL_MESSAGE', 'DIGITAL_PULSE', 'END_SYSEX', 'I2C_CONFIG', 'I2C_REPLY', 'I2C_REQUEST', 'INPUT', 'InvalidPinDefError', 'NoInputWarning', 'OUTPUT', 'PWM', 'Pin', 'PinAlreadyTakenError', 'Port', 'QUERY_FIRMWARE', 'REPORT_ANALOG', 'REPORT_DIGITAL', 'REPORT_FIRMWARE', 'REPORT_VERSION', 'SAMPLING_INTERVAL', 'SERVO', 'SERVO_CONFIG', 'SET_PIN_MODE', 'SHIFT_DATA', 'START_SYSEX', 'STRING_DATA', 'SYSEX_NON_REALTIME', 'SYSEX_REALTIME', 'SYSTEM_RESET', 'UNAVAILABLE', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', '__version__', 'boards', 'inspect', 'itertools', 'pyfirmata', 'serial', 'time', 'to_two_bytes', 'two_byte_iter_to_str', 'util']
>>>

แสดงว่าเราติดตั้ง pyfirmata สมบูรณ์แหละ ที่เหลือก็คือ ดูจาก tutorial และ exmaple การใช้งานของมัน

กลับมาที่บอร์ด Arduino เราจำเป็นจะต้องมีโค๊ดที่ทำหน้าที่รับคำสั่งจาก pyfirmata ที่มีรูปแบบโปรโตคอลเฉพาะที่ตรงกัน เพื่อทำหน้าที่รับ ส่ง คำสั่ง ระหว่าง pyfirmata ที่รันอยู่บน Raspberry Pi และ firmata ที่รันอยู่บน Arduino ซึ่งในส่วนของ Arduino ได้มีตัวอย่างของ firmata รวบรวมมาพร้อมอยู่แล้ว กับ Arduio IDE เวอร์ชั่นใหม่ๆ  ให้เราต่อบอร์ด Arduino เข้ากับคอมพิวเตเอร์ของเรา แล้วทำการเลือกตัวอย่าง StandardFirmata จากเมนู File>>Examples>>Firmata จากนั้นทำการ  verify โค๊ดก่อน หากไม่มีอะไรผิดพลาดเกิดขึ้น ก็ให้เราทำการ upload เพื่อทำการ burn hex file ลงบนบอร์ด arduino

burn firmata code into arduino

 

กลับไปที่บอร์ด Raspberry Pi เราจะทำการสร้างไฟล์ทดสอบการทำงานด้วย python เพื่อทำการทดสอบ pyfirmata ว่าจะสามารถติดต่อกับบอร์ด arduino ได้หรือเปล่า โดยให้เราสร้างไฟล์ขึ้นมาทดสอบ โดยเรียกโปรแกรม nano เพื่อสร้างไฟล์ blink.py

sample code usage pyfirmata

ทำการบันทึก (Ctrl+x) กด y เพื่อยืนยัน จากนั้น นำบอร์ด Arduino (ที่ผ่านการโปรแกรม เรียบร้อยแล้ว) มาเสียบด้วยสาย USB เข้าที่พอร์ต USB ของ Raspberry Pi  หากใช้คำสั่ง tail –f  /var/log/message จะพบว่า Raspberry pi มองเห็นบอร์ด arudino เป็น ttyUSB0 (ซึ่งเราได้นำค่านี้ไปกำหนดลงในโปรแกรม blink.py ด้วย) เมื่อทุกอย่างเรียบร้อยแล้ว ให้ลองทำการสั่ง python blink.py แล้วดูผลลัพธ์ที่หลอด LED13 ที่บอร์ด arduino จะเห็นว่า เกิดการติดดับ สลับกัน 2 ครั้ง เป็นไปตามโค๊ดที่เราเขียน

Raspbbery Pi with Arduino via pyfirmata

สรุปกันอีกครั้ง

  1. ติดตั้ง pyfirmata lib ลงบน raspberry pi
  2. โปรแกรม firmata standard ลงบนบอร์ด arduino
  3. เขียนโค๊ด blink.py ลงบน Raspberry pi
  4. ต่อสาย USB ระหว่างบอร์ด Raspberry Pi และบอร์ด Arduino
  5. ทดสอบโค๊ด และดูผลลัพธ์ที่ได้

ถ้าทำสำเร็จ เราจะพบว่า การติดต่อระหว่าง Raspberry Pi และ Arduino ไม่ใช่เรื่องยากอีกต่อไป นอกจากนี้ Arduino เอง ยังสามารถนำไปต่อกับ Sensor และ Control อะไรได้อีกมากมาย ซึ่งต่อไป จะได้นำเสนอโปรเจคที่นำ Arduino ไปต่อยอดให้ Raspberry Pi มีความาสามารถเพิ่มขึ้นได้อีกต่อไปครับ

ขอให้สนุกกับ Raspberry Pi และ Arduino ครับ

อ่านเพิ่มเติม...

Thursday, January 10

How to Install Arduino IDE on Debian

หากเพือนๆ สนใจที่จะพัฒนางานทางด้านไมโครคอนโทรลเลอร์เช่น Arduino บน Debian แล้วหล่ะก็ มีสิ่งที่น่าสนใจ เล็กๆ น้อยๆ ที่ผมได้ทดลอง และหาข้อมูล จะได้นำมาเขียนบันทึกไว้บน Blog แห่งนี้ วิธีการก็คือ

หลังจากที่เราได้เคยติดตั้ง Oracle VM VirtualBox และได้ติดตั้ง Debian ไปแล้ว เมื่อสั่งให้ระบบปฏิบัติการณ์เริ่มทำงาน เราจะเข้าสู่โหมด XWindows จากนั้น ให้ Logon ด้วย user ที่เราได้กำหนดไว้ ในที่นี้ ผมได้ Logon เข้าด้วย user: pi ที่ผมได้กำหนดไว้ จากนั้น ทำการเปลี่ยนตัวเองเป็น root เพื่อที่จะติดตั้ง arduino ide

su -
ใส่ password root ที่เราได้กำหนดไว้แล้ว
ต่อมาใช้คำสั่ง apt-get install arduino ตอบ y รอจนกว่าระบบติดตั้ง arduino เรียบร้อย

หากใครสงสัยว่า arduio คืออะไร สามารถศึกษาเพิ่มเติมได้ที่นี่ คลิก  

ทำการเสียบบอร์ด Arduino เข้ากับ PC หรือ  Notebook ของเรา แล้วทำการเลือกที่เมนูหน้าต่าง Oracle VM VirtualBox ไปที่
Device->USB Device แล้วทำการเลือก FTD FT232R  ตามรูป (ซึ่งน่าจะเป็นอย่างนั้น สำหรับบอร์ด arduino)

ที่หน้าต่าง console หากเราใช้คำสั่ง tail -f /var/log/message (สำหรับ root) เราจะเห็นข้อความสำหรับเจ้า FTDI USB Serial Device...... ttyUSB0 ด้วยเช่นกัน

USB to Serial Adapter on Debian

ทำการเช็คที่ ls -l /dev/ttyUSB0 จะเห็นไฟล์นี้ เกิดขึ้นเช่นกันที่ folder /dev/
crw-rw---- 1 root dialout 188, 0 Jan 10 23:11 /dev/ttyUSB0

ปัญหาของเจ้า arduino IDE มันอยู่ตรงนี้ครับ คือหลังจากที่เราติดตั้ง arduino IDE เรียบร้อยแล้ว เราจะยังไม่สามารถที่เลือกที่เมนู IDE
tool->Serial Port ได้ (ไม่เชื่อลองเปิด IDE ขึ้นมา ) เราจะไม่สามารถเลือก Serial port ที่จะติดต่อกับบอร์ด arduino ได้ครับ ถึงแม้ว่า Debian จะมองเห็น USB ที่ต่อเข้ามาแล้วก็ตามArduino IDE on Debian

เนื่องจากว่า ตอนนี้ เราเองเป็น user: pi แต่เจ้า ttyUSB0 นั่นอยู่ในกรุ๊บ dialout ครับ

crw-rw---- 1 root dialout 188, 0 Jan 10 23:11 /dev/ttyUSB0  (owner เป็น root แต่ group เป็นของ dialout ครับ ) 

วิธีแก้ไข ก็คือ ทำให้ pi นั้นสามารถเข้าใช้ group ของ dialout ได้ ด้วยคำสั่ง

root@raspberrypi:~#usermod -a -G dialout pi

หากเราใช้คำสั่ง pi@raspberrypi:~$ groups อีกครั้ง เราก็ยังพบว่า pi ยังไม่มีสิทธิใน dialout เหมือนเดิม อันนี้ ไม่ต้องตกใจครับ ให้เรา Logout แล้ว  Logon มาใหม่ครับ แล้วลองเช็คอีกที จะพบว่า

pi@raspberrypi:~$ groups
pi dialout cdrom floppy audio dip video plugdev netdev

มองเห็น dialout เรียบร้อยแล้ว ทดลองเปิด arduino ide อีกครั้ง ก็จะพบว่าที่เมนู tool->Serial Port สามารถเลือก /dev/ttyUSB0 ได้แล้วครับ

Serial Port on Arduino IDE (Linux Version)

ลองเลือกโค๊ดตัวอย่าง แล้วทำการ upload โค๊ดตัวอย่างที่ผ่านการ build แล้ว ใส่ไปที่บอร์ด arduino ของเราครับ ซึ่งน่าจะทำงานได้ตามปกติ จากนี้ไปเราก็สามารถที่จะพัฒนางาน arduino บน Debian ได้แล้วครับ ซึ่งสามารถนำหลักการนี้ไปใช้บน Raspian ของ Raspberry Pi ได้เช่นกันครับ ซึ่งต่อไป ผมอาจจะนำเอา piFirmata มาใช้ในการพัฒนา Raspberry Pi กับ Arduino ต่อไปครับ (คิดไว้ก่อนเฉยๆ ไม่รู้จะว่างหรือเปล่านะ :P )

ปล. ผมอาาจะอธิบายขั้นตอนการ Build / Upload Code สำหรับ Arduino เร็วไป แต่คิดว่า เพื่อน น่าจะหาข้อมูลอ่านได้ไม่ยาก หากสงสัยขั้นตอนไหนหน่ะครับ ซึ่งทั่วๆไป วิธีการก็จะคล้ายๆกัน

อ่านเพิ่มเติม...
 

แจกฟรี พื้นที่ฝากไฟล์ 15 GB

ติดตามข่าวสารผ่าน Twitter

ติดตาม Blog นี้

About Me

My photo

สวัสดีครับ ชื่อเปิ้ลนะครับ ถ้ามีอะไรให้ช่วยเหลือได้ ก็จะช่วยครับ
ผมได้สร้างบล๊อกไว้ เพื่อเก็บรวบรวมความรู้ และประสบการณ์ในการทำงานครับ แวะไปเยี่ยมชมกันได้ครับ http://mechacity.blogspot.com และบล๊อก http://faker-programmer.blogspot.com ครับ

Blog อื่นๆของฉัน

Microcontroller Electronics update

สถิติเยี่ยมชมบล๊อก