เก็บตก TGR2019

แวะไปงาน TESA Top Gun Rally 2019 (TGR2019) ครั้งที่ 13 ปีนี้จัดที่มหาวิทยาลัยศิลปากร วิทยาเขตพระราชวังสนามจันทร์ ตั้งแต่วันที่ 6-12 มกราคม โจทย์ในการแข่งขันครั้งนี้เกี่ยวกับระบบจัดการโบราณสถาน 4.0 TGR2019 ปีนี้โจทย์น่าสนใจมาก เพราะมีเรื่องของการอนุรักษ์ การบำรุงรักษา และการส่งเสริมการท่องเที่ยว นอกจากโจทย์จะสนุกและท้ายทายเหล่าผู้เข้าแข่งขัน Top Gun แล้วยังมีผู้เชี่ยวชาญในสาขาต่างๆ มาเป็นวิทยากรบรรยายในหลากหลายหัวข้อ ทั้งในเรื่อง Project Management, LoRa IoT, REST API Development, LINE Beacon, LINE Bot, Dialogflow, Tensorflow นอกจากจะสนุกแล้วน้องๆ ยังได้ความรู้ไปด้วย

ปล.ขอบคุณภาพสวยๆ จากทีม PR CAT Telecom ครับ ติดตามข่าวกิจกรรมได้จาก

เอา Node32pico มาควบคุม DJI Tello กัน

จากครั้งที่แล้วได้ใช้ Node32s ส่งคำสั่งเพื่อควบคุม Tello ผ่าน udp ไป ครั้งนี้จะมาลองอะไรที่สนุกกว่าคือการใช้ Node32pico ที่มี 9DOF Sensor (3D accelerometer, 3D gyroscope, 3D magnetometer) มาควบคุม Tello ดูบ้าง หลักการง่ายๆ คือ อ่านค่าจาก accelerometer เปรียบเทียบกับลักษณะการหมุน และส่งคำสั่งไปยัง Tello

แปะวิดีโอให้ดูนิดนึง

ใครที่มี Node32pico ก็เอามาควบคุม Tello กันได้ หรือจะเอามาทำ remote control ก็น่าสนใจครับ

LINE Things

งาน LINE Developer Day ที่ผ่านมามีเรื่องเกี่ยวกับ LINE Things มี feature ใหม่ๆ ที่เพิ่มความสามารถของการเชื่อมต่อและควบคุมอุปกรณ์ Bluetooth Low Energy (BLE) ซึ่งทาง LINE ก็มีอุปกรณ์เป็น developer board ออกมาให้ได้ลองเล่นกัน และยังมี LINE Things compatible device ด้วย ซึ่งคุณสามารถใช้ชิป BLE อย่างเช่น nrf52, ESP32 ได้

วิดีโอแนะนำ LINE Things

slide แนะนำ LINE Things

โครงสร้างและบริการที่เกี่ยวข้องกับ LINE Things

จากภาพเราสามารถใช้ Messaging API ร่วมกับอุปกรณ์ LINE Things ได้ซึ่งการอ่านค่าและควบคุมอุปกรณ์สามารถทำผ่าน LIFF App ซึ่งเป็น Web App ซ้อนอยู่ใน LINE อีกชั้นหนึ่ง ซึ่ง LIFF App นี้จะสามารถสื่อสารกับอุปกรณ์ LINE Things ได้

ตัวอย่าง project ที่ใช้ LINE Things

รีวิวบอร์ด Ayarafun/LamLoei Node32 Lite

เมื่อสัปดาห์ก่อนได้รับบอร์ด Node32Lite จากพี่ช้างแห่ง Ayarafun Factory ส่งบอร์ดมาให้ทดลองเล่น บอร์ด Node32Lite นี้ ออกแบบและผลิตโดยคนไทย โดย Ayarafun/LamLoei และผลิตโดย GravitechThai เป็นบอร์ดที่ออกแบบและผลิตโดยคนไทย 100%

  • ตัวบอร์ดใช้ชิป ESP-WROOM-32 เป็น Wifi/Bluetooth module จาก Espressif
  • ตัวบอร์ดมีขนาดกว้าง 0.9 นิ้ว ทำให้เหลือช่องบน breadboard ข้างละ 1 ช่อง
  • ใช้ FTDI ชิปเพื่อการโหลดโปรแกรมแบบอัตโนมัติ
  • มีวงจร PTC Fuse ตัดกระแสไฟเกินที่ 500mA
  • มี regulator 3.3V 600mA บนบอร์ด
  • มี Push button switch ที่ขา IO0 และ EN สำหรับ reset
  • เหมาะสำหรับงาน พัฒนาต้นแบบ อุปกรณ์รูปแบบ Portable และ Wearable

แปะวิดีโอแกะกล่อง

สั่งซื้อได้ที่ GravitechThai และร้าน Home of Maker สำหรับข้อมูลเพิ่มเติมเกี่ยวกับบอร์ดและ resource ต่างๆ สามารถอ่านเพิ่มเติมได้ที่เว็บไซต์ของ Ayarafun Factory ครับ

มาเล่น DJI Tello สไตล์ IoT กัน

ช่วง Black Friday มีสินค้าลดราคากันเยอะมาก DJI ก้อจัดรายการเหมือนกัน วันนี้เห็น post ใน Facebook ของ PowerBuy และ DJI ต่างก็กระหน่ำลดราคาสินค้ากัน ก็เลยลองมาค้นข้อมูลดูหน่อยว่า ถ้าซื้อมาจะเขียนโปรแกรมควบคุมยังไงได้บ้าง

พอทราบข้อมูลเบื้องต้นว่า Tello สั่งงานผ่าน wifi ซึ่งตัวโดรนจะเป็น UDP server เราสามารถส่งคำสั่งไปควบคุม Drone ได้ ทำให้มีเครื่องมือออกมาหลายตัว เช่น

ในเว็บไซต์ของ Tello เอง ยังมี Tello Edu มี SDK ให้ดาวน์โหลดไปพัฒนาต่อยอดได้ เช่น Drone Swarm, Multi Control, AI เป็นต้น

นอกจากนี้เรายังสามารถใช้ IoT dev kit ต่างๆ อย่างเช่น ESP8266, ESP32 มาควบคุม Drone ได้ด้วย

แปะโค้ดตัวอย่างไว้นิดนึง

*** ข้อควรระวัง อย่าบินเกินระยะของสัญญาณ Wifi นะครับ 🙂 ***

แปะวิดีโอแกะกล่อง และ Git Repository เพิ่มเติมนะครับ

มาติดตั้ง KidBright IDE บน Raspberry Pi กัน

ผมได้มีโอกาสไปเล่น Pi Top Ceed ที่บูธของ MakerAsia ในงาน Thailand 4.0 ชอบ Pi Top Ceed มานานละ มันคล่องตัวและสะดวกมาก แนวคิดคือหิ้ว Pi Top Ceed ไปออกงาน แล้วเสียบ keyboard mouse แล้วใช้งานได้เลย แต่ประเด็นไม่ได้อยู่ที่ Pi Top Ceed แต่เป็น KidBright IDE บน Raspberry Pi ต่างหาก วันนี้ก็เลยมาลองติดตั้ง KidBright IDE บน Raspbian กันสักหน่อย

ก่อนติดตั้ง ต้องทำความเข้าใจกันก่อนว่า script สำหรับติดตั้ง KidBright IDE ใช้สำหรับเครื่องคอมพิวเตอร์ที่เป็น CPU ตระกูล X86 แต่ Raspberry Pi เป็น ARM ดังนั้นสิ่งที่ต้องทำมีดังนี้

  • ติดตั้ง KidBright IDE
  • compile toolchain ใหม่

มาลงมือกันเลย ติดตั้ง dev tools กันก่อน

sudo apt-get install git wget make libncurses-dev flex bison gperf python python-serial gawk gperf grep gettext python python-dev automake bison flex texinfo help2man libtool libtool-bin

ติดตั้ง KidBright IDE

ดาวน์โหลด node.js v8

wget -c https://nodejs.org/dist/latest-v8.x/node-v8.13.0-linux-armv7l.tar.gz

แตกไฟล์

tar zxvf node-v8.13.0-linux-armv7l.tar.gz

ตั้ง path

export PATH=$PATH:$HOME/node-v8.13.0-linux-armv7l/bin

ทดสอบ node กันก่อน

node -v

จะได้ผลลัพท์เป็น version ของ node.js

จากนั้นติดตั้ง pyserial

pip install pyserial

สั่ง clone KidBright IDE มาจาก gitlab ได้เลย

git clone https://gitlab.com/kidbright/kbide --recursive

สั่ง build

cd kbide

npm run build

เมื่อสั่ง build ตัวโปรแกรมจะติดตั้ง toolchain มาให้ แต่เป็น X86 เราต้อง compile toolchain ใหม่ให้ใช้บน ARM ได้ไม่งั้น compile programe ไม่ได้นะ

สั่ง clone crosstool มาเพื่อ compile toolchain ใหม่

git clone -b xtensa-1.22.x https://github.com/espressif/crosstool-NG.git

สั่ง compile

cd crosstool-NG

./bootstrap && ./configure --enable-local && make install

./ct-ng xtensa-esp32-elf

./ct-ng build

นอนรอ Zzz ใช้เวลา compile ประมาณ 20 นาที เมื่อ compile เสร็จให้ chmod เพื่อให้ excute ได้

chmod -R u+w builds/xtensa-esp32-elf

เปลี่ยน toolschain ที่มีอยู่เดิม เท่านี้ก็เรียบร้อย

cd ..

rm -rf xtensa-esp32-elf

cp -rf builds/xtensa-esp32-elf .

จากนั้นสั่ง run KidBright IDE ได้ตามปกติ

npm start

ลองลากๆ วางๆ

กด flash ไม่พังเป็นอันใช้ได้

IoT Landscape 2018

เนื่องจากได้คุยกับผู้รู้หลายๆ ท่าน เรื่องฐานข้อมูลผู้ประกอบการด้าน IoT ว่าบริษัทด้าน IoT ในบ้านเรามีใครบ้าง สอบถามจากหลายๆ ท่านได้ไอเดียจากคุณโอ๊ด ThaiEasyElec แนะนำเรื่อง IoT Landscape แถมส่ง link มาให้ด้วย ก็เลยนึกขึ้นได้ว่า โอ้ว…ในบ้านเรามีใครบ้างนะ


ภาพจากเว็บไซต์ MattTurck

จบงาน KidBright Developer Meetup #1 สร้าง plugin แบบง่ายๆ ได้ 1 อัน

หลังจากไปร่วมงาน KidBright developer meetup มาก็เลยได้ลองสร้าง KidBright plugin ง่ายๆ มา 1 อัน เป็น plugin ไฟกระพริบ ใช้เครื่องมือ generator ทุ่นแรงจากน้องนัทช่วยสร้างโครงให้

จบงานได้มา 1 block เป็น เปิด/ปิด LED บนบอร์ดแบบง่ายๆ ถ้าเอาเข้า loop ใส่ delay นิดหน่อยก็ได้ไฟกระพริบแล้ว

แล้วก็มาทำต่อเพิ่มเติม ให้ครบตามข้อกำหนดของการสร้าง block

แปะ git repository ไว้ให้ https://github.com/anoochit/kidbright_ledx ปล.ไม่มีบอร์ด KidBright เลยไม่ได้ทำอะไรต่อ

แนวคิดเบื้องหลัง Blockly ในมุมมองของนักพัฒนาซอฟต์แวร์

ช่วงนี้ได้มาศึกษา Blockly ของ Google โครงการ Blockly ถูกนำไปประยุกต์ใช้ในหลายโครงการโดยส่วนใหญ่ เน้นเป็นเครื่องมือสำหรับเด็กเพื่อฝึกหัดเขียนโปรแกรม โดยส่วนตัวรู้สึกแปลก เพราะการเขียนโปรแกรมต้องเขียนเป็นชุดคำสั่งและชุดคำสั่งก็ต้องเขียนเป็นชุดคำสั่งจริงๆ บน text editor ไม่ใช่เป็นการลาก block เอามาวางต่อกัน แล้วจะเหมาะสำหรับเด็กที่ต้องการฝึกเขียนโปรแกรมได้อย่างไร แต่หลังจากที่ได้อ่านแนวทางการออกแบบ block สำหรับนักพัฒนา จากเว็บไซต์ Google Developer ก็เข้าใจว่ามีแนวทางการออกแบบไม่ใช่แค่ block มาต่อๆ กันแล้วใช้งานได้ เหมือนอย่างที่เข้าใจ

การออกแบบเป็นสิ่งสำคัญ Blockly ถือเป็น IDE รูปแบบหนึ่ง ซึ่งการออกแบบ block ในแต่ละแบบสามารถกำหนดเงื่อนไขต่างๆ ได้ เช่น ชุดคำสั่งเดี่ยว คำสั่งส่งค่า (output statement) คำสั่งรับค่า (input statement) เป็นต้น ซึ่งเงื่อนไขต่างๆ สามารถกำหนดได้ตามความเหมาะสมของผู้ออกแบบ ลองมาดูตัวอย่าง block แบบต่างๆ กัน

ชุดคำสั่งที่มี input / output ตัวอย่างเช่น คำสั่งหาความยาวของตัวอักษร ซึ่งคำสั่งนี้ต้องรับค่าเป็น string เมื่อคำนวนความยาวได้แล้วจึงส่งข้อมูลออกไป ตัวอย่าง block จะเป็นแบบนี้

จะเห็นว่ามีการรับเข้าทางขวาและส่งค่าออกทางซ้าย ตามรูป ซึ่งผู้ออกแบบสามารถกำหนดได้ว่า block แบบนี้จะต้องต่อกับ block ที่เป็นตัวแปล string เท่านั้น

block ที่มีการเชื่อมต่อกับคำสั่งถัดไป (Next Connection) ชุดคำสั่งประเภทนี้จะมีจุดเชื่อมในส่วนท้ายของ block เพื่อต่อกับคำสังถัดไป ถ้าเป็นคำสั่งแบบเหตุการจะเพิ่มหมวกเข้าไปเพื่อแสดงความแตกต่าง

block ที่มีการเชื่อมต่อกับคำสั่งก่อนหน้า (Previous Connection) ชุดคำสั่งประเภทนี้จะมีจุดเชื่อมในส่วนบนของ block

block ส่งค่า (Block Output) โดยส่วนใหญ่จะส่งค่าออกมา 1 ค่า รูปแบบของ block จะมีหัวคล้ายจิ๊กซอออกมาทางด้านซ้ายของบล็อก ดังรูป

block รับค่า (Block Input) เป็น block ที่สามารถรับค่าที่ส่งออกมาจาก block อื่นๆ ได้ ซึ่งมีรูปร่างหลายแบบ จากตัวอย่างเช่นคำสั่งวนรอบตามเงื่อนไข

จากภาพ block เราจะเห็นว่าสามารถเลือกคำสั่งที่เป็น drop down ได้ และใส่เงื่อนไขให้ได้ ซึ่งเป็น block ที่มี input และ output นั่นเอง จากภาพเป็นฟังก็ชั่น isEmpty(var) เป็นต้น

ลักษณะของ Input field ยังมีหลายแบบ เป็น dropdown list, รับค่าจาก block อื่น หรือแม้กระทั่งกรอกข้อมูลลงไปได้

สำหรับชนิดของข้อมูลที่จะรับเข้า หรือส่งออก สามารถกำหนดได้เช่นกัน ซึ่งฟิลด์ชนิดข้อมูลในเบื้องต้นมีดังนี้

  • field_input
  • field_dropdown
  • field_checkbox
  • field_colour
  • field_number
  • field_angle
  • field_variable
  • field_date
  • field_label
  • field_image

รูปแบบ Input มีดังนี้

  • input_value
  • input_statement
  • input_dummy

ลักษณะการเรียงขององค์ประกอบ block ก็สำคัญเช่นกัน บางประเทศเป็นการอ่านจากขวามาซ้าย (RTL) ไม่ได้เป็นการอ่านจากซ้ายมาขวา ดังนี้ต้องวางรูปแบบให้เหมาะสม

การเรียงลำดับของชุดคำสั่งในแต่ละ block ก็ควรสื่อความหมาย เช่น คำสั่ง repeat ต้องรับค่าตัวเลขจำนวนครั้งเข้ามา จากนั้นจึงวนรอบชุดคำสั่งภายใน เป็นต้น

การเรียงแบบ Inline หรือ External สำหรับการรับค่าก็มีรูปแบบแตกต่างกัน ตัวอย่างคำสั่ง count เรียงแบบ Inline, External

ฟิลด์ (Fields) สามารถกำหนดได้หลายรูปแบบตามประเภทของฟิลด์ เช่น

ฟิลด์แบบตัวเลข

ฟิลด์สำหรับป้ายกำกับ (Label)

ฟิลด์สำหรับรูปภาพ (Field Image)

ฟิลด์สำหรับตัวอักษร (Text Field)

ฟิลด์แบบตัวเลือก (Drop-down Field)

ฟิลด์แบบเช็คบ็อกซ์ (Checkbox Field) ส่วนใหญ่ใช้กับค่าที่เป็น boolean

ฟิลด์เลือกเชดสี (Color Picker Field)

ฟิลด์สำหรับตัวแปร (Variable Field)

ฟิลด์สำหรับตัวเลข (Number Field)

ฟิลด์สำหรับค่าองค์ศาของมุม (Angle Field)

ฟิลด์วันที่ (Date Field)

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

การตั้งค่า (Configuration) จะเป็น block ชุดคำสั่งเดียว สำหรับกำหนดคุณสมบัติต่างๆ ให้กับโปรแกรมนั้นๆ

คำสั่งต่อเนื่อง (Serial program) ชุดคำสั่งต่อเนื่องจะเป็นคำสั่งโดดๆ สามารถเอามาเรียงต่อกัน การประมวลผลจะเป็นไปตามลำดับของ block ที่เอามาเรียงต่อกันนั่นเอง

คำสั่งทำงานคู่ขนาน (Pararell program) block คำสั่งทำงานคู่ขนานจะประมวลผลอยู่คนละแกน (core) ของหน่วยประมวลผล อาจจะเรียกว่าเป็น task ก็ได้

คำสั่งเหตุการณ์ (Event Driven Program) block คำสั่งแบบนี้มักจะใช้กับเหตุการณ์ที่ถูกกำหนดไว้ เช่น เมื่อคลิกเมาส์ เมื่อกดปุ่ม เป็นต้น

นอกจาก block ที่เอามาเรียงต่อกันเป็นชุดคำสั่งแล้ว ระบบหลังบ้านของ Blockly จะมี generator ช่วยแปลง block ต่างๆ ออกมาเป็นชุดคำสั่งภาษาโปรแกรม เพื่อเอาไป compile เพื่อให้เป็นโปรแกรมตามปกติ

หลังจาก KidBright Developer Conference เกิดอะไรขึ้นบ้าง

NECTEC เปิดตัว KidBright เป็นโครงการ OpenSource ในงาน KidBright Developer Conference เมื่อวันเสาร์ที่ผ่านมา ก็ได้มีการรวมตัวของ Maker Community ว่าจะจัดกิจกรรมที่เกี่ยวข้องกับ KidBright บ้าง ก็เลยเกิดงาน KidBright Develper Meetup ตอน มาสร้าง Plugin ให้ KidBright IDE กันเถอะ นำทีมโดยท่านประธานชมรมเชียงใหม่เมกเกอร์

ท่านใดสนใจก็เข้าร่วมลงทะเบียนกันได้ ปล. ระหว่างนี้ก็แกะ KidBright IDE กันไปพลางๆ ก่อน อ้อ เกือบลืมไป น้องนัททำ KidBright Generator ไว้น่าจะทำให้การขึ้นโครงของ Plugin ง่ายมากขึ้น อัพเดท…ทางชมรมเมกเกอร์มหานครก็จัดกิจกรรม workshop และมีเรื่องการพัฒนา Plugin เพิ่มเติมเช่นเดียวกัน อย่าลืมลงทะเบียนก่อนไปงานนะครับ 🙂