ลองใช้ Waijung 2 กับบอร์ด Senses Weizen

Supachai Vorapojpisut
3 min readApr 9, 2021

--

โพสต์นี้จะสาธิตผลงานของนักพัฒนาไทย 2 ท่านคือ ไลบรารี Waijung 2 ซึ่งเป็นผลงานของบริษัท Aimagin โดย ดร.กฤษฎา แสงเพชรส่อง กับบอร์ด Senses Weizen ที่พัฒนาโดย SensesIoT ของคุณทศพร เวชศิริ ผมรู้จักกับทั้งสองท่านในหลายกิจกรรมและทึ่งเสมอกับพลังงานในการขับเคลื่อนองค์กรมุ่งสู่ธุรกิจพัฒนาผลิตภัณฑ์ (แทนที่จะเป็นซื้อมาขายไป) จึงอยากเขียนบทความสั้นๆมาแนะนำการใช้ผลงานของทั้งสองท่าน

Waijung 2 เป็นซอฟต์แวร์เสริมสำหรับ MATLAB/Simulink ให้สามารถสร้างโค้ดมาทำงานบนหน่วยประมวลผล ESP32 ซึ่งเป็นรุ่นที่สองที่แยกออกจาก Waijung เดิมที่ทางบริษัท Aimagin พัฒนาสำหรับไมโครคอนโทรลเลอร์ STM32 การมุ่งเป้าที่หน่วยประมวลผล ESP32 เป็นตัวเลือกในการเจาะเข้าตลาด IoT โดยอาศัยความสามารถในการเชื่อมต่อ WiFi และ Bluetooth ที่มากับโมดูล ESP32 รวมทั้งมีประสิทธิภาพในการประมวลผล (ทำงานที่ 240MHz, Flash ≥ 4 MB, RAM ≥ 520kB) ที่มากขึ้น เงื่อนไขพื้นฐานสำหรับการใช้งาน Waijung 2 คือ

  • MATLAB รุ่นมากกว่า 2018
  • มีไลบรารี Simulink + กลุ่ม Coder (MATLAB/Simulink/Embedded)

ม.ธรรมศาสตร์เป็นหนึ่งในสถาบันการศึกษาที่มี MATLAB campus license แล้ว ทั้งอาจารย์และนักศึกษาจึงสามารถดาวน์โหลด MATLAB และไลบรารีมาติดตั้งได้เลย Waijung 2 ได้รับการสนับสนุนงบประมาณวิจัยจากทาง วช. ทางบริษัท Aimagin เลยเปิดให้ดาวน์โหลดมาใช้งานได้ฟรี ขอเพียงไปลงทะเบียนที่เว็บไซต์ของ Aimagin เท่านั้น สำหรับโพสต์นี้ ผมใช้ MATLAB รุ่น 2021a และ Waijung 2 รุ่น 20.11b ซึ่งเป็นรุ่นล่าสุด โดยการติดตั้ง Waijung 2 ทำได้ง่ายมากด้วยการขยายไฟล์และเรียกใช้สคริปต์ install_waijung2.m เพื่อติดตั้ง Waijung 2 blockset และชุดเครื่องมือพัฒนา ESP-IDF ลงในคอมพิวเตอร์

การติดตั้ง Waijung 2

Senses Weizen เป็นบอร์ดพัฒนาที่ใช้โมดูล ESP32 ซึ่งมีจุดเด่นเมื่อเทียบกับบอร์ด ESP32 สารพัดรุ่นในตลาดคือ การเลือกใช้ form factor ของบอร์ด Raspberry Pi Zero โดยพยายามจัดขาต่างๆให้สอดคล้องกับ 40 pin connector ของ Raspberry Pi ประโยชน์ที่ชัดเจนของการมี form factor และ pin layout ที่ใกล้เคียงกับบอร์ด Raspberry Pi เลยทำให้สามารถใช้บอร์ดเสริมที่เรียกว่า HAT ได้ ทั้งนี้บอร์ด Senses Weizen ได้จัดกลุ่มขา 5V/3V3/GND, I2C, UART, SPI ไว้ตรงกันทั้งหมด จึงน่าจะเข้ากันได้กับบอร์ดเสริม HAT เกือบทั้งหมดในตลาด แต่จุดเด่นของบอร์ด Senses Weizen ที่มากกว่าการเลือกบอร์ด Raspberry Pi Zero คือ การมีกลุ่มขา analog สำหรับอ่านค่าแรงดัน ซึ่งเป็นจุดอ่อนของบอร์ด Raspberry Pi ที่ต้องมีบอร์ดเสริมสำหรับอ่านค่าแรงดันจากเซ็นเซอร์

pin layout ของบอร์ด Senses Weizen
pin layout ของบอร์ด Raspberry Pi

หลังจากติดตั้ง Waijung 2 จะมีกลุ่มฟังก์ชัน Waijung 2 Blockset ใน Simulink Library Browser ที่รวมบล็อกต่างๆสำหรับสร้างโค้ดมาทำงานโมดูล ESP32 การใช้งาน Waijung 2 จะเริ่มต้นด้วยการลากบล็อก Waijung 2 Target Setup เข้ามาใน Simulink Model จากนั้นจึงตั้งค่า COM port สำหรับเชื่อมต่อกับบอร์ด บอร์ด Senses Weizen จะใช้ CP210x เป็น USB-UART bridge ซึ่งจะตรวจสอบหมายเลข COM port ได้จากหัวข้อ Ports (COM & LPT) ใน Device Manager

การเริ่มต้นใช้งาน Waijung 2 กับบอร์ด Senses Weizen

ผมมักจะเริ่มต้นการพัฒนา Simulink Model ด้วยการ build code ทันทีหลังจากตั้ง target ของ code generation เสร็จ เพื่อทดลองว่าชุดเครื่องมือพัฒนาต่างๆทำงานได้ถูกต้องหรือไม่ อนึ่งชุดเครื่องมือพัฒนา ESP-IDF จะเรียกใช้ Python มาประมวลผลสคริปต์ ซึ่งหากมีปัญหาในขั้นตอนนี้ควรจะไปศึกษาขั้นตอนการติดตั้งและใช้งาน ESP-IDF แล้วค่อยกลับมาทดลองใหม่ การสั่งให้ Simulink ทำการ build code จาก model จะต้องไปเลือก Embedded Coder จากแท็บ Apps แล้วเลือก Build แทน Generate การทดลอง build รอบแรกสำหรับแต่ละ model จะใช้เวลานานมาก เพราะตัว ESP-IDF จะทำการ compile โค้ดทั้งหมดที่รวมไปถึงไลบรารีต่างๆ เช่น WiFi, Bluetooth, … หากต้องการดูสถานะของการ build สามารถคลิก View diagnostics เพื่อเปิดหน้าต่างดูผลการทำงานของ ESP-IDF

การทดลอง build code ของ Waijung 2

การพัฒนาซอฟต์แวร์บน Simulink จะแตกต่างจากการเขียนโค้ดภาษา C ใน ESP-IDF และ Arduino เนื่องจากเป็นรูปแบบการประมวลผลแบบ time-triggered ที่กำหนดด้วย fundamental sample time ที่กำหนด timing resolution ของการทำงานภาพรวมและ sample time ในแต่ละบล็อกที่เกี่ยวข้อง การเขียนโค้ดตัวอย่าง blink LED จึงใช้บล็อก pulse generator สร้างสัญญาณ 0/1 มาขับขา output โดยอัตราการเปลี่ยนแปลงสถานะ 0/1 จะขึ้นอยู่กับเวลา sample time ที่กำหนดในบล็อก pulse generator สำหรับ model เพื่อสาธิตแนวคิดนี้เลยใช้บล็อก pulse generator จำนวน 4 บล็อก ซึ่งใช้ sample time ที่ 0.1 วินาทีเท่ากันแล้วใช้ pulse width และ period ที่แตกต่างกันเพื่อให้ blink LED ด้วยความถี่และ duty cycle ที่แตกต่างกัน (1Hz/50%, 1Hz/20%, 2Hz/20%, 0.5Hz/10%)

model สาธิตการ blink LED ด้วยความถี่และ duty cycle ต่างกัน

ผมใช้บอร์ด Maker pHAT เพราะสะดวกตรงมี LED มา 8 ดวงและขนาดก็ตรงกับบอร์ด Senses Weizen พอดี สำหรับบล็อก GPIO Output เลือกใช้ขา 14/25/26/27 ของ ESP32 เพื่อให้ตรงกับตำแหน่ง LED (คำเตือนเลขกำกับขา LED บนบอร์ดอ้างอิง I/O ของ Raspberry Pi ไม่ใช่เลขขาของ connector) ซึ่งรอบสองนี้จะใช้เวลาน้อยลงมากเพราะไลบรารีต่างๆถูกคอมไพล์เรียบร้อยแล้ว

ผลการ build ตัว model ทำการกระพริบ LED 4 ดวง
ผลการทำงานบนบอร์ด Senses Weizen ที่กระพริบ LED บนบอร์ด Maker pHAT

終わりに (ในตอนท้าย)

ตามประเพณีของการเขียนโค้ดสำหรับไมโครคอนโทรลเลอร์ ผมเริ่มด้วยการกระพริบ LED เพื่อสาธิตว่า Waijung 2 จะใช้ร่วมกับบอร์ด Sensese Weizen อย่างไร แต่ยังมีอีกสารพัดความสามารถที่ทำได้ด้วยการพัฒนาซอฟต์แวร์ด้วย Simulink แล้วใช้ code generation มาทำงานบนหน่วยประมวลผลระดับไมโครคอนโทรลเลอร์ เช่น การใช้บล็อกจากกลุ่ม DSP มาประมวลผลสัญญาณ หรือการสร้าง state machine ด้วย Stateflow มาทำงานในบอร์ด หากสนใจประเด็นไหน ลองเขียน comment มาคุยกันได้ครับ

--

--

Supachai Vorapojpisut
Supachai Vorapojpisut

Written by Supachai Vorapojpisut

Assistant Professor at Thammasat University

No responses yet