หน้าเว็บ

วันเสาร์ที่ 20 ธันวาคม พ.ศ. 2557

ระบบติดตามไร่สวนด้วยกล้อง (ตอนจบ)

ตอนที่ 8: แจ้งเตือนผู้ใช้เมื่อตรวจเจอการเคลื่อนไหวทางอีเมล์ 

ก่อนอื่นมาตั้งค่าเมล์ก่อน 
ตามที่แจ้งไว้ในตอนที่ 5 ว่าลง SMTP service สำหรับการส่งเมล์ตามรายการนี้

opkg install ssmtp

แต่ผมไปเจออีกอันใช้งานง่ายกว่าก็เลยเปลี่ยนใจมาใช้อันใหม่ https://forum.openwrt.org/viewtopic.php?id=18669

1. ลง SMTP service สำหรับการส่งเมล์อันใหม่
opkg install msmtp

2.ทำการตั้งค่า smtp โดยใช้คำสั่ง vi /etc/mstmprc แก้ค่าต่างๆให้ออกมาดังรูป อันนี้ใช้อีเมลล์ gmail เป็นตัวส่ง 




3. save file แล้วก็ลองทดลองส่งโดยใช้คำสั่ง 

echo 'Hello, World!' | sendmail xxxx@hotmail.com

คำสั่งข้างบนเป็นการทดลองส่งคำว่า Hello world ไปยังเมลล์ xxxx@hotmail.com

ส่งเสร็จลองไปเช็คเมลล์ดูถ้ามีเมลล์เข้าแสดงว่าการตั้งค่าสำเร็จแล้ว

4. เข้าไปตั้งค่าในโปรแกรม motion เพื่อให้มันส่งเมลล์เมื่อเจอภาพเคลื่อนไหว ใช้คำสั่ง vi /etc/motion.conf





เมื่อเข้าไปในไฟล์ ประมาณบรรทัดที่ 522 จะพบประโยค
; on_picture_save value
ให้ตัดเ ครื่องหมาย ; ออกเพื่อเปิดใช้งานฟังก์ชันนี้
แล้วเปลี่ยนค่า value เสียใหม่ ก็จะเป็นดังนี้

on_picture_save /mnt/sda1/notify "%d-%m-%Y" "%H:%M:%S" "%f"

/mnt/sda1/notify หมายถึงว่าให้เมื่อมีการบันทึกไฟล์ให้ไปเรียกโค๊ดที่อยู่ในไฟล notify ที่เก็บไว้ในโฟลเดอร์ /mnt/sda1/ 
"%d-%m-%Y"  หมายถึงว่าให้ส่งค่า วัน เดือน ปี ที่มีการบันทึกภาพไปที่โค๊ด notify
"%H:%M:%S"  หมายถึงว่าให้ส่งค่า เวลา ที่มีการบันทึกภาพไปที่โค๊ด notify
"%f"               หมายถึงว่าให้ส่งชื่อไฟล์ที่บันทึกไปที่โค๊ด notify

5. สร้างโค๊ด notify ไว้ในโฟลเดอร์ /mnt/sda1   โดยใช้คำสั่ง vi /mnt/sda1/notify แล้วพิมพ์โค๊ดขึ้นมาดังนี้



6. เตรียมโค๊ดต่างๆเสร็จแล้วก็รันโปรแกรม motion ด้วยการพิมพ์ motion เหมือนในตอนที่ 8
7. เมื่อ motion จับภาพเคลื่อนไหวและบันทึกภาพ โปรแกรม motion ก็จะเรียกโค๊ด notify ให้ทำงานพร้อมส่งค่าไปให้ด้วย ทางโค๊ด notify ก็จะทำการส่งเมล์แจ้งค่าเหล่านั้นไป รูปข้างล่างคือข้อมูลที่มันส่งไปที่เมลล์ xxxx@hotmail.com



เป็นอันเสร็จเรียบร้อยสำหรับการส่งเมล์ 

ตอนนี้ถือว่าเป็นการจบโครงงานนี้ครับ

วันจันทร์ที่ 8 ธันวาคม พ.ศ. 2557

ระบบติดตามไร่สวนด้วยกล้อง (ตอนที่เจ็ด)


 ตอนที่ 7 : ตั้งค่าโปรแกรม Motion Detection.


Motion เป็นโปรแกรมที่ถูกเขียนขึ้นด้วยภาษา C สำหรับระบบปฎิบัติการลีนุก เป็นงานอดิเรกของคนกลุ่มหนึ่งที่ทำให้เกิดผลประโยชน์แก่คนกลุ่มมาก

โปรแกรมใช้หลักการง่ายๆคือ วัดความแตกต่างของพิกเซลของแต่ละเฟรม ถ้ามีความแตกต่างระหว่างเฟรมมากก็แสดงว่ามีการเคลื่อนไหว ให้บันทึกรูปเก็บไว้

ในการพัฒนาครั้งนี้อ้างอิงจากเว๊บอย่างเป็นทางการของ motion http://www.lavrsen.dk/foswiki/bin/view/Motion/WebHome

จากตอนที่ 5 เราได้ลงโปรแกรม motion ไปแล้วด้วยคำสั่ง opkg install motion

1. เข้าไปแก้ใขค่าในไฟล์ config ของ motion โดยพิมพ์คำสั่ง vi /etc/motion.conf





จากรูปด้านบน ประมาณบรรทัดที่ 360 ให้ใส่ path ที่เราต้องการบันทึกรูปไว้ ซึ่งของเราจะบันทึกไว้ที่ flash drive ที่ mount ไว้กับ router แล้ว ก็คือที่โฟลเดอร์ /mnt/sda1/motion (ดูรายละเอียดการ mount ได้ที่ตอนที่ 5)

เราสามารถตั้งค่าอย่างอื่นได้อีกมากมาย ไม่ว่าจะเป็นขนาดของรูป จะดูผ่านเว๊บหรือไม่ ความแตกต่างของพิกเซลที่จะให้จับเท่าไร ทำให้สามารถประยุกต์ใช้ได้อีกเยอะครับ รายละเอียดการตั้งก็ดูได้จาก http://www.lavrsen.dk/foswiki/bin/view/Motion/MotionGuide

2. เมื่อจะใช้งาน motion ก็แค่พิมพ์คำว่า motion แล้วมันก็จะทำงานเอง รูปด้านล่างมันกำลังจบภาพเคลื่อนใหวอยู่


3. เมื่อมันจับภาพเคลื่อนไหวมันจะบันทึกลงโฟลเดอร์ที่เราต้องค่าไว้ ดังแสดงในรูปด้านล่าง



4. พิมพ์ Ctrl+C เพื่อออกจากโปรแกรม แล้วพิมพ์ cd /mnt/sda1/motion  และก็ ls จะพบว่ามีไฟล์รูปถูกบันทึกเข้าไปแล้ว


รูปผู้ชายขี้เหร่ที่ปรากฎอยู่ในตอนที่หก ก็ได้มาด้วยวิธีนี้เอง


ยังไม่จบนะครับ โปรดติดตามตอนต่อไป

วันศุกร์ที่ 5 ธันวาคม พ.ศ. 2557

ระบบติดตามไร่สวนด้วยกล้อง (ตอนที่หก)


ตอนที่ 6 : ทำให้ USB webcam ทำงาน

ตอนผมทำโปรเจคนี้ ผมไปซื้อเว๊บแคมถูกๆร้อยกว่าบาทมาใช้ครับ ยี้ห้อ RICH-211 ความละเอียดประมาณแสนพิกเซลเอง หาข้อมูลในกูเกิลไม่เจออย่างอื่นๆนอกจากรูปของมัน






เมื่อไม่มีข้อมูลใดๆ ก็ไม่รู้ว่าจะมีไดร์เวอร์ที่สนับสนุนอันนี้หรือไม่ หาข้อมูลเท่าไรก็ไม่เจอ ก็เลยมาลองเอาเว๊บแคมมาใช้บน Ubuntu แล้ว Dmesg ดู ก็ไม่มีข้อมูลอะไรเลย 


หาข้อมูลไปเรื่อยๆ เจอเรื่องน่าอ่าน  เป็นเรื่องชาวฝรั่งเศสที่ซื้อเวบแคมมาเป็นของขวัญวันคริสมัสให้ลูกสาวแต่ปรากฎมันใช้บน Linux ไม่ได้ เขาก็เลยสร้างไดร์เวอร์ซะเองเลย ตอนนี้ไดร์เวอร์ของเขาถูกใช้อย่างกว้างขวางใน  Linux หลายๆ distribution อ่านเรื่องราวเต็มได้ที่ http://www.theinquirer.net/inquirer/news/1047633/one-writes-linux-drivers-235-usb-webcams


แต่โค๊ดของเขาเมื่อเอามาคอมไพล์บน Ubuntu เ วอร์ชั่น 9.04 ที่ผมใช้ตอนทำโปรเจ๊คนี้ ผมคอมไพล์มันไม่ผ่าน 

ลองหาข้อมูลเรื่อยๆ พบมีข้อมูลว่าทีมพัฒนา Ubuntu ได้นำมันไปใส่ไว้ใน driver ที่มีชื่อว่า USB  Video Class หรือเรียกย่อๆว่า UVC ซึ่งถูกนำไปใช้ใน Ubuntu 9.10 แล้ว 

ก็เลยไปดาว์นโหลด ubuntu 9.10 มาลองใช้บน vmware ดู (ดูรายละเอียดเกี่ยว vmware ไ ด้ที่ http://en.wikipedia.org/wiki/VMware ) ปรากฎว่าเมื่อ dmesg แล้วพบว่ามันเกี่ยวกล้องโผล่มาแล้ว และมีการสร้างไฟล์สำหรับ video ด้วย











นำข้อมูลนี้ไปเช็ค ว่ามีไดรเวอร์ UVC เวอร์ชัน v0.1.0 ที่สนับสนุนบน Openwrt 2.6 บ้างหรือไม่ ปรากฏว่ามีครับ ทำให้การค้นหาที่ยาวนานไปจบลงได้ และทำให้สามารถเริ่มปฎิบัติการติดตั้งกล้องได้

1. จากตอนที่แล้ว ซึ่งได้ลงไดร์เวอร์ของ USB Webcam ตามรายการต่อไ ปนี้

opkg install kmod-usb-video
opkg install spcacat    ----สำหรับถ่ายภาพจากกล้อง webcam

ให้ตัด opkg install spcacat    ----สำหรับถ่ายภาพจากกล้อง webcam  เพราะไม่จำเป็นแล้ว

แล้วลงไดร์เวอร์  UVC เพิ่มโดยใช้คำสั่ง

opkg install kmod-video-uvc

2. ลงเสร็จแล้วให้ถอนสาย adapter ของ router ออกแล้วเสียบใหม่

3. เข้าไปใน putty แล้วพิมพ์คำสั่ง dmesg จะพบข้อความดังรูปด้านล่างที่แสดงว่า router มันเจอเว๊บแคมแล้ว






4.พิมพ์คำสั่ง cd /dev แล้วก็ ls ก็จะพบว่ามีโฟลเดอร์ vdo0 ขึ้นมาแล้ว







นี้เป็นตัวอย่างภาพจากกล้องเว๊บแคบครับ




เป็นความสำเร็จแบบขี้เหร่จริงๆ 555

ยังไม่จบนะครับ โปรดติดตามตอนต่อไป

วันพุธที่ 3 ธันวาคม พ.ศ. 2557

ระบบติดตามไร่สวนด้วยกล้อง (ตอนที่ห้า)

ตอนที่ 5 : ลง Device drivers สำหรับ USB interface, ลง FAT32 filesystem, ลง NTP client สำหรับเวลา, ลง SMTP service สำหรับการส่งอีเมล์ และลง Motion detection software สำหรับการตรวจจับภาพเคลื่อนไหว

ใน Openwrt เป็นสิ่งที่ถูกออกแบบมาเพื่อใช้กับระบบ embedded โดยเฉพาะ  ดังนั้นจึงมีการเตรียม driver ที่ระบบ  embedded ต้องการไว้อย่างครบถ้วน การลงก็ง่ายๆ แค่ใช้คำสั่ง opkg ซึ่งก็คล้ายกับคำสั่ง apt-get บน Ubuntu นั้นเอง

1.เมื่อติดต่ออินเตอร์เน็ตได้แล้ว ในหน้าต่างของ putty ให้พิมพ์คำสั่ง opkg update  คำสั่งนี้จะทำการอัปเดทรายการของไดร์เวอร์ที่สามารถลงได้ทั้งหมดของ openwrt






2.สามารถใช้คำสั่ง opkg list เพื่อแสดงรายการทั้งหมดนั้น หรือจะใช้คำสั่ง opkg list | grep usb  เ พื่อดูเฉพาะไดรเวอร์ที่เกี่ยวข้องกับ usb







3.ลงไดร์เวอร์ของ USB interface และ USB flashdrive ตามรายการต่อไ ปนี้

opkg install kmod-usb-ohci 
opkg install kmod-usb-core 
opkg install kmod-usb-storage 
opkg install kmod-usb-uhci 
opkg install kmod-usb-serial-pl2303 
opkg install kmod-usb-serial-ftdi 
opkg install kmod-usb2

4.ลงไดร์เวอร์ของ USB Webcam ตามรายการต่อไ ปนี้

opkg install kmod-usb-video
opkg install spcacat    ----สำหรับถ่ายภาพจากกล้อง webcam

5.ลงไดร์เวอร์สำหรับ FAT32 filesystem

opkg install kmod-fs-vfat
opkg install vsftpd     ---- ftp server สำหรับรับส่งไฟล์

6.ลง ntp client เพื่ออ่านค่าเวลามาจาก ntp server

opkg install ntpclient

7.ลง SMTP service สำหรับการส่งเมล์

opkg install ssmtp

8.ลงโปรแกรมบันทึกและตรวจจับการเคลื่อนไหว 

opkg install motion

9. แล้วก็ให้รีสตาร์ท router โดยการถอดสาย adapter และเสียบกลับไปใหม่ ทำการ putty เข้าไปติดต่อ router อีกครั้ง แล้วพิมพ์คำสั่ง dmesg เพื่อเข้าไปดูว่า kernel ได้ทำอะไรกับ hardware บ้าง ก็จะเจอข้อความว่ามีการการ mount  flash drive ไว้ที่โฟลเดอร์ /mnt/sda1 เรียบร้อยแล้ว











10. พิมพ์คำสั่ง   cd /mnt/sda1 เพื่อเข้าไปดูไฟล์ใน flash drive

11. พิมพ์คำสั่ง ls เพื่อดูว่ามีไฟล์อะไรบ้าง ถ้าเห็นก็แสดงว่าทุกอย่างสำเร็จ แต่ถ้าไม่เห็น ต้องมีการลงไดรเวอร์เพิ่มดังนี้

kmod-nls-base
kmod-nls-cp437
kmod-nls-iso8859-1

อ้างอิงจาก
https://forum.openwrt.org/viewtopic.php?pid=65789

เนื่องจาก linux จะอ่าน hardware ออกมาเป็น file ดังนั้นถ้าเป็นภาษาที่มันไม่รู้จักต้องมีการลงโดรเวอร์ที่เกี่ยวกับภาษาด้วย อย่าง flash drive ที่เราใช้มันต้องการการแปลงรหัสภาษาโดยใช้มาตรฐาน iso8859-1 ทำให้ต้องลงไดร์เวอร์เพิ่มเติมตามที่แสดงไว้


รูปด้านล่างแสดงความสำเร็จในการทำให้ flash drive เป็น hard disk ตัวหนึ่งสำเร็จเก็บไฟลรูปที่จะถ่ายจากกล้อง webcam




12. เราได้ลง ntp client เพื่ออ่านค่าเวลามาจาก ntp server ด้วยคำสั่ง opkg install ntpclient ตามที่พูดไว้ในขั้นที่ 6  หลังจากนั้นสิ่งที่สำคัญที่ลืมไม่ได้คือการตั้งค่า Time Zone,  Time Zone ประเทศไทยคือ GMT+7 แต่ใน openwrt จะใช้ IST-7 ให้ใช้คำสั่งดังนี้

#echo “IST-7″ > /etc/TZ

หลังจากนั้นสามารถตรวจสอบการเปลี่ยนแปลงได้โดยใช้คำสั่ง date ดังต่อไปนี้

#date

ตอนหน้าเราจะได้เอาเว๊บแคมมาลองจับภาพกันดูแล้วนะครับ



ระบบติดตามไร่สวนด้วยกล้อง (ตอนที่สี่)

ตอนที่ 4 : ต่อ router เข้ากับ internet บ้าน
ตอนที่แล้วลองติดต่อ router ผ่านทาง telnet แต่ว่าการติดต่อทาง telnet ไม่ค่อยปลอดภัยเนื่องจากไม่ได้กำหนดรหัสเพื่อเข้าไปจัดการrouter   ซึ่งทำใ ห้ใครก็สามารถเข้าไปจัดการมันได้ ดังนั้นต้องกำหนดรหัสให้มัน  แต่เมื่อใส่รหัสแล้วจะไม่สามารถติดต่อผ่าน telnet ได้อีก ต้องติดต่อผ่านโปรแกรม putty

1. บนหน้า telnet พิมพ์ passwd  มันจะบอกให้ใส่ password และใส่อีกครั้งเพื่อยืนยัน หลังนั้นให้ออกจาก telnet ด้วยคำสั่งexit


2. บน terminal ของ ubuntu ให้ลงโปรแกรม Putty ด้วยคำสั่งsudo apt-get install putty

3. เมื่อลงเสร็จให้พิมพ์คำสั่ง putty เพื่อเรียกใช้โปรแกรม จะปรากฎหน้าต่างดังรูปด้านล่าง แล้วให้พิมพ์ IP ของ Router ที่เราต้องการติดต่อนั้นคือ IP 192.168.1.1 แ ล้วกด open






4. จะมีการถามตามรูปด้านล่างนี้ให้กด Accept





5. หลังจากนั้นก็จะเข้าไปหน้าที่ให้เราใส่ login และ password เมื่อใส่เสร็จก็เข้าหน้าที่แสดงว่าเราสามารถติดต่อผ่าน Router ผ่านโปรแกรม putty ได้แล้ว







6. พิมพ์คำสั่ง vi /etc/config/network เพื่อใช้โปรแกรมอิดิเตอร์ของ linux ที่ชื่อว่า vi เข้าไปแก้ใข ไฟล์ที่ชื่อว่า network ในโฟลเดอร์ /etc/config/ รูปด้านล่างเป็นค่า network เดิม






7. จากข้อ 6 แก้ IP ของ router WL500gpV2 ให้เป็น 192.168.2.1 ซึ่งอยู่อีกวงหนึ่งเพื่อป้องไม่ให้ไปชนกับ IP ของ router อีกอันที่ใช้ต่อ internet อยู่ (IP 192.168.1.1 เป็นค่าที่ตั้งเป็นค่าตั้งต้นของทุก Router ที่ใช้กันอยู่ทั่วไป)




8. หลังแก้แล้วให้ พิมพ์คำสั่ง exit เพื่อออกจาก putty 

9 ถอด adapter ของ WL500gpV2 ประมาณ 20 วินาทีแล้วเสียบกลับเข้าไป เพื่อให้มันได้ reboot 
10. ติดต่อ router WL500gpV2 ผ่าน putty อีกครั้ง แต่คราวนี้ต้องพิมพ์ IP เป็น 192.168.2.1 เนื่องจากเราได้เปลี่ยนมันมาใช้อันนี้แล้ว

11. เอาสายแลนอีกเส้นนึง ปลายด้านหนึ่งเสียบช่อง WAN ของ WL500gpV2 แล้วเอาอีกปลายไปเสียบกับช่อง LAN ของ Router ที่ใช้ต่อ internet ซึ่งกรณีของผมเป็น Wireless router ยี่ห้อ Thomson นี้คือเหตุผลที่ต้องเปลี่ยน IP เพื่อไม่ให้สอง Router มี IP ชนกัน



















12. ลองทดสอบว่า router WL500gpV2 ติดต่อ internet ได้หรือยัง โดยการพิมพ์คำสั่ง ping www.google.com หากผลเป็นตามรูปด้านล่างแสดงว่า WL500gpV2 ติดต่อกับ internet ได้แล้ว 




หมายเหตุ ..... ในระบบ Linux การติดต่อกับ internet ได้เป็นสิ่งที่สำคัญมาก เพราะการลงโปรแกรมเป็นการลงแบบ real time คือ download มาแล้วก็ Install ทันที


เมื่อต่อเน็ตได้แล้ว ตอนหน้าจะเป็นการลง ไดร์เวอร์และโปรแกรมที่จำเป็น ใน WL500gvP2

วันจันทร์ที่ 1 ธันวาคม พ.ศ. 2557

ระบบติดตามไร่สวนด้วยกล้อง (ตอนที่สาม)

ตอนที่ 3 : ลง OpenWrt kernel 2.6 firmware

ต่อไปจะเป็นการลงเฟริมแวร์บน WL500gpV2 ครับ
1. ใน Notebook ที่ลง Ubuntu ให้ลงโปรแกรม tftp โดยพิมพ์คำสั่ง   sudo apt-get install tptp
2. ใน Notebook ที่ลง Ubuntu ให้ทำการยกเลิกการใช้ Network โดยการคลี๊กขวาที่รูปสัญญานที่ปรากฎอยู่มุมขวาบนของจอภาพแล้วเอาเครื่องหมายถูกที่ enable networing ออก ตามรูปด้านล่าง




3. ต่อสายแลนจากเครื่อง Notebook ไปยังช่องพอร์ท lan ของ WL500gpV2
4. ใช้ปากกากดที่ปุ่ม restoration ที่อยู่ด้านหลังของ WL500gpV2 แล้วเสียบสาย adapter เข้ากับตัว WL500gpV2 ไฟด้านหน้าจะติด กดปากกาไปจนกว่าไฟด้านหน้าจะเป็นไฟกะพริบ (การทำอย่างนี้เป็นการทำให้ router เข้าสู่โหมดที่เรียกว่า factory mode ซึ่งจะมีค่า IP 192.168.1.1)
5. บน Notebook ใ ห้พิมพ์คำสั่งตามรูป เพื่อตั้งค่า IP ของ Notebook ให้เป็น 192.168.1.5 และเพื่อให้ IP ของ Notebook อยู่วงเดียวกับ router 


6. แล้วพิมพ์คำสั่งตามรูป เพื่อที่จะ ping ไปยัง router ว่าสามารถติดต่อกันได้หรือยัง ถ้าผลออกมาดังรูปด้านล่างแสดงว่าติดต่อได้แล้ว ให้ clrl+c เพื่อหยุดการ ping




7. ไปยัง folder ที่เก็บไฟล์เฟริมแวร์ที่สร้างไว้ แล้วพิมคำสั่งตามรูปด้านล่าง เพื่อที่จะโอนถ่ายไฟล์จาก Notebook ไปยัง Router



8. ถ้าหน้าจอปรากฎดังรูปด้านล่าง แสดงว่าการลงเฟริมแวร์ใน Router สำเร็จแล้ว อย่าเพิ่งทำอะไร รอสัก 2-3 นาที เพื่อให้ router ทำการเซ็ตตัวเอง และหากไปทำอะไรระหว่างอาจจะมีผลให้ router กลายเป็นแค่ก้อนอิฐธรรมดา แต่ก็มีวิธีแก้ก็คือ ไปเริ่มทำตามขั้นตอนที่ 2 ใหม่



9. หลังจากรอดังที่กล่าวไว้ในขั้นตอนที่ 8 แล้วให้ถอดสาย adapter ของ router ออก แล้วรอสัก 20 วินาที ก็ให้เสียบสาย adapter ใหม่ 
10. ทำคลายขั้นตอนที่ 2 คือ คลิ๊กขวาที่รูปสัญญานที่ปรากฎอยู่มุมขวาบนของจอภาพ แล้วทำเครื่องหมายถูกที่ enable networing แต่ต้องปิด enable wireless ไ ว้เพราะสัญญาณ wireless อาจมารบกวน router ที่เรากำลัง set อยู่
11. หลังจากนั้นก็เข้าไปที่ terminal พิมพ์คำสั่ง telnet 192.168.1.1 ถ้าผลปรากฏตามรูปด้านล่าง แสดงว่าเราสามารถเข้าไปติดต่อ Router ที่ลง OpenWrt kernel 2.6 firmware ได้แล้ว