14° : สิบสี่องศา Programmer's Blog

พฤษภาคม 27, 2016

ทดลองเล่น ZigBee

Filed under: Development,Embedded,hardware,ZigBee — ป้ายกำกับ:, — สี่สิบดีกรี @ 3:11 pm

ผมเริ่มสนใจ ZigBee ตั้งแต่ได้รู้จักและทดลองสินค้า smart home ของ xiaomi จริงๆก็ได้ยินชื่อมานานแล้ว แต่ที่เห็นขายกันเป็นโมดูลสำหรับนักพัฒนา จะเป็น xbee ซะมาก ราคาค่อนข้างสูง และผมก็ไม่ใช่นักอิเล็กทรอนิกส์จ๋าซะด้วย เลยไม่กล้าซื้อมาเล่น ผ่านมาหลายปี ตอนนี้พี่จีนทำโมดูลออกมาได้ถูกลงมาก (ที่พูดถึงนี่คือโมดูลที่ใช้ cc2530 ของ TI นะครับ) ประกอบกับยุค internet of things ทำให้ smart things หรืออุปกรณ์ต่างๆ ถูกเชื่อมต่อเข้ามาถึงคอมพิวเตอร์และมือถือได้ง่ายดายขึ้น เพื่อมอนิเตอร์และสั่งงาน ดังนั้นช่วงนี้จีงน่าเอามาศึกษา ผมก็เลยเริ่มเล่นและเขียนถึงมันนี่แหละครับ

สิ่งที่น่าสนใจของ ZigBee สำหรับผมคือการที่มันสามารถสร้างโครงข่ายระหว่างอุปกรณ์ด้วยกันแบบ mesh ได้ และเราไม่ได้ใช้โปรโตคอลระบบเครือข่ายไร้สายเดียวกับ wifi  ซึ่งคาดหวังว่า อุปกรณ์ IoT ของเราจะถูกเข้าถึงจากผู้ไม่พึงประสงค์ได้ยากขึ้นกว่าการเอาอุปกรณ์ทั้งหมดมาต่อ wifi โดยตรง ในเรื่องของระยะทางก็สามารถออกแบบวงจรให้สามารถสื่อสารกันตั้งแต่ไม่กี่สิบเมตรจนถึงหลักเป็นกิโลเมตร ก็นับว่ามีให้เลือกใช้ได้ตามความเหมาะสม

เรื่องหลักการเรื่องอะไร มีคนศึกษาไว้เยอะแล้ว ลองเล่นเลยดีกว่า อิอิ ตัว cc2530 core โปรเซสเซอร์ มันก็คือ 8051 นั่นเอง เริ่มแรกก็หัดเขียนมันเพื่อควบคุม I/O port ต่างๆก่อน และมันมี serial port มาให้ด้วย ก็เริ่มอ่านค่าและสั่งงาน I/O ผ่าน serial port

ขั้นต่อมาเมื่อจะต้องทำให้มันคุยกันเองได้ระหว่างอุปกรณ์ ZigBee ด้วยกัน ทาง TI ก็ให้ framework เรามาเพื่อช่วยให้เราพัฒนา application ต่างๆได้ง่ายดายยิ่งขึ้น มันคือ ZStack นั่นเอง ดูเผินๆเหมือนเป็นระบบปฏิบัติการตัวนึงเลยทีเดียว ดูยุ่งยากมากขึ้นเยอะ แต่หากศึกษาตามตัวอย่างไปเรื่อยๆ ทดลองเล่นไป ก็จะเริ่มคุ้นเคยกับมันมากขึ้นนะครับ

ขั้นต่อไปก็คือ การที่เราต้องการติดต่อ ZigBee ผ่านทาง TCP/IP เน็ตเวอร์คได้ โดย TI ก็ได้ให้ Z-Stack Linux gateway มา ซึ่งเป็นโปรแกรม ที่เราสามารถเอามาลงใน ARM embedded board อย่าง BeagleBone ได้ (ก็มันของเจ้าเดียวกันนี่เนาะ) แต่ TI ก็ไม่ได้ใจร้ายขนาดนั้น มันมีทางที่เราสามารถนำ sourcecode มาคอมไพล์และรันบนบอร์ดอื่นได้เหมือนกัน เช่น Raspberry Pi โดยที่อาจจะต้องมีการปรับแก้อะไรนิดหน่อย

ขั้นสุดท้าย หากคิดจะมาทำเป็นโปรดักส์ก็คงเป็นเรื่องของความปลอดภัยในการรับส่งข้อมูล อันนี้ยังไม่ได้เข้าไปดูรายละเอียดเหมือนกัน

เดี๋ยวค่อยว่ากันไปเป็นตอนๆครับ

มีนาคม 25, 2016

Qt5.6/OpenCV compilation on Raspbian Jessie

Filed under: Development,Embedded,hardware,Image Processing,Linux,OpenGL,Qt,Raspberry Pi — สี่สิบดีกรี @ 11:52 am

ยังไม่ได้ลอง Raspberry Pi 3 ตัวใหม่เลยครับ แต่วันนี้จะมาเล่าเรื่องการคอมไพล์ Qt และ OpenCV ให้ฟัง

สืบเนื่องจากการใช้งาน Qt บน Wheezy จากการทำ cross compilation ตาม http://www.ics.com/blog/building-qt-5-raspberry-pi ไปใช้งานคราวก่อน มีปัญหากับ qml/UI ไม่ทราบว่าเป็นเพราะอะไรเหมือนกัน พอต้องพัฒนาโปรแกรมต่อก็เลยตัดสินใจย้ายมา Jessie ตัวล่าสุด นี่อาจเป็นการตัดสินใจที่พลาดอีกครั้ง อย่างไรก็ดี ปัญหามีไว้ให้แก้ครับ ก็เลยตัดสินใจเปลี่ยนมาใช้ Qt5.6 ซะเลย ซึ่งก็นั่งคอมไพล์ใหม่เนื่องจาก ไม่อยากใช้งานแพคเกจ Qt/x11 ซึ่งทำให้การบูทช้า ก็เลยทำตาม https://wiki.qt.io/RaspberryPi2EGLFS ทำให้ได้ใช้ Qt แบบ cross platform development กะเค้ามั่ง ทดสอบ QML/UI แล้วไม่มีปัญหา

ต่อมาก็มาถึงเรื่องการใช้งาน OpenCV แน่นอนว่าก็ต้องใช้กับ RaspiCam เพื่อดีงภาพจากกล้อง ปัญหามันอยู่ตรงนี้ละฮะท่านผู้ชมฮะ เกิดปัญหาว่า compiler ของ cross กับบน jessie เวอร์ชั่นไม่ตรงกัน ซึ่งของ cross จะเก่ากว่าบน jessie ทำให้การคอมไพล์โปรแกรมไม่สำเร็จ หลังจากที่หาทางแก้อยู่สองวันสองคืน ก็สรุปได้ว่า ต้องกลับไปใช้ gcc4.8 สำหรับ jessie แล้วคอมไพล์ OpenCV ใหม่ รวมถึง dependency หรือ 3rd party ของมันด้วย จึงจะสามารถทำงานต่อได้

Screenshot from 2016-03-25 12:03:22การเขียนโปรแกรมจึงไม่ใช่แค่การเขียนโปรแกรมนะครับ …

มกราคม 13, 2016

14 Mocap : Motion Capture Studio

Filed under: Computer Graphics,Development,Motion Capture — ป้ายกำกับ:, , — สี่สิบดีกรี @ 1:55 pm

สวัสดีปีใหม่คร้าบ ปีใหม่ก็เอาข่าวล่าสุด สำหรับการเตรียมความพร้อมในการเปิดให้บริการ motion capture studio ของเรามาฝากกันนะครับ อีกไม่นานนี้แน่นอน
เพื่อเป็นการทดสอบและเก็บข้อมูลเพื่อการเตรียมความพร้อมก่อนการเปิดให้บริการ รวมไปถึงจะได้เอาข้อมูลไปใช้ทำ show reel เพื่อการประชาสัมพันธ์ต่อไป เราจึงทำการทดสอบการทำ motion capture ด้วยท่ารำหนุมานของโขน การแสดงซึ่งเป็นเอกลักษณ์ประจำชาติไทยของเรา และมีท่วงท่าที่ซับซ้อนเหมาะกับการทดสอบใช้งานครับ ตัววิดิโอข้างล่างนี้เป็นการเก็บ raw data กำลังรอ โมเดล 3d หนุมาน มาเพื่อจะใส่ท่ารำที่ได้จากการทำ mocap นี้เข้าไปครับ โปรดติดตาม

ธันวาคม 8, 2015

motion capture กับ kinect

Filed under: Computer Graphics,Development,hardware,Kinect,Motion Capture — ป้ายกำกับ:, — สี่สิบดีกรี @ 10:38 am

ช่วงนี้กลับมาดำเนินการเรื่องการเปิดให้บริการ motion capture ต่อครับ ในสภาวะที่วงการเงียบๆไป อาจเป็นอีกแรงที่ช่วยปลุกกระแสขึ้นมาใหม่จากบริการที่มีคุณภาพและราคาไม่แพง ผมโฟกัสที่สตูดิโอไม่ใหญ่หรือเป็นพวกนักพัฒนาเกมอิสระ ต้องการทำเดโม หรือ งานที่แข่งกับเวลา เช่นงาน อีเว้นท์ การนำเอาเทคโนโลยีเข้ามาช่วยทำในเรื่องของ digital art นั้น ผมว่าบ้านเรายังมีพื่นที่ให้ไปต่ออีกเยอะครับ

 

ข้างบนนี้ก็เป็นการนำเอา kinect มาทดลองเล่นกับ product ที่มีอยู่ในตลาด เพื่อจะดูว่าจะนำตัวไหนเข้ามาให้บริการได้บ้างครับ ก็สนุกดี อิอิ ยังมีอุปกรณ์อีกหลายตัวที่แพลนว่าจะเอาเข้ามาจำหน่ายและใช้สำหรับงาน 3d ครับ โปรดติดตาม

กันยายน 7, 2015

ทดลองทำ OCR บน Raspberry Pi 2

Filed under: Development,Embedded,Image Processing,Linux,Qt — ป้ายกำกับ:, , — สี่สิบดีกรี @ 11:35 am

วันก่อนได้ทดลองทำงานต้นแบบอ่านตัวเลข  หรือการทำ OCR ด้วย tesseract โดยเริ่มจากขั้นตอนที่ขาดไม่ได้ คือ การปรับปรุงภาพให้สามารถทำการอ่านได้ดีที่สุด โดยการใช้ OpenCV และทำการแสดงผลบนจอ LCD โดยเขียนโปรแกรมบน Qt รันบน Linux และใช้ Raspberry Pi 2

ก็เป็นการหยิบ r-pi 2 มาใช้เป็นครั้งแรกเลย ตอนแรกว่าจะเอามาลอง Windows 10 ซะหน่อย แต่จนแล้วจนรอดก็ยังไม่มีโอกาสเลยครับ เลยเอามาลองกับงานนี้ก่อน ขั้นตอนการทำงานของผม เป็นดังนี้ครับ

1. ทดสอบการเก็บภาพก่อน ว่าต้องใช้แหล่งกำเนิดแสง ช่วยมั้ย ต้องใช้เลนส์ขนาดเท่าไร ระยะติดตั้งควรเป็นเท่าไร เสร็จแล้วก็ลองทำออกมา
2. จากนั้น ก็เริ่มหาขั้นตอนการทำ image processing ตรงนี้โปรแกรมอย่าง gimp ช่วยได้มากเลยครับ ทดลองปรับปรุงภาพด้วย filter แบบต่างๆ จดบันทึกขั้นตอนเอาไว้ แล้วก็ลองเขียนด้วย OpenCV และลองเอาไปทำ OCR ด้วย tesseract เมื่อได้ผลลัพธ์ที่ต้องการแล้วก็ เขียนโปรแกรมด้วย Qt
3. เดี๋ยวนี้ผมไม่ค่อยอยากเขียน UI ด้วย widget ละ ใช้ QML เป็นหลัก ก็เลยใช้ Qt ซึ่งเวลามีน้อย ก็เลยไม่ได้ build Qt เอง ไป download จากคนที่เค้า build มาแล้วเอามาเผยแพร่ แต่ก็เจอปัญหาคือ เค้า build มาแบบ cross platfom ตัว utility ของ Qt เช่น qmake moc ก็จะอยู่บน PC ทางแก้คือ ต้องหัดใช้ cmake เพื่อ build โปรแกรม แทน
4. จากนั้นจึงใส่ sensor และ LED RGB เข้าไปโดยควบคุมผ่าน library ชื่อ WiringPi ซึ่งก็ใช้งานง่ายดีครับ ยกเว้นต้องรัน โปรแกรมด้วย sudo

ก็ประมาณนี้ละครับ ผมไม่ค่อยได้ใส่โค้ดเข้ามาในบล็อก เพราะสามารถหาเอาจากที่อื่นได้อยู่แล้ว ส่วนที่สำคัญคือการเรียนรู้ ไม่ใช่ผลลัพธ์ครับ

สิงหาคม 6, 2015

เกริ่น QML animations & transitions

Filed under: Computer Graphics,Development,Linux,multimedia,Qt,X11 — ป้ายกำกับ:, , , , , — สี่สิบดีกรี @ 11:22 pm

Screenshot from 2015-08-06 23:05:48 Screenshot from 2015-08-06 16:59:47

เคยเขียนไปเมื่อนานมาแล้วว่า สิ่งที่น่าสนใจของ QML อีกอย่างหนึ่งที่สำคัญก็คือ animation & transitions วันนี้ก็ได้มีโอกาสลองเล่นและเรียนรู้ ก็ต้องทำความเข้าใจกับมันพอสมควรเมื่อเริ่มต้น ตอนนี้ผมก็ยังงูๆปลาๆอยู่เลยครับ อิอิ

ด้วยความตั้งใจแต่เริ่มแรกคือ คำถามที่ค้างคาใจมานานว่า ไม่มีอะไรมาแทน flash และ action script เลยเหรอ สำหรับการทำ cg บน tv เพราะโปรแกรมอย่าง CasparCG นั้นก็ใช้ flash ที่นี้ถ้าเราต้องการทำระบบ live streaming เองละ จะใส่กราฟิกและอนิเมชั่นลงไปได้ยังงัย

คราวก่อนผมลอง cairo overlay ลงบน gstreamer element แค่ใช้เวลาเอา svg ขึ้นเนี่ยก็นานแล้วครับ และถ้าต้องโหลดเยอะๆ ดูเหมือนก็จะมีผลต่อ performance เหมือนกัน

คราวนี้เลยลองใหม่ ใช้วิธีเขียน QML application เลย แล้วค่อยทำ screencast เฉพาะส่วน ผมลองเอาไปถ่ายทอดสดลงบน youtube ก็ได้ดังที่เห็น

อ่าว หมดแรงเล่าซะละ ต่อคราวหน้าครับ

credit : กราฟิกสนาม Designed by Freepik.com

พฤษภาคม 18, 2015

Barcode scanner hooking

Filed under: Development,hardware,Microsoft,POS/ERP,Windows 7,Windows 8 — ป้ายกำกับ:, , , , , — สี่สิบดีกรี @ 10:17 pm

กลับมาหัดเขียน win32 API อีกครั้ง หลังจากมาเขียน Qt อยู่นาน (เมื่อ 15-16 ปีก่อน บ้ามากถึงขนาดไปสอบจนได้ cer MCSD Visual C++ มา แล้วหลังจากนั้นไม่นานมันก็ออก .net มา ฮือ ฮือ) เป็นโปรแกรมเล็กๆตัวนึง ทำอะไรไปบ้าง จะมาเล่าให้ฟังครับ อิอิ
requirement คือต้องการโปรแกรมที่เอาไปดักจับข้อมูลจากเครื่องสแกนบาร์โค้ด โดยที่ระบบเค้าก็ทำงานไปปกติ โดยข้อมูลจะเอาไปล็อกไว้ผ่านทาง TCP
จริงๆ SI ก็หาโซลูชั่นได้แล้วใช้แอพสองตัวช่วยกันแต่ติดที่ลิขสิทธิ์เพราะต้องไปลงใน POS หลายเครื่องก็หลายเงินอยู่ ก็เลยต้องหาทางเขียนเอา
ปัญหาที่ต้องหาวิธีแก้คือ ดักจับข้อมูลเฉพาะบาร์โค้ด ไม่ไปยุ่งกับการทำงานเดิม และส่งข้อมูลผ่าน TCP
เรื่องแรกก็ต้องหาทางรู้ก่อนว่าจะดักจับ data จาก HID ตัวไหน(ที่มันเป็น barcode scanner)
เรื่องดักจับข้อมูล ตอนแรกว่าจะใช้ hooking ก็เลยหาวิธีที่สะดวกกว่าได้ เพราะ ใช้ hooking คุ้นๆว่าตัว anti ไวรัส มักจะฟ้อง
เรื่องตัวโปรแกรม ก็ทำให้มันไม่มีหน้าตา(GUI) จะได้ไม่ไปเกะกะหน้าจอเค้า รับแต่ windows message ได้อย่างเดียวพอ จะทำเป็น service ก็ยุ่งยากไป
เรื่องสร้าง tcp server คอยส่ง data ให้ client เนื่องจากอยากให้มันเป็น async เลยใช้แบบ WSAASYNCSELECT ไม่ต้องมี thread ให้ยุ่งยาก รองรับ client ตัวเดียว สบายไป
เรื่องปวดหัวสุดท้ายอยู่ที่ data เนี่ยละ มันเข้ามาเป็นแบบเสมือนเรากด keyboard (virtual key) ลองนึกถึงการกด shift หรือ ctrl ตามด้วย key แล้วต้องแปลงข้อมูลเป็น char array ส่งผ่านเน็ตเวอร์ค อันนี้ก็หาทางแปลงไปมั่วๆ ออกมาได้
ทีนี้โปรแกรมตัวมันเล็กทำงานน้อยๆก็เลยจะไม่ใช้ Qt จะได้สะดวกตอนเอาไป install เลยกลับไปเขียน VC++ เพียวๆ ที่ไม่ได้เขียนนานมากแล้ว
เสร็จละครับ โปรแแกรมเล็กๆตัวนึง

เมษายน 19, 2015

QChart.js : awesome chart for QML

Filed under: Development,javascript,Programming Langauge,Qt — ป้ายกำกับ:, , , , — สี่สิบดีกรี @ 9:46 pm

เนื่องด้วยต้องทำหน้า report สืบต่อเนื่องจากงานที่แล้ว กลายเป็นว่างานนี้ใช้เวลาไปโขอยู่ครับ เผลอๆจะพอๆกับตัวโปรแกรมหลักเลยทีเดียว ดีที่ว่าเจอโปรเจ็คนึงทำออกมาได้สุดยอดครับ ช่วยให้งานนี้ง่ายขึ้นเยอะ เป็นการพอร์ท Chart.js มาเพื่อให้สามารถใช้งานกับ QML ได้ โปรเจ็คนี้มีชื่อว่า QChart.js ครับ ก็ไปหามาลองใช้กันดู

control อีกสองตัวที่อยากพูดถึง ซึ่ง Qt น่าจะเอามาใส่ไว้ในเวอร์ชั่น Community ก็คือ date picker และ tumbler ผมก็ไปหามาใช้จนได้ อิอิ จริงๆ tumbler เนี่ยเคยมีอยู่ใน QML1 บน Qt 4.8 นะถ้าผมจำไม่ผิด เป็นตัวอย่างโค้ดหรืออย่างไรเนี่ยแหละ

ครับ หายไปนาน ก็มีเรื่องมาฝากกันเท่านี้ก่อน ในฐานะ Qt fan club อีกเช่นเคย ฮ่าๆ ผมก็ต้องเรียนรู้ หัดเขียน javascript เพิ่มขึ้นมาอีกอย่างหนึ่ง เพื่อให้ใช้งาน QML ได้อย่างเต็มเม็ดเต็มหน่วย ฟีเจอร์เด็ด พวก  animation ของมันผมก็ยังไม่ค่อยคล่อง มีโอกาสจะนำมาเสนอในคราวต่อๆไปครับ

อ้างอิง : https://github.com/jwintz/qchart.js/tree/master

insta_analiytics_3

มกราคม 7, 2015

QR code generator and Printing

Filed under: Development,Linux,Qt — ป้ายกำกับ:, , — สี่สิบดีกรี @ 4:47 pm

หลังจากที่ได้เขียนตัวอ่าน QR code ไปแล้ว ก็ถึงคราวต้องทำ ตัว generator ละครับ สร้างขึ้นมาอย่างเดียวไม่พอ ก็ต้องปรินท์ออกมาได้ด้วยถึงจะนำไปใช้ประโยชน์ได้ครับ

ผมใช้ libPrison ในการสร้าง QR ก็สะดวกง่ายดายดีครับ ในส่วนของการปรินท์ Qt ก็ให้ API มาให้ค่อนข้างดีทีเดียว การเรียกใช้ print preview dialog การเพิ่มจำนวนหน้า ทำได้ไม่ยากเลย

เหลือที่จุกจิกกวนใจก็ตรงการกำหนดขนาดและทำการ resize สิ่งที่เราจะวาดให้ตรงกับขนาดของกระดาษที่เราจะพิมพ์นั่นละครับ ผมใช้วิธี resize และ render widget เอาเลย โดยทำ widget ที่มีส่วนประกอบและวาง layout ดังรูป กำหนดขนาดและจำนวนที่จะ render ให้พอดีกับขนาดของกระดาษโดยประมาณเอา

10872676_564210363713443_2086052009_n1

พฤศจิกายน 30, 2014

Video Compositing with LibCairo

Filed under: Computer Graphics,Development,multimedia — ป้ายกำกับ:, , , , , , — สี่สิบดีกรี @ 11:30 pm

ในที่สุดก็ได้ฤกษ์เอา BlackMagic DeckLink Studio ออกมาเล่นอะไรสักอย่างสักทีครับ ดองไว้เป็นปีละ จริงๆซอฟแวร์ทำ Cg ฟรีๆก็มี ดูน่าจะดีด้วย นั่นคือ CasparCG ซึ่งรองรับ DeckLink ซะด้วย เพียงแต่มันไม่มีเวอร์ชั่นบน Linux ก็เลยปล่อยผ่านไปก่อน

วันนี้จึงได้ทำการทดลองเขียนโปรแกรม เอาภาพวิดิโอจาก webcam USB นี่ละ เพราะรอ กล้อง SDI 720p จากจีนอยู่ยังไม่มาสักที ไม่งั้นคงได้ทดสอบการ์ด DeckLink ในการรับอินพุตด้วยแล้ว ซึ่งการ์ดในตระกูล DeckLink นั้นมี driver รองรับสามารถใช้กับ Linux ได้เกือบทุกรุ่นครับ แม้กระทั่งรุ่นเล็กราคาไม่กี่พันบาท จึงเป็นทางเลือกที่ีดีทางหนึงในการเอามาใช้งาน

IMG_0080-s

ส่วนประกอบหลักของโปรแกรมก็คือ GStreamer ครับ ผมเขียนด้วย C โดยมี Elements หลักๆก็คือ v4l2 source, libcairo และ decklink sink นั่นเอง เพื่อทดสอบว่าเราก็สามารถทำ graphics บน tv แบบง่ายๆได้โดยใช้เครื่องมือไม่ต้องมากมายหรือแพงๆ ตัวอย่างนี้ผมลองใส่ตัวอักษรวิ่งกับนาฬิกาเข้าไป ซึ่งส่วนประกอบของนาฬิกานั้นมาจากไฟล์ svg

ลองนึกถึงการถ่ายทอดสดลง youtube เล่นๆเวลามีกิจกรรมอะไร หรืออยากทำรายการเป็นของตัวเอง แล้วใส่กราฟิกเข้าไปแบบเรียลไทม์ได้ ก็ทำให้ดูโปรขึ้นมากเลยทีเดียว อิอิ (ผมคิดเอาเองนะครับ)

libcairo ค่อนข้างเป็น lib พื้นฐานต้องเหนื่อยเหมือนกันหากอยากได้กราฟิกที่ซับซ้อนเหมือน flash ก็หวังไว้ว่าอีกไม่นาน จะมีปลั๊กอิน QML ทำได้ในลักษณะอย่างนี้เหมือน libcairo ซึ่งก็น่าจะทำให้ทำอะไรได้ง่ายขึ้นอีกไม่น้อยเลยครับ

« Newer PostsOlder Posts »

Powered by WordPress