ประสบการณ์แรกกับ Wio Terminal

Supachai Vorapojpisut
4 min readJul 24, 2021

--

Wio Terminal เป็นบอร์ดพัฒนาของ Seeed Studio ที่ไปรู้จักในฐานะ 1 ใน 3 อุปกรณ์ที่ใช้เรียนรู้ในคอร์ส IoT for Beginners — A Curriculum ของ Microsoft ตัวบอร์ดตอนเห็นแล้วคิดถึง M5Stack ทันที เพราะ core design คล้ายกัน (บอร์ดมาในเคสพร้อมจอ มีปุ่มกด และมี connector สำหรับขยาย) รวมทั้งตั้งราคาในย่านเดียวกัน แต่มีข้อแตกต่างในแง่ processor architecture ที่ชัดเจน

  • M5Stack ใช้หน่วยประมวลผล ESP32 ที่เป็น dual-core และรองรับทั้ง BLE 4.2 และ WiFi 2.4GHz โดยมีข้อแตกต่างหลักในรุ่นต่างๆคือ เซ็นเซอร์และขนาดหน่วยความจำแฟลช (ใช้ module ต่างกัน) แม้จะขยับไปออกอุปกรณ์รุ่นเล็ก เช่น M5StickC และ Atom ก็ยังคงใช้ ESP32 ที่ขนาดเล็กลง เลยทำให้ feel ในการเขียนโค้ดแทบไม่แตกต่างกัน
  • Wio Terminal ใช้ design แบบ 2 หน่วยประมวลผลซึ่งเป็น ARM Cortex-M4 ทั้งคู่ โดยหน่วยประมวลผลหลักคือ ATSAMD51P19 ของ Microchip ในขณะที่หน่วยประมวลผลของ WiFi คือ RTL8720DN ของ Realtek ที่เป็นขาใหญ่ในวงการ wireless ที่รองรับ WiFi ทั้ง 2.4 และ 5 GHz

แม้ว่า design ของ ESP32 ที่อาศัย task ทำงานบน core 0 ในการจัดการ WiFi จะมีข้อดีในแง่ต้นทุนราคาถูกกว่า แต่ประสบการณ์ที่เจอมาหลายทีคือ การเขียนโค้ดที่เชื่อมต่อเซิร์ฟเวอร์ด้วย HTTPS หรือใช้งาน BLE ไปด้วย (ต้องหลบดีๆเพราะใช้เสาอากาศเดียวกัน) เจอตัว processor reboot ไปหลายครั้งเหมือนกัน การแยกหน่วยประมวลผลออกมาจัดการ WiFi เลย น่าจะให้ความเสถียรและ throughput ที่ดีกว่าเหมือน design ของสมาร์ทโฟน

แม้ว่า design ของแต่ละแบบจะมีข้อดี/ข้อเสียแตกต่างกัน แต่คงไม่เหมาะที่จะเทียบแค่สเปคของฮาร์ดแวร์แล้วบอกว่าบอร์ดรุ่นไหนที่ควรเลือกมาใช้ ผมเลยจะทดลองใช้ Wio Terminal โดยเปรียบเทียบกับอุปกรณ์ในคลาสเดียวกันคือ M5Stack Gray และ M5Stack Core2 ซึ่งต่างก็มี WiFi, จอ LCD และเซ็นเซอร์ จากมุมมองของความง่ายสำหรับนักเรียนและนักศึกษาที่เพิ่งเรียนรู้

M5Stack Gray, M5Stack Core2 และ Wio Terminal

ว่าด้วยเครื่องมือพัฒนา

Wio Terminal และ M5Stack รองรับทั้งภาษา C/C++ และ Python โดยรองรับเครื่องมือพัฒนาที่ใกล้เคียงกัน เช่น

  • การติดตั้ง Wio Terminal สำหรับ Arduino IDE จะติดตั้งด้วยการป้อน URL ของ Seeed repository โดยเลือกเมนู Preferences > Additional Board Manager URLs แล้วจึงไปเลือกเมนู Tools > Board Manager เพื่อเลือกติดตั้ง processor support ส่วนการติดตั้ง M5Stack จะเริ่มจากการติดตั้ง Arduino Core for ESP32 ทาง Board Manager แล้วต้องไปเลือกติดตั้งไลบรารีเพิ่มเติมด้วยเมนู Tools > Manager Libraries ซึ่งก็ไม่วุ่นวายมากนัก
  • บอร์ด M5Stack จะรองรับ MicroPython หลังจากติดตั้งเฟิร์มแวร์ โดยมีฟีเจอร์ที่เสถียรกว่ามากเพราะถูกพัฒนามาคู่กับ UIFlow ที่เป็นเครื่องมือพัฒนาแบบ block-based ของ M5 ในขณะที่ Wio Terminal ดูจะเอียงไปทางค่าย CircuitPython มากกว่า

หลังจากติดตั้งเครื่องมือพัฒนาแล้ว โปรแกรม Arduino IDE จะแสดงรายการของโค้ดตัวอย่างสำหรับบอร์ดนั้นทางเมนู File > Examples ซึ่งฝั่ง M5Stack จะได้เปรียบกว่าเพราะสามารถเลือกใช้โค้ดตัวอย่างสำหรับบอร์ด ESP32 ที่รวมมากับ Arduino Core for ESP32 ได้ทั้งหมด ในขณะที่ Wio Terminal ยังคงพึ่งพาการพัฒนาจาก Seeed Studio เป็นหลัก

หลังจากติดตั้งแล้ว การทดลอง Arduino IDE ด้วยโค้ด Blink แบบไม่แก้ไขเลย ตัว Wio Terminal ทำงานได้ทันทีโดยกระพริบ LED สีฟ้าในขณะที่ M5Stack Gray และ Core2 จะเกิด error เพราะไม่รู้จัก LED_BUILTIN เนื่องจากไม่มี LED รวมมาด้วย จึงลองสลับเป็นตัวอย่าง Bare Minimum แล้วเขียนโค้ด Serial.println(“Hello, world”) จะ ok ทั้ง 3 บอร์ด

เมื่อมองในแง่การต่อวงจรข้างนอก Wio Terminal ชนะแบบเห็นได้ชัดเพราะการมี connector 40 ขาที่ออกแบบให้เสียบเป็น Hat ของ Raspberry Pi ได้ ทำให้นำไปต่อวงจรได้ง่ายกว่า M5Stack มาก โดยเฉพาะ M5Stack Core2 ที่ไปตัด connector ออกหมดเหลือแค่ grove อยู่ช่องเดียว

คอนเนกเตอร์ของ M5Stack Gray, Core2 และ Wio Terminal

ข้อคิดเห็น การที่ M5Stack ออกมาก่อนหลายปีและเลือกที่จะเดินไปพร้อมกับ community ของ ESP32 ที่มีผู้ผลิตจีนหลายค่าย (Heltec, LILYGO) เลยทำให้การเลือกใช้ M5Stack ดูจะมีความเสี่ยงน้อยกว่า แต่หากมองเรื่องการต่อวงจรเพื่อเรียนรู้อิเล็กทรอนิกส์ Wio Terminal ดูเป็นตัวเลือกที่ดีกว่ามาก

มาลองดูที่จอ

Wio Terminal และ M5Stack เป็นอุปกรณ์ที่มาพร้อมกับจอ LCD แบบ TFT โดย M5Stack Core2 จะมาเหนือชั้นกว่าด้วยจอแบบ touch screen การทดลองโค้ดแสดงผลทางหน้าจอใช้โค้ดตัวอย่าง Free_Fonts_Demo เพื่อแสดง font ต่างๆบนหน้าจอ โดยไลบรารีของ M5Stack จะรวมไลบรารีกราฟฟิกมาด้วยอยู่แล้ว จึงไม่ต้องติดตั้งไลบรารีเพิ่ม แต่ในกรณี Wio Terminal จะต้องติดตั้งไลบรารี Seeed LCD ซึ่งดัดแปลงมาจากไลบรารี TFT_eSPI (ข้อควรระวัง หากติดตั้งไลบรารี TFT_eSPI อยู่แล้ว ต้องไปลบโฟลเดอร์ก่อน เพราะตัว Arduino IDE จะไปเรียกไลบรารี TFT_eSPI แทน) แล้วไปแก้ไฟล์ User_Setup.h เพื่อเรียกใช้ไดรเวอร์ ILI9341 และตั้งขา SPI ให้ถูกต้อง

Free font demo บน 3 บอร์ด

แม้การใช้งาน Wio Terminal จะวุ่นวายนิดหน่อยในการติดตั้งไลบรารีสำหรับจอ แต่การเขียนโค้ดจะอยู่ในรูปแบบคล้ายกันมาก เพราะตัว M5Stack ก็ไปเอาโค้ดของ TFT_eSPI มาใช้งานเหมือนกัน เพียงแต่จะมีคำสั่งที่ทำให้ใช้งานง่ายขึ้นด้วยการเรียกเป็น method ผ่านตัวแปร M5 เช่น คำสั่ง M5.Lcd.printf() ในแง่ขนาดของจอ Wio Terminal จะใหญ่กว่านิดหน่อยเท่านั้น แต่หากคิดถึง UIFlow ที่เป็นเครื่องมือพัฒนา GUI แบบ blocky + MicroPython ของ M5 แล้ว M5Stack ค่อนข้างจะกินขาดไปพอสมควร

หน้าจอ UIFlow สำหรับ M5Stack Core2

ข้อคิดเห็น Wio Terminal และ M5Stack ต่างประยุกต์ไลบรารี TFT_eSPI มาจัดการกับหน้าจอ เลยไม่ได้แตกต่างกัน

จบด้วยการสื่อสาร

ข้อแตกต่างระหว่าง Wio Terminal และ M5Stack ที่ชัดเจนที่สุดคือ การมีหน่วยประมวลผลแยก (RTL8720DN) หรือเป็นส่วนโค้ดที่ run แบบฉากหลัง (Core 0) แต่ในแง่ของโค้ด Arduino แล้ว ไม่ได้แตกต่างกันมากเพราะต่างก็ยึดตาม template ของ Arduino สำหรับการใช้งาน WiFi เริ่มจาก WiFi.begin() แล้วจึงไปเรียกใช้การเชื่อมต่อด้วยโพรโทคอลต่างๆ ในแง่การติดตั้ง M5Stack จะง่ายกว่า เพราะจะพร้อมตั้งแต่การติดตั้ง Arduino Core for ESP32 แล้ว ในขณะที่ Wio Terminal จัดว่ายากกว่าสำหรับมือใหม่ เพราะต้องเตรียมการหลายชั้น

  1. ติดตั้งเฟิร์มแวร์ให้กับ RTL8720DN โดยใช้ git และคำสั่ง ambd_tool
  2. ติดตั้งไลบรารี Seeed rpcWiFi และไลบรารีที่เกี่ยวข้อง
  3. เปลี่ยนไปใช้ rpcWiFi.h แทน WiFi.h

โค้ดในส่วนอื่นๆจะไม่ต่างกัน เพราะโค้ดตัวอย่างของ Wio Terminal คือ โค้ดตัวอย่าง WiFiClient เช่นเดียวกับ ESP32

การทดสอบโค้ดเชื่อมต่อ WiFi

หากไม่ได้ทดลอง dual band WiFi ที่เป็นจุดเด่นของ Wio Terminal ก็เรียกว่าคงไม่ครบนัก เลยไปลองทำตามขั้นตอนในบล็อก Dual Band WiFi Analyzer ซึ่งก็เหลือแค่ไปติดตั้งไลบรารี Arduino GFX แล้วทดลองโค้ดตัวอย่าง ผลออกมาประทับใจตามที่ควรจะเป็น เพราะคำสั่งที่ใช้คือ WiFi.scanNetworks() ที่คุ้นเคย

หน้าจอของ WioWiFiAnalyzer

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

บอร์ด Wio Terminal แม้จะวุ่นวายในช่วงติดตั้งไปหน่อยเมื่อเทียบกับ M5Stack ที่มีราคา/ความสามารถใกล้เคียงกัน แต่การมีฮาร์ดแวร์ที่เอื้อให้ต่อวงจรง่ายขึ้น (คอนเนกเตอร์ 40 pin) มีทั้ง speaker และไมค์โครโฟน รวมทั้งมีปุ่มแบบ direction 5 ทิศมาด้วย น่าจะทำให้เอาไปทดลองได้หลากหลายกว่า M5Stack หรือบอร์ด ESP32 ทั่วไป เสียดายว่าต้องจ่ายเงินเพิ่มหน่อยสำหรับแบตเตอรี ส่วนในแง่การเขียนโค้ด Arduino ไม่ได้มีอะไรแตกต่างไปจาก ESP32 จึงไม่น่าใช่อุปสรรคสำหรับการย้ายมาเรียนรู้ด้วย Wio Terminal

อนึ่ง การมี ARM Cortex-M4F เป็นหน่วยประมวลผล แปลว่าการเขียนโค้ดที่ต้องใช้ DSP หรือ Neural Network น่าจะทำได้ไม่ยากนัก โดยไปเรียกใช้ฟังก์ชันจากไลบรารี CMSIS ของ ARM แต่คงต้องศึกษาอีกสักพัก ถึงจะมาเล่าต่อได้

--

--

Supachai Vorapojpisut
Supachai Vorapojpisut

Written by Supachai Vorapojpisut

Assistant Professor at Thammasat University

No responses yet