tag:blogger.com,1999:blog-61578655515582525922024-02-20T20:50:17.158-08:00Raspberry Pi THบล๊อกเรียนรู้ Raspberry Pi คอมพิวเตอร์จิ๋วแต่แจ๋วWisit.Phttp://www.blogger.com/profile/04747663677248244453noreply@blogger.comBlogger50125tag:blogger.com,1999:blog-6157865551558252592.post-65920478762001278482017-03-10T10:41:00.001-08:002017-03-10T10:41:18.394-08:00How to fix static IP on Raspberry pi (jessie)<p>ในเวอร์ชั่นใหม่ๆ ของ raspberry pi เช่น jessie นั้น เขาย้ายที่สำหรับ fix static ip address จากเดิม เราเคยเข้าไปเซต ที่ </p> <p>sudo nano /etc/network/interfaces เราจะพบข้อความสองบันทัดด้านบน ให้ย้ายไปกำหนดค่า static ip ที่  sudo nano /etc/dhcpcd.conf  ตามรูป </p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_ZoMWwLvmEAn5mQaqHMfCGOzQpBspq9jcBoHQw_zthYT8n4u2TxrwVqVxx6OXn_L3Qb0w1Z-3OX9mguFb_ZjuDbGtWbj-O_UGH9ul3Os7E6FVzxTFHAbj3B1bY9LIdQFff58v0XXiv5k/s1600-h/image%25255B3%25255D.png"><img title="fix static ip address" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="fix static ip address" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtV4hJNjLFfmbqI5T2m2CjeOOl-Pc3hvb695US169eY3nVZyBHJjNp_ectY-ibPDS85XOAf57XpVJUWj632jiMsOapP2LWexAxl9D7VygoAfy0-9igOFZfidsfouDqWGVAM4F6wDoMpBs/?imgmax=800" width="644" height="376" /></a></p> <p>โอเค งั้นเราไปเซตที่ใหม่กันเหอะ ก็ไปที่</p> <p>sudo nano /etc/dhcpcd.conf</p> <p>จะพบข้อความมากมาย ไม่ต้องสนใจ ให้ไปที่บันทัดสุดท้าย แล้วเติมข้อความที่อยากจะ fix static ip address กัน เลย ในทีนี้ ผมต้องการ fix แค่ port ethernet ของมัน ผมก็เพิ่ม</p> <p>interface eth0 <br />static ip_address=192.168.10.108</p> <p> <br />บันทึกซะ (สำหรับ nano editor กด Ctrl+X ตอบ Y)  แล้วก็สั่ง reboot ซะ เราจะได้ raspberry pi ที่ fix static ip address แล้วหล่ะ</p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyBxczYF8LWbIbN933eXZpvlW8b1rdigDQU5oX8Czn6BSzRwVSSkFHTdiZJnqDPJ4H1fsVEuvf4F9ruJpkCTWSa_r9Sh6NZ7EI9_f0sYS2bRqIGFNe2AYDmvJ5rl_p0c_woOw4vLa5NtI/s1600-h/image%25255B7%25255D.png"><img title="fix static ip address" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="fix static ip address" src="https://lh3.googleusercontent.com/-i9MfyVR3tkM/WMLzTM00sWI/AAAAAAAAMa4/ohSiPFcZrL8/image_thumb%25255B3%25255D.png?imgmax=800" width="644" height="255" /></a></p>Wisit.Phttp://www.blogger.com/profile/04747663677248244453noreply@blogger.com0tag:blogger.com,1999:blog-6157865551558252592.post-90452064092099471852016-03-15T22:04:00.001-07:002016-03-15T22:04:41.724-07:00Mysql server has gone away on Raspberry pi<p>       มีงานอยู่งานหนึ่ง ผมติดตั้ง Mysql Server V5  ลงบนบอรืด Rpi เพื่อที่จะได้เก็บ Record บางอย่าง โดยรอรับค่าจาก python โดยเจ้าสคริปต์ python ผมทำงานแบบ Event driven ถ้ามีเหตุการณ์เกิดขึ้น จะทำการบันทึก ค้นหา ลงฐานข้อมูล Mysql ทีนี้ เจ้าสคริปต์ตัวนี้ จะทำการสร้าง connection ขึ้นมา แต่ในกรณีที่ไม่เกิด Event ใดๆ เลยเป็นเวลา 8 ชั่วโมง เจ้า Mysql Server จะทำการตัด Connect นั้นทิ้งไป แม้ว่า เราจะยัง connect อยู่ก็ตาม (ไม่เกิดการ Query , Insert , Update ใดๆ)  หลังจาก 8 ชั่วโมงผ่านไปแล้ว ถ้าจู่ๆ มี Event เกิดขึ้นที่ python สคริปตฺ์นี้ มันจะทำการอัพเดทข้อมูลลงฐานข้อมูล แต่เนื่องจากว่า Mysql Server ได้ตัดการเชื่อมต่อทิ้งไปแล้ว ก็จะเกิด Exception ที่ชื่อว่า  Error 2006 Mysql Server has gone away นั่นเอง </p> <h5>ทางแก้ไข คือ ให้เข้าไปแก้ไขค่า my.cnf ที่อยู่ใน /etc/mysql/my.cnf โดยเพิ่มหัวข้อ</h5> <h5>wait_timeout = 31536000 </h5> <p>อ้างอิงจาก <a title="http://dev.mysql.com/doc/refman/5.0/en/gone-away.html" href="http://dev.mysql.com/doc/refman/5.0/en/gone-away.html" rel="nofollow" target="_blank">http://dev.mysql.com/doc/refman/5.0/en/gone-away.html</a></p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYDXQJFg_0l0pOHHXd1oxbALVfU908zOZ9RYrqMkl9df4R1t6o277gAhTZXDXlMw2BPyEjkEkuyvhctwbzmIcWr6O8062iGPSZXUWvPqNGJVaI9xgo3ZVLvf5EGcOJJBFbhP3Czm38kpE/s1600-h/my.cnf%25255B4%25255D.png"><img title="my.cnf" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="my.cnf" src="https://lh3.googleusercontent.com/-gFJi0Lk561E/VujpXP9XC4I/AAAAAAAALcY/-z47aDPc_hQ/my.cnf_thumb%25255B2%25255D.png?imgmax=800" width="483" height="234" /></a></p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCSOCjD2tHhyI7GCOO_iAXCXrQ2yCH8PXgmDyD3TMTg4d1qwBACSoyzXtjFEATyA9Yk2wcfGmPstYssSwz-dZVsYthGd7zxgXBF43RfdJ01CwWDNOdJfLF4FMAcJ0X2nw4jcfbDPExQOk/s1600-h/MySQL%252520%252520MySQL%2525205.0%252520Reference%252520Manual%252520%2525205.1%25255B3%25255D.png"><img title="MySQL MySQL 5.0 Reference Manual 5.1" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="MySQL MySQL 5.0 Reference Manual 5.1" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0oSHIF0lnMwBnT2ZpJTbsq57qARTI1lp50RjrWXeBCvDSbnxVei19g0VD3gpKthO22EoZJdga0xBOriFkJNUHYpEBwhqSZTbRJjPCUQCAMUVMrQ1YaYDyfCG1YOgSWctYqG8WSfIs0dI/?imgmax=800" width="497" height="328" /></a></p> <p align="right">ลองไปแก้ดูนะครับ หากเจอเหตุการณ์เหมือนผม </p>Wisit.Phttp://www.blogger.com/profile/04747663677248244453noreply@blogger.com1tag:blogger.com,1999:blog-6157865551558252592.post-86575837577644316632016-01-03T17:17:00.001-08:002016-01-03T17:19:41.882-08:00How to remote desktop connection to X11 raspberry pi<div dir="ltr">
แต่ก่อนไม่ค่อยได้ยุ่งเกี่ยวกับ XWindow ของ RPi เลย หลังๆ มาเริ่มมีงานที่ต้องเขียน GUI แล้วรันบน XWindow ของ RPi ซึ่งก็ต้องวิ่งหาจอ LCD VGA แยกให้มันต่างหาก ทำงานบน windows ต่างหากอีก 1 จอ ถ้าใครมีจอ LCD เหลือใช้ก็ไม่มีปัญหา แต่สำหรับใครทีี่มีอยู่จอเดียว คู่กายแล้วหล่ะก็ลำบากแน่ๆ <br />
ใน WIndows XP, 7 ขึ้นไป จะมีคำสั่งสำหรับเข้าควบคุมเครื่องอื่นในเนตเวิร์กอยู่โปรแกรมหนึ่ง ชื่อ Remote Desktop connection วิธีการเรียกโปรแกรม ก็กดปุ่ม window + R แล้วก็พิมพ์ mstsc ดังรูป <br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh14-nfvyED0dkwHKLOw5pyAeEz7CJljyo0XoYriAgTCKJnlAublHfq3p17Av3CwVYl8aWnrGgLZbBQRHo4Xn9kF9jwwoPhQBuu9Sd-wSg7QIJSwuVwgixA3Ob8ajXI0BUqe3v0EkZQnbk/s1600/image-745501.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_6235735224957972162" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh14-nfvyED0dkwHKLOw5pyAeEz7CJljyo0XoYriAgTCKJnlAublHfq3p17Av3CwVYl8aWnrGgLZbBQRHo4Xn9kF9jwwoPhQBuu9Sd-wSg7QIJSwuVwgixA3Ob8ajXI0BUqe3v0EkZQnbk/s400/image-745501.png" /></a><br />จะปรากฏหน้าต่างขึ้นมาให้ใส่ IP บอร์ดของ RPi ที่เราต่อไว้กับเนตเวิร์กของเรา (IP อาจจะไม่เหมือนผมก็ได้นะครับ แล้วแต่ท่านตั้งค่าไว้ ดูบทความเก่าๆ ได้ว่าตั้งค่าอย่างไร ) <br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgO-4lv9b4BFH0BfqO8Sh3Gxb9lFsa7E2cIbkvXP2mB87UYsbfPz9f5DSXGO2bBICXoOXnENDbyvKDoCxkHR1l1TYJHKaEsw3gmHSoyY6tBuG_fqhFHfLOebCghdwkTVyMdbvRoTsSvKkM/s1600/image-747535.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_6235735233534929090" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgO-4lv9b4BFH0BfqO8Sh3Gxb9lFsa7E2cIbkvXP2mB87UYsbfPz9f5DSXGO2bBICXoOXnENDbyvKDoCxkHR1l1TYJHKaEsw3gmHSoyY6tBuG_fqhFHfLOebCghdwkTVyMdbvRoTsSvKkM/s400/image-747535.png" /></a><br />แต่ก่อนจะกด Connect นะครับ ให้ทำการติดตั้งโปรแกรมบนบอร์ดของ Rpi ของเราเสียก่อน ทำการ ssh ไปที่บอร์ด Rpi ของเรา แล้วทำการติดตั้งโปรแกรม XRDP server โดยใช้คำสั่ง <br />
sudo apt-get install xrdp<br />
รอสักครู่ เมื่อเรียบร้อยแล้ว ค่อยกลับมากดปุ่ม connect ที่หน้าต่างโปรแกรม Remote Desktop Connection ครับ<br />
จะปรากฏหน้าต่าง ให้กรอก username / password ถ้าไม่ได้เปลี่ยนแปลงอะไร ก็กรอก pi ในช่อง username แล้วก็กรอก raspberry ในช่อง password ครับ จากนั้นกด OK โปรแกรมจะพาท่านเข้า xwindow ของ Raspberry pi ครับ <br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3PmsoHIJjKxbNw5ABNQey85ARamy6pdYN9XNYneA8HqhfJfZyRUpGfBRGAKuu5oC9pueDMQoqq61-czieCRRTl3vSIZbVTjYge-5H4G1XQ2PXpAv31bErAB67nMtLVrtkP_ohIR-PifU/s1600/image-750099.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_6235735244535742418" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3PmsoHIJjKxbNw5ABNQey85ARamy6pdYN9XNYneA8HqhfJfZyRUpGfBRGAKuu5oC9pueDMQoqq61-czieCRRTl3vSIZbVTjYge-5H4G1XQ2PXpAv31bErAB67nMtLVrtkP_ohIR-PifU/s400/image-750099.png" /></a><br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1JmQEqrcLuDXG9MCPMLqgrtQP2PpHvU-Atb5X72gR2xwEZrEgUA5N4A1bwfkDdgSM87c5xb3UbAZoSZtU-yahOq16TTZXKxgcAoEFerxC5U3dAD3V4LiJteG1vuFa0i9lpFuv16y3SPg/s1600/image-753048.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_6235735257342772850" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1JmQEqrcLuDXG9MCPMLqgrtQP2PpHvU-Atb5X72gR2xwEZrEgUA5N4A1bwfkDdgSM87c5xb3UbAZoSZtU-yahOq16TTZXKxgcAoEFerxC5U3dAD3V4LiJteG1vuFa0i9lpFuv16y3SPg/s400/image-753048.png" /></a><br />
<a href="https://www.blogger.com/null"></a><br />
<a href="https://www.blogger.com/null"></a><br />
เป็นอันเรียบร้อยครับ มี xwindow ของ linux ให้ใช้บน window หล่ะ สบาย จะเขียนโปรแกรมอะไร ก็รีโมทเข้าไปใช้ xwindow ผ่านโปรแกรม Remote Desktop Connection ได้เลยครับ <br />
<div align="right">
Rock กันเลย…….. </div>
</div>
<div id="DDB4FAA8-2DD7-40BB-A1B8-4E2AA1F9FDF2">
<table style="border-top: 1px solid #aaabb6; margin-top: 10px;"> <tbody>
<tr> <td style="padding-top: 15px; width: 105px;"><br /></td> <td style="color: #41424e; font-family: Arial,Helvetica,sans-serif; font-size: 13px; line-height: 18px; padding-top: 20px; width: 470px;"><br /></td> </tr>
</tbody></table>
<a height="1" href="https://www.blogger.com/blogger.g?blogID=6157865551558252592#DDB4FAA8-2DD7-40BB-A1B8-4E2AA1F9FDF2" width="1"></a></div>
Wisit.Phttp://www.blogger.com/profile/04747663677248244453noreply@blogger.com0tag:blogger.com,1999:blog-6157865551558252592.post-78347197136524036612015-11-29T09:39:00.001-08:002015-11-29T09:39:47.066-08:00How to install Mosquitto MQTT Broker on RPi2<div class="wlWriterHeaderFooter" style="float:none; margin:0px; padding:4px 0px 4px 0px;"><iframe src="http://www.facebook.com/widgets/like.php?href=http://raspberry-pi-th.blogspot.com/2015/11/how-to-install-mosquitto-mqtt-broker-on.html" scrolling="no" frameborder="0" style="border:none; width:450px; height:80px"></iframe></div><p>     เกริ่นนำสักนิดหนึ่ง ตั้งแต่ การเข้ามาของ IOT หรือ Internet of Things ที่กำลังอินเทรนกันอยู่ตอนนนี้ ก็ได้มีความพยายามที่จะหา Protocol ที่เหมาะสำหรับการสื่อสารผ่าน network กับอุปกรณ์พวกไมโครคอนโทรลเลอร์ ก็เลยมีการพัฒนาโปรโตคอลขึ้นมา เพื่อให้เหมาะกับอุปกรณ์เล็กๆ ที่ไม่ต้องการ Header ที่มากไปในการสื่อสารทางเนตเวิร์ก เจ้าโปรโตคอลที่ว่าก็คือ MQTT หรือ MQ Telemetry Transport ไม่รู้ว่าแปลว่าไรเหมือนกัน เอาเป็นว่า ผมอธิบายแบบบ้านๆ เลยหล่ะกัน </p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaZddtIfRV3Er5uAJt2YqV2WJ42t8B31Iw6rRFZ6HjLhHXi0YEAanpOsgL3_HXp1NG0lAxNoX-Xpb7h7ssa7n_Ld0KW35HBM5JBpXtDqXBM7hHMCCSZzWI2WQt9zF-apnCKsOjPYvX15o/s1600-h/image%25255B10%25255D.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="image" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3RmoshItVJ58NYEs5bAE4FhkA2rWZei-n-V5-rdVQHRGRnbjNaifBhzz_GthZ6PH8dziyIEYaDFZeJT5_o3_SXZafOJo02qzvvcZaDWMuZVtm-iaCWbCDhmWL9-4Tzh8WFwpOKvykNWo/?imgmax=800" width="515" height="355" /></a></p> <p>ในการสื่อสารแบบ MQTT นี้ จะต้องมี MQTT Broker ที่ทำหน้าที่รับข้อความโดยมีหัวข้อ Topic จากผู้ส่ง/จำหน่าย จ่ายแจก หรือ publisher แล้วกระจายส่ิงที่ได้รับมานั้นไปให้ subscriber ที่ได้ทำการลงทะเบียนหัวข้อ Topic นั้นแหละ บอกกับ Broker ไว้แล้ว ว่า ถ้า publisher คน/ตัว ใด ส่ง topic นี้มา ให้เอามาให้ฉัน (subscriber) </p> <p>อ่านเพิ่มเติม เรื่อง <a href="https://www.facebook.com/123Microcontroller/photos/a.355130664510453.80635.315687328454787/979554895401357/?type=3&hc_location=ufi" rel="nofollow" target="_blank">MQTT Protocol</a> ที่รวบรวมไว้ครับ </p> <p>ตรงส่วน Broker นี้แหละ ที่เราจะเอา Raspberry pi มาทำเป็น MQTT Broker ในที่นี้ ผมใช้ RPi2 ที่ติดตั้ง Raspbian Wheezy </p> <p>การติดตั้ง MQTT Broker บน RPi <br />- ทำการ อัพเกรดต่างๆ ก่อน นานหน่อยสำหรับคนที่ไม่ค่อยได้อัพเกรดบ่อย </p> <p>sudo apt-get upgrade</p> <p> <br />- แล้วก็รันคำสั่งตามนี้เลยครับ ทีละบรรทัด นะ ใจเย็นๆ ดู Error ด้วย ถ้ามันมี <br />curl -O http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key <br />sudo apt-key add mosquitto-repo.gpg.key <br />rm mosquitto-repo.gpg.key <br />cd /etc/apt/sources.list.d/ <br />sudo curl -O http://repo.mosquitto.org/debian/mosquitto-wheezy.list <br />sudo apt-get update <br />sudo apt-get install mosquitto mosquitto-clients</p> <p>บน Rpi เราจะมีทั้ง Mosquitto ที่เอาไว้จัดการ MQTT protocol โดยจะทำให้ Rpi เรากลายเป็น MQTT broker และนอกจากนั้น เราได้ติดตั้ง  mosquitto-clients ซึ่งจะทำให้เราสามารถสั่งให้ Rpi เราเป็นได้ทั้ง subscriber และ publisher ได้อีกด้วย </p> <p>อันนี้ เป็นคลิปวีดีโอทดสอบของผม ผมลองกับเจ้า ESP8266 และโปรแกรมต่างๆ บน PC โดยทำการ subscribe หัวข้อ topic ที่ชื่อ hello/world ที่ถูกส่ง publish มาจาก ESP8266 โดยที่ RPi ทำหน้า MQTT Broker จัดการรับส่งข้อความทาง MQTT Protocol นั่นเอง </p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlHRxH8lWp-0dn4enu5vN2ghaByEI5Inbru10hc7kGLiOTKoPbDBdVGBath36PMG2Spoev1HXDM7LGtqvmy3EPii-wgpiOLKcyKWlKts0jB9Qbd0nPVeWPVlPy2XjudgPg-FAd_3kCAgY/s1600-h/Raspberry%252520pi%252520MQTT_Broker%25255B4%25255D.png"><img title="Raspberry pi MQTT_Broker" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="Raspberry pi MQTT_Broker" src="http://lh3.googleusercontent.com/-feTxEyNy8oE/Vls4XhMz6aI/AAAAAAAALNY/o0AMy0aGltA/Raspberry%252520pi%252520MQTT_Broker_thumb%25255B2%25255D.png?imgmax=800" width="640" height="342" /></a></p> <p>Youtube : <a href="http://www.youtube.com/watch?v=RvNBlkpGZwU" target="_blank">www.youtube.com/watch?v=RvNBlkpGZwU</a></p> <p>เรื่องราวมันค่อนข้างยาวนิดนึง เดี๋ยวไว้หาเวลาว่างๆ มาเล่าต่อ แล้วกัน หรือไม่ก็อ่านจากลิ้งค์ที่แปะไว้ด้านล่างนี้แล้วกันครับ </p> <p>อ้างอิง :</p> <p><a href="http://jpmens.net/2013/09/01/installing-mosquitto-on-a-raspberry-pi/" rel="nofollow" target="_blank">http://jpmens.net/2013/09/01/installing-mosquitto-on-a-raspberry-pi/</a> <br /><a href="http://www.penninkhof.com/2015/05/linking-the-esp8266-a-raspberry-pi-through-mqtt/" rel="nofollow" target="_blank">http://www.penninkhof.com/2015/05/linking-the-esp8266-a-raspberry-pi-through-mqtt/</a></p> Wisit.Phttp://www.blogger.com/profile/04747663677248244453noreply@blogger.com0tag:blogger.com,1999:blog-6157865551558252592.post-86742444358119307592015-11-05T08:45:00.001-08:002015-11-05T08:45:42.156-08:00Timezone and NTP server Thailand<div class="wlWriterHeaderFooter" style="float:none; margin:0px; padding:4px 0px 4px 0px;"><iframe src="http://www.facebook.com/widgets/like.php?href=http://raspberry-pi-th.blogspot.com/2015/11/timezone-and-ntp-server-thailand.html" scrolling="no" frameborder="0" style="border:none; width:450px; height:80px"></iframe></div><p>เราสามารถตั้งค่า Timezone ให้ Raspberry pi ของเราให้เป็น Timezone สำหรับประเทศไทยได้ ด้วยการแก้ไข config </p> <p>sudo raspi-config </p> <p><a href="http://lh3.googleusercontent.com/-1H7Tg-HRHt0/VjuHkx9mT2I/AAAAAAAALI4/w-0pIqLwpV0/s1600-h/image%25255B29%25255D.png"><img title="raspi-config timezone" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="raspi-config timezone" src="http://lh3.googleusercontent.com/-4rD6LXBN4WU/VjuHl1prrJI/AAAAAAAALJA/CeHYxi-k_RY/image_thumb%25255B19%25255D.png?imgmax=800" width="545" height="175" /></a></p> <p>เลือก Internationalisation Options แล้วเลือก  Change Timezone  </p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4mOCeO5iXTv0s3J7EcSGKqAQU2uhufLSYlr5FI80teqFkk6V4iBcib3XtE3o0xsX_IYiXL3yOAQiCMKObHCHyBBRAxSCF5N5VbbMvXgM_cG0qoWzWDBueC8kC4OzJiojnNAXIhDJ7IUI/s1600-h/image%25255B28%25255D.png"><img title="raspi-config timezone" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="raspi-config timezone" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvykwxHe3SaJAFhrEEe-zh9j3xwamlKBMkZeO10tr-jIf-q8wmheVHOvj4rkozfv_ZRW3phrzALWyoBG8MyEnr7K5kaRHpyGr-kpJKqYBVG3la-DWhmJgA6RJPVYqLsUc87UBJJlsXnz8/?imgmax=800" width="539" height="177" /></a></p> <p>จากนั้นเลือก Asia แล้วกด Enter แล้วเลือก Bangkok  Raspberry pi ก็จะปรับเวลาให้ตรงตามเวลาประเทศไทย </p> <p>เราสามารถที่จะ config ให้ Raspbery pi ไปอัพเดทเวลาจาก NTP server ของประเทศไทยได้ โดยไปแก้ไขที่ </p> <p>sudo nano /etc/ntp.conf</p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuc2DBOY3pcjtUHx5b5P2aT7VvJh5oAqylxb92ODnJtawhdsSNyrnIab1SOZfUroIdFtdcGziXHZYfzgVLtjbDZAQ92j6-sfDfYhBRK12inQb3obPW1zTgeS4ddsPEDEGFRqHfm5NShfg/s1600-h/image%25255B27%25255D.png"><img title="Thailand NTP server list" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="Thailand NTP server list" src="http://lh3.googleusercontent.com/-4cXmno1KCYs/VjuHpVMBB4I/AAAAAAAALJc/De_S9UZlamI/image_thumb%25255B17%25255D.png?imgmax=800" width="558" height="342" /></a></p> <p>ทำการ comment ของเก่า แล้วเพิ่มของใหม่เข้าไป ตามภาพ  ซึ่งมีรายชื่อ NTP server  ดังนี้ </p> <p>server 0.th.pool.ntp.org iburst <br />server 1.th.pool.ntp.org iburst <br />server 2.th.pool.ntp.org iburst <br />server 3.th.pool.ntp.org iburst</p> <p>ทำการบันทึกไฟล์ ntp.conf  แล้วทำการ restart ntp service ด้วยคำสั่ง </p> <pre>sudo /etc/init.d/ntp restart </pre><br /><br /><p>และใช้คำสั่งเช็คดูการทำงานของ ntpd service และประสิทธิภาพการ sync เวลากับ NTP server</p><br /><br /><pre>sudo ntpq -c lpeer </pre><br /><br /><p>และใช้คำสั่ง date เช็คเวลาดูอีกที ว่าตรงหรือยัง </p><br /><br /><p>เราสามารถเช็คการทำงานของ ntpd ได้ ด้วยการดูที่ syslog ด้วยการใช้คำสั่ง</p><br /><br /><p>tail –f /var/log/syslog  หากเห็นข้อความ  host name not found EAI_NODATA: 0.th.pool.ntp.org ให้ทำการเช็คที่ resole.conf </p><br /><br /><p><a href="http://lh3.googleusercontent.com/--YgAlxYnNS4/VjuHqJo9hcI/AAAAAAAALJg/nF0jlkfpDBo/s1600-h/image%25255B26%25255D.png"><img title="NTP sync issue" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="NTP sync issue" src="http://lh3.googleusercontent.com/-Ru2K2hpRx20/VjuHq0e6V7I/AAAAAAAALJo/k0cmHxlVh-k/image_thumb%25255B16%25255D.png?imgmax=800" width="566" height="100" /></a></p><br /><br /><p>sudo nano /etc/resole.conf</p><br /><br /><p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwXO9UOlEk51_w6ZJo6hOqMvBobNllMOynMj9wH8cbHqnCyATizaY4sMXbyyd7H9p0zwetKnTnTfYa9WKbshZYI0iFzoIHvhsJLlW5yHMOp1_2X6YghSEX6xRly2q5Wa07VJaHmG4GTFg/s1600-h/image%25255B25%25255D.png"><img title="config nameserver" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="config nameserver" src="http://lh3.googleusercontent.com/-XmdmH09jYjM/VjuHsrk_iGI/AAAAAAAALJ0/KyXtjcGgsaQ/image_thumb%25255B15%25255D.png?imgmax=800" width="512" height="232" /></a></p><br /><br /><p>แก้ไข nameserver ให้ถูกต้อง ตามรูป  ก็น่าจะโอเค แหละ ให้ restart ntpd service อีกครั้ง  คราวนี้ เวลาของ Raspberry pi ก็จะเดินตรงกับเวลาประเทศไทยแหละ </p><br /><br /><p align="right">วันนี้ จบเพียงเท่านี้ ก่อน </p> Wisit.Phttp://www.blogger.com/profile/04747663677248244453noreply@blogger.com1tag:blogger.com,1999:blog-6157865551558252592.post-59217707038689585312015-10-25T06:25:00.001-07:002015-10-26T05:08:16.129-07:00mysql replication on raspberry pi<div class="wlWriterHeaderFooter" style="float:none; margin:0px; padding:4px 0px 4px 0px;"><iframe src="http://www.facebook.com/widgets/like.php?href=http://raspberry-pi-th.blogspot.com/2015/10/mysql-replication-on-raspberry-pi.html" scrolling="no" frameborder="0" style="border:none; width:450px; height:80px"></iframe></div><p><a href="http://lh3.googleusercontent.com/-ElOS2QDAd8A/VizYKv0q_FI/AAAAAAAALHY/IxZWnWtBQQc/s1600-h/image%25255B19%25255D.png"><img title="mysql replication on raspberry pi" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: left; padding-top: 0px; padding-left: 0px; margin: 0px 8px 0px 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="mysql replication on raspberry pi" src="http://lh3.googleusercontent.com/-3ateAX1QYkk/VizYMNudYHI/AAAAAAAALHg/L7_JGo4cZJ0/image_thumb%25255B13%25255D.png?imgmax=800" width="365" align="left" height="242" /></a>    <a href="http://raspberry-pi-th.blogspot.com/2012/10/how-to-setup-webserver-databaseserver.html" target="_blank">Mysql server</a> เป็นฐานข้อมูลที่นิยมใช้กันอย่างแพร่หลาย เพราะ ฟรี และรองรับการเชื่อมต่อที่เยอะๆ ได้อย่างดีเยี่ยม และใน Raspberry pi ของเราเอง ก็สามารถติดตั้ง MySQL server ได้อยู่แล้ว ณ ตอนนี้ หากติดตั้ง เราจะได้ mysql server v 5.5 up  </p> <p>   เราสามารถใช้บอร์ด raspberry pi ของเราในการเก็บข้อมูลไว้ใน MySQL ได้เลย และสามารถให้ user เข้ามาเรียกดูข้อมูลได้ผ่านทางหน้าเว็บ CGI มา query ข้อมูลออกจากฐานข้อมูล ไปแสดงผลบนหน้าเว็บอีกที หรือใช้ IDE พวก <a href="http://raspberry-pi-th.blogspot.com/2015/06/how-to-connect-mysql-server-config-mycnf.html" target="_blank">mysqlworkbench</a> , mysqlfront ในการเขียน sql ดึงข้อมูลไปใช้งานอีกทีก็ได้ แต่กระนั้นก็ตาม การที่เราจะปล่อยให้เจ้า raspberry pi ของเรา รองรับจำนวน user ที่ต้องเรียกดูข้อมูล โดยที่จำนวน user มีจำนวนการเชื่อมต่อที่เพิ่มมากขึ้น จำนวนครั้งในการเรียกดูมากขึ้น แล้วมาดึงข้อมูลจากบอร์ด raspberry pi ตรงๆ อาจจะไม่ค่อยจะดีเท่าไหร่นัก แลดูจะเกินประสิทธิภาพของบอร์ดไปสักหน่อย แต่ ถ้าเราจะเก็บไว้ดูคนเดียวก็ไม่เป็นไร </p> <p>   หากเราต้องการที่จะทำการสำรอง หรือต้องการให้ user ทำการเรียกค้นข้อมูลจากฐานข้อมูลแม่ข่ายเครื่องอื่นหล่ะ โดยข้อมูลที่เรียกดู ก็เหมือนข้อมูลที่อยู่ใน raspberry pi หล่ะ เราจะทำอย่างไร </p> <p>    ใน mysql มีวิธีการหนึ่งที่เรียกว่า replication คือ การที่เครื่อง slave server มีข้อมูลเหมือนกับ master server และเมื่อ master server มีการเปลียนแปลงข้อมูลภายใน field ข้อมูลนั้นจะถูกอัพเดทไปที่ slave server ทันที โดยที่เราไม่ต้องเขียน script crond job เพื่ออัพเดทข้อมูลในฐานข้อมูลเลย ดังนั้น จึงมั่นใจได้ว่า ข้อมูลทั้ง สองแม่ข่าย ระหว่าง  master server และ slave server จะเหมือนกันแป๊ะ และนอกจากนั้น เรายังสามารถเพิ่มจำนวน slave server ได้อีกด้วย ข้อมูลไม่สูญหายแน่ๆ หากเกิดความดผิดพลาดกับ master server หรือ slave server บางตัว </p> <p>   ในทีนี้ ผมจะทดลองใน local network ก่อน โดยที่ Raspberry pi ของผม มี IP เป็น 192.168.2.109 โดยเราจะให้เป็น master server ส่วน PC ของผมจะให้เป็น Slave server ซึ่งเป็น IP 192.168.2.101 โดยทั้งคู่ได้ติดตั้ง mysql server ไว้อยู่แล้ว เป็นเวอร์ชั่น 5.5 ขึ้นไป  </p> <p>ขั้นตอนแรก ให้เราทำการ config /etc/mysql/my.cnf ที่อยู่บน raspberry pi ก่อน </p> <p>sudo /etc/init.d/mysql stop   หยุดการทำงานของ mysql ก่อน </p> <p>sudo nano /etc/mysql/my.cnf   </p> <p>จากนั้นมองหา [mysqld] แล้วเพิ่มค่าเข้าไป </p> <p>log-bin=mysql-bin <br />server-id=1 <br />innodb_flush_log_at_trx_commit=1 <br />sync_binlog=1 </p> <p>ทำการบันทึกไฟล์ แล้วสั่งให้ mysql ทำงาน หากไม่มีอะไรผิดพลาด เราน่าจะสั่ง start service mysql ได้</p> <p>sudo /etc/init.d/mysql start </p> <p>จากนั้น เราจะทำการเพ่ิม user สำหรับให้ slave เป็น user account สำหรับเข้ามา replicate ข้อมูลจาก master โดยการเพิ่ม user ดังนี้  ยังอยู่ที่ raspberry pi อยู่นะครับ  พิมพ์คำสั่งที่ console </p> <p>mysql –uroot –p  แล้วกด enter ถ้ามันถามหา password ก็ใส่ password ไป สำใครที่ตั้ง password  เมื่อเข้าไปแล้ว  prompt เราจะกลายเป็น mysql>  ให้เราสร้าง user ด้วยคำสั่ง sql ต่อไปนี้ </p> <p>mysql>CREATE USER 'repl'@'192.168.2.101' IDENTIFIED BY 'merlin';</p> <p>mysql>GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.2.101';</p> <p>เรากำลังเพิ่มให้มี user ชื่อ repl โดยสามารถเชื่อมต่อมาจาก ip 192.168.2.101 เท่านั้น ซึ่งก็คือเครื่อง slave ของเรา กำหนดให้ password คือ merlin</p> <p>ต่อมา ให้สร้างจุด Check Point เพื่อให้เป็นจุดเริ่มต้นสำหรับการ Replicate โดยใช้คำสั่ง sql </p> <p>mysql>FLUSH TABLES WITH READ LOCK; <br />mysql>SHOW MASTER STATUS; <br />mysql>UNLOCK TABLES;</p> <p><a href="http://lh3.googleusercontent.com/-aAJtUkYDLIw/VizYMwXKqGI/AAAAAAAALHo/goSrsPVPpHI/s1600-h/image%25255B7%25255D.png"><img title="mysql replication on raspberry pi" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="mysql replication on raspberry pi" src="http://lh3.googleusercontent.com/-0jZLXYlQtSI/VizYNsM85qI/AAAAAAAALHw/6IpFX4eZRrA/image_thumb%25255B5%25255D.png?imgmax=800" width="582" height="119" /></a></p> <p>ค่า   mysql-bin.000003 และ 2717  ให้จดจำค่านี้ไว้ ไปกำหนด ที่ฝั่ง slave </p> <p>อันดับต่อไป เราจะมา config ค่าที่เครื่อง slave กันบ้าาง โดยที่เครื่อง slave ของผมนี้ เป็น windows 7 ที่ติดตั้ง xampp ไว้อยู่แล้ว ซึ่งใน xampp จะมี mysql server มาให้อยู่แล้ว การกำหนดค่า config สำหรับบน windows นั้น จะอยู่ที่ไฟล์ my.ini ซึ่งจะแตกต่างออกไปจากของ linux  </p> <p>ทำการหยุด service ของ mysql ก่อน ถ้าเป็น xampp เราก็กดปุ่ม stop ได้เลย ดังภาพ แล้วทำการเปิดไฟล์ my.ini </p> <p><a href="http://lh3.googleusercontent.com/-MY37msy71fo/VizYOuXmVII/AAAAAAAALH4/07CeR3BxBoM/s1600-h/image%25255B14%25255D.png"><img title="mysql replication on raspberry pi" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="mysql replication on raspberry pi" src="http://lh3.googleusercontent.com/-Keh2bmp7Dyc/VizYPymCfDI/AAAAAAAALIA/KyG90QisBO0/image_thumb%25255B10%25255D.png?imgmax=800" width="570" height="211" /></a></p> <p>มองหา [mysqld] แล้วทำการเพิ่ม หรือ uncomment หากมันมีอยู่แล้ว ให้ได้ตามนี้ ครับ </p> <p>server-id=2 อาจจะต้อง comment บรรทัดที่มันเขียนว่า server-id=1 ถ้ามันมีอยู่  บันทึก และทำการ start service mysql ขึ้นมา หากไม่มีอะไรผิดพลาด เราน่าจะ start mysql service ได้ </p> <p>เพื่อนๆ อาจจะใช้ mysqlfron เพื่อเชื่อมต่อกับ mysql ที่เครื่อง slave เพื่อรันคำสั่ง sql ต่อไปนี้ </p> <p>mysql>CHANGE MASTER TO</p> <p>  MASTER_HOST='192.168.2.109',</p> <p>  MASTER_USER='repl',</p> <p>  MASTER_PASSWORD='merlin',</p> <p>  MASTER_PORT=3306,</p> <p>  MASTER_LOG_FILE='mysql-bin.000003',</p> <p>  MASTER_LOG_POS=2717, </p> <p>  MASTER_CONNECT_RETRY=10; </p> <p>จะเห็นว่า เราต้องเอาค่า mysql-bin แล้ว position จากข้อที่แล้ว มากำหนดในการสั่งให้ slave มองไปที่ master ตรงตำแหน่ง checkpoint ที่ได้ </p> <p>จากนั้น เริ่มทำการ replicate ด้วยคำสั่ง sql ดังนีั้ </p> <p>mysql>start slave;</p> <p>mysql>show slave status; </p> <p>ทดสอบแล้วเปลี่ยนแปลงข้อมูลภาพใน field ใน table ใดก็ได้ ใน master ซึ่งก็คือ Raspberry pi ของเรา และสังเกตผลลัพธ์ที่เกิดขึ้นที่ slave ซึ่งก็คือ pc ของเรา จะพบว่า ข้อมูลจะเปลี่ยนแปลงตาม master ทันที โดยที่เราไม่ต้องมานั่งกังวลกับการเขียน script crond job เพื่อทำการอัพเดทขู้อมูล หรือทำการ backup เลย และก็ไม่ต้องกังวลว่า จะต้องเปิดเครื่อง slave ไว้ตลอดหรือเปล่า เราอาาจะปิดเครื่อง slave ไปก็ได้ และเมื่อเปิดเครื่อง slave มา มันก็จะทำการเช็คว่า master มีอะไรเปลี่ยนแปลงไปจากล่าสุดที่มันเคยเช็คหรือเปล่า  ถ้ามี มันก็จะทำการ replicate ให้ทันที  </p> <p>ประโยชน์ที่คิดว่าจะได้รับ ก็ตามนี้ </p> <blockquote> <p>The target uses for replication in MySQL include:</p> <p> </p> <p>   Scale-out solutions - spreading the load among multiple slaves to improve performance. In this environment, all writes and updates must take place on the master server. Reads, however, may take place on one or more slaves. This model can improve the performance of writes (since the master is dedicated to updates), while dramatically increasing read speed across an increasing number of slaves.</p> <p> </p> <p>   Data security - because data is replicated to the slave, and the slave can pause the replication process, it is possible to run backup services on the slave without corrupting the corresponding master data.</p> <p> </p> <p>   Analytics - live data can be created on the master, while the analysis of the information can take place on the slave without affecting the performance of the master.</p> <p> </p> <p>   Long-distance data distribution - if a branch office would like to work with a copy of your main data, you can use replication to create a local copy of the data for their use without requiring permanent access to the master. </p> </blockquote> <p>อ้างอิง : </p> <p><a title="http://dev.mysql.com/doc/refman/5.0/en/replication.html" href="http://dev.mysql.com/doc/refman/5.0/en/replication.html" rel="nofollow" target="_blank">http://dev.mysql.com/doc/refman/5.0/en/replication.html</a></p> <p><a title="http://www.wandee.org/wordpress/?p=158" href="http://www.wandee.org/wordpress/?p=158" rel="nofollow" target="_blank">http://www.wandee.org/wordpress/?p=158</a></p> Wisit.Phttp://www.blogger.com/profile/04747663677248244453noreply@blogger.com0tag:blogger.com,1999:blog-6157865551558252592.post-6985625934700405082015-06-05T10:14:00.001-07:002015-06-05T10:14:41.737-07:00How to connect mysql-server (config my.cnf)<div class="wlWriterHeaderFooter" style="float:none; margin:0px; padding:4px 0px 4px 0px;"><iframe src="http://www.facebook.com/widgets/like.php?href=http://raspberry-pi-th.blogspot.com/2015/06/how-to-connect-mysql-server-config-mycnf.html" scrolling="no" frameborder="0" style="border:none; width:450px; height:80px"></iframe></div><p>       ใน Mysq-server ที่ติดตั้งบน Raspbian ตัวล่าสุดจะเป็น mysql server เวอร์ชั่น Server version: 5.5.43-0+deb7u1 (Debian) ซึ่งจะไม่รองรับ<a href="http://raspberry-pi-th.blogspot.com/2012/10/how-to-config-mysql-front-connect-with.html" target="_blank">วิธีการเชื่อมต่อแบบ HTTP Tunnel</a> แบบเก่าของเราซะแล้ว แต่ก็ยังมีทางอื่นอยู่ โดยเราจะกลับมาเชื่อมต่อผ่าน PORT 3306 เหมือนเดิม แต่ โดยปกติแล้ว จะรีโมทจากภายนอกเข้ามาทาง Port 3306 ของ Raspberry pi ไม่ได้ ต้องทำการแก้ไขไฟล my.cnf ซะก่อน </p> <p>ทำการแก้ไขไฟล์ my.cnf (โปรดกระทำด้วยความระมัดระวัง)  </p> <p>sudo nano /etc/mysql/my.cnf</p> <p>มองหาบรรทัดที่เขียนว่า “bind-address”  ปกติมันจะมีค่าเป็น 127.0.0.1 หรือไม่ก็ localhost ให้ทำการแก้ไขเป็น IP address ของ Raspberry pi ในที่นี้ เราได้ทำการ Fix IP address ของ Raspberry pi เป็น 192.168.2.107 (<a href="http://raspberry-pi-th.blogspot.com/2015/05/how-to-install-raspian-on-rpi2-very.html" target="_blank">วิธีการ Fix IP address</a>)  </p> <p> <a href="http://lh3.googleusercontent.com/-gGu2PX9TeyQ/VXHY4A7qxtI/AAAAAAAAKy0/G8d-chj5dd0/s1600-h/image%25255B4%25255D.png"><img title="sudo nano /etc/mysql/my.cnf" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="sudo nano /etc/mysql/my.cnf" src="http://lh3.googleusercontent.com/-9jPHBokBgfQ/VXHY5LaaNyI/AAAAAAAAKy8/iCAleh4U-iQ/image_thumb%25255B2%25255D.png?imgmax=800" width="527" height="206" /></a> <br />บันทึกไฟล์กด Ctrl+X แล้วตอบ Y  จากนั้นให้ทำการ restart service mysql </p> <p>sudo service mysql restart </p> <p><a href="http://lh3.googleusercontent.com/-nITV0x2Zw4Y/VXHY5ywU_yI/AAAAAAAAKzE/4NxVFBOJtcc/s1600-h/image%25255B8%25255D.png"><img title="sudo service mysql restart" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="sudo service mysql restart" src="http://lh3.googleusercontent.com/--X6OCG8AimQ/VXHY63ri07I/AAAAAAAAKzM/rYZvw6jYtAk/image_thumb%25255B4%25255D.png?imgmax=800" width="537" height="95" /></a></p> <p>กลับมาที่เครื่องเรา ให้เปิดโปรแกรมที่จะทำการเชื่อมต่อกับ Mysql server บน Raspberry pi ในทีนี้ผมจะลองใช้ <a href="http://dev.mysql.com/downloads/workbench/" rel="nofollow" target="_blank">MySQL Workbench</a> หลังจากติดตั้งแล้ว ให้ไปที่เมนู Database –> Connect Database แล้วตั้งค่าดังรูป อย่าลืมก่อน connect ให้เพิ่ม <a href="http://raspberry-pi-th.blogspot.com/2012/10/how-to-config-mysql-front-connect-with.html">root@’%’</a> บน Mysql server ก่อนนะ </p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjRlFs2euK8C-8TUTVlBIo7Jnr46IloYmSzuWCR0meOV7pIL8L4LCM9P8vZPnd1H7-UWpTcGmPO_LQ3e9GXLAhuojPG-AwYT_9EgcFQkfbFsFmcpQBoXwx_F9KBuDI8WyPmjTyt5b4Sqo/s1600-h/image%25255B13%25255D.png"><img title="MySQL workbench connect MySQL server raspberry pi" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="MySQL workbench connect MySQL server raspberry pi" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDkhtwAKj96NAMDwjubpXfAegxvH_vKsAI7OMbnghUzWo6vpV_jJdXDK6DqD1byVYBc5fyrnwThzOJjnv20suwSOvCtlXAN-Fd_uTC9kqLMR11Xvmmci9Gt5PUPEuckiHjmFg4HczLqY0/?imgmax=800" width="540" height="369" /></a></p> <p>หรือจะกลับมาตั้งค่าบน Mysql-front ก็ทำได้เช่นเดียวกัน เพราะ เราได้ไปแก้ไขบนไฟล์ my.cnf เรียบร้อยแล้ว </p> <p><a href="http://lh3.googleusercontent.com/-gotAlrUfp8Q/VXHY-Np3yvI/AAAAAAAAKzk/qQVAU00LJSU/s1600-h/image%25255B19%25255D.png"><img title="Mysql-front connect MySQL server raspberry pi" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="Mysql-front connect MySQL server raspberry pi" src="http://lh3.googleusercontent.com/-FYh6nU5iI6I/VXHY_SQwcBI/AAAAAAAAKzs/jaqF6YKL_kA/image_thumb%25255B11%25255D.png?imgmax=800" width="549" height="463" /></a></p> Wisit.Phttp://www.blogger.com/profile/04747663677248244453noreply@blogger.com0tag:blogger.com,1999:blog-6157865551558252592.post-52226195590322666032015-06-05T05:21:00.001-07:002015-06-05T05:21:26.061-07:00How to format micro sd-card for raspbian OS<div class="wlWriterHeaderFooter" style="float:none; margin:0px; padding:4px 0px 4px 0px;"><iframe src="http://www.facebook.com/widgets/like.php?href=http://raspberry-pi-th.blogspot.com/2015/06/how-to-format-micro-sd-card-for.html" scrolling="no" frameborder="0" style="border:none; width:450px; height:80px"></iframe></div><p>            เมื่อเร็วๆนี้ ผมเจอว่า เจ้า Rasbian OS มันพัง จึงจำเป็นต้องทำการ Write image file เจ้า raspbian ใหม่ ในตอนแรก ก็ดันจำไม่ได้ซะด้วย ว่าลงโปรแกรมยังงงัย ก็ทำการถอด micro sd-card มาทำการ format ก็แปลกใจ เอ๊ะ ทำไม มันเห็นแค่ 55.6MB แต่ ก็ช่างมันเหอะ ไม่น่าจะเป็นอะไร ก็เลย จัดการเตรียมตัวที่จะ write image file ด้วยโปรแกรม Win32DiskImage ปรากฏว่า มันไม่ยอม มันฟ้อง Not enough space on  disk  เอาหล่ะสิ micro sd-card เสียหรือเปล่า ก็ลองหลายวิธี ก็ไม่สามารถติดตั้งได้ </p> <p><a href="http://lh3.googleusercontent.com/--l0qNNXMWyA/VXGUM3qwtoI/AAAAAAAAKyM/pOG_2n1F1Uc/s1600-h/2015-06-04%25252019_27_28-MTPuTTY%252520%252528Multi-Tabbed%252520PuTTY%252529%25255B3%25255D.png"><img title="Micro sd-card not enough space on disk when write raspbian image file" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="Micro sd-card not enough space on disk when write raspbian image file" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwyAcEnE_JDoLUa-nK5d3sNLCQkfd6Ql2LLJwDMArFHvfJPA_fAybJjGIJst_NDjCF0z_B4iZBuYQRLqzqkLLZohGz0Pstl-jI3Is5RFVyPzbPxCLZ4cfVkg9qXr_lWhZsAq3HTuS9cg0/?imgmax=800" width="548" height="437" /></a></p> <p>    ปรึกษาเพื่อนสมาชิกใน Facebook แนะนำให้ลองโปรแกรม DiskPart ที่ติดอยู่กับ Windows 7  เฮ้ย มันใช้ได้เลย  ดีใจมาก เพราะนั่งเครียด ลองแล้วลองอีก ตั้งหลายวิธี ค้นหาใน Google ก็ไม่เจอวิธีที่มันโดนสักที วิํธีแก้ไข ก็ตามรูปเลย เปิด Command line ขึ้นมา แล้วก็พิมพ์คำว่า  Diskpart (ตัวเล็ก ตัวใหญ่ได้หมด) </p> <p>list disk เพื่อค้นหาว่ามี disk อยู่กี่อันบนคอมพิวเตอร์ </p> <p>select disk=1 ทำการเลือก disk 1 ซึ่งเรามองดูแล้ว น่าจะเป็น micro sd-card เรานั่นแหละ ตรงนี้ ให้ระวัง อย่าเลือกผิด เดี๋ยวพลาดไปเลือกโดนฮาร์ดดิสก์หลัก แล้ว งานจะเข้า </p> <p>list partition ทำการสั่งให้แสดง partition บน disk 1 </p> <p>ถ้ามี partition อยู่ก็ให้ clean ซะ </p> <p>list partition อีกที ดูสิ หายไปไหม ถ้าหายไปแล้ว ก็ exit ออกไปได้เลย ไม่ต้องทำอะไรต่อ </p> <p>กลับมาที่ Win32 Disk Image อีกที ลองทำการ Write Raspbian image อีกที่ สังเกตดูว่า ความเร็วในการ Write ไม่น่าจะเร็วมากนัก มันจะค่อยๆ ไป ช้าๆ น่าจะใช้ได้แล้วหล่ะ </p> <p>แล้วก็ config raspbian อย่างรวดเร็ว<a href="http://raspberry-pi-th.blogspot.com/2015/05/how-to-install-raspian-on-rpi2-very.html" target="_blank">เหมือนตอนที่แล้ว</a> ก็น่าจะโอเค แล้วหล่ะ </p> <p><a href="http://lh3.googleusercontent.com/-Ph9SQaLTEHw/VXGUPAI-egI/AAAAAAAAKyc/EVJNzaRTxjo/s1600-h/2015-06-04%25252021_45_20-MTPuTTY%252520%252528Multi-Tabbed%252520PuTTY%252529%25255B6%25255D.png"><img title="diskpart clean partition on micro sd-card before write raspbian image file" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="diskpart clean partition on micro sd-card before write raspbian image file" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhH5j2NuuARq1jQAsa9Lj098a4IMVbouCAjNKdD9WbvLEkKLh2SdQpV4FBIo7SZcxu4Te7KmjSoLOZiH_UAbjoD25VMNrVP5EPIn6XoApDqSPDmPUFH7aYxpJ15-jLJ-706PR9xvV2wFR4/?imgmax=800" width="533" height="565" /></a></p> Wisit.Phttp://www.blogger.com/profile/04747663677248244453noreply@blogger.com1tag:blogger.com,1999:blog-6157865551558252592.post-88754334033285822482015-05-24T01:53:00.001-07:002015-05-24T01:53:50.390-07:00Python Tips: Smart finding package from Error message<div class="wlWriterHeaderFooter" style="float:none; margin:0px; padding:4px 0px 4px 0px;"><iframe src="http://www.facebook.com/widgets/like.php?href=http://raspberry-pi-th.blogspot.com/2015/05/python-tips-smart-finding-package-from.html" scrolling="no" frameborder="0" style="border:none; width:450px; height:80px"></iframe></div><p>ตามนั้น (คลิกดูรูปใหญ่) </p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitcMndXPq6araJFOX1ljVJA2JuWpwouUZ8yzXyIYRRwUHu2vKX7n2XmSAOGRn6nqBpG42wbHYWDalkSwwImafjw72UsDKJNm4MYyPQ537OvJlewZiXAM4xKMXRPor47zBMmAiSdzjkhKE/s1600-h/image%25255B3%25255D.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhy50y3wmr6RpgxnZcNP7n88ncaEpH4WRHAXvQrsGktPxI2nKnVIOrjhvIrthek3mNsPhsCYWHWmIYN5bsodeguPVZz7K01OUrbMh4VPu4QYUHEO6i8nBSSATyFFfhpdzH47vbEqYJ7vHs/?imgmax=800" width="1027" height="697" /></a></p> <p>สติมา ปัญญาเกิด </p> Wisit.Phttp://www.blogger.com/profile/04747663677248244453noreply@blogger.com0tag:blogger.com,1999:blog-6157865551558252592.post-12709234314045678022015-05-24T01:10:00.001-07:002015-11-05T05:26:17.466-08:00How to install raspian on RPi2 (Very fast guide)<div class="wlWriterHeaderFooter" style="float:none; margin:0px; padding:4px 0px 4px 0px;"><iframe src="http://www.facebook.com/widgets/like.php?href=http://raspberry-pi-th.blogspot.com/2015/05/how-to-install-raspian-on-rpi2-very.html" scrolling="no" frameborder="0" style="border:none; width:450px; height:80px"></iframe></div><p>ไม่พูดพร่ำทำเพลง มาถึงก็ลุยกันเลย </p> <p> <br />1 โหลดไฟล์ raspbian image file มาแล้ว ทำการ write ลง micro sd-card <br />2 เข้าไปแก้ไขไฟล์ cmdline.txt โดยเพิ่ม ip=192.168.2.105 เข้าไปที่ท้าย ระวังเรื่องอัขระแปลกๆ อย่าให้ปนเข้าไปด้วย เปิดดูใน notepad++ ให้แสดงอัขระทั้งหมด ถึงจะเห็น แล้วบันทึกไฟล์ <br />3.นำ micro sd-card เสียบเข้าไปที่บอร์ด RPi2 เสียบสาย LAN เข้ากับ Router จ่ายไฟเข้าไป ปล่อยไว้สักพัก เราจะสามารถรีโมทผ่าน SSH ได้ โดย RPi จะมีค่า IP จากข้อ 2 (ต้องมั่นใจว่าไม่มีเครื่อง PC เครื่องไหนจอง IP นี้) <br />4 ทำการตั้งค่า raspi-config ตามใจชอบ <br />5 ทำการแก้ไขไฟล์ cmdline.txt กลับคืน โดยลบค่าจากข้อ 2 ทิ้ง  sudo nano /boot/cmdline.txt <br />6 ทำการตั้งค่า fix ip โดยแก้ไขที่ sudo nano /etc/network/interface </p> <p>auto lo</p> <p>iface lo inet loopback <br />iface eth0 inet static <br />address 192.168.2.105 <br />netmask 255.255.255.0 <br />gateway 192.168.2.1</p> <p>allow-hotplug wlan0 <br />iface wlan0 inet manual <br />wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf <br />iface default inet dhcp</p> <p>7 ทำการแก้ไข เพิ่ม nameserver sudo nano /etc/resolve.conf <br />nameserver 192.168.2.1 <br />nameserver 8.8.8.8 <br />nameserver 8.8.4.4</p> <p>รีสตาร์ท เป็นอันเสร็จเรียบร้อย ถ้าทุกอย่างตั้งค่าถูก เราจะสามารถทำ  sudo apt-get update ได้ โดยไม่ฟ้องอะไรที่ error เกี่ยวกับการติดต่อกับ server package ภายนอก </p> <p>                                         <a href="http://raspberry-pi-th.blogspot.com/">http://raspberry-pi-th.blogspot.com/</a></p> Wisit.Phttp://www.blogger.com/profile/04747663677248244453noreply@blogger.com0tag:blogger.com,1999:blog-6157865551558252592.post-46862046970480338312015-05-24T00:38:00.001-07:002015-05-24T00:46:31.969-07:00How to install DS3231 RTC high precision on Raspberry pi 2<div class="wlWriterHeaderFooter" style="float:none; margin:0px; padding:4px 0px 4px 0px;"><iframe src="http://www.facebook.com/widgets/like.php?href=http://raspberry-pi-th.blogspot.com/2015/05/how-to-install-ds3231-rtc-high.html" scrolling="no" frameborder="0" style="border:none; width:450px; height:80px"></iframe></div><p>ในบางงาน เราไม่สามารถให้ RPi ของเราเชื่อมต่อกับอินเตอร์เนตได้ แม้ว่า RPi จะต่ออยู่กับ local network ก็ตาม ดังนั้น นาฬิกาของ RPi อาจจะเดินไม่ตรงได้ เพราะ Rpi ใช้หลักการ crontab เพื่อทำการอัพเดทเวลาตนเองเป็นรายคาบ ดังนั้น หากให้เวลาเดินตรงๆ เราก็ต้องหา Hardware จริงๆ มาต่อ เพื่อสร้างฐานเวลาให้กับ RPi ในทีนี้ ผมได้เลือกใช้ DS3231 RTC High precision (เขาว่างั้นนะ)  มาทำเป็นฐานเวลาให้ RPi </p> <p>ต่อวงจรตามรูป</p> <p><a href="http://lh3.googleusercontent.com/-DIC8s0AZ_jI/VWF_8DhoNqI/AAAAAAAAKvk/I3o7q2idqUo/s1600-h/image%25255B3%25255D.png"><img title="Raspberry pi 2 with DS3231 RTC high precision" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="Raspberry pi 2 with DS3231 RTC high precision" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmEH0j0nudH6K4Jj-0Kzvu57f9eX_rGN4L0lpxhBUp_JoBIDqO5dF2s6NrAxsNR-h80iqdQnMb26dHkYzsoaDcrk8ykAMhein2_ll3SsqIiKGzN0ePZ6djHVttELeQ-qNSM7XLlI1AQLk/?imgmax=800" width="693" height="733" /></a></p> <p>ที่ Raspberry pi หลังจากบูตมาแล้ว ให้ทำการ Enable I2C ด้วยคำสั่ง </p> <p>#sudo raspi-config </p> <p>ภายใต้เมนู Advace options จะมีให้เลือก Enable I2C ถามอะไรมา OK ให้หมด ไม่ต้องคิดมาก</p> <p>เข้าไปเช็คที่ไฟล์ /boot/config.txt จะมีข้อความ อยู่บรรทัดสุดท้าย </p> <p>dtparam=i2c_arm = on ปรากฏอยู่ ถ้าไม่มีก็เพิ่มซะ จะรออะไรหล่ะ</p> <p>ทำการ #sudo reboot ซะ 1 ครั้ง</p> <p>เสร็จแล้วเราก็จะมาบอกให้ Linux รู้จัก device ใหม่ ที่ address 0x68 บน I2C ด้วยคำสั่ง</p> <p>#sudo modprobe i2c-bcm2708 <br />#echo ds3231 0x68 > sudo tee /sys/class/i2c-adapter/i2c-1/new_device</p> <p>ถ้า Enter คำสั่งนี้แล้วไม่มีข้อความแจ้ง Error แสดงว่าพิมพ์ถูกแหละ <br />ใช้คำสั่ง <br />#sudo hwclock  มันจะไปอ่านค่าเวลาจาก hardware ของเราในทีนี้ ก็คือ ds3231 นั่นแหละ จะนานหน่อย เวลาอ่านค่าเวลาจากมัน </p> <p> <br />แล้วเราก็เอาคำสั่งนี้แหละไปเพิ่มในไฟล์ /etc/rc.local เอาไว้ตอนที่มันบูทขึ้นมา จะได้จำได้ตลอด</p> <p>#sudo nano /etc/rc.local </p> <p>ให้เพิ่มข้อความนี้ ไว้ก่อน Exit 0 </p> <p>echo ds3231 0x68 > sudo tee /sys/class/i2c-adapter/i2c-1/new_device <br />sudo hwclock -s <br />Exit 0 <<< จะต้องอยู่ล่างสุด </p> <p>หากเวลาเดินไม่ตรง เราสามารถใช้คำสั่ง </p> <p>#sudo hwclock --set --date="2015-05-24 13:00:00" </p> <p>ตั้งเวลาได้ แต่ ถ้าต่ออินเตอร์เนตอยู่ เราสามารถให้มัน sync กับ NTP server ก่อนได้ ด้วยคำสั่ง <br />#sudo ntpd -gq  ใช้เวลานิดหนึ่ง มันจะปรับเวลา ds3231 ให้ตรงกับ Timezone ของเรา <br />แล้วก็ write ค่าลง ds3231 ซะด้วยคำสั่ง <br />#sudo hwclock -w  ทันที </p> <p>ขั้นตอนสุดท้าย เราต้องไป disable fake-hwclock เพื่อบอก RPi ว่า ตอนนี้เรามี Hardware ที่เป็น Clock จริงๆ แล้วนะ ไม่ต้องมาหลอกตัวเองอีกแล้ว ด้วยคำสั่ง </p> <p>#sudo update-rc.d fake-hwclock disable <br />#sudo update-rc.d ntp disable </p> <p>บันทึกเพิ่ม <br />ทำการติดตั้ง i2c-tools เอาไว้เช็คแอดแดรสของอุปกรณ์ที่ต่ออยู่กับ I2C <br />#sudo apt-get install i2c-tools </p> <p>เราจะเรียกใช้คำสั่ง <br />#sudo i2cdetec -y 1 (1 สำหรับ RPi 2 ) </p> <p>ได้ ก็เห็น address ที่อยู่บน I2C bus ถ้าไม่แสดง ให้ทำการเช็คอุปกรณ์ที่ต่ออยู๋ ว่าไม่ได้เสีย หรือลืมจ่ายไฟเลี้ยง </p> <p>ทำแล้วไม่เวิร์ก ลอง upgrade distro ดูครับ ผมก็ทำไม่เวิร์กเหมือนกันตอนแรก หลังจาก upgrade แล้วได้เลย </p> <p>#sudo apt-get dist-upgrade </p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmD8bIZksVrS9ByNj-_lxmTveecCXqsjVkuo0FijOOna7WxfHuDBRc1YabY7iJ62vQ0DXJWY61SyHH3IwNuUoLRVZ5FSOC-xh47zz6tWqDuHd20a-GDTdOVU7AV9CBd5acRFIT6Ho7j_k/s1600-h/image%25255B8%25255D.png"><img title="Raspberry pi 2 with DS3231 RTC high precision" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="Raspberry pi 2 with DS3231 RTC high precision" src="http://lh3.googleusercontent.com/-a-cQ9yC_DdU/VWGB1iDbB2I/AAAAAAAAKwA/juDGAuAcnrs/image_thumb%25255B4%25255D.png?imgmax=800" width="568" height="417" /></a></p> <p> </p> <p>ที่มา : <br /><a href="http://bohdan-danishevsky.blogspot.com/2014/12/installing-hardware-rtc-ds3132-to.html" rel="nofollow" target="_blank">http://bohdan-danishevsky.blogspot.com/2014/12/installing-hardware-rtc-ds3132-to.html</a> <br /><a href="http://www.drewkeller.com/blog/adding-hardware-clock-raspberry-pi-ds3231" rel="nofollow" target="_blank">http://www.drewkeller.com/blog/adding-hardware-clock-raspberry-pi-ds3231</a> <br /><a href="http://www.bashpi.org/?page_id=500" rel="nofollow" target="_blank">http://www.bashpi.org/?page_id=500</a> <br /><a href="https://learn.adafruit.com/adding-a-real-time-clock-to-raspberry-pi?view=all" rel="nofollow" target="_blank">https://learn.adafruit.com/adding-a-real-time-clock-to-raspberry-pi?view=all</a> <br /><a href="http://decuser.blogspot.com/2015/02/raspberry-pi-b-i2c-and-ds3231-rtc.html" rel="nofollow" target="_blank">http://decuser.blogspot.com/2015/02/raspberry-pi-b-i2c-and-ds3231-rtc.html</a></p> Wisit.Phttp://www.blogger.com/profile/04747663677248244453noreply@blogger.com0tag:blogger.com,1999:blog-6157865551558252592.post-61314319665322563322014-11-21T10:26:00.001-08:002014-11-21T10:27:39.106-08:00how to use php commnad “shell_exec” as root in RPi<div class="wlWriterHeaderFooter" style="float:none; margin:0px; padding:4px 0px 4px 0px;"><iframe src="http://www.facebook.com/widgets/like.php?href=http://raspberry-pi-th.blogspot.com/2014/11/how-to-use-php-commnad-shellexec-as.html" scrolling="no" frameborder="0" style="border:none; width:450px; height:80px"></iframe></div><p>วันนี้ นำเสนอเทคนิคเล็กน้อย สำหรับการเรียกใช้คำสั่ง root ผ่านหน้าเว็บแอพลิเคชั่น อย่างเช่น php บน RPi </p> <p>ตัวอย่างปัญหา คือ ผมต้องการตั้งค่า วันเวลา บน Rpi </p> <p>เช่น ผมต้องการให้มีการแก้ไข เวลาของ RPi  แล้ว ปกติ เราสามารถเรียกใช้คำสั่ง </p> <p>sudo date --set="15 NOV 2014 12:43:10"   โดยพิมพ์ไปที่ terminal ของ Rpi ได้  แต่ ถ้าเราต้องการทำ web application ให้สามารถแก้ไขเวลาของ RPi หล่ะ เราจะทำอย่างไร </p> <p>โดยปกติแล้ว php จะสามารถรัน shell_exec แล้วตามด้วย linux command ได้ เช่น</p> <p><?php </p> <p>$output = shell_exec(“ls –l”);</p> <p>echo “<pre>$output</pre></p> <p>?></p> <p>หากเราเรียกเว็บเพจที่มี สคริปต์ตัวอย่างด้านบน เราก็จะเห็นรายละเอียดไฟล์ในโฟวเดอร์ใน linux นั้น แต่ ถ้าเราต้องการให้ shell_exec เรียกคำสั่งที่เป็นของ root ได้หล่ะ เช่น </p> <p>shell_exec(‘sudo date --set="15 NOV 2014 12:43:10"’);  แบบนี้ เราจะทำไม่ได้ เพราะ ตัวเว็บเพจนี้ ไม่มีสิทธิ์ทำเช่นนั้นได้ วิธีแก้ไข ก็คือ เราต้องไปกำหนดสิทธิ์ให้เว็บ application นี้ก่อน ทำตามนี้ </p> <p>หากเราต้องการให้เรียกใช้คำสั่ง shell_exec ของ PHP  ใน RPi ให้สามารถเรียกใช้คำสั่ง root ได้ เราจำเป็นต้องแก้ไขสิทธิ ของ application ที่ต้องใช้งานสักหน่อย </p> <p>พิมพ์  sudo visudo </p> <p>ทำการเพิ่ม  www-data  ALL=(ALL)  NOPASSWD:ALL  ไปที่ท้ายไฟล์ แล้วทำการบันทึกไฟล์นี้ </p> <p><a href="http://lh4.ggpht.com/-KENDquabRoM/VG-D55LVfsI/AAAAAAAAKcM/GGHSuHicuMw/s1600-h/image%25255B3%25255D.png"><img title="sudo visudo" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="sudo visudo" src="http://lh4.ggpht.com/-BzZudWTQDJg/VG-D7Dxoq8I/AAAAAAAAKcU/XrUKkx_uFDg/image_thumb%25255B1%25255D.png?imgmax=800" width="600" height="484" /></a></p> <p>จากนั้นเขียนสคริปต์ไฟล์ php แล้วไปวางไว้ที่ /var/www  </p> <p><?php </p> <p>$output = shell_exec(‘sudo date --set="15 NOV 2014 12:43:10"’); </p> <p>echo “<pre>$output</pre>”;</p> <p>?></p> <p>บันทึกโค๊ดนี้ ตั้งชื่อไฟล์ตามใจชอบ เช่น time.php  เสร็จแล้ว ลองเปิดหน้าเว็บบราวเซอร์ แล้ว เรียกไปที่ time.php โดยใส่ ip ของ RPi เช่น  <a href="http://192.168.1.103/time.php">http://192.168.1.103/time.php</a>  เราก็จะสามารถตั้งค่าเวลาของ RPi ผ่านหน้าเว็บได้  ซึ่งโดยปกติ จะไม่สามารถเรียกใช้คำสั่ง sudo ผ่าน shell_exec ได้  </p> <p>ลองเอาไปประยุกต์กันดูนะครับ </p> <p>ปล. บทความนี้ ไม่อาจเขียนละเอียดมากนัก ผู้ที่ไม่มีพื้นฐานเลย อาจจะงง สักเล็กน้อย ขออภัยไว้ ณ ทีนี้ด้วย</p> Wisit.Phttp://www.blogger.com/profile/04747663677248244453noreply@blogger.com0tag:blogger.com,1999:blog-6157865551558252592.post-48548549771409204912014-03-02T02:26:00.001-08:002014-03-02T02:26:11.195-08:00shell script check cpu raspberry pi ‘s temperature<div class="wlWriterHeaderFooter" style="float:none; margin:0px; padding:4px 0px 4px 0px;"><iframe src="http://www.facebook.com/widgets/like.php?href=http://raspberry-pi-th.blogspot.com/2014/03/shell-script-check-cpu-raspberry-pi-s.html" scrolling="no" frameborder="0" style="border:none; width:450px; height:80px"></iframe></div><p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="vcgencmd measure_temp" border="0" alt="vcgencmd measure_temp" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpu74P4Dr3UHwvNvmXo5BKiI7sUktghO1HzuxuYsd_bBklRC07oK1-q6Uv78H8NjkcZiGr7jLiqZhGeuJA2Fx2j4KjJN8sqeyRMYd5OZQQDv5xEn_TK4m6gswFbstEAGr36t4KWxYF3vg/?imgmax=800" width="542" height="364" /></p> <p>หน้าร้อนใกล้เข้าแล้ว  เริ่มเป็นห่วงว่า Raspberry pi จะร้อนเกินไปหรือเปล่า ก็ลองใช้ shell script เช็คอุณหภูมิของ CPU ของ Raspberry pi สักหน่อย ว่า ตอนนี้อุณหภูมิ อยู่ที่เท่าไหร่แล้ว ใช้คำสั่งง่ายๆ ครับ vcgencmd measure_temp แค่ นี้ ก็จะได้คำตอบแล้ว ว่าอุณหภูมิเท่าไหร่  ถ้าจะให้วนลูปเรื่อยๆ ก็ได้ครับ </p> <p>while true; do vcgencmd measure_temp; sleep 2; done </p> <p>วนลูป แล้ว หยุด ทุกๆ 2 วินาที  ลองเอาไปประยุกต์กันดูครับ </p> Wisit.Phttp://www.blogger.com/profile/04747663677248244453noreply@blogger.com0tag:blogger.com,1999:blog-6157865551558252592.post-42968439879252460412014-01-23T06:34:00.001-08:002014-01-23T06:34:24.100-08:00Port Forwarding for Raspberry pi from outside world<div class="wlWriterHeaderFooter" style="float:none; margin:0px; padding:4px 0px 4px 0px;"><iframe src="http://www.facebook.com/widgets/like.php?href=http://raspberry-pi-th.blogspot.com/2014/01/port-forwarding-for-raspberry-pi-from.html" scrolling="no" frameborder="0" style="border:none; width:450px; height:80px"></iframe></div><p>เผื่อบางท่านที่ยังไม่ทราบ หรือกำลังหาวิธีทำ Port Forwarding จาก Router ไปหา Access point แล้วไปที่บอร์ด Raspberry pi โดยเราจะทำการ Port Forwarding หมายเลขพอร์ท 80 สำหรับเว็บ , หมายเลข 22 สำหรับทำ SSH รีโมทเข้าบอร์ด , หรือพอร์ทอื่นๆ ที่คุณต้องการรันแอพพลิเคชั่น </p> <p>อันดับแรกเลย ผมจะบอกถึงอุปกรณ์เนตเวิร์กของผมก่อน ผมใช้บริการอินเตอร์เนต จาก 3BB network  ผมมี Huawei router จาก 3BB จากนั้นผมก็ต่อเข้ากับ Enginius ที่เป็นตัวขยาย Port Network และเป็นตัวปล่อยสัญญาณ wifi ภายในบ้าน จากนั้น ผมก็ต่อบอร์ด Raspberry pi เข้ากับ Engenius อีกครั้ง ตามรูป </p> <p>จากนั้น เราต้องทำการ Fixed หมายเลข IP Address ของที่ Huawei ที่เป็น LAN และที่ Engenius ทั้ง WAN และ LAN เลย ส่วนที่บอร์ด Raspberry pi ก็ให้ Fixed ไว้ด้วยเช่นกัน </p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKL3pfEuq2ZRr0CKl20Mn8XQGpR5ynMe7zX8Ipgy_CN79tDTZ1M2Jyd7GdfXVj8DIS7Pl6WwMEaRrpd2IGnmFPa2Id8Ylj4Zv1urkLaVCRiM9XoReIlkFYlwMviRVIn_z0uvJuNUa8IXM/s1600-h/image%25255B3%25255D.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="Port Forwarding for Raspberry pi from outside world " border="0" alt="Port Forwarding for Raspberry pi from outside world " src="http://lh6.ggpht.com/-rls-topCGZY/UuEoOocGVKI/AAAAAAAAJRs/yVFdA-RoqHM/image_thumb%25255B1%25255D.png?imgmax=800" width="644" height="448" /></a></p> <p>ทำการ Fixed IP Address ให้ได้ตามรูปด้านบนก่อน  </p> <p align="center">สำหรับ Huawei </p> <p><a href="http://lh6.ggpht.com/-wfuLaKZRkUo/UuEoPRf7D2I/AAAAAAAAJR0/ivK0YDXuu7c/s1600-h/image%25255B20%25255D.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="Port Forwarding for Raspberry pi from outside world " border="0" alt="Port Forwarding for Raspberry pi from outside world " src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNjt4pZYTYVkDLcKjAkAEte_WetPAjUbKTiWw05-ez9NkcYmVC0ITPvKgbed1KK3tLbUKoVgKdkBeLPq7oZEEhjn7_3NLgYSLomj-UEWXBPbRIC4nIWJmbzkvWGAfLUEuRVmdP-CN0Bu4/?imgmax=800" width="244" height="143" /></a></p> <p> </p> <p align="center">สำหรับ Engenius  </p> <p><a href="http://lh5.ggpht.com/-2dqjZHuTnrg/UuEoRMEL7hI/AAAAAAAAJSE/nyQPONub6Yc/s1600-h/image%25255B17%25255D.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="Port Forwarding for Raspberry pi from outside world " border="0" alt="Port Forwarding for Raspberry pi from outside world " src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRsUnTH3gpx0v2X6RNWkaSdefIuJ-o55a3VAnxzUnjFGaTvWXT8wj-MyjK1startHvGD6J8es84LOno_gGAR4upnGXYKIufz_SRF1YspRfMOAb8Ji8mfYUfFyvSvfKJP0ACCRqsP1zKos/?imgmax=800" width="244" height="191" /></a></p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJR0I04zAsL5Zpk5W9qlVh9FhkLMskHRO4r8Y0BsW3bkl7LZeArKcu5mhjhGrJ3M4AF2f1fxGjPbWmW5n42L1CTkoXQ5Cr3edQZBCj7SdvySLrLf5Af1_zH22WiNc6FEPy_eIVZi4Qr0U/s1600-h/image%25255B14%25255D.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="Port Forwarding for Raspberry pi from outside world " border="0" alt="Port Forwarding for Raspberry pi from outside world " src="http://lh6.ggpht.com/-4R2sBP6dz-o/UuEoT7fRQ5I/AAAAAAAAJSc/Dgjxcx1pf8A/image_thumb%25255B6%25255D.png?imgmax=800" width="239" height="244" /></a></p> <p>จากรูปด้านบน เรามองว่า WAN ของ Huawei คือรับ IP และข้อมูลจากภายนอก แล้ว LAN คือ iP ในวงแลนของเรา แต่ เมื่อเราต่อ Engenius ต่อท้าย Huawei แล้ว จึงทำให้ WAN ของ Engenuis ก็รับข้อมูลจาก LAN ของ Huawei อีกที </p> <p>ดังนั้น เราต้องทำการบอกที่ Huawei ให้ทำการส่งข้อมูล ที่ต้องการติดต่อกับพอร์ตใดๆ ไว้ที่ Huawei ให้ทำการส่งข้อมูลนั้น ต่อมาที่ WAN IP ของ Engenius  โดยเข้าไปตั้งค่า NAT ในหน้าเว็บของ HUAWEI โดยปกติจะเป็น <a href="http://192.168.1.1">http://192.168.1.1</a> แล้วไปที่เมนู Basic->NAT ทำการเพิ่ม Virtual Server ตามรูป ในที่นี้ผมต้องการให้ มีการ Forward port 80,22,8090,900 ไปที่ WAN IP ของ Engenius </p> <p><a href="http://lh6.ggpht.com/-2oBjELxa02s/UuEoU9V9rJI/AAAAAAAAJSk/59dj7bjqFkI/s1600-h/image%25255B7%25255D.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Port Forwarding for Raspberry pi from outside world " border="0" alt="Port Forwarding for Raspberry pi from outside world " src="http://lh6.ggpht.com/-TMQ5dbVlINE/UuEoWMDsdoI/AAAAAAAAJSs/Bb8nHJIxwRc/image_thumb%25255B3%25255D.png?imgmax=800" width="644" height="438" /></a></p> <p>จากนั้น เราก็ไปตั้งค่า Forwarding Port ที่ Engenius ต่อไปที่บอร์ด Rasbperry pi ของเราอีกที โดยที่บอร์ด Rasbperry pi ของเราถูก Fixed IP Address ไว้ที่ 192.168.2.105 </p> <p><a href="http://lh6.ggpht.com/-xB7ljgGj5Zg/UuEoXCNM0zI/AAAAAAAAJS0/hThSqfdqWow/s1600-h/image%25255B11%25255D.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Port Forwarding for Raspberry pi from outside world " border="0" alt="Port Forwarding for Raspberry pi from outside world " src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj69hCeWXq2Gfzzz9J3mEjpJ36gpN924DPiTkcRVNjk26lAI2ldB6ZviY-eD4ex9z7JpFYZ3FKltZoUeqTk1fUKB3_afXKf3YUV9jGkJZLx4NsmmXhcM4goqj9nlkh4o2znre-gjbPfHoY/?imgmax=800" width="619" height="484" /></a></p> <p>ทำการ Fixed IP Address ของบอร์ด Raspberry pi ด้วยการแก้ไขไฟล์ interfaces</p> <p>nano /etc/network/interfaces</p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeLtVjXaDSoMxLYiMdrKMJdsDdOI-6k4MrerOySAw-vhZDwhS2a56SoYPw1JEvttXCgid6ixi70y6GyqH7Vz9OAnq2EVgSP3hF0W8FodM7MNhG3WGLPN7YVlYLLhxbBw00rAdTCuBuqg0/s1600-h/image%25255B24%25255D.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Port Forwarding for Raspberry pi from outside world " border="0" alt="Port Forwarding for Raspberry pi from outside world " src="http://lh6.ggpht.com/-vvyv7g6kfJE/UuEoaoQymaI/AAAAAAAAJTM/hc3lO7hJGDQ/image_thumb%25255B10%25255D.png?imgmax=800" width="644" height="253" /></a></p> <p>แค่นี้ ก็เป็นอันเรียบร้อยแล้ว วิธีทดสอบก็คือ ลอง Connect ผ่าน WAN IP Address ของ Huawei ผ่านหน้าเว็บ (ถ้าเปิด Web service ไว้) หรือผ่าน SSH Terminal จากข้างนอกเข้ามา ซึ่งการหา WAN IP Address ก็ทำตามขั้นตอนจากตอนเก่าๆ ได้ <a href="http://raspberry-pi-th.blogspot.com/2012/12/raspberry-pi-checking-routers-ip-address.html" target="_blank">ที่นี่</a></p> <p>มาถึงตอนนี้ ผมคิดว่าหลายๆ คน คงเข้าใจดี ว่าตัวเองกำลังทำอะไรอยู่ และจะได้อะไรจากการทำแบบนี้ ซึ่งประโยชน์ที่คุณจะได้ก็คือ คุณจะสามารถเข้ามากับบอร์ด Raspbery pi แม้ว่าคุณอยู่นอกบ้าน ซึ่งก็แล้่วแต่จินตนาการของแต่ละท่านว่าจะทำอะไรต่อ </p> <p>ปล. สำหรับใครที่ใช้ 3BB แล้ว Forward Port ไม่สำเร็จ โทรไปปรึกษา 3BB ที่เบอร์ 1530 นะครับ เพราะบางที เราอาจจะโดนบล๊อกจาก 3BB อยู่ก่อน บอกให้เขาปล๊อดบล๊อกให้ครับ </p> Wisit.Phttp://www.blogger.com/profile/04747663677248244453noreply@blogger.com3tag:blogger.com,1999:blog-6157865551558252592.post-20381932355741594032014-01-22T06:20:00.001-08:002014-01-24T06:58:09.275-08:00Raspberry Pi 1- Wire Digital Thermometer Sensor<div class="wlWriterHeaderFooter" style="float:none; margin:0px; padding:4px 0px 4px 0px;"><iframe src="http://www.facebook.com/widgets/like.php?href=http://raspberry-pi-th.blogspot.com/2014/01/raspberry-pi-1-wire-digital-thermometer.html" scrolling="no" frameborder="0" style="border:none; width:450px; height:80px"></iframe></div><p>    สวัสดีครับ ไม่ได้อัพเดทซะนาน มัวแต่ไปเล่น<a href="http://www.123microcontroller.com" target="_blank">ไมโครคอนโทรลเลอร์</a>อยู่ ต้องกลับมารื้อฟื้นปัดฝุ่น Raspberry pi สักหน่อย ทิ้งช่วงไปนาน เริ่มจะลืมแหละ และก็ไม่รู้ตอนนี้โลก Linux Embedded เขาไปถึงไหนกันแล้ว บอร์ด Linux Embedded กำลังทยอยออกมาอย่างต่อเนื่อง ถ้าไม่กลับมาเล่น Linux Embedded มีหวังตามไม่ทันแน่ๆ </p> <p>     ช่วงนี้่อากาศก็ยังหนาวอย่างต่อเนื่อง ดึกๆ ยิ่งอากาศเย็น ระวังเรื่องสุขภาพกันด้วย พอพูดถึงเรื่องอากาศเย็น เราก็อยากจะรู้เหมือนกัน ตอนนี้มันเย็นกี่องศาแล้ว งั้นเราก็มาลองให้ Raspberry pi อ่านค่าอุณหภูมิผ่านไอซีดิจิตอล เบอร์ DS18B20 ผ่าน Protocol แบบ 1-wire ดูสักหน่อยสิ ว่าอุณหภูมิตอนนี้มันเท่าไหร่</p> <p>เนื่องจากไม่ได้อัพเดทเฟิร์มแวร์ของ Raspbian นานแล้ว ก็เอาสักหน่อย ทั้ง update และ upgrade กันไปเลย</p> <p><font color="#ffff00">sudo apt-get update <br />sudo apt-get upgrate </font></p> <p align="left">ไอ้ตอน upgrade นี่นานเลยหล่ะ ถ้าใครไม่เคยอัพเกรดนานๆ เหมือนผม </p> <p align="left">เสร็จแล้ว ก็หาไอซีดิจิตอล DS18B20 สักตัว ไม่แพงแล้วทุกวันนี้ ถูกมาก แล้วก็ตัวต้านทาน ค่า 4.7k โอห์ม เอามา Pull-up ขา Data ของไอซี DS18B20 (ตามคำแนะนำดาต้าชีท)</p> <p><a href="http://lh6.ggpht.com/-N6bez7FNY0o/Ut_ThZ-165I/AAAAAAAAJQk/ewa8GXG1Pgs/s1600-h/image%25255B7%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="Raspberry Pi 1- Wire Digital Thermometer Sensor" border="0" alt="Raspberry Pi 1- Wire Digital Thermometer Sensor" src="http://lh3.ggpht.com/-Fhv-6VevFjU/Ut_TilrBmmI/AAAAAAAAJQs/1LBX7eyxk2w/image_thumb%25255B2%25255D.png?imgmax=800" width="400" height="484" /></a></p> <p align="right">ที่มารูปวงจร http://www.raspberrypi-spy.co.uk/</p> <p>เมื่อต่อวงจรเสร็จแล้ว ก็ต้องมาทำการเพิ่มโมดูล 1-wire ไปที่ kernel ของ Linux ด้วยคำสั่ง </p> <p><font color="#ffff00">sudo modprobe w1-gpio <br />sudo modprobe w1_therm</font></p> <p>ถ้าสำเร็จเราจะเห็นข้อมูลการรายงานค่าอุณหภูมิที่ directory /sys/bus/w1/devices ลองเข้าไปที่ directory นี้ดูครับ</p> <p><font color="#ffff00">cd /sys/bus/w1/devices <br />ls</font></p> <p>ถ้าปรากฏ serial number ของเซ็นเซอร์ คล้ายๆ แบบนี้ก็ใช้ได้ครับ <br /><font color="#00ff00">28-0000031280c7  w1_bus_master1</font></p> <p>ให้เราเข้าไปที่ 28-0000031280c7 แล้วอ่านไฟล์ w1_slave ที่อยู่ข้างในดูครับ <br /><font color="#ffff00">cd 28-0000031280c7 <br />ls <br />cat w1_slave </font></p> <p>มันจะรายงานค่าอุณหภูมิที่อ่านได้จากเซ็นเซอร์ DS18B20 มีหน่วยเป็นเซลเซียส </p> <p> <br /><font color="#00ff00">58 01 1e 00 1f ff 08 10 d9 : crc=d9 YES <br />58 01 1e 00 1f ff 08 10 d9 t=21500</font></p> <p align="left">มีค่าประมาณ 21.5 องศาเซลเซียส  สำหรับผม ก็ถือว่าหนาวแล้วขนาดนี้ บรื๊ออออออก็ลองเอาไปประยุกต์กันดูครับ ง่ายๆ อุ่นเครื่องกันเท่านี้ก่อนหล่ะกัน สวัสดีครับ </p> <p align="left"><a href="http://lh6.ggpht.com/-eHPBF1Xrz78/Ut_Tju9MF6I/AAAAAAAAJQ0/zQbbuiiOQNM/s1600-h/image%25255B11%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-9bWRHHZNgNw/Ut_TlYG9rcI/AAAAAAAAJQ8/p6rMp1SjP8Y/image_thumb%25255B4%25255D.png?imgmax=800" width="623" height="484" /></a></p> <p align="right">ที่มา <a href="http://www.raspberrypi-spy.co.uk/2013/03/raspberry-pi-1-wire-digital-thermometer-sensor/" rel="nofollow" target="_blank">raspberrypi-spy.co.uk</a></p> <p>เสร็จแล้ว ก็ลอง Polling data ด้วย Python ดูสักหน่อยสิ</p> <p><a href="http://lh5.ggpht.com/-gh7RD2R04UM/Ut_rr8H25LI/AAAAAAAAJRM/Ro2yxskUuFU/s1600-h/python_read_ds18b20%25255B3%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="python_read_ds18b20" border="0" alt="python_read_ds18b20" src="http://lh3.ggpht.com/-XIFs2O7OANQ/Ut_rtiONYqI/AAAAAAAAJRU/VK_79yUYunA/python_read_ds18b20_thumb%25255B1%25255D.png?imgmax=800" width="644" height="453" /></a></p> <p>ปล. ลืมไปว่าเราสามารถแทรก คำสั่ง modprobe ในโค๊ดนี้ก็ได้ จะได้ว่า </p> <p> <br /><font color="#ffff00">import os <br />from time import sleep</font></p> <p><font color="#ffff00">os.system('sudo modprobe w1-gpio') <br />os.system('sudo modprobe w1_therm')</font></p> <p><font color="#ffff00">while True: <br />    tfile = open("/sys/bus/w1/devices/28-0000031280c7/w1_slave") <br />    text = tfile.read() <br />    tfile.close() <br />    temperature_data = text.split()[-1] <br />    temperature = float(temperature_data[2:]) <br />    temperature = temperature / 1000 <br />    print temperature <br />    sleep(2)</font></p> Wisit.Phttp://www.blogger.com/profile/04747663677248244453noreply@blogger.com3tag:blogger.com,1999:blog-6157865551558252592.post-17094910921029026462013-12-26T06:30:00.001-08:002013-12-26T06:46:04.594-08:00กล่องใส่ Raspberry Pi ฟรีๆ ( a card case for raspberry pi)<div class="wlWriterHeaderFooter" style="float:none; margin:0px; padding:4px 0px 4px 0px;"><iframe src="http://www.facebook.com/widgets/like.php?href=http://raspberry-pi-th.blogspot.com/2013/12/raspberry-pi-card-case-for-raspberry-pi.html" scrolling="no" frameborder="0" style="border:none; width:450px; height:80px"></iframe></div><p><a href="http://lh6.ggpht.com/-V-RVlSvAVQc/Urw9ev-fyGI/AAAAAAAAJDE/MY_dIonw9E4/s1600-h/image%25255B9%25255D.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="The Punnet - a card case for you to print (for free)" border="0" alt="The Punnet - a card case for you to print (for free)" src="http://lh4.ggpht.com/-Xau1ibPgleI/Urw9gmbdvgI/AAAAAAAAJDM/1yOkgPUKltM/image_thumb%25255B5%25255D.png?imgmax=800" width="581" height="388" /></a></p> <p>   จริงๆ บอร์ด Raspberry pi หน่ะ ไม่แพงหรอก แต่ พอรวมอุปกรณ์ประกอบอื่นๆ ไปๆมาๆ จะแพงกว่าบอร์ด Raspberry pi เสียด้วยซ้ำ จะไม่ low cost ซะแล้ว ยิ่งเจ้ากล่องที่ใส่ Raspberry pi นี่ ก็มีตั้งแต่ ราคา 150 บาท ไปจนถึง 5-600 บาท  ไม่รู้จะแพงไปไหน อีกหนำซ้ำ เจ้าบอร์ด Raspberry pi มันก็ไม่ได้สี่เหลี่ยมแปะๆ ซะทีไหนหล่ะ ยังอุตส่าห์มี SD-card ยื่นออกมา จะเอากล่องทั่วไป ก็ใช่ว่าจะได้ขนาดที่พอดี </p> <p>เอางี้แล้วกัน เรามาทำกล่องใส่ที่เป็นกระดาษกันดีกว่า ประหยัดดี มีคนทำต้นแบบไว้ให้แล้ว ที่เหลือก็หาวัสดุึที่พอจะพับเป็นกล่อง ยิ่งถ้าทนน้ำ ได้ิยิ่งดี จะได้ทนๆ หน่อย ว่าแล้วก็ไปโหลดมามาปริ้นท์ แล้วพับตามกันเลย </p> <p>ดาวน์โหลด <a href="http://squareitround.co.uk/Resources/Punnet_net_Mk1.pdf">http://squareitround.co.uk/Resources/Punnet_net_Mk1.pdf</a></p> <p><a href="http://lh6.ggpht.com/-N76RWIeE1i0/Urw-dnCT5nI/AAAAAAAAJDU/fjvB2uQo4aA/s1600-h/image%25255B14%25255D.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="a printable card case for the Raspberry Pi" border="0" alt="a printable card case for the Raspberry Pi" src="http://lh6.ggpht.com/-SNk9P_d3QYA/Urw-ge3sidI/AAAAAAAAJDc/50Ecu_q5O9s/image_thumb%25255B8%25255D.png?imgmax=800" width="570" height="423" /></a></p> <p align="right">ที่มา <a href="http://www.raspberrypi.org/archives/1310">http://www.raspberrypi.org/archives/1310</a></p> Wisit.Phttp://www.blogger.com/profile/04747663677248244453noreply@blogger.com0tag:blogger.com,1999:blog-6157865551558252592.post-15997778638330028642013-02-28T09:02:00.001-08:002013-02-28T09:09:04.980-08:00How to getting started WiringPi<div class="wlWriterHeaderFooter" style="float:none; margin:0px; padding:4px 0px 4px 0px;"><iframe src="http://www.facebook.com/widgets/like.php?href=http://raspberry-pi-th.blogspot.com/2013/02/how-to-getting-started-wiringpi.html" scrolling="no" frameborder="0" style="border:none; width:450px; height:80px"></iframe></div><p>ในการควบคุม GPIO ของ Raspberry pi นอกจากเราจะทำการ echo ค่า 1 และ 0 ไปที่ Filesystem ที่ชื่อ sysfs ของระบบ linux ที่เป็นที่เก็บไฟล์ื่ที่ติดต่อกับ GPIO Hardware ของ Raspberry Pi แล้ว (<a href="http://raspberry-pi-th.blogspot.com/2012/09/get-to-know-raspberry-pi-gpio.html)" target="_blank"><font color="#0000ff">http://raspberry-pi-th.blogspot.com/2012/09/get-to-know-raspberry-pi-gpio.html</font>)</a> ยังมีอีกหลายวิธี ไม่ว่าจะเป็นการเรียกใช้ module RPi.GPIO(<a href="http://raspberry-pi-th.blogspot.com/2012/10/rpigpio-python-control-gpo-of-raspberry.html)" target="_blank"><font color="#0000ff">http://raspberry-pi-th.blogspot.com/2012/10/rpigpio-python-control-gpo-of-raspberry.html</font>)</a> ที่พัฒนาด้วยภาษาไพธอน แต่ก็ยังไม่ค่อยตอบโจทย์ผมเท่าไหร่ เพราะต้องใช้สิทธิ์ root ในการเรียกใช้คำสั่งเหล่านั้น ซึ่งไม่ค่อยสะดวกเท่าไหร่ </p> <p>วันนี้ผมจะมาแนะนำอีกหนึ่งไลบรารี่ ของคุณ Gordon Henderson ซึ่งได้พัฒนาชุดโปรแกรมสำหรับเรียกใช้งาน GPIO ของ Raspberry pi ด้วยภาษา C ซึ่งเข้าถึงรีจิสเตอร์ของ GPU ของ Raspberry Pi เลย และที่สำคัญ เราสามารถเรียกใช้ไลบรารี่ชุดนี้ ได้เหมือนคำสั่ง shell ของ linux ได้เหมือนๆ คำสั่งอื่นๆ ทั่วไป โดยไม่จำเป็นต้องเป็นสิทธิ์ Root ก่อนเลย ซึ่งสะดวกเป็นอย่างยิ่งครับ ในการนำไปต่อยอดพัฒนาโปรแกรมอื่นๆ ต่อไป  </p> <p>เรามาติดตั้งกันก่อนเลยครับ เนื่องจากโปรแกรมนี้ ถูกเก็บไว้ด้วยรูปแบบกระจายซอร์สโค๊ดด้วย git-core หากเรายังไม่มี package นี้ในการช่วยดาวน์โหลดซอร์สโค๊ดต่างๆ จากผู้พัฒนาโปรแกรมให้ติดตั้ง git-core ด้วยคำสั่ง </p> <p>sudo apt-get install git-core </p> <p>จากนั้นทำการดาวน์โหลด wiringPi ด้วยคำสั่ง </p> <p>git clone git://git.drogon.net/wiringPi</p> <p>จากนั้นเข้าไปในโฟวเดอร์ wirignpi แล้วทำการเช็คอัพเดท </p> <p>cd wiringPi <br />git pull origin</p> <p>ต่อไปให้ทำการติดตั้ง ซึ่งจะเป็นการ compile โค๊ดที่เราโหลดมาบนบอร์ดของ โดยออกจากโฟวเดอร์ wiringPi ก่อน โดยเรียกคำสั่ง</p> <p>cd .. <br />จากนั้นทำการรันไฟล์ build ด้วยคำสั่ง </p> <p>./build </p> <p>Raspberry pi จะทำการ compile wiringPi เพื่อให้กลายเป็นคำสั่ง shell ให้เราเรียกใช้ง่ายๆ ต่อไป </p> <p>เมื่อ compile เสร็จแล้ว เราจะสามารถเรียกใช้คำสั่ง gpio ได้  ให้เราจินตนาการง่ายๆ ว่า คำสั่ง gpio ก็เหมือนคำสั่ง ls หรือ คำสั่ง cat หรือ cp เหมือนคำสั่งอื่นๆ บน linux นั่นเอง ดังนั้น มันจึงสามารถที่จะเรียกดูํ manual ของมันได้เช่นกัน ด้วยคำสั่ง </p> <p>man gpio </p> <p>ในคู่มือที่แสดงนี้ จะบอกถึงวิธีการเรียกใช้คำสั่งนี้ และที่ท้ายๆ คู่มือ เค้าจะเขียนบอกการจับคู่ขา WiringPi กับ GPIO จริงๆ ทั้ง Rev1 และ Rev2 ครับ</p> <p><a href="http://lh3.ggpht.com/-_tyIcDgWxn8/US-NfomBOiI/AAAAAAAAGtE/yXK9IGxzjIw/s1600-h/image%25255B9%25255D.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="man gpio" border="0" alt="man gpio" src="http://lh5.ggpht.com/-dpuZ4FbUZnU/US-NgL-hP5I/AAAAAAAAGtM/1Sc-PK4pv3A/image_thumb%25255B5%25255D.png?imgmax=800" width="398" height="379" /></a></p> <p>ผมขออธิบายการเรียกใช้งานคร่าวๆ ของคำสั่ง gpio นี้นะครับ ที่เหลือ สามารถศึกษาเพิ่มเติมได้ใน man gpio นี้แหละครับ </p> <p>ในการเรียกใช้งาน GPIO ของ Raspberry pi โดยค่าเริ่มต้น เมื่อเราจ่ายไฟไปที่บอร์ด Raspberry pi เริ่มต้น ที่ GPIO ส่วนใหญ่ จะมี สถานะเป็น Input หากเราต้องการนำขา GPIO ไปใช้งานเป็น Output แล้ว เราจะต้องทำการกำหนดทิศทางของ GPIO ซะก่อน ด้วยคำสั่ง</p> <p>gpio mode 0 out <--- สั่งให้ wirignpi pin 0 ทำหน้าที่เป็น output <br />gpio write 0 1  <--- สั่งให้เขียนค่า 1 ไปที่ wiringpi pin 0 ซึ่งจะเกิด login high ที่ pin นี้ </p> <p>ผมลองเปิด webiopi เพื่อเช็คสถานะของ GPIO ไปด้วย ( <a title="http://raspberry-pi-th.blogspot.com/2013/01/webiopi-control-raspberry-pi-s-gpio-via.html" href="http://raspberry-pi-th.blogspot.com/2013/01/webiopi-control-raspberry-pi-s-gpio-via.html" target="_blank"><font color="#0000ff">http://raspberry-pi-th.blogspot.com/2013/01/webiopi-control-raspberry-pi-s-gpio-via.html</font></a><font color="#0000ff"></font> ) </p> <p><a href="http://lh4.ggpht.com/-HOyXc6AIQFk/US-Ng-YBrZI/AAAAAAAAGtU/0yAzhST-I6w/s1600-h/image%25255B8%25255D.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="gpio mode 0 out" border="0" alt="gpio mode 0 out" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNLjoVkzE0LaKpkjdOkwjRvxtwRR6Z6rz89H2ULVEBGAl5NixsfvjgixT4Wi4Bqf-u4hC4j1_o_aDwr4H9sWzcJSz3k3_pW69zgY61e9JZfd8QAnw2UqPVqLmN4iXkUTxlObpWiL_a9so/?imgmax=800" width="575" height="353" /></a></p> <p>ในทำนองตรงกันข้าม หากเราต้องการให้ pin ใดๆ ทำหน้าที่เป็น input รอรับสถานะทางไฟฟ้า ก็กำหนดเป็น in แล้้วใช้คำว่า read แทนการ write ดังต่อไปนี้</p> <p>gpio mode 11 in <br />gpio read 11  </p> <p>หวังว่าคงไม่ งง นะครับ ว่าทำไม 11 กับ GPIO7 มันเกี่ยวข้องอะไรกัน ซึ่งมันเป็นเรื่องของการตั้งชื่อ map pin เข้ากับตัวโค๊ดของผู้เขียนโปรแกรมนั่นเอง ไม่มีอะไรมาก </p> <p><a href="http://lh4.ggpht.com/-U0w0kal5Gk8/US-Nim0mo3I/AAAAAAAAGtk/fEKp8pmbUN4/s1600-h/image%25255B13%25255D.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="gpio mod 11 in " border="0" alt="gpio mod 11 in " src="http://lh6.ggpht.com/-hXdVjJOvVdA/US-Njo04qtI/AAAAAAAAGts/M2eZ0Rx_a6k/image_thumb%25255B7%25255D.png?imgmax=800" width="500" height="484" /></a></p> <p>นอกจากนี้ คำสั่ง gpio ยังมีลูกเล่นอื่นๆ อีกไม่ว่าจะเป็นการสร้างสัญญาณ PWM หรือการอ่านสถานะ pin ทั้งหมดก็สามารถทำได้เช่นกัน ลองศึกษาเพิ่มเติมดูจากคำสั่ง man gpio หรือที่เว็บ <a href="https://projects.drogon.net/raspberry-pi/wiringpi/" rel="nofollow" target="_blank">https://projects.drogon.net/raspberry-pi/wiringpi/</a> </p> <p>เดี๋ยวต่อไป ผมจะยกตัวอย่างการนำคำสั่ง gpio ไปลองใช้งานในด้านอื่นๆ ดูบ้างครับ ขอให้สนุกกับ Raspberry pi นะครับ </p> Wisit.Phttp://www.blogger.com/profile/04747663677248244453noreply@blogger.com1tag:blogger.com,1999:blog-6157865551558252592.post-52487081736224740562013-02-04T10:43:00.001-08:002013-02-09T00:17:10.140-08:00How to install MJPG-Streamer<div class="wlWriterHeaderFooter" style="float:none; margin:0px; padding:4px 0px 4px 0px;"><iframe src="http://www.facebook.com/widgets/like.php?href=http://raspberry-pi-th.blogspot.com/2013/02/how-to-install-mjpg-streamer.html" scrolling="no" frameborder="0" style="border:none; width:450px; height:80px"></iframe></div><p>MJPG-Streamer คือ โปรแกรมประเภทคำสั่งที่สามารถพิมพ์คำสั่งลงไป แล้วโปรแกรมจะทำการดึงภาพออกจากเว็บแคมของเรา แล้วทำการส่งไปเก็บไว้ เพื่อที่เราจะสามารถเข้ามาดูได้ โดยผ่านเว็บบราวเซอร์ หรือผ่านทางมือถือก็ได้ </p> <p>บทความต่อไปนี้ ผมได้ค้นหามาจาก <a href="http://www.raspberrypi.org/phpBB3/viewtopic.php?f=30&t=8659" rel="nofollow" target="_blank">http://www.raspberrypi.org/phpBB3/viewtopic.php?f=30&t=8659</a>  ซึ่งก่อนหน้านี้ ผมพยายามทำมาหลายครั้งแล้ว แต่ ไม่ประสบความสำเร็จเหมือนคนอื่นเค้า เนื่องจากบอร์ด Raspberry Pi ของผมเป็น Model B rev 1 ซึ่งอาจจะมีอุปสรรคมากกว่าบอร์ดรุ่นใหม่ๆ สักหน่อย ซึ่งอาจจะทำให้บทความนี้ อาจจะไม่เวิร์กสำหรับคนอื่นก็ได้ ก็ต้องขอบอกไว้ ณ ทีนี้ด้วย ซึ่งการที่เราจะต่ออุปกรณ์อะไรสักอย่างกับ Linux ย่อมมีอุปกรณ์เรื่องของ driver ที่ไม่รองรับ นั่นเป็นเรื่องธรรมดาของ Linux OS ครับ (ต้องทำใจนิดนึง) </p> <p>อุปกรณ์ที่ผมใช้ก็คือ บอร์ด Raspberry Pi Model B rev 1 ซึ่งมี RAM อยู่ 256 กับกล้อง WebCam ยี่ห้อ OKER รุ่น Webcam OKER (177) ซึ่งนับว่าโชคดีมาก ที่เจ้า Driver kernel ของผมมันรองรับพอดี หากเพื่อน ต้องการทราบว่ากล้องรุ่นใดบ้างที่ driver รองรับ สามารถตรวจสอบได้ที่ <a href="http://www.ideasonboard.org/uvc/">http://www.ideasonboard.org/uvc/</a></p> <p>เรามาเริ่มกันเลยครับ หลังจากที่เราได้เช็คอัพเดทแล้ว sudo apt-get update ให้เราไปโหลด package เหล่านี้มาก่อน ได้แก่ </p> <p>sudo apt-get install subversion <br />sudo apt-get install libv4l-dev <br />sudo apt-get install libjpeg8-dev <br />sudo apt-get install imagemagick </p> <p>ซึ่ง Subversion เป็นตัวเอาไว้โหลดซอร์สโค๊ดจาก svn server ที่นักพัฒนาโปรแกรมนิยมเอาไปเก็บไว้ครับ ส่วน package อื่นๆ ที่เหลือ ก็เกี่ยวเนื่อง และ เป็นไลบรารี่เสริมในการ </p> <p>compile MJPG-Streamer อีกทีครับ </p> <p>ตอนนี้เราจะโหลด MJPG-Streamer บ้างหล่ะ ให้ใช้คำสั่งนี้ครับ ซึ่งจะได้ตัวอัพเดทล่าสุดเลย </p> <p>svn co <a href="https://mjpg-streamer.svn.sourceforge.net/svnroot/mjpg-streamer">https://mjpg-streamer.svn.sourceforge.net/svnroot/mjpg-streamer</a> mjpg-streamer </p> <p>เสร็จแล้วให้เข้าไปที่โฟวเดอร์ mjpg-streamer/mjpg-streamer ด้วยคำสั่ง </p> <p>cd mjpg-streamer/mjpg-streamer  </p> <p>จากนั้นเราจะทำการ compile โปรแกรมของเราหล่ะ ด้วยคำสั่ง </p> <p>make USE_LIBV4L2=true clean all </p> <p>ซึ่งไม่น่าจะมี error ใดๆ ขึ้นมานะครับ (อาจจะมี warning ได้ แต่ อย่าให้มี error ก็แล้วกัน ) เสร็จแล้วก็ตามด้วย </p> <p>sudo make DESTDIR=/usr install </p> <p>หากไม่มี error แล้ว ให้เราทำการเสียบกล้อง webcam ของเราเข้าทาง port USB ของบอร์ด Raspberry pi ครับ ก่อนที่จะเสียบสาย USB เราอาจจะสั่งคำสั่ง </p> <p>tail -f /var/log/messages </p> <p>เพื่อดูว่า uvcvideo kernel driver มองเห็นอุปกรณ์ที่เป็น camera หรือยัง ถ้ามองเห็นแล้ว ควรจะได้ข้อความตามรูปข้างล่าง</p> <p><a href="http://lh6.ggpht.com/-Au6wInSqbiU/URABGcE0kdI/AAAAAAAAGpM/fe_MYmBpR78/s1600-h/image%25255B4%25255D.png"><img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="uvcvideo kernel driver found webcam " border="0" alt="uvcvideo kernel driver found webcam " src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiaD3iij2K3Ii_ls0p41eS0Kgd7ltRvfcfdwe5gsZ9UoF-2AspgU4YQil7PAksHqtXE2Sz8VE4qP67PylpDAPmBOd7KqYukRDvRxNDh6CvGMcCPQT0iLhHxrOFTjj6HZPBYV_adRTXX1s/?imgmax=800" width="590" height="179" /></a> </p> <p>จากนั้น ผมลองติดตั้ง fswebcam ซึ่งตัวนี้ ผมจะใช้เป็นตัวเช็คว่า ผมจะต้องปรับค่า output ที่กล้องให้ค่าได้เป็นอะไร ซึ่งเราจะนำไปใช้ในการตั้งค่า streamer ต่อไป  </p> <p>ติดตั้ง fswebcam  ด้วยคำสั่ง </p> <p>sudo apt-get install fswebcam </p> <p>เสร็จแล้วให้ใช้คำสั่ง </p> <p>fswebcam --verbose</p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRUGGesTpKZgoyix2CBG8wQY8XSigM6IVgb9oqZJUBrOyO3vq2dpBeJzvupDQLDUkIvDc_NWKqPsbfDLaF6vfsswub3BZ7wNQ0STBdQJrsdJFAt4qiOT4YAHhZcDw0NRDzDrb4UmcBHO8/s1600-h/image%25255B8%25255D.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="fswebcam --verbose" border="0" alt="fswebcam --verbose" src="http://lh3.ggpht.com/-hSsBxgQHI3k/URABKhGgs0I/AAAAAAAAGpk/8DE8sObLlbo/image_thumb%25255B4%25255D.png?imgmax=800" width="546" height="484" /></a> </p> <p>ซึ่งจากข้อมูลที่ได้มา ผมควรที่จะปรับค่า output ที่จะได้จาก streamer ให้เป็น YUYV และ frame rate ควรจะเท่ากับ 4 </p> <p>ผมก็นำเอาข้อมูลที่ได้นี้ มาใช้ร่วมกับคำสั่ง </p> <p>mjpg_streamer -i "/usr/lib/input_uvc.so -d /dev/video0  -r 352x288 -f 4 -y YUYV" -o "/usr/lib/output_http.so -p 8090 -w /var/www/mjpg_streamer" </p> <p><a href="http://lh5.ggpht.com/-HBMdnVQy0wk/URABLstWPUI/AAAAAAAAGps/8cz2cjwiDHU/s1600-h/image%25255B13%25255D.png"><img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="image" border="0" alt="image" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpzLyLTbISpWhIbkqpEOLBpqzSur5Z0wP9xOiDphqO1a6DTLZE1n4VZzmCe-dVb1a-_YR8_8rOp2S9CUDMEtdWOKn_wzuT3SzzuVYCGfmlfzRoMA1wn8EsG2O364FG1QiFeN5MrAVclnA/?imgmax=800" width="575" height="78" /></a> </p> <p>(ศึกษาพารามิเตอร์ต่างๆ ได้ที่ คำสั่ง mjpg_streamer --help  หรือ จากไฟล์ /home/pi/mjpg-streamer/mjpg-streamer/start.sh ) </p> <p>หลังจากที่สั่งคำสั่ง เรียบร้อยแล้ว จะเกิดการ stream ภาพที่ได้จากกล้องไปเก็บไว้ที่ web root folder เราสามารถเปิดดูภาพที่ได้ผ่านหน้าเว็บบราวเซอร์ได้เลย โดยใส่  URL ไปที่ ip ของ Raspberry pi แล้วตามด้วยพอร์ต 8090 ครับ จากนั้นตามด้วยพารามิเตอร์ ?action=stream </p> <p>สมมติว่า ip address ของบอร์ด raspberry pi เท่ากับ 192.168.2.105 จะได้ว่า </p> <p><a href="http://192.168.2.105:8090/?action=stream">http://192.168.2.105:8090/?action=stream</a></p> <p>ที่หน้าเว็บบราวเซอร์จะพบภาพจากกล้องเว็บแคมของเราครับ <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBXPDOIM8S-41_Sq9Q0Cvaw8hUFVWoitk-v8xsYJIm8ZemQ9sJNUeLO0a2hZ5wfaLuhY7eqTOsr7KuQXdiT_WxaKmYxHDKL1f0N9OXc9KdSpMZvV_MhcQlOjsQggQ1XVsCrKUd7iDOpTw/s1600-h/streamer%25255B4%25255D.jpg"><img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="MJPG-Streamer work " border="0" alt="MJPG-Streamer work " src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitVtdKnSZCNQlIozzGUfZklwLtbFGWAI7AUMKhO4WuwUBJjYJ3X6H54YnUvk9cfWLn0zi0WlTfp80oFNpGchhDwShVkleQhRhQpLuRuNijwjKcise1OiQ8qXZNRAwg68DC2ujKsIV8ogg/?imgmax=800" width="533" height="406" /></a></p> <p>ถ้าเพื่อนๆ ลองปรับพารามิเตอร์คำสั่ง mjpg_streamer ให้เหมาะกับ output ของกล้องหล่ะก็ ภาพที่ได้จะออกมาดี (เท่าที่กล้องมันจะทำได้) เลยหล่ะครับ หวังว่าคงเป็นประโยชน์ นำไปต่อยอดกันได้นะครับ </p> Wisit.Phttp://www.blogger.com/profile/04747663677248244453noreply@blogger.com1tag:blogger.com,1999:blog-6157865551558252592.post-24580464474739845982013-01-30T05:20:00.001-08:002013-01-30T06:20:36.626-08:00WebIOPi : Control Raspberry Pi ‘s GPIO via web browser<div class="wlWriterHeaderFooter" style="float:none; margin:0px; padding:4px 0px 4px 0px;"><iframe src="http://www.facebook.com/widgets/like.php?href=http://raspberry-pi-th.blogspot.com/2013/01/webiopi-control-raspberry-pi-s-gpio-via.html" scrolling="no" frameborder="0" style="border:none; width:450px; height:80px"></iframe></div><p>เราทราบดีอยู่แล้วว่า Raspberry pi นั้น สามารถทำให้เป็น web Server ได้ และในขณะเดียวกัน ก็ยังมี GPIO เหลือไว้ให้นักพัฒนาไว้ทำอะไรเล่นได้แตกต่างจาก PC ทั่วไปที่ไม่มี GPIO ให้ใช้ ก็เลยมีคนคิดที่จะทำ web application ที่สามารถที่จะควบคุม GPIO ผ่านทางหน้าเว็บ วันนี้ เรามาติดตั้ง web application ตัวหนึุ่่งที่น่าสนใจสำหรับ Raspberry pi นั่นก็คือ WebIOPi </p> <p>WebIOPi คือเว็บแอพลิเคชั่น ที่ออกแบบด้วยภาษา Python ซึ่งทำงานร่วมกับ REST framework  จุดประสงค์เพื่อให้การควบคุม GPIO ของ Raspberry Pi แสดงผล แบบ(เกือบจะ) Realtime ให้เห็นผ่านหน้าเว็บ โดยที่เราไม่ต้อง refresh หน้าเว็บ เมื่อ GPIO มีการเปลี่ยนแปลงสถานะ </p> <p>"WebIOPi is developed and tested on Raspbian"</p> <p>เพราะฉะนั้นใครทีใช้ Raspian อยู่แล้ว ก็ไม่น่ามีปัญหาอะไร ขั้นตอนติดตั้งไม่ยุ่งยากครับ เริ่มจากดาวน์โหลดไฟล์ แล้วก็ทำการรันสคริปต์ที่ติดตั้ง </p> <p>wget <a href="http://webiopi.googlecode.com/files/WebIOPi-0.5.3.tar.gz">http://webiopi.googlecode.com/files/WebIOPi-0.5.3.tar.gz</a> <br />tar xvzf WebIOPi-0.5.3.tar.gz <br />cd WebIOPi-0.5.3 <br />sudo ./setup.sh</p> <p>รอสักครู่ จากนั้นก็สั่งให้ webiopi ทำงานด้วยการรันเซอร์วิส </p> <p>sudo /etc/init.d/webiopi start</p> <p>หากต้องการสั่งให้เซอร์วิสหยุดทำงาน ก็ตรงกันข้ามครับ </p> <p>sudo /etc/init.d/webiopi stop</p> <p>แต่ถ้าถูกใจแอพพลิเคชั่นนี้ และอยากให้ทำงานทุกครั้งที่เปิดเครื่องแล้วหล่ะก็ ให้กำหนดเป็นค่า default ตอนเปิดเครื่องไปเลย ด้วยคำสั่ง </p> <p>sudo update-rc.d webiopi defaults</p> <p>หลังจากนั้น เปิด web browser ของเราขึ้นมา แล้วกรอก URL ไปที่ไอพีของ Raspberry Pi ครับโดยใส่ port 8000 เข้าไปด้วย </p> <p>เช่น ไอพีบอร์ด raspberry pi ของผมเป็น 192.168.2.105 จะได้ว่า  <a href="http://192.168.2.105:80000/webiopi/">http://192.168.2.105:80000/webiopi/</a> ครับ </p> <p>ทำการกรอก username / password ครับ ในที่นี้ถูกกำหนดเป็น webiopi รหัสผ่านก็ raspberry ครับ </p> <p>จะปรากฏหน้าเว็บ จากนั้น ลองกำหนดให้ GPIO ใดๆ ก็ได้เป็น OUT แล้วลองเอา LED ต่อที่ pin นั้นๆ จากนั้นกดเปลี่ยนสถานะ หากเป็น Hi จะเปลี่ยนสีเป็นสีเหลืองที่หน้าเว็บ ที่หลอด LED ก็ควรจะติดด้วย </p> <p><a href="http://lh4.ggpht.com/-mRtSAXVBjoE/UQkd96nnhWI/AAAAAAAAGn8/irDlviRNv1o/s1600-h/image%25255B4%25255D.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="WebIOPi REST framework" border="0" alt="WebIOPi control Raspberry pi 's GPIO" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0oQB_uNBxpcVQB4ZspYMnwRcS0VYTwgYcNhvaoZhmarDPElYVwh-BOxw6T11WRbnJR6BEHb6mIvsxOCVRE7aWItXdKac90gaTEqwINfETKQtuBGH9WNjvczOcwE9klrsWhxIX_YaMulY/?imgmax=800" width="573" height="403" /></a></p> <p>ทดลองเปิดหน้าเว็บจากคอมพิวเตอร์เครื่องอื่น หรือเปิด browser เพิ่มอีก และดูผลการเปลี่ยนแปลง เราจะเห็นว่าหน้าเว็บแสดงผลได้แทบจะทันทีทันใด ที่มีการเปลี่ยนแปลงที่ GPIO ครับ นั่นก็เป็นเพราะ REST framework นั่นเอง </p> <p>ลองติดตั้ง แล้วศึกษาตัวโปรเจคนี้ดูครับ รับรองได้ประโยชน์แน่นอน</p> <p align="right">แหล่งที่มา : <a title="http://code.google.com/p/webiopi/" href="http://code.google.com/p/webiopi/" rel="nofollow" target="_blank">http://code.google.com/p/webiopi/</a></p> Wisit.Phttp://www.blogger.com/profile/04747663677248244453noreply@blogger.com13tag:blogger.com,1999:blog-6157865551558252592.post-78438408355941165412013-01-19T23:21:00.001-08:002013-01-19T23:21:33.792-08:00Putty tip#1<div class="wlWriterHeaderFooter" style="float:none; margin:0px; padding:4px 0px 4px 0px;"><iframe src="http://www.facebook.com/widgets/like.php?href=http://raspberry-pi-th.blogspot.com/2013/01/putty-tip1.html" scrolling="no" frameborder="0" style="border:none; width:450px; height:80px"></iframe></div><p>เวลาผมใช้ คำสั่ง pstree หรือ tree บน putty terminal จะเจอปัญหาว่าไม่สามารถแสดงเส้นทาง โครงสร้างของไดเรกทอรีได้ วันนี้ก็เลยเอารูปการแก้ปัญหามาฝากครับ ลองไปปรับแต่งกันดู </p> <p><a href="http://lh3.ggpht.com/-Wa_JEyQkAVg/UPua8QaeXwI/AAAAAAAAGlI/sE8In38kHwg/s1600-h/putty%25255B4%25255D.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="putty" border="0" alt="putty" src="http://lh5.ggpht.com/-v0bQkTM8J2Q/UPua-PINrSI/AAAAAAAAGlQ/iQguTQzygd4/putty_thumb%25255B2%25255D.png?imgmax=800" width="589" height="398" /></a></p> <p>pstree คือ คำสั่งแสดงโครงสร้างของ process ที่ำกำลังทำงานอยู่ ณ ขณะนั้น ว่ามี process หลัก และ process ย่อย ซ้อนกันอยู่อย่างไร </p> <p>tree คือ คำสั่งแสดงโครงสร้างของไดเรกทอรี่ และ ไฟล์ที่ซ้อนกันอยู่ </p> <p align="right">เล็กๆ น้อยๆ สำหรับวันนี้ครับ มีความสุข เสาร์ อาทิตย์ นะครับ </p> Wisit.Phttp://www.blogger.com/profile/04747663677248244453noreply@blogger.com0tag:blogger.com,1999:blog-6157865551558252592.post-87976659718730998022013-01-19T04:22:00.001-08:002013-01-19T04:22:35.252-08:00Raspberry pi play music from radio online<div class="wlWriterHeaderFooter" style="float:none; margin:0px; padding:4px 0px 4px 0px;"><iframe src="http://www.facebook.com/widgets/like.php?href=http://raspberry-pi-th.blogspot.com/2013/01/raspberry-pi-play-music-from-radio.html" scrolling="no" frameborder="0" style="border:none; width:450px; height:80px"></iframe></div><p>ง่ายๆก่อนนอนวันนี้เรามาลองทำ internet radio ฟังกันจาก Raspberry Pi ของเราดีกว่า ทำเสร็จแล้วก็กล่อมเรานอนไปเลย <br />1. ติดตั้งโปรแกรม mpd&mpc ง่ายๆแค่พิมพ์ <br />sudo apt-get install mpd && sudo apt-get install mpc</p> <p>2. เปิดไฟล์ /etc/mpd.conf มาแก้ไขด้วยคำสั่ง <br />sudo nano /etc/mpd.conf</p> <p>3. เลื่อนแก้ไขดังนี้ <br />bind_to_address "localhost" <br />แก้เป็น <br />#bind_to_address "localhost"</p> <p>#mixer_type "software" <br />แก้เป็น <br />mixer_type "software"</p> <p>กด Ctrl+x แล้วตอบ Y ออกมา <br />ที่แก้ไปอันแรกคือให้เราสามารถ remote คุมจากอุปกรณ์อื่นได้เช่น iPhone,Android <br />บรรทัดที่สองคือให้เราสามารถควบคุมระดับเสียงได้</p> <p>4. เพื่อความชัวร์ว่าเสียงมันจะออกที่ช่อง audio พิมพ์ <br />sudo amixer cset numid=3 1 <br />อยากให้ไปดังที่ TV ผ่านสาย HDMI พิมพ์ <br />sudo amixer cset numid=3 0</p> <p>5. restart ทุกอย่างเพื่อ reload config ด้วยคำสั่ง <br />sudo service mpd restart</p> <p>6. add สถานีที่ต้องการลงไป ดังนี้ <br />mpc add <a href="http://205.164.62.11:5084/">http://205.164.62.11:5084/</a></p> <p>7. ลองสั่งเล่นเพลงด้วยคำสั่ง mpc play</p> <p>8. เพิ่มลดระดับเสียงได้คำสั่ง mpc volume 0-100</p> <p>9. อย่าลืมเสียบลำโพงนะครับ</p> <p>ราตรีสวัสดิ์ สำหรับสถานีที่ให้ไปเป็น Vocal jazz ที่แอดมินฟังนอนทุกคืนคลื่นนี้เพลงเค้าดีจริงๆ ใครอยากได้สถานีไหนลองมาโพสต์ขอได้ครับ</p> <p>mpc add <a href="http://203.150.224.142:8000">http://203.150.224.142:8000</a> <br />เอาคลื่นไทยมาฝากนะครับ <br />ถ้ามีสองสถานีแบบนี้ใช้คำสั่ง mpc next หรือ mpc prev เพื่อเลื่อนสถานีนะครับ</p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIhCnING7JK4rpmzj2_vEC3I5Q9ST4pmyZSCc0FCl6CfG1h8pXEmd4bgmPOyIqyn30SMLnlEmby1Z2L2YDS7VStuu5njXd_jd7xA66Y3Iz5A7a5hCePUWcPghtRMEQdfMCrm027glBpRY/s1600-h/radio23.jpg"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="raspberry pi play music from radio online" border="0" alt="raspberry pi play music from radio online" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSwOVvQg7C5tSRqzp_QKauc6hDI5x-hR4TWCn1vOhWK4S1MMjJ-ApPqlh_KmlTwgztZ8Opzk1AYdhdPMFLEUa5nsQ0d1rnyEgX2FFsmSN8Z1CbnmIY_clpM5cEnNjB3dyKvenniCoftho/?imgmax=800" width="539" height="484" /></a></p> <p align="right">บทความจากแอดมิน <a href="https://www.facebook.com/RaspberryPi66" rel="nofollow" target="_blank">Raspberry Pi 66 Club</a></p> Wisit.Phttp://www.blogger.com/profile/04747663677248244453noreply@blogger.com5tag:blogger.com,1999:blog-6157865551558252592.post-29267591221775765672013-01-13T02:52:00.001-08:002013-01-13T02:52:09.496-08:00Raspberry Pi : Getting started with pyfirmata<div class="wlWriterHeaderFooter" style="float:none; margin:0px; padding:4px 0px 4px 0px;"><iframe src="http://www.facebook.com/widgets/like.php?href=http://raspberry-pi-th.blogspot.com/2013/01/raspberry-pi-getting-started-with.html" scrolling="no" frameborder="0" style="border:none; width:450px; height:80px"></iframe></div><p>จากในครั้งก่อนๆ ถ้าจำได้ ที่ผมได้แนะนำเรื่องการใช้ Arduino มาเป็นแขนเป็นขาให้ Raspberry Pi (ย้อนกลับไปดู <a href="http://raspberry-pi-th.blogspot.com/2012/11/raspberry-pi-and-arduino-experiment.html)"><font color="#0000ff">http://raspberry-pi-th.blogspot.com/2012/11/raspberry-pi-and-arduino-experiment.html</font>)</a> ในตอนนั้น เราได้เขียนโปรแกรมติดต่อระหว่างบอร์ด Arduino และ บอร์ด Raspberry Pi โดยใช้ python-serial จาก Raspberry pi ติดต่อผ่าน uart protocal โดยให้บอร์ด Arduino ทำหน้าที่รอรับคำสั่งจาก Raspberry Pi เราจะพบว่า ค่อนข้างจะลำบากในแง่ของการพัฒนา แต่ถ้าหากใครที่มีความชำนาญแล้ว อาจจะชอบสไตล์นี้ก็ไม่ว่ากัน แต่ ถ้าหากจะมีไลบรารี่ที่สามารถอำนวยความสะดวกได้หล่ะ ก็น่าจะทำให้เราสามารถลดระยะเวลาในการพัฒนาโปรแกรมได้ไม่น้อย </p> <p>วันนี้ เราจะมาลองใช้ไลบรารีสำเร็จรูปที่ชื่อ pyfirmata ซึ่งจะต้องติดตั้งลงบน Raspberry Pi แทนการเขียนโค๊ดเพื่อติดต่อระหว่าง Raspberry Pi และ Arduino ผ่านทาง Serial Port </p> <p>Firmata คือ โปรแกรมที่ถูกออกแบบโปรโตคอลอย่างง่าย ที่ใช้สำหรับควบคุมขา PIN ต่างๆ บนบอร์ด Arduino โดยจะทำงานบนบอร์ด Arduino ซึ่งจะคอยทำงานรับส่งคำสั่ง ผ่านทาง Serial port </p> <p>pyfirmata คือ ไลบรารีสำเร็จรูปที่ถูกพัฒนาด้วยภาษาไพธอนให้ทำงานอยู่บน host ในที่นี้ เราจะให้มาทำงานบน Raspberry Pi คอยสั่งคำสั่งและรับค่าผ่าน Serial port เมื่อติดต่อกับ Arduino</p> <p>สิ่งจำเป็นที่เราต้องมี คือ <br />- สาย USB สำหรับต่อจากบอร์ด Arduino กับ บอร์ด Raspberry Pi <br />- บอร์ด Raspberry Pi ที่เชื่อมต่อกับอินเตอร์เนต เพื่อดาวน์โหลด ติดตั้ง package pyfirmata <br />- บอร์ด arduino รุ่นใดก็ได้ ในที่นี้ ผมใช้ Arduino Duemilanover w/ATmega328 </p> <p>อันดับแรกให้ทำการติดตั้ง <a href="https://bitbucket.org/tino/pyfirmata/overview" rel="nofollow" target="_blank"><font color="#0000ff">pyfirmata</font></a> ลงบนบอร์ด Raspberry pi แต่เนื่องจากา pyfirmata นั้น ต้องการ python-serial โมดูลทำงานร่วมด้วย หากใครยังไม่เคยติดตั้ง จะต้องทำการติดตั้ง python-serial ก่อน  (ดูการติดตั้ง python-serial <a href="http://raspberry-pi-th.blogspot.com/2012/10/how-to-communicate-raspberry-pi-s.html)"><font color="#0000ff">http://raspberry-pi-th.blogspot.com/2012/10/how-to-communicate-raspberry-pi-s.html</font>)</a>  และเนี่องจาก package pyfirmata ถูกเก็บไว้แบบ mecurial distributed source control เพราะฉะนั้นก่อนติดตั้ง เราจะต้องต้องติดตั้ง mecurial package ของ debian ซะก่อน ด้วยคำสั่ง </p> <p>sudo apt-get mercurial </p> <p><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="firmata source code control" border="0" alt="firmata source code control" src="http://lh5.ggpht.com/-RQ6WiqZETtY/UPKRsy3Lr4I/AAAAAAAAGg8/yGmJ6fTDx0o/image%25255B10%25255D.png?imgmax=800" width="244" height="238" /></p> <p>เมื่อ Raspberry Pi ของเรามี python-serial และ mecurial เรียบร้อยแล้ว จากนี้ เราก็จะทำการติดตั้ง pyfirmata ด้วยคำสั่ง </p> <p>hg clone <a href="https://bitbucket.org/tino/pyfirmata">https://bitbucket.org/tino/pyfirmata</a></p> <p>เราจะได้โฟวเดอร์ pyfirmat มา จากนั้น เข้าไปในโฟวเดอร์ดังกล่าว</p> <p>cd pyfirmata </p> <p> แล้วติดตั้ง</p> <p>sudo python setup.py install </p> <p>หากไม่มีอะไรผิดพลาด เราน่าจะเรียกโมดูลนี้ได้ โดยเมื่อเราเข้าไปใช้ใน python console น่าจะเห็น function ต่างๆ ใน pyfirmata </p> <p>sudo python <br />>>> import pyfirmata <br />>>> dir(pyfirmata) <br /><font color="#666666">['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'] <br /></font>>>></p> <p>แสดงว่าเราติดตั้ง pyfirmata สมบูรณ์แหละ ที่เหลือก็คือ ดูจาก tutorial และ exmaple การใช้งานของมัน </p> <p>กลับมาที่บอร์ด Arduino เราจำเป็นจะต้องมีโค๊ดที่ทำหน้าที่รับคำสั่งจาก pyfirmata ที่มีรูปแบบโปรโตคอลเฉพาะที่ตรงกัน เพื่อทำหน้าที่รับ ส่ง คำสั่ง ระหว่าง pyfirmata ที่รันอยู่บน Raspberry Pi และ firmata ที่รันอยู่บน Arduino ซึ่งในส่วนของ Arduino ได้มีตัวอย่างของ firmata รวบรวมมาพร้อมอยู่แล้ว กับ Arduio IDE เวอร์ชั่นใหม่ๆ  ให้เราต่อบอร์ด Arduino เข้ากับคอมพิวเตเอร์ของเรา แล้วทำการเลือกตัวอย่าง StandardFirmata จากเมนู File>>Examples>>Firmata จากนั้นทำการ  verify โค๊ดก่อน หากไม่มีอะไรผิดพลาดเกิดขึ้น ก็ให้เราทำการ upload เพื่อทำการ burn hex file ลงบนบอร์ด arduino </p> <p><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="burn firmata code into arduino" border="0" alt="burn firmata code into arduino" src="http://lh4.ggpht.com/-8ROsaOT8Dmg/UPKRuZY0ouI/AAAAAAAAGhE/1MiIW6unmdE/image%25255B9%25255D.png?imgmax=800" width="428" height="484" /></p> <p> </p> <p>กลับไปที่บอร์ด Raspberry Pi เราจะทำการสร้างไฟล์ทดสอบการทำงานด้วย python เพื่อทำการทดสอบ pyfirmata ว่าจะสามารถติดต่อกับบอร์ด arduino ได้หรือเปล่า โดยให้เราสร้างไฟล์ขึ้นมาทดสอบ โดยเรียกโปรแกรม nano เพื่อสร้างไฟล์ blink.py</p> <p><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="sample code usage pyfirmata" border="0" alt="sample code usage pyfirmata" src="http://lh4.ggpht.com/-x8lX1obUqrQ/UPKRv87K_dI/AAAAAAAAGhM/R99leaKe-U8/image%25255B8%25255D.png?imgmax=800" width="556" height="353" /></p> <p>ทำการบันทึก (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 ครั้ง เป็นไปตามโค๊ดที่เราเขียน </p> <p><a href="http://lh3.ggpht.com/-hBsXs3g4cEQ/UPKRytc-YuI/AAAAAAAAGhU/YHPYXrzujB4/s1600-h/_2013-01-12_18-55-20%25255B4%25255D.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="Raspbbery Pi with Arduino via pyfirmata" border="0" alt="Raspbbery Pi with Arduino via pyfirmata" src="http://lh3.ggpht.com/-WyR1zsJpqYw/UPKR0kv-T2I/AAAAAAAAGhc/UBoDG62Ttl0/_2013-01-12_18-55-20_thumb%25255B2%25255D.png?imgmax=800" width="584" height="324" /></a></p> <p>สรุปกันอีกครั้ง </p> <ol> <li>ติดตั้ง pyfirmata lib ลงบน raspberry pi </li> <li>โปรแกรม firmata standard ลงบนบอร์ด arduino </li> <li>เขียนโค๊ด blink.py ลงบน Raspberry pi </li> <li>ต่อสาย USB ระหว่างบอร์ด Raspberry Pi และบอร์ด Arduino</li> <li>ทดสอบโค๊ด และดูผลลัพธ์ที่ได้ </li> </ol> <p>ถ้าทำสำเร็จ เราจะพบว่า การติดต่อระหว่าง Raspberry Pi และ Arduino ไม่ใช่เรื่องยากอีกต่อไป นอกจากนี้ Arduino เอง ยังสามารถนำไปต่อกับ Sensor และ Control อะไรได้อีกมากมาย ซึ่งต่อไป จะได้นำเสนอโปรเจคที่นำ Arduino ไปต่อยอดให้ Raspberry Pi มีความาสามารถเพิ่มขึ้นได้อีกต่อไปครับ </p> <p align="right">ขอให้สนุกกับ Raspberry Pi และ Arduino ครับ</p> Wisit.Phttp://www.blogger.com/profile/04747663677248244453noreply@blogger.com0tag:blogger.com,1999:blog-6157865551558252592.post-49228647533948710262013-01-10T09:13:00.001-08:002013-01-12T03:44:30.851-08:00How to Install Arduino IDE on Debian<div class="wlWriterHeaderFooter" style="float:none; margin:0px; padding:4px 0px 4px 0px;"><iframe src="http://www.facebook.com/widgets/like.php?href=http://raspberry-pi-th.blogspot.com/2013/01/how-to-install-arduino-ide-on-debian.html" scrolling="no" frameborder="0" style="border:none; width:450px; height:80px"></iframe></div><p>หากเพือนๆ สนใจที่จะพัฒนางานทางด้านไมโครคอนโทรลเลอร์เช่น Arduino บน Debian แล้วหล่ะก็ มีสิ่งที่น่าสนใจ เล็กๆ น้อยๆ ที่ผมได้ทดลอง และหาข้อมูล จะได้นำมาเขียนบันทึกไว้บน Blog แห่งนี้ วิธีการก็คือ </p> <p>หลังจากที่เราได้เคยติดตั้ง <a href="http://raspberry-pi-th.blogspot.com/2012/11/how-to-install-debian-on-oracle-vm.html" target="_blank"><font color="#0000ff">Oracle VM VirtualBox และได้ติดตั้ง Debian</font></a> ไปแล้ว เมื่อสั่งให้ระบบปฏิบัติการณ์เริ่มทำงาน เราจะเข้าสู่โหมด XWindows จากนั้น ให้ Logon ด้วย user ที่เราได้กำหนดไว้ ในที่นี้ ผมได้ Logon เข้าด้วย user: pi ที่ผมได้กำหนดไว้ จากนั้น ทำการเปลี่ยนตัวเองเป็น root เพื่อที่จะติดตั้ง arduino ide </p> <p>su - <br />ใส่ password root ที่เราได้กำหนดไว้แล้ว <br />ต่อมาใช้คำสั่ง apt-get install arduino ตอบ y รอจนกว่าระบบติดตั้ง arduino เรียบร้อย </p> <p>หากใครสงสัยว่า arduio คืออะไร สามารถศึกษาเพิ่มเติมได้ที่นี่ <a href="http://www.123microcontroller.com/Basic-Microcontroller-Programming/Comparison-Arduino-Plateform-with-other-MCU" target="_blank"><font color="#0000ff">คลิก</font></a>   </p> <p>ทำการเสียบบอร์ด Arduino เข้ากับ PC หรือ  Notebook ของเรา แล้วทำการเลือกที่เมนูหน้าต่าง Oracle VM VirtualBox ไปที่ <br />Device->USB Device แล้วทำการเลือก FTD FT232R  ตามรูป (ซึ่งน่าจะเป็นอย่างนั้น สำหรับบอร์ด arduino) </p> <p>ที่หน้าต่าง console หากเราใช้คำสั่ง tail -f /var/log/message (สำหรับ root) เราจะเห็นข้อความสำหรับเจ้า FTDI USB Serial Device...... ttyUSB0 ด้วยเช่นกัน </p> <p><a href="http://lh4.ggpht.com/-zRz6HiNTd84/UO72dlYXXCI/AAAAAAAAGfQ/i8imwIh88EI/s1600-h/image%25255B14%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="USB to Serial Adapter on Debian" border="0" alt="USB to Serial Adapter on Debian" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1d1-icnGm36suttmkA66zgVO7oN034OfOQDQOaHTkE0xVgbWxjk4Spgq-jUoe0-QdSzhN-mitLkMncSM1EDcIMouByKKa6QuO6DON0VFh_iBB5ubIFriDERK1OH6BOjAhpovhi9zlA9I/?imgmax=800" width="586" height="356" /></a></p> <p>ทำการเช็คที่ ls -l /dev/ttyUSB0 จะเห็นไฟล์นี้ เกิดขึ้นเช่นกันที่ folder /dev/ <br />crw-rw---- 1 root dialout 188, 0 Jan 10 23:11 /dev/ttyUSB0</p> <p><font color="#ff0000"><u>ปัญหาของเจ้า arduino IDE มันอยู่ตรงนี้ครับ</u></font> คือหลังจากที่เราติดตั้ง arduino IDE เรียบร้อยแล้ว เราจะยัง<u>ไม่</u>สามารถที่เลือกที่เมนู IDE <br />tool->Serial Port ได้ (ไม่เชื่อลองเปิด IDE ขึ้นมา ) เราจะไม่สามารถเลือก Serial port ที่จะติดต่อกับบอร์ด arduino ได้ครับ ถึงแม้ว่า Debian จะมองเห็น USB ที่ต่อเข้ามาแล้วก็ตาม<a href="http://lh3.ggpht.com/-CjDRFAA4oDQ/UO72hR8nqUI/AAAAAAAAGfg/Pb7_KfbSm2U/s1600-h/image%25255B13%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Arduino IDE on Debian" border="0" alt="Arduino IDE on Debian" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5pP7kokc3O10K9TBRFQfPZuDiYS2db4N7P99rcsnKWTl9LQY23i_lUc2_Vdu0NDNFDI7zjfj7AKlNt1vFYjI9bh1Ewa5cM_cjlasFUytbI2TFXrO6kTOMWmfLgux6k0v-fS9DPXPRP6w/?imgmax=800" width="347" height="297" /></a></p> <p>เนื่องจากว่า ตอนนี้ เราเองเป็น user: pi แต่เจ้า ttyUSB0 นั่นอยู่ในกรุ๊บ dialout ครับ </p> <p>crw-rw---- 1 root <font style="background-color: #ffff00">dialout</font> 188, 0 Jan 10 23:11 /dev/ttyUSB0  (owner เป็น root แต่ group เป็นของ dialout ครับ )  </p> <p>วิธีแก้ไข ก็คือ ทำให้ pi นั้นสามารถเข้าใช้ group ของ dialout ได้ ด้วยคำสั่ง </p> <p>root@raspberrypi:~#usermod -a -G dialout pi</p> <p>หากเราใช้คำสั่ง pi@raspberrypi:~$ groups อีกครั้ง เราก็ยังพบว่า pi ยังไม่มีสิทธิใน dialout เหมือนเดิม อันนี้ ไม่ต้องตกใจครับ ให้เรา Logout แล้ว  Logon มาใหม่ครับ แล้วลองเช็คอีกที จะพบว่า </p> <p>pi@raspberrypi:~$ groups <br />pi <font color="#ff0000">dialout</font> cdrom floppy audio dip video plugdev netdev</p> <p>มองเห็น dialout เรียบร้อยแล้ว ทดลองเปิด arduino ide อีกครั้ง ก็จะพบว่าที่เมนู tool->Serial Port สามารถเลือก /dev/ttyUSB0 ได้แล้วครับ <br /></p> <p><a href="http://lh6.ggpht.com/-8tEUw3oDnL8/UO72kXeqg4I/AAAAAAAAGfw/VWdgpdnzP6I/s1600-h/image%25255B10%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Serial Port on Arduino IDE (Linux Version)" border="0" alt="Serial Port on Arduino IDE (Linux Version)" src="http://lh3.ggpht.com/-HTU7Or8CmX0/UO72l_NhZ6I/AAAAAAAAGf4/fOs3JE2xqxA/image_thumb%25255B4%25255D.png?imgmax=800" width="405" height="484" /></a></p> <p>ลองเลือกโค๊ดตัวอย่าง แล้วทำการ upload โค๊ดตัวอย่างที่ผ่านการ build แล้ว ใส่ไปที่บอร์ด arduino ของเราครับ ซึ่งน่าจะทำงานได้ตามปกติ จากนี้ไปเราก็สามารถที่จะพัฒนางาน arduino บน Debian ได้แล้วครับ ซึ่งสามารถนำหลักการนี้ไปใช้บน Raspian ของ Raspberry Pi ได้เช่นกันครับ ซึ่งต่อไป ผมอาจจะนำเอา piFirmata มาใช้ในการพัฒนา Raspberry Pi กับ Arduino ต่อไปครับ (คิดไว้ก่อนเฉยๆ ไม่รู้จะว่างหรือเปล่านะ :P ) </p> <p>ปล. ผมอาาจะอธิบายขั้นตอนการ Build / Upload Code สำหรับ Arduino เร็วไป แต่คิดว่า เพื่อน น่าจะหาข้อมูลอ่านได้ไม่ยาก หากสงสัยขั้นตอนไหนหน่ะครับ ซึ่งทั่วๆไป วิธีการก็จะคล้ายๆกัน </p> Wisit.Phttp://www.blogger.com/profile/04747663677248244453noreply@blogger.com0tag:blogger.com,1999:blog-6157865551558252592.post-30633209604247896192012-12-27T21:55:00.001-08:002012-12-27T21:55:32.318-08:00THE DEBIAN ADMINISTRATOR'S HANDBOOK<div class="wlWriterHeaderFooter" style="float:none; margin:0px; padding:4px 0px 4px 0px;"><iframe src="http://www.facebook.com/widgets/like.php?href=http://raspberry-pi-th.blogspot.com/2012/12/the-debian-administrator-handbook.html" scrolling="no" frameborder="0" style="border:none; width:450px; height:80px"></iframe></div><p><img style="border-bottom: 0px; border-left: 0px; margin: 0px 5px 5px 0px; display: inline; border-top: 0px; border-right: 0px" title="THE DEBIAN ADMINISTRATOR'S HANDBOOK" border="0" alt="THE DEBIAN ADMINISTRATOR'S HANDBOOK" align="left" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjntagn2ugdbR6Uei5K076xLcc0G4hojeRrLPmo8S6EZWdRtQrvaC9JfkB8CrEASsiHtbOY6Bmsfx8qX4PcVuU2I_kk0RlFfFcq2vCRGNYh0SKLRWobRukBpc9TfV1uRMM8kuDVuMJhn-Q/?imgmax=800" width="276" height="357" /></p> <p>    อย่างที่เราทราบกันดีอยู่แล้วว่า เจ้าระบบปฏิบัติการ Raspbian นั้น แท้จริงแล้วก็คือ Debian ที่ถูกตัดแต่งพันธุกรรมให้เหมาะกับฮาร์ดแวร์บนบอร์ด Raspberry Pi นั่นเอง เพราะฉะนั้นแล้ว ความเข้าใจในระบบปฏิบัติการ Debian ย่อมนำไปสู่การปรับแต่งค่า และการใช้งานเจ้า Raspian ด้วยเช่นกัน </p> <p>     ผมจะยกตัวอย่างให้ฟัง เดิมทีผมมักจะใช้ CentOS เมื่อเวลาที่จะต้องกำหนดค่าต่างๆ ให้กับ Apache นั้นเราต้องไปกำหนดที่ค่า httpd.conf ซึ่งอยู่ใน path  /etc/httpd/conf/httpd.conf แต่สำหรับเจ้า Debian แล้ว มันไม่ได้เก็บค่าไว้ตรงนั้น มันดันไปเก็บค่าไว้ที่ /etc/apache2/sites-enabled/000-default และบางค่า ก็ไปเก็บไว้ที่ /etc/apache2/apache2.conf นั่นหมายความว่า ไม่ใช่ว่าทุกๆ OS จะต้องปฏิบัติตามเหมือนกันหมด แต่ก็ใช่ว่าจะแตกต่างกันสิ้นเชิงเลยเสียทีเดียว </p> <p>     ในส่วนของการปรับแต่งค่าที่เกี่ยวข้องกับระบบ network นั้น จริงๆ แล้ว เรากำลังทำหน้าที่เป็น administrator อยู่นั่นเอง วันนี้ ผมมีหนังสือแนะนำให้ไปอ่านกันนะครับ สำหรับใครที่กำลังเล่นอยู่กับ Raspberry Pi ที่ใช้ Raspian เป็น OS และกำลังเจอปัญหาอย่างที่ผมได้เกริ่นไว้ข้างต้น แนะนำให้มาอ่านเล่มนี้ครับ จะได้ไม่เจอปัญหาเหมือนผม ;P </p> <p><strong>THE DEBIAN ADMINISTRATOR'S HANDBOOK</strong> มีไฟล์ให้เราเลือกไปอ่านได้ 3 ประเภทไฟล์ครับ ต้องการรูปแบบไหน ก็เข้าไปเลือกดาวน์โหลดกันได้เลยครับ ..... <a href="http://debian-handbook.info/get/" rel="nofollow" target="_blank">คลิก</a></p> Wisit.Phttp://www.blogger.com/profile/04747663677248244453noreply@blogger.com1tag:blogger.com,1999:blog-6157865551558252592.post-91444533569835565472012-12-24T07:56:00.001-08:002012-12-24T08:10:29.528-08:00How to find Raspbberry Pi’s IP Address when yon don’t know it.<div class="wlWriterHeaderFooter" style="float:none; margin:0px; padding:4px 0px 4px 0px;"><iframe src="http://www.facebook.com/widgets/like.php?href=http://raspberry-pi-th.blogspot.com/2012/12/how-to-find-raspbberry-pis-ip-address.html" scrolling="no" frameborder="0" style="border:none; width:450px; height:80px"></iframe></div><p>      โดยปกติแล้ว หลังจากที่เราได้บอร์ด Raspbbery Pi มาแล้ว เมื่อทำการติดตั้ง Raspian ลงบน SD-Card เรียบร้อยแล้ว ในเวอร์ชั่นหลังๆ ของ Raspian <br />เค้าจะเปิด SSH ไว้ให้เรียบร้อยแล้ว หน้าที่ของเราก็คือ หาช่อง PORT Network จาก Router ของเราเสียบเข้าไปที่ Port Network ที่บอร์ด Raspberry Pi เมื่อจ่ายไฟเข้าบอร์ดเรียบร้อยแล้ว หากไม่มีอะไรผิดพลาด เจ้าบอร์ด Raspberry Pi ก็อยู่ในวง LAN เดียวกันกับเครื่องคอมพิวเตอร์ ของเราแล้ว (ด้วยการจ่าย IP Address จาก Router) หน้าที่ของเราก็คือ ทำการ Login แล้วทำการติดตั้ง Package อืนๆ ที่ต้องการ </p> <p>     ปัญหาจะเกิดขึ้นตอนนี้ ก็คือ อย่างที่เรารู้อยู่แล้วว่าช่อง Display Output ของ Raspberry Pi มีให้เลือก คือ AV out (default) และ ช่อง HDMI (ซึ่งต้องเข้าไปเซตค่าก่อนใช้งาน) แล้วถ้าเราไม่สามารถหา TV หรือ Monitor ที่มีช่อง AV IN มาต่อกับบอร์ด Raspberry Pi หล่ะ เราจะเริ่มต้นใช้งานบอร์ดได้อย่างไร ? </p> <p>     ด้วยความรู้ เรื่อง Network และ Linux ที่มีอยู่นิดหน่อย เราน่าจะใช้โปรแกรม nmap ในการทำการ scan หา Port 22 ซึ่งเป็น  Port สำหรับ SSH ที่ Raspberry Pi ถูกเปิดใช้งาน และเมื่อ Raspberry Pi ถูกต่ออยู่ในวง LAN เดียวกันเครื่องคอมพิวเตอร์ของเราแล้ว ก็น่าจะไม่ใช่เรื่องยาก ที่จะหา IP Address ของ Raspberry Pi เพื่อที่เราจะได้ทำการ SSH เพื่อเข้าใช้งาน Raspbbery Pi ต่อไป </p> <p>เอาหล่ะ เราก็โหลดโปรแกรม nmap มาใช้กันเลย ซึ่งสามารถเข้าไปโหลดเวอร์ชั่นสำหรับ windows ได้จากเว็บ <a href="http://nmap.org/download.html#windows" rel="nofollow" target="_blank"><font color="#0000ff">http://nmap.org/download.html#windows</font></a> แต่ วันนี้ ผมไม่ได้มาแนะนำสำหรับเวอร์ชั่น windows ครับ ผมจะแนะนำเวอร์ชั่นของ Debian ;P </p> <p>ก่อนหน้านี้ ผมได้แนะนำให้เพื่อน<a href="http://raspberry-pi-th.blogspot.com/2012/11/how-to-install-debian-on-oracle-vm.html" target="_blank"><font color="#0000ff">ลองติดตั้ง VirtualBox</font></a><font color="#ff0000"></font> เพื่อจำลองพื้นที่บน Windows ให้สามารถติดตั้ง Debian ได้ ฉะนั้น เราก็มาลองกันเลย ว่าเราจะเอา Debian บน VirtualBox มาใช้งานได้อย่างไร </p> <p>เปิด VirtualBox ขึ้นมาครับ แต่ก่อนที่เราจะเริ่ม Start Debian ให้เราทำการตั้งค่า Network ให้เป็น Bridged Adapter กันก่อน เพื่อให้เจ้า Debian ของเราต่อออกอินเตอร์เนต เพราะเราต้องไปโหลด package nmap มาก่อน  เมื่อตั้งค่าเรียบร้อยให้ทำการ Start Debian ขึ้นมาเลยครับ </p> <p><a href="http://lh3.ggpht.com/-jOwWOPXRRs4/UNh6_BZG3LI/AAAAAAAAGTs/SBqurIG8bpI/s1600-h/image%25255B4%25255D.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Debian on VirtualBox " border="0" alt="Debian on VirtualBox " src="http://lh4.ggpht.com/-X0EVR3D34wM/UNh7Ah1V4yI/AAAAAAAAGT0/sIC1XvX_-WU/image_thumb%25255B2%25255D.png?imgmax=800" width="577" height="431" /></a></p> <p>Login เข้าสู่ XWindows ตามปกติ เมื่อเรียบร้อยแล้ว ให้เปิด Terminal ขึ้นมาสักตัว จากเมนู  จากนั้นเปลี่ยนตัวเองเป็น root ซะ แล้วทำการโหลด nmap package ด้วยคำสั่ง  apt-get install nmap </p> <p> <br />เรียกใช้คำสั่ง nmap เพื่อให้ทำการแสดงหาเครื่องในเครือข่าย ที่เปิด port 22 พร้อมทั้งให้แสดง OS ที่ติดตั้งอยู่ด้วย โดยผมให้เริ่มทำการ scan ตั้งแต่ ip address 192.168.2.100 ถึง 192.168.2.255  (เพราะผมทราบอยู่ก่อนหน้าแล้วว่า router ผมเริ่มจ่าย IP อยู่ใน  range นี้) ด้วยคำสั่ง   nmap –sV –p 22 192.168.2.100-255 <br />รอสักครู่ จะปรากฏข้อความรายงานผล  </p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTq-StRMIhAnPrMhJLqbdUA1h1ARZ-L34BP2Ewkc9_Xnyb0gN92fnC-nMctumIwxRsR_N2eZoLGIZPD2KZT1hYhQuYk4VglaoaBImikpof_5VpXN_kqSSzGcE8AZp5dMoZyIWA9H7xV9Q/s1600-h/image%25255B9%25255D.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="nmap result" border="0" alt="nmap result" src="http://lh3.ggpht.com/-0cM_L8jC9c0/UNh7D-1HVuI/AAAAAAAAGUE/XNM95iQu-W8/image_thumb%25255B5%25255D.png?imgmax=800" width="582" height="426" /></a></p> <p>ในที่นี้ ผมได้รับรายงาน มา  2 IP Address ที่เปิด Port 22 อยู่ในขณะนี้ แต่เนื่องจากเจ้า Debian virtual ของผมเป็นหมายเลขไอพี 192.168.2.109 อยู่แล้ว แสดงว่า เป้าหมายบอร์ด Raspberry Pi ที่เรากำลังหาอยู่นั้น เป็นหมายเลขไอพี 192.168.2.105 อย่างแน่นอน เราลอง เปิด putty ขึ้นมา เพื่อทำการเชื่อมต่อกับ SSH ที่ ไอพี 192.168.2.105  ผลปรากฏว่า ใช่เลย เราสามารถ login เข้าสู่ SSH ด้วย user pi แสดงว่า เราทำถูกแหละ </p> <div style="padding-bottom: 0px; margin: 0px auto; padding-left: 0px; width: 448px; padding-right: 0px; display: block; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:b73e58c9-2f2e-4c3a-9912-5aadbcb1b82f" class="wlWriterSmartContent"><div id="4e5da191-d738-4405-b71c-db3f8ae88ee8" style="margin: 0px; padding: 0px; display: inline;"><div><a href="http://www.youtube.com/watch?v=t8m5nIlv_fo" target="_new"><img src="http://lh4.ggpht.com/-HIle2-_ZeDI/UNh7FHSjZeI/AAAAAAAAGWc/F_vnh4pIICA/video7e0f167c2bd3%25255B29%25255D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('4e5da191-d738-4405-b71c-db3f8ae88ee8'); downlevelDiv.innerHTML = "<div><object width=\"448\" height=\"252\"><param name=\"movie\" value=\"http://www.youtube.com/v/t8m5nIlv_fo?hl=en&hd=1\"><\/param><embed src=\"http://www.youtube.com/v/t8m5nIlv_fo?hl=en&hd=1\" type=\"application/x-shockwave-flash\" width=\"448\" height=\"252\"><\/embed><\/object><\/div>";" alt=""></a></div></div></div> <p>     นั่นก็เป็นแนวทางการใช้ nmap และการนำ Debian virtual มาช่วยในการทำงานของเรากับงาน Linux Embedded พวกนี้  น่าจะได้แนวทางไปประยุกต์ต่อไปนะครับ  ขอเสริมนิดหนึ่ง สำหรับโปรแกรม nmap เป็นโปรแกรมที่มีประโยชน์มาก สำหรับใครสนใจสามารถศึกษาได้เพิ่มเติม ผมรับรองว่ามีประโยชน์มาก โดยเฉพาะ linux network admin ครับ จำเป็นต้องใช้ และใช้บ่อยมาก  </p> <p>    สุดท้าย ผมขอนำฉากๆ หนึ่งในหนังเรื่อง The matrix ครับ ในฉากนี้ ทรินิตี้ กำลังใช้คำสั่ง nmap ในการหา port ที่เปิดอยู่ แล้ว ทำการ hack เข้าไป เพื่อสั่งปิดแหล่งจ่ายไฟฟ้าทั้งหมดของโลก matrix หนังเรื่องนี้ สาระเยอะจริงๆ ถ้าตามเก็บรายละเอียดทั้งหมด จะพบว่า เราได้อะไรมากกว่า ฉากบู๊ที่ตื่นเต้น อีก</p> <p><a href="http://lh4.ggpht.com/-PjJ4S-w_VEs/UNh7GU62PFI/AAAAAAAAGUU/u83zmY3mgzc/s1600-h/matrix-poster-jsolomon-small%25255B4%25255D.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="trinity uses nmap, shouldn't you?" border="0" alt="trinity uses nmap, shouldn't you?" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirwRuqqI-xV9L5L-G05nUACapa918-na0qxMf15aRXFvFIdBUGvjPjCCsXkGUDtrppZId2-XGvYaSFizP9VcTtvtmbH59cdnxZo5iCjPx8MFzwgHbyAXlWM6GgklkGL7dMqnmLfmSx5C4/?imgmax=800" width="501" height="772" /></a></p> Wisit.Phttp://www.blogger.com/profile/04747663677248244453noreply@blogger.com0