คลังเก็บหมวดหมู่: hardware

ทดลองเล่น ZigBee

ผมเริ่มสนใจ 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 โดยที่อาจจะต้องมีการปรับแก้อะไรนิดหน่อย

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

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

Qt5.6/OpenCV compilation on Raspbian Jessie

ยังไม่ได้ลอง 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การเขียนโปรแกรมจึงไม่ใช่แค่การเขียนโปรแกรมนะครับ …

motion capture กับ kinect

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

 

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

Barcode scanner hooking

กลับมาหัดเขียน 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++ เพียวๆ ที่ไม่ได้เขียนนานมากแล้ว
เสร็จละครับ โปรแแกรมเล็กๆตัวนึง

ทำระบบคาราโอเกะ Karaoke with PCDuino3 Nano

เมื่อทำการทดสอบ 2d/3d ไปแล้ว ทีนี้มาลองทดสอบ multimedia กันบ้างครับ โดยข้อมูลจาก linux-sunxi เค้าบอกว่า เราสามารถเล่นไฟล์มัลติมีเดียได้โดยอาศัย vdpau ผ่านทางโปรแกรม mplayer

แต่เมื่อทดลองใช้งานแล้วปรากฎว่า ตัวที่ทางผู้ผลิต install มาให้นั้น น่าจะเป็นเวอร์ชั่นเก่าครับ ต้องลง mplayer2 จาก repository แทนมันถึงจะไปเรียกใช้ vdpau ได้ แต่ก็ดูเหมือนจะมีปัญหาอีก ตรงนี้คงต้องหาข้อมูลต่อ เพราะหลายๆคนแนะนำให้ไปใช้ mpv ซึ่ง fork มาจาก mplayer แทน

พอดีถนัดใช้งาน gstreamer เลยตัดสินใจลง gstreamer 0.10 และทดสอบใช้งานดู ปรากฎว่าเล่นได้ครับ

ผมทดลองเล่นไฟล์ h.264 1080p โดยไม่ใช้ความสามารถของ hardware decoder ช่วย ก็ไม่สามารถเล่นได้อย่างราบรื่นนะครับ แถมกิน cpu ไปหมดทั้งสองคอร์ เมื่อเปลี่ยนมาใช้ vdpau ช่วย ก็สามารถเล่นได้สบายๆครับ

เมื่อผ่านขั้นตอนทดสอบความสามารถก็มาถึงขั้นตอนการพัฒนาอะไรขึ้นมาบ้าง โดยมีโจทย์มาให้ทำระบบเล่นคาราโอเกะ ครับโดยมีความสามารถในการตัดเสียงร้องออกได้ (กรณีที่ไฟล์ต้นฉบับ ใส่เสียงร้องไว้ channel หนึ่งนะครับ) ก็เลยลองทำโดยการใช้วิธี ตัดเสียงจาก channel เดิม ออก แล้วใส่ เสียงจากอีก channel เข้าไปแทน จึงกลายเป็น mono 2 channels ( LR -> LL or RR )  ทำให้เสียงยังคงออกลำโพงทั้งสองข้างได้

20141027142125-s

ก็ทดลองทำให้มันสลับไปมาได้ กว่าจะทำเสร็จก็ร้องเล่นเองไปหลายรอบๆ อิอิ

อันนี้ก็เป็นตัวอย่างหนึ่งในการใช้งานบอร์ดนี้นะครับ ข้อดีอย่างที่บอกไป ลดการใช้พลังงาน ลดต้นทุน ได้หลายๆครับ

DVR card

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

ส่วนตัวผมนั้นเล่นเรื่องนี้มาสามสี่ปีแล้วเพราะมีคนมาจ้างทำระบบน่ะครับ แต่จะเน้นเรื่อง image processing มากกว่าการติดตั้งใช้งานปรกติทั่วไป ดังนั้นการซื้อมาเป็นตัวเครื่องเลยจึงไม่ใช่ตัวเลือกของผม อีกตัวเลือกหนึ่ง นั่นคือ การใช้เป็น pci card มาเสียบเข้ากับ pc เพื่อใช้ pc เป็น DVR (Digital Video Recorder) จึงดูเหมาะสมกว่า

วันนี้จึงมาแนะนำกันว่า ไอ้เจ้าการ์ดใบนี้ ซึ่งในตลาดนั่นหาซื้อได้ในราคาตั้งแต่หลักพันต้นๆไปจนถึงหลักหมื่นนั้น อะไรที่ทำให้ราคามันเป็นอย่างนั้นไปได้

ตามรูปเลยครับ ท่านลองส่องการ์ดของท่านดูว่ามีอะไรบ้าง ส่วนใหญ่วางเลย์เอาท์มาคล้ายๆกันละครับ ก็เริ่มด้วยตัวที่ทำหน้าที่เป็น video decoder ไอ้เจ้าชิพตัวนี้ก็จะทำหน้าที่รับสัญญาณ analog จากกล้อง cctv หรือ tv หรือจากเครื่องเล่นวิดิโอก็ได้ครับ แปลงเป็นสัญญาณ digital จะ sampling กันกี่บิตก็แล้วแต่รุ่นและยี่ห้อ โดยทั่วไปเมื่อชิพตัวนี้นำมาใช้กับ dvr ก็จะรับได้ 1 channel ขนาด D1 ตัวอย่างชิพที่เห็นได้ตามท้องตลาดทั่วไปก็เช่น ของ Conexant BT878 หรือ NXP SAA7130 ถ้าเป็นชิพพวกนี้ก็ดูได้เลยว่าถ้าต้องการ full frame rate แบบ realtime จากกล้องกี่ตัว ก็ต้องมีชิพนี้จำนวนเท่านั้นแหละ (แต่ก็อาจมียกเว้นที่รวมมาเป็นชิพตัวเดียวใหญ่ๆสำหรับหลายๆ channel เลยก็เคยเห็นเหมือนกัน) เมื่อเป็นเช่นนั้นก็ต้องมีชิพตัวต่อไปขึ้นมาทำหน้าที่ให้การ์ด pci หนึ่งใบเห็นเป็นเหมือนมี pci เท่าจำนวนกล้อง เจ้าตัวนี้เรียกว่า pci bridge นั่นเอง เจ้าตัวนี้ที่ใช้กันก็คงจะเป็น PLX หรือ P ตัวเดียวของ Pericom

snapshot11

4-channels DVR runs on Linux

ส่วนที่เป็น option เพิ่มเข้าทำให้ราคามันต่างกันออกไปนั้นน่าจะอยู่ที่ ชิพประมวลผลพิเศษ FPGA ที่แต่ละเจ้าใส่โปรแกรมเข้าไปเพื่อให้การ์ดมีความสามารถมากขึ้นเช่น บีบอัดและเข้ารหัสเป็น H.264 โดยที่ไม่ต้องไปพึ่งพา cpu ของ pc นั่นเอง ตัวนี้ที่เคยเห็นก็ของเจ้าใหญ่ XILINX นั่นเอง

ก็คงพอเห็นภาพและเป็นประโยชน์ในการเลือกซื้อและใช้งานนะครับ หวังว่าคงช่วยให้ท่านเสียเงินไปอย่างคุ้มค่ามากขึ้น