คลังเก็บผู้เขียน: สี่สิบดีกรี

บันทึก node.js + express + mongodb

ลง software ต่างๆ ตามลิ้งนี้
https://www.sitepoint.com/build-simple-beginner-app-node-bootstrap-mongodb/
และลง robomongo ด้วย mognodb management GUI tool ใช้ดีใช้ได้

เริ่มต้นเขียนด้วยไฟล์ start.js เพื่อกำหนด port ที่ server จะรันและรอรับ connection จาก client
และอาจจะสร้างไฟล์ app.js ขึ้นมาอีกไฟล์เพื่อกำหนดโครงสร้างของเว็บ เช่น การโหลด express, pug และโมดูลที่จำเป็นอื่นๆ

ต่อไปก็ การใช้งาน mongodb เริ่มแรกเลย เพื่อความปลอดภัย ก็ควรใส่ authorization เข้าไปด้วย โดยการสร้าง user และกำหนด password และ role ของการเข้าถึง database

เมื่อได้ user, password สำหรับ database ที่เราต้องการสร้างหรือใช้งานแล้ว ต่อไปก็ต้องทำให้ mongoose connect database แบบมี authen
วิธีกำหนด user, password เวลา connect คือใช้ auth: { user: xxx, password: xxx } เนื่องจาก version ของ mongoose ที่ใช้ จึงต้องใส่ useNewUrlParser: true และ useUnifiedTopology: true ด้วย

เมื่อ connect ได้แล้ว ก็ต้องทำ model schema สำหรับ collection ที่เราต้องการจัดการ ก็ทำแยก 1 .js ไฟล์ ต่อ 1 schema เก็บไว้ใน folder ชื่อ models ก็ได้
เวลา exports module ถ้าชื่อ collection ไม่เหมือนกับชื่อของ schema เราต้องบอกมันด้วยตอน export

เมื่อได้ model ก็ถึงตา view ทำการแสดงผล โดยเราจะแสดงผล documents ทั้งหมด ใน collection ด้วย table สิ่งแรดกที่ต้องทำคือ กำหนดเส้นทางให้ router เช่น เมื่อต้องการกำหนด path เป็น /paid เพื่อแสดงผล table ข้อมูลใน collection ชื่อ paid

เมื่อมี GET request ‘/paid’ เข้ามา เราทำการ query documents ใน collection ได้โดยใช้คำสั่ง find() เมื่อได้ก้อนข้อมูลมาเก็บไว้ในตัวแปรตัวหนึ่งแล้ว ก็ส่งต่อให้ view ทำการแสดงผล โดยใช้ pug และ bootstrap

ก่อนจะไปถึงเรื่อง bootstrap มาดูเรื่อง HTTP authentication ก่อน คือ user ต้องทำการ login สำเร็จก่อนจึงจะสามารถเข้าถึงหน้า paid ได้
เราได้ทำโดยใช้ โมดูล http-auth เมื่อทำเสร็จแล้ว จะมี pop-up ขึ้นมาให้ใส่ user name, password เมื่อจะเข้าหน้าที่กำหนด

ก่อนจะใช้งาน bootstrap ซึ่งก็คือเรื่องของ style sheet เราต้องทำการบอก path ที่อยู่ เพื่อให้สามารถเรียกโหลดไฟล์ที่วางอยู่ในนั้นได้ ในที่นี้ก็คือพวก css, js, images โดย ทำการกำหนด static path ให้แก่ express ก่อน หลังจากนั้น เราก็จะสร้าง css ไฟล์กำหนดค่าการแสดงผลให้กับส่วนต่างๆของ view ได้

ส่วน view นี้ เราใช้ pug เป็น template engine เมื่อก่อนชื่อ jade ยังมี engine ตัวอื่นๆอีกที่สามารถนำมาใช้ได้ การใช้งาน pug ก็เหมือนเราเขียนไฟล์ html นั่นเอง แต่จะมีรูปแบบการเขียนที่ง่ายขึ้น ไฟล์จะเป็นนามสกุล .pug แทน ซึ่งชื่อไฟล์ก็จะต้องเหมือนกับในฟังก์ชั่น render

ถึงตรงนี้เราก็ทำเว็บด้วย node.js ได้กะเค้าบ้างแล้ว แต่ที่ทำต่อเพื่อจะส่งงานให้ลูกค้า นั่นคือ การแสดงผล table ให้สวยงามและมีฟังก์ชั่นการทำงานมากขึ้น เช่น การเรียงคอลัมน์ การค้นหา การทำเพจ และการ export ข้อมูล ซึ่งได้หยิบ DataTables มาใช้งาน

กว่าจะใช้งานได้ก็เล่นเอาเหนื่อยเหมือนกัน เพราะ DataTables ใช้ jqeury เลยต้องนั่งหาวิธีที่จะเรียกใช้ $(document) หรืออ้างถึง Element ต่างๆ ในไฟล์ .pug ให้ได้ สุดท้ายจึงพบว่ามันทำได้ง่ายๆเลย โดยการลง package jquery ด้วย npm และใช้วิธีกำหนด static path ไปที่ folder ที่ไฟล์ใน package เหล่านั้นถูกวางอยู่ โดยใช้ app.use() นั่นเอง ก็เลยแก้ปัญหาเรื่อง jQuery และ $ is not undefined ลงได้

Deep Learning กับ nvidia jetson nano ตอนที่ 1

ตอนนี้ เราจะมาทดลองรันโปรแกรมบน jetbot กัน โดยจะเป็น examples ที่มากับตัว install 2 ตัวอย่างแรกจะเป็นการแนะนำการเขียนโปรแกรมเพื่อควบคุม jetbot ทั้งด้วย widgets และจอย

โปรแกรมตัวอย่างเขียนด้วย jupyter notebook และระบบที่รัน jetbot ก็ลงมาให้เรียบร้อยแล้ว เราสามารถรันแบบรีโมทผ่านบราวเซอร์จากเครื่องคอมเราได้เลย โดยเราก็รัน jetbot ด้วย power bank ทีติดตั้งไว้แล้ว เพื่อไม่ให้เป็นอุปสรรคในการเคลื่อนที่ของ jetbot การทดลองรันก็เพียงแค่เปิดไฟล์ ขึ้นมาแล้วให้มันรัน จะทีละส่วน(เค้าเรียกว่า cell)เพื่อทำความเข้าใจ หรือสั่งรันทั้งหมดเลยก็ได้ แต่ไม่แนะนำ เพราะ cell ท้ายๆ อาจจะเป็นการสั่งหยุดการทำงาน

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

1. ขั้นตอนแรก จะเป็นการเก็บ samples โดยโค้ดจะทำการเก็บภาพและให้เราแยกว่าภาพไหนคือ blocked หุ่นจะไปต่อไม่ได้ หรือ ภาพไหนคือ free หุ่นสามารถเคลื่อนที่ไปได้ เพื่อจะนำไป train
2. ทำการ train ขั้นตอนนี้ยุ่งยากหน่อย ผมพบว่า หากเก็บ samples จำนวนมาก (> 100) จะทำการ train บน jetbot ไม่สำเร็จ มีอาการดับไปซะเฉยๆ (เรื่องนี้ เดี๋ยวว่ากันอีกที) ดังนั้นจึงต้องทำการ train บนเครื่อง pc แทน ซึ่งใช้เป็น ubuntu 18.04 ก็ต้องไปทำการ install โปรแกรมที่จำเป็นทั้งหมด เรียกว่า ก็ต้องให้เหมือนบน jetbot นั่นเอง
หลังจากงมอยู่นาน จึงได้ขั้นตอนการ install ดังนี้

  • ลง anaconda ก็จะได้ python มาด้วย
  • ลง pytorch โดยเลือกได้ว่าจะใช้ cuda หรือไม่ ซึ่งบางคนใช้การ์ดจอ nvidia อาจอยากใช้ gpu ในการคำนวณ ก็ต้องไปลง driver cuda ก่อนนะ
  • ลง jupyter (อันนี้ไม่แน่ใจว่าตอนลง anaconda มันลงให้เลยอัตโนมัติแล้วหรือเปล่า)

*** ข้อที่ต้องระวังคือ เวอร์ชั่นของ pytorch บนเครื่องที่ใช้เทรนกับบน jetbot จะต้องเหมือนกัน ไม่งั้นจะโหลดโมเดลที่เทรนมาไม่ได้ ของผมใช้วิธีอัพเกรด jetpack เป็น เวอร์ชั่น 4.4 และอัพเกรด pytorch ไปเป็นเวอร์ชั่น 1.6

3. คือการนำ model ที่เทรนได้มาใช้งาน ซึ่งตอนนี้เจอปัญหาว่า แค่ออกตัวก็ดับตายสนิท ฮ่าๆ จากที่ลองหาข้อมูลในฟอรั่มดู น่าจะเป็นจังหวะมอเตอร์เริ่มหมุน พร้อมๆกับการที่กล้องทำงานจับภาพ น่าจะกินกระแสแบบพุ่งขึ้นทันทีทันใดก็เลยดับไป ลองใช้วิธีเขียนโค้ดให้มอเตอร์หมุนไปสักแป๊บนึงก่อนค่อยเริ่มจับภาพ ก็ใช้ได้ผลนะ

*เดี๋ยวจะลองเปลี่ยนไปใช้กล้อง USB ดูบ้างว่าอาการจะแตกต่างกันมั้ย

ทีนี้ เมื่อสามารถรันตัวอย่างนี้ได้แล้ว หมายความว่าเราพอจะรู้ขั้นตอนของการใช้งาน deep learning บ้างแล้ว ในตอนต่อไป เราก็ควรจะต้องรู้หลักการสักหน่อย เพื่อให้สามารถทำการปรับปรุงโมเดลของเราได้ เพื่อเพิ่มประสิทธิภาพการของทำงาน หรือการเคลื่อนที่ของหุ่นให้ดียิ่งขึ้น

Deep Learning กับ nvidia jetson nano ตอนที่ 0

ตั้งใจจะเขียนเป็นซีรียส์ หนึ่งเพื่อเป็นการสรุปข้อมูลที่ได้เรียนรู้ สองก็เพื่อเป็นประโยชน์แก่ผู้ที่สนใจ

ผมไม่ค่อยได้เคยเขียนอะไรยาวๆสักเท่าไร แต่จะพยายามไล่เป็นขั้นเป็นตอนตามการเรียนรู้ เป็นการลองกลับมาหัดเขียนอีกครั้ง

คำถาม คือ ทำไมต้อง jetbot ทำไมต้อง nvidia jetson nano
– เพราะมันฮอต และมันง่าย เนื่องจากมีเครื่องมือ มีซอฟแวร์ มีไกด์ไลน์ ให้เราทำตามไปก่อน ทำให้เริ่มต้นได้ง่าย ตัวบอร์ดถึงแม้จะราคาสูงกว่า raspberry pi ไปพอสมควร แต่ผมว่าคุ้มนะ
– ตัว hardware อุปกรณ์ไม่เยอะ ประกอบง่าย บัดกรี ไม่กี่จุด ก็เล่นได้ละ

เพิ่มเติมอีกหน่อย
nvidia ไม่ได้มีเพียงแค่โปรเจ็ค jetbot เท่านั้น ยังมีโปรเจ็คอื่นๆ ซึ่งใช้ซอฟแวร์ ISAAC SDK เช่น Kaya robot ก็จะมีอุปกรณ์ที่ต้องประกอบมากขึ้น
หรือถ้าไม่ใช้ SDK จาก nvidia จะไปใช้ ROS ก็ได้ ก็จะมีโปรเจ็คอย่างเช่น racecar ซึ่งแตกย่อยไปอีกหลายโปรเจ็คจากหลากหลายนักพัฒนา มีรายละเอียดที่แตกต่างกันในเรื่องของการใช้ hardware บางตัว

คำถามต่อมา แล้วเกี่ยวอะไรกับ deep learning
– deep learning มันก็คือเรื่องของ AI กรณีศึกษาในเรื่องนี้มักเกี่ยวข้องกับ vision system เกี่ยวข้องกับภาพ เช่น รู้จำป้ายทะเบียน รู้จำสิ่งกีดขวาง การนำทาง ดังนั้น jetbot หุ่นที่มีล้อ และติดกล้อง มันจึงเป็นอะไรที่เหมาะมากในการเอามาเรียนรู้ แถมสนุกด้วย

เริ่มต้นยังงัย
– อย่างน้อย ก็ต้องมีความรู้ มีประสบการณ์ ทั้ง hardware และ software สักหน่อย ใครที่ไม่เคยประกอบหุ่นเล่นเลย ก็ไปหาชุดคิทประกอบหุ่นยนต์มาลองเล่นก่อน ลองดูที่ www.ioteshop.com ร้านของผมเองก็มี อิอิ ให้รู้จักส่วนประกอบต่างๆของตัวหุ่นยนต์ หลักการไฟฟ้า อิเล็กทรอนิกส์เบื้องต้น อาจจะต้องมีเครื่องมือสำหรับงานประกอบ งานบัดกรี ต่างๆ
– ส่วน software ก็ต้องรู้เรื่อง linux เคยใช้งานมาบ้าง อ่านภาษาอังกฤษพอได้ เพราะต้องไป download และอ่านข้อมูลจากเว็บของ nvidia ส่วนภาษาที่ใช้เขียน สำหรับ jetbot นี้เป็น python ก็มีพื้นฐานสักหน่อย ภาษาอื่นก็ได้แต่เข้าใจหลักการเขียนโปรแกรม ก็โอเค

Hardware
1. nvidia jetson nano
ตัวบอร์ด jetson nano จริงๆประกอบด้วย 2 ส่วน คือ core module ที่มี CPU กับส่วนที่เรียกว่า carrier board ก็เป็นบอร์ดขยาย ที่ทำให้เราสามารถต่ออุปกรณ์อื่นๆได้ผ่านทางพอร์ทต่างๆ รวมทั้งจ่ายไฟให้มันด้วย
การจ่ายไฟให้ jetson nano ทำได้สองทาง คือผ่านทาง micro USB port และ jack DC เป็น 5V ทั้งคู่ เลือกเอาอย่างใดอย่างหนึ่ง โดยการใช้ jumper
ความแตกต่างนั้น ตามความเข้าใจของผม USB port นั้นสามารถรับ-จ่ายกระแสได้น้อยกว่า อย่าง jetbot นี้ ตอนรันใช้ไฟจาก power bank ผ่าน USB port ระบบจะถูกกำหนดให้ทำงานในโหมดกินพลังงานต่ำ
ส่วน jack DC คงไม่มีปัญหานี้ จัดเต็มได้เลย บริโภคไฟกันได้สุดๆ ดังนั้น adapter ที่ใช้ ก็น่าจะเป็น 5V 4A ขึ้นไป ก็เผื่อคุณภาพและประสิทธิภาพการทำงานของตัว adapter ไว้ด้วย

2. ชุดคิท jetbot
ประกอบไปด้วย 3D printed โครงหุ่นและล้อ ส่วนที่เป็นอุปกรณ์อิเล็กทรอนิกส์ ก็มีเพียง มอเตอร์ บอร์ดขับมอเตอร์ featherwing และกล้อง raspberry pi camera แค่นั้นเอง อ้อแล้วก็ power bank อีกอย่างนึง

เรื่องการประกอบ ใน github ของ jetbot มีอธิบายไว้ชัดเจนพอสมควร ผมคงไม่เขียนถึง

ก็ไปเตรียมหุ่นกันไว้นะ แล้วในตอนหน้า มาเริ่มใช้งานกันดีกว่า

ว่าด้วยเรื่องของ thermal printer

ไม่ได้เขียนลงที่นี่ซะนานเลย เนื่องด้วยเพราะเวลาเขียนอะไรสั้นๆ หรือแนะนำสินค้า ตอนนี้มีหน้าเพจ iot e-shop ด้วย ก็เลยไปโพสลงในนั้น รวมถึงถ้าเกี่ยวข้องกับ kiosk ก็ยังมีเพจ bangkokdev ให้ลงอีกด้วย

ตั้งแต่ตั้งใจมาทำตู้ kiosk ขาย สิ่งหนึ่งที่พยายามหาโซลูชั่นมาตลอดนั่นก็คือเรื่องของ thermal printer โจทย์เรื่องนี้นั้นแยกย่อย ไปได้หลายประเด็น คือ
1. ใช้งานอยู่บนระบบปฎิบัติการอะไร Windows, Linux, Android รวมถึง สถาปัตยกรรม CPU อะไร x86 หรือ ARM
2. รองรับภาษาไทย
3. interface port ที่ต้องการใช้ USB หรือ Serial port
4. ใช้งานผ่าน driver (หมายถึงเราต้องลงหรือทำการ install driver ปรินเตอร์จากผู้ผลิตก่อนใช้งาน) หรือ ESC/POS command
5. ราคา

ถ้าไม่ต้องคำนึงถึง ข้อ 5. มีงบเหลือๆ ใช้ EPSON หรือยี่ห้ออื่นๆ ที่รองรับภาษาไทยได้ดี ทั้ง ESC/POS และ driver ก็จบได้เลย
แต่ถ้าคิดว่า คุณต้องการทำตู้บัตรคิว ที่สามารถพิมพ์บัตรคิวหรือสลิปขนาดหน้ากระดาษกว้าง 58 มม. มีการพิมพ์ไม่กี่คำ ไม่กี่บรรทัด รูปแบบตายตัว มีปรินท์เตอร์สำหรับตู้คีออสที่ราคาถูกกว่ากันหลายพันบาทเมื่อเทียบกับระดับ EPSON สักตัวนึง ถ้าคุณสามารถทำให้มันรองรับงานได้ ก็ลดต้นทุนไปได้ ทั้งในระยะเริ่มต้นและการบำรุงรักษา
ข้อจำกัดที่ปรินท์เตอร์จีนราคาถูก ไม่สามารถทำได้ดี คือ ข้อ 2 การพิมพ์ภาษาไทย บวกกับข้อ 4 คือในกรณี ที่ใช้ ESC/POS นั่นเอง เนื่องจากภาษาไทยมีการพิมพ์ 3 แถวสำหรับ 1 บรรทัด เพราะมีทั้ง สระ และวรรณยุกต์ ถึงแม้ว่า ตัวปรินท์เตอร์จะฝังฟ้อนท์ไทยมาให้ แต่ตัวเฟิร์มแวร์ ไม่ได้รองรับ เราจึงต้องเขียนโปรแกรมเพื่อแก้ไขปัญหานี้เอาเอง

ถ้าว่ากันในเรื่อง software และ programming ก็จะเกี่ยวข้องกับ ข้อ 3 และ 4 โดยเฉพาะบน Linux และการใช้งาน printer ที่เป็น USB interface
หลายคนเขียนระบบคิวแบบ web app และใช้โมดูล escpos-php ในการติดต่อกับปรินท์เตอร์ โดยเบื้องหลังนั้น ถ้าใช้ USB printer บน windows นั้น เป็นการเขียนคำสั่งลงบน mapped file โดยเราต้องทำการ share printer ก่อนจึงจะใช้งานได้ ส่วนบน Linux นั้นใช้ CUPS command line ในการพิมพ์

แล้วถ้าเป็น C++ ละ ผมเคยนั่งเขียนโค้ดด้วย Qt/C++ โดยใช้ escpos-php เป็นไกด์ไลน์ เพื่อใช้กับ printer ผ่านทาง serial port
แต่สำหรับ USB printer บน Linux ผมนั่งหาในกูเกิ้ล จนเจอ escpospp เมื่อลองศึกษาดูโค้ดแล้ว ก็พบว่า ใช้การเขียนข้อมูลไปที่ printer โดยใช้ libusb อาจจะเรียกได้ว่าเป็น user mode driver ก็ได้ครับ นอกจากนั้นยังมีโปรเจ็ค QtUSB ที่ทำให้สามารถใช้งาน libUSB บน Qt ได้ ทำนองเดียวกันกับ QtSerialport
สำหรับการใช้งาน libUSB จำเป็นต้องรู้จัก USB device ว่าประกอบด้วยอะไรบ้าง เช่น interface, endpoint เพื่อให้สามารถระบุปรินท์เตอร์ที่เราต้องการเชื่อมต่อได้ รวมถึงวิธีการหรือฟังก์ชั่นในส่งข้อมูลให้กับ device (ในกรณีส่ง ESC/POS command เห็นใช้ bulk transfer กัน)

สุดท้าย ถ้าต้องการจะพิมพ์ด้วยฟ้อนท์ไทยสวยๆ หลากหลายแบบและขนาด ก็คงต้องเขียนโปรแกรมสั่งพิมพ์ผ่าน driver เอา อย่างเช่นใน Qt ก็มีโมดูล QPrinter ให้ใช้ครับ

I-IoT

ช่วงสิ้นปีมีโอกาสทำการทดลองสองสามตัวที่เกี่ยวข้องกับ I-IoT
เริ่มด้วย
1. ใช้ Raspberry Pi อ่านสัญญาณจาก ultrasonic sensor ส่งเข้า HMI software ผ่านทาง Modbus TCP ก็เหมือนกับเป็นการทดลองทำระบบ SCADA นั่นเอง

2. อ่านค่าจาก เซ็นเซอร์ ด้วยโปรโตคอล Modbus RTU ผ่านทาง RS485 แล้วส่งให้ software น่าจะเรียกได้ว่าเป็น edge software อย่าง KEPServerEX ที่ทำตัวเป็น OPC UA server แล้วให้ Node-RED ไปดึงข้อมูลมาแสดงผล โดยการสร้าง dash board และสามารถดูได้บน web browser

 

3. ส่วนอีกแบบหนึ่ง สำหรับระบบ SCADA เดิม ที่สามารถ export ข้อมูลออกมาเป็น csv หรือ excel ได้ อยากจะเอาข้อมูลการ operate ขึ้นเว็บออนไลน์ เพื่อทำการวิเคราะห์และแสดงผลออกมาเป็น ตาราง หรือ chart ต่างๆโดยไม่ต้องไปยุ่งกับระบบเดิมมากนัก ก็ใช้วิธีทำ dash board ด้วย การเขียน web application ขึ้นมาต่างหาก แล้วโยนไฟล์ที่ export ออกมาขึ้นไปให้

ใครที่สนใจต้องการทำ dash board  ติดต่อได้ครับ ผมรับงานนะครับ อิอิ

3D printing

ช่วงนี้ตัดสินใจซื้อ 3D printer มาใช้ กะว่าจะปริ้นท์ ชิ้นส่วนบางชิ้นที่หายากหรือราคาสูง เวลาทำโปรเจ็คต่างๆ ยิ่งโปรเจ็คอิเล็กทรอนิกส์ตามเว็บเมืองนอกที่น่าสนใจมีมากมาย เดี๋ยวนี้ใช้ปริ้นท์ขิ้นส่วนเอาแทบทั้งนั้น ไม่ว่าจะเป็น หุ่นยนต์, IoT หรือ home automation

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

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

ก่อนจะเริ่มทำการปริ้นท์ ก็ควรเช็คตำแหน่งต่างๆให้ถูกต้องตามคู่มือเสียก่อน การปรับระดับถาดปริ้นท์สำคัญมากๆ ระยะระหว่างหัวฉีดกับถาด ในการปรับแต่ง ผมใช้กระดาษ A4 สอดไประหว่างกลาง ให้กระดาษสามารถเลื่อนได้ไม่ฝืดหรือไม่หลวมจนเกินไป

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

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

หลังจากใช้งานมาสักพัก ปรินท์นั่นนี่โน่นมาจนใชฟิลาเม้นท์เกือบหมดม้วน 1 kg ภายในเวลาอันรวดเร็ว การศึกษาวิธีการใช้งานที่ดีที่สุด คือ ลองปริ้นท์มันเลยครับ เพราะระหว่างที่ปริ้นท์เราก็จะเจอปัญหาต่างๆ เช่น ชิ้นงานไม่สวย เกิดการผิดพลาดระหว่างการปริ้นท์ เหล่านี้ล้วนมาจากติดตั้งและเตรียมเครื่องทั้งนั้น หากติดตั้งได้ดีถูกต้อง ชิ้นงานจะออกมาสวยงามคมชัดถูกต้องอย่างไม่น่าเชื่อเลยครับ มันจะเป็นความรู้สึกดีๆ เมื่อคุณได้ผลิตชิ้นงานได้เอง

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

 

 

ทดลองเล่น LoRa

มีโอกาสได้ทำการทดลองใช้งาน LoRa module กับ IoT platform ทั้งแบบ LoRa ธรรมดา และ LoRaWAN ความแตกต่างระหว่าง 2 แบบนี้ คือ LoRaWAN มี network protocol เพิ่มเข้ามาเป็นมาตรฐานการสื่อสารเช่นเดียวกับพวก WIFI แต่ก็ไม่ถึงกับมีความจำเป็นจะต้องใช้แบบ LoRaWAN แต่เพียงอย่างเดียวเท่านั้น งานระบบง่ายๆ หรือเขียน gateway เองได้ ก็จะสามารถใช้ LoRa module ได้หลากหลายแบบขึ้น เช่น ใช้โมดูลที่แปลง LoRa เป็น UART ให้เลย หรือถ้าใครต้องการระบบที่มีมาตรฐาน มีความปลอดภัย ก็ใช้ LoRaWAN ไป

ระบบแรกที่ได้ทดลองทำคือ Thingsboard.io โดยใช้ MQTT เป็นตัวส่งข้อมูลขึ้นไปให้ ฝั่ง LoRa device กับ gateway ก็เขียนโปรแกรมรับส่งข้อมูลเอง

ส่วนอีก platform หนึ่งคือ TheThingsNetwork.org อันนี้มี LMIC library ที่ implement LoRaWAN stack ให้ มีโปรแกรม gateway ที่มีคนเขียนด้วย LMIC ให้ได้ลองศึกษากันงานกันได้เลย ที่ผมทำการทดลอง ก็ใช้ single channel gateway ซึ่งอันที่จริงก็ไม่ได้เป็นไปตามมาตรฐาน (ควรจะเป็น multi-channel) แต่ก็หยวนๆกันไป เพราะ hardware มีราคาถูกกว่า คนเข้าถึงเพื่อเรียนรู้ได้ง่ายกว่า

ก็ต้องรอดูกันไปว่า จะเกิดมั้ย เพราะ การสื่อสารแบบอื่นๆ อย่างเช่น NB-IoT ก็มีบริษัทฝั่งอเมริกาหนุนอยู่ครับ

developer diary – ตอน Qt3D

ห่างหายจากการอัพเดตความรู้ไปนาน วันนี้นั่งสำรวจ Qt3d ว่าเป็นยังงัย ไปถึงไหนแล้ว เจออันหนึ่งน่าสนใจ ObjectPicker แล้วก็เรื่อง SkyBox พอ Qt 5.10 น่าจะออก feature นี้มา
พอดูเรื่อง Skybox ก็เลยไปดูต่อว่า เราจะสร้าง texture สำหรับมันได้อย่างไร พวก เครื่องมืออย่าง photoshop มีปลั๊กอิน แต่ถ้าเป็นการเอาภาพจริงมาสร้างน่าจะง่ายกว่า โดยอาศัยกล้อง 360 องศาถ่ายแบบ panorama แล้วใช้โปรแกรมช่วย ตอนนี้หาไม่ยาก เพราะเรื่อง VR กำลังมา
พอได้ texture แล้วทีนี้ก็เอามาใช้ไนการเขียน 3d scene ด้วย QML
ปีที่แล้วเห็นมีคุยกันเรื่อง Qt 3d studio ตอนนี้กลับเงียบๆไป

MQTT + Silk

Silk เป็น web framework อีกตัวหนึ่งครับ แต่ไอเดียจะแตกต่างจากตัวอื่นๆที่เคยเขียนถึงไป ตัวนี้ค่อนข้างถูกจริตกับผมมากกว่าตัวอื่นๆ เนื่องจากมันคือการเขียน HTML document ด้วย QML

การที่มันยังสามารถใช้ model/view ของ QML ได้นั้น ทำให้เราสามาารถดึงข้อมูลจาก C++ model ไปแสดงใน HTML table ได้อย่างง่ายดาย

การที่มันยังเขียน web ได้ในแบบเดิมๆ ใช้ javascript ได้ ก็ทำให้ไม่ต้องเปลี่ยนแปลงวิธีการเขียนในส่วนนี้ไป

และด้วยความที่มันเป็น C++ web server โดยตัวมันเอง มันน่าจะเหมาะกับโปรเจ็คเล็กๆ อย่างพวก IoT ที่ไม่ได้ต้องการรองรับ client จำนวนมาก

จากที่ว่ามา ผมจึงเอามันมาลองกับ MQTT โดยมี hardware คือ nodemcu เอามาต่อกับ sensor DS18B20 เขียนโปรแกรมด้วย Arduino IDE โดย ก็ต้องลง library ESP8266, OneWire, PubSubClient (MQTT), DallasTemperature เพื่อให้ใช้อ่านค่าอุณหภูมิและส่งข้อมูลไปให้ MQTT server ผ่าน wifi ได้

 

ตัว server ก็เป็น linux รัน mosquitto ที่รองรับ websocket และ รัน silk webserver โดยเขียน web app ให้ subscribe MQTT message ผ่าน websocket ได้โดยใช้ paho javascipt client และใช้ justgage แสดงผลข้อมูลที่ได้ในแบบ graphics

การเล่นไฟล์เสียงต่อเนื่องกัน

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

ผมก็ลองอัดเสียงหล่อๆของตัวเอง (แหวะ ฮ่าๆ) แล้วก็ตัดมันออกเป็นหลายๆไฟล์ แล้วก็หาวิธีเล่นมันอย่างต่อเนื่อง ตัวโปรแกรมที่สามารถเล่นได้ก็มีหลายตัว ที่ผมลองแล้วก็มี gstreamer และ sox ครับ

จากการลองใช้งานทั้งคู่ ซึ่งเป็น command line ดู sox จะให้คุณภาพเสียงที่ดีกว่า แต่ทั้งนี้ทั้งนั้น ผมใช้ค่า default ในการเล่นนะ ไม่ได้ปรับแต่งค่าใดๆ