มาเล่น Raspberry Pi กับ DS1820 กัน

ครั้งที่แล้วเราใช้ Raspberry Pi เชื่อมต่อกับ Sensor วัดอุณหภูมิ DHT22 ครั้งนี้ลองมาใช้ 1 Wire Temperature Sensor อย่าง DS1820 บ้าง Sensor ตัวนี้มี 3 ขาหน้าตาคล้ายกับ TM/LM35 จ่ายไฟ 3.0 – 5.5V อ่านข้อมูลจากขาที่ 2 คล้ายกัน แต่ข้อมูลจะส่งออกมาเป็น digital สามารถต่อพ่วงใช้งานร่วมกันหลายตัวแบบ parallel ได้ ใครสนใจในรายละเอียดของ DS1820 ก็สามารถ ใน Raspberry Pi เราสามารถใช้ Kernel Module ชื่อ w1-gpio และ w1-therm ในการเชื่อมต่อกับ DS1820 ได้โดยตรงก่อนอื่นมาต่อวงจรกันก่อน

Continue reading มาเล่น Raspberry Pi กับ DS1820 กัน

เขียนเกม TapTapTap และประสบการณ์ Google Play Game Services

กลับมาเขียน Mobile App อีกรอบ ก่อนหน้านี้โดนลากไปเรียน Cloud Specialist ก็เลยต้องกลับไปดู Cloud เกือบ 1 ปีเหมือนย้อนอดีตเลย เรียน Cloud Specialist จบแล้วก็ได้เวลากลับมาเขียน Mobile App ล่ะครับ ครั้งนี้ตั้งใจว่าจะลองอะไรที่ยังไม่ได้ลอง เพราะหลุดวงโคจรไปเกือบ 2 ปีเลย T_T ถ้ายังจำกันได้ ผมเคยพยายามเขียนเกมส์ง่ายๆ ได้ไอเดียจากคุณธีระเรื่องเกมส์บวกเลข ผ่านไปเกือบ 2 ปีกลับมาเขียนเกมส์ใหม่ ที่อยากเขียนเกมเพราะอยากรู้เรื่อง Google Play Game Service ครับ 🙂
ผมไม่มีไอเดียเรื่องเกมส์เพราะไม่ค่อยได้เล่นเกมส์ แต่ได้แนวคิดดีๆ จาก Ake Exorcist ที่เอา Micro Controller ควบคุม Mouse ให้เล่นเกมส์ในเว็บไซต์แบบอัตโนมัติ เกมที่เล่นเป็นเกมส์ง่ายๆ กติกาคือให้เลือกสีอ่อนให้ถูกมากที่สุดในเวลาที่กำหนดไว้ ผมว่าเป็นเกมส์ที่ไอเดียดีมาก เล่นได้เรื่อยๆ สนุกดีครับ พอได้แนวคิดแล้วก็ดองเอาไว้ใน Any.Do เกือบ 1 เดือนถึงจะได้มานั่งเขียน T_T Google Play Game Services ถูกผนวกกับ Google Play Service มาเรียบร้อยแล้วไม่ต้องกังวลว่า Android เวอร์ชั่นเก่า/ใหม่จะไม่มี Google Play Service API ครับเพราะมันจะถูกอัพเดทให้อัตโนมัติ ตัดปัญหาเรื่องนี้ไปได้เลย สำหรับแหล่งเรียนรู้ก็คงไม่พ้นเว็บ Android Developer ซึ่งข้อมูลใน Google Play Game Services บนเว็บให้ข้อมูลได้ดีมาก และตามสไตล์ของ Google คือ อยากเรียนรู้แนะนำให้ดาวน์โหลดโค้ดตัวอย่าง อ่านตาม document แล้วลองทำตามไปเรื่อยๆ ก็เข้าใจได้เร็วขึ้น
การใช้งาน Google Play Game Services ต้องไปสร้าง Game Service ในหน้า Developer Console ก่อน เพื่อเป็น Service Endpoint ให้กับ App ของเรา

Continue reading เขียนเกม TapTapTap และประสบการณ์ Google Play Game Services

ชีวิต Linux Admin บนโลกของ systemd ตอนที่ 2

คราวที่แล้ว blog เรื่อง systemd เกี่ยวกับการใช้งานเบื้องต้นไป คิดว่าหลายท่านอาจจะเริ่มใช้งานกันได้แล้ว ปัญหาของ systemd ยังไม่จบแค่นั้น สำหรับท่านที่เขียน init script สำหรับ start, stop, restart service เอง แล้วพยายามจะใช้ init script เดิมปัญหาเกิดขึ้นทันที อันนี้ซวยสุด เพราะผมเองก็เขียน init script เหมือนกัน T_T ครั้งนี้ก็เลยมา blog เรื่อง unit file กันสักหน่อย เอ่อ…ถ้าหักดิบใช้ CoreOS ไปเลยทุกอย่างจะจบ โดนบังคับโดยบริยาย ไม่มีอะไรให้ใช้นอกจาก systemd ไม่มี unit file ก็ต้องเขียนผ่าน cloud init เอง เรียกได้ว่านอนหลับฝันเป็น systemd เลยทีเดียว ครั้งที่แล้วได้ลองจัดการ service ผ่าน systemd โดยใช้ systemctl ไปบ้างแล้ว ครั้งนี้ก็ต้องเขียน unit file แล้วล่ะครับ
ขอยกตัวอย่าง node.js ก็แล้วกันง่ายดี node.js ทำงานเป็น httpd service ได้ระบุ port ผ่านไฟล์ config ซึ่งเราก็จะไม่แก้ไขเหมือนเดิม ใช้ port 3000 ของที่มีมานั่นแหละ 🙂 มาสร้าง project กันก่อน ถ้ามี node.js และ express generator ก็สร้างตัวอย่างง่ายๆ ขึ้นมาได้เลย
Continue reading ชีวิต Linux Admin บนโลกของ systemd ตอนที่ 2

ชีวิต Linux Admin บนโลกของ systemd ตอนที่ 1

ผมว่าหลายคนที่จับ RHEL 7 หรือ CentOS 7 โดยที่ไม่ได้ใช้ Fedora 20 และไม่ได้เป็นสาวก Fedora มาก่อนจะไม่ทราบว่าอีก release ถัดไปของ RHEL, CentOS, Scientifix Linux จะเจออะไรใหม่บ้าง เพราะของเล่นใหม่ๆ จะไปโผล่ใน Fedora ก่อนอย่างน้อย 2 ปี จึงจะย้ายเข้ามาใน RHEL จากนั้นถ่ายทอดไปยัง CentOS, Scientifix Linux และ Linux Distribution ที่พัฒนาต่อจาก RHEL หรือ CentOS ตามลำดับ การเปลี่ยนแปลงอย่างสายฟ้าแลบใน RHEL 7 ไม่ได้เกิดอย่างสายฟ้าแลบหรอกครับ เขาใช้กันมานานแล้ว สำหรับการเปลี่ยนแปลงที่รอมานาน คือ systemd ที่มาสดใหม่, Docker ที่คุม security ด้วย SELinux ทำให้ เรื่อง security บน Docker ที่หลายคนถากถางกันมาเกือบ 2 ปีนี้หยุดได้แล้ว เพราะนอกจากจะคุม syscall ได้แล้วยังคุมในระดับ SELinux ด้วย ส่วน feature อื่นๆ ไม่ค่อยได้สนใจมากครับ
การมาของ systemd เปลี่ยนวิธีการทำงานของ Linux Admin ไปโดยสิ้นเชิงเพราะ systemd มาจัดการ service และ run level ในระบบปฏิบัติการ คุณหนีมันไม่พ้น ก็ต้องมาเรียนกันใหม่ อ้อ init script ที่เรียนกันมาก็เปลี่ยนใหม่ด้วย เอาล่ะการที่จะเข้าใจ systemd ได้เร็วคือการหัดใช้งานมันครับ เรามาลองจัดการ service บน systemd คำสั่งที่เราใช้งานคือ systemctl
ลองใช้คำสั่ง systemctl กันดูครับ
systemctl
เราจะพบว่า systemctl จะแสดงรายการทุกอย่างที่ systemd ควบคุมได้ ทั้ง service, timer, mount, target, automount เยอะมาก

Continue reading ชีวิต Linux Admin บนโลกของ systemd ตอนที่ 1

เปลี่ยน hostname บน CentOS 7 และ RHEL 7 ด้วย hostnamectl

มีเรื่องตลกที่เกิดขึ้นกับตัวผมเองในช่วงที่ CentOS 7 ออกมาใหม่ๆ คือการเปลี่ยน hostname เนื่องจากว่าเคยชินกับการเปลี่ยนชื่อ host ก็ชอบไปเปลี่ยนที่ /etc/hostname แต่ใน CentOS 7 และ RHEL 7 ไม่ใช่แบบนั้น เค้ามีวิธีการเปลี่ยน hostname ได้น่ารักกว่า โดยการใช้คำสั่ง hostnamectl การใช้งานคำสั่งนี้ก็ง่ายมาก ถ้าต้องการดู hostname ก็ใช้คำสั่ง hostnamectl หรือ hostnamectl status ดังนี้
hostnamectl
จะได้ผลลัพท์ดังภาพ

Continue reading เปลี่ยน hostname บน CentOS 7 และ RHEL 7 ด้วย hostnamectl

มาเขียน REST Client บน Raspberry Pi กัน

ครั้งที่แล้วพาเล่น Digital Temperature Sensor DHT22 กับ Raspberry Pi เราสามารถอ่านค่า Temperature และ Humidity ออกมาได้ แต่ถ้าจะให้สนุกต้องเก็บข้อมูลและเอาไปใช้งานต่อได้ซึ่งก็มีอยู่หลายวิธี เช่น เก็บข้อมูลลงฐานข้อมูล เก็บข้อมูลลงไฟล์ เป็นต้น เนื่องจากเคย blog เรื่อง Xively กับ Arduino ไปแล้ว ครั้งนี้ขอไม่ blog เรื่องนี้กับ Raspberry Pi ก็แล้วกันครับ แต่จะขอให้ REST API ที่สร้างจาก StrongLoop แทนที่ blog ไปครั้งที่แล้ว ลองไปหาอ่านกันได้

REST Client บน PyPi ไม่ใช่เรื่องยาก ขึ้นอยู่กับว่าเราเลือกที่จะใช้ Python Module ไหนมากกว่า ซึ่งก็มีอยู่หลายตัวให้เลือกใช้ ดังนี้

Continue reading มาเขียน REST Client บน Raspberry Pi กัน

พัฒนา REST API แบบรวดเร็วด้วย StrongLoop

มิตรสหายท่านนึงแนะนำ StrongLoop มาให้เล่น เพราะเห็นทำงานซ้ำซากอย่างการเขียน RESI API บน Node.JS เป็นงานที่น่าเบื่อ ยิ่งทำบ่อยๆ อยู่แล้วก็ยิ่งจะต้องมีเครื่องมือเพื่อลดขั้นตอนการทำซ้ำซ้อนและข้ามไปทำในส่วนที่ต้องทำจริงๆ ได้เลย ถ้าใช้ Router ใน Express JS แล้วมาเขียนโค้ดในแต่ละ HTTP Request เอาเอง จะเข้าใจดีว่าเสียเวลาทำไปทำไม Strong Loop ออกแบบมาเพื่อลดขั้นตอนเหล่านี้ นอกจากขึ้นโครง REST API ได้เร็วแล้วยังมีเครื่องมือช่วยในการจัดการ Data Source ที่ REST API ของเราจะเชื่อมต่อไปด้วย เช่น Database Server, REST Server อื่น หรือแม่กระทั่งการทดสอบง่ายผ่าน DB Memory โดยไม่ต้องเชื่อมต่อกับ Data Source จริงๆ และเครื่องมือช่วยให้ชีวิตคุณสะดวกสบายมากขึ้นอีกมากมาย ไม่ว่าจะเป็น explorer, monitor, deploy, mobile service api และอื่นๆ อีกมากมาย สนใจรายละเอียดเพิ่มเติมก็เข้าไปดูกันที่เว็บ StrongLoop กันได้
เพื่อความเข้าใจมาทดลองกันเลย การติดตั้งและใช้งาน StrongLoop ต้องติดตั้ง Node.JS ให้เรียบร้อยก่อน จากนั้นก็มาติดตั้ง StrongLoop โดยใช้ Node Package Manager กันได้เลยดังนี้
sudo npm install -g strongloop
เท่านี้ก็เสร็จเรียบร้อย ใช้คำสั่ง slc เพื่อสร้าง REST API กันดังนี้
mkdir loopback-example
cd loopback-example
slc loopback
รอจนกระทั่งดาวน์โหลด module ที่ต้องใช้จนเสร็จ
Continue reading พัฒนา REST API แบบรวดเร็วด้วย StrongLoop

มาเล่น ADB Over Network กัน

Android 4.3+ มีความสามารถด้าน Debugging เพิ่มขึ้นมาคือ ADB Over Network หรือเรียกง่ายๆ ว่า Wifi Debugging หลักการคือคุณสามารถใช้ ADB ได้ทั้งแบบมีสายและไร้สาย ถ้ามี USB Hub เยอะหน่อยก็จะสะดวก แต่ถ้าไม่มีก็สามารถ Debug ผ่าน Wifi ได้ วิธีการง่ายๆ มีดังนี้
อันดับแรกต้องอยู่ในเครือข่ายเดียวกันเสียก่อน ดู IP Address อยู่ในวงเดียวกัน


เสียบสาย USB ที่มือถือเปิด terminal แล้วสั่ง
adb tcpip 5555
เอาสาย USB ออก ที่มือถือเปิดไปที่ Setting > Developer Options เลือก ADB Over Network ดู IP Address และ Port

สั่ง adb connect มาที่มือถือตาม IP Address และ Port ที่กำหนด
adb connect 192.168.88.248:5555
สั่ง adb devices จะพบมือถือของเรา Debug ผ่าน Network แล้ว ลองใช้ ddms ทดสอบดูได้

ถ้าท่านใดที่ต้องการทดสอบ ​Mobile App ในอุปกรณ์หลายๆ ตัวพร้อมกัน ADB Over Network เป็นเครื่องมือช่วยได้ดีครับ

สั่งงาน Arduino ผ่าน Bluetooth กัน

ครั้งที่แล้ว blog เรื่องตั้งค่า HC-05 แต่ไม่ได้บอกว่าเอามาทำอะไร โปรเจคที่ใช้ Bluetooth ส่วนใหญ่จะใช้งานด้านการสื่อสารหรือส่งข้อมูลเป็นหลัก เพราะ HC-05 สามารถทำงานได้ 2 โหมด เป็น Server หรือ Client ได้ เราสามารถประยุกต์ใช้ Bluetooth Module มาเป็นช่องทางในควบคุมอุปกรณ์ระหว่างมือถือกับ Arduino โดยหลักการง่ายๆ ของการใช้ Bluetooth คือต้องมีการ pair อุปกรณ์เข้าหากัน หาก Arduino ของคุณต่อกับ Relay Board คุณก็สามารถสั่งงานผ่าน Mobile App ได้ ก่อนจะถึงการควบคุม Relay มาดูวิธีการสื่อสารแบบง่ายๆ กันก่อน ต่อ Bluetooth Module กับ Arduino ดังภาพ

จากนั้นสั่งอัพโหลดโค้ดดังนี้

Continue reading สั่งงาน Arduino ผ่าน Bluetooth กัน

ตั้งค่า HC-05 Bluetooth Module ด้วย AT Command

มีหลายท่านถามเรื่อง Bluetooth เข้ามาไม่ได้เกี่ยวข้องกับการใช้งานเลย แต่เป็นเรื่องของชื่อ Bluetooth HC-05 เพราะค่ามาตรฐานใช้ชื่อว่า HC-05 ถ้ามีโปรเจคที่ใช้ Bluetooth มาก เวลาจะ pair อุปกรณ์ คุณก็จะเห็นชื่อ HC-05 เต็มไปหมด และไม่รู้ว่าจะต้อง pair HC-05 ตัวไหนกันแน่ วิธีการเปลี่ยนชื่อของ Bluetooth Module นี้ง่ายมาก เพียงแค่ส่งค่า HIGH ไปยังขา Key เพื่อบอกอุปกรณ์ให้เข้าสู่ Setting Mode จากนั้นก็สั่งงานผ่าน Serial Monitor เท่านั้น สำหรับคำสั่งต้องใช้คำสั่ง AT Command เท่านั้น ถ้าใครสนใจก็สามารถหาข้อมูลเพิ่มเติมได้ มาลงมือกัน Bluetooth Module กับ Arduino ตามรูป

ให้เอาสาย VCC ของ Bluetooth Module ออกก่อน จากนั้นอัพโหลดโค้ดข้างล่างเข้าไป

จากนั้นเสียบสาย VCC เข้าที่เดิม ให้สังเกตดูว่าไฟที่ Bluetooth Module กระพริบช้าลงประมาณ 2 วินาทีต่อครั้ง แสดงว่าเข้าสู่ Setting Mode แล้ว ให้เปิด Serial Monitor ขึ้นมา แล้วพิมพ์ AT กด Send จะได้ผลลัพท์เป็น OK ดังภาพ ถ้าไม่ได้ให้ดูการต่อวงจรใหม่อีกรอบ

เอาสาย VCC ออกแล้วเสียบเข้าไปใหม่ จากนั้นสั่งเปลี่ยนชื่อเป็น ARDUINO HOME ด้วยคำสั่ง AT+NAME=”ARDUINO HOME” จากนั้นเอาสาย VCC ออก เอาสาย Key ที่ Digital PIN 9 ออกแล้วเสียบสาย VCC เข้าไปใหม่ ไฟที่ Bluetooth Module จะกระพริบถี่ขึ้นเข้าสู่โหมดการใช้งานปกติ เปิด Bluetooth Manager ดูว่าชื่อเปลี่ยนไปหรือยัง
ชื่อเดิม

ชื่อใหม่

แก้ไขชื่อเรียบร้อยแล้วแบบนี้ก็ไม่หลงแล้วครับ 🙂