เริ่มต้นใช้งานบอร์ด Cucumber

Supachai Vorapojpisut
4 min readMay 9, 2020

--

เกริ่นนำ

ในฐานะอาจารย์ ปีนี้จัดเป็นวิกฤติที่ต้องปรับการเรียนการสอนมาเป็นระบบออนไลน์แบบฉุกละหุกเนื่องจากปัญหาโควิด-19 เลยส่งผลกระทบกับการเตรียมวิชาแลปการวัดและเครื่องมือวัดที่จะให้นักศึกษามาเรียนรู้การสร้างระบบการวัดตั้งแต่การต่อเซ็นเซอร์ไปจนถึงการวิเคราะห์ข้อมูล ช่วงนี้เลยต้องมองหา solution ราคาไม่แพงเพื่อแจกให้นักศึกษาเอาไปทดลองและเรียนรู้ได้เองที่บ้าน/หอพักแบบไม่มีเครื่องมือหรืออุปกรณ์ติดไปให้ด้วย (จะให้แจกชุดเครื่องมือแลป PS-FG-scope คงไม่ไหว) ฝั่งซอฟต์แวร์สำหรับฝั่งคอมพิวเตอร์ยังดีที่บริษัท National Instruments เปิดตัวโปรแกรม LabVIEW Community Edition ให้ดาวน์โหลดมาใช้งานเองได้ จึงไม่ต้องกังวลเรื่องการแสดงผลและบันทึกค่าบนคอมพิวเตอร์ ยังมีเรื่องที่ลุ้นคือให้มหาวิทยาลัยจัดซื้อ MATLAB Campus-wide License เพื่อสะดวกต่อการเรียนรู้การประมวลผลสัญญาณแบบไปต่อยอดเป็นโครงงานหรืองานวิจัยได้

เรื่องที่ต้องคิดเรื่องแรกคือ การหาตัวฮาร์ดแวร์สำหรับการทดลองที่เปิดให้นักศึกษาสามารถได้ไอเดียของความสัมพันธ์ระหว่าง กายภาพ — สัญญาณ — ข้อมูล ซึ่งจำเป็นมากสำหรับนักศึกษาส่วนใหญ่ที่หลักการยังไม่ค่อยแม่นแถมแนวคิดของนามธรรมก็ไม่ค่อยมี ดังนั้นการเรียนแบบ simulation หรือแจกให้เฉพาะไฟล์ข้อมูลไปนั่งคำนวณ เลยถูกตัดทิ้งไปเลย เพราะขนาดให้ทำทดลองกับชุดทดลองประเภทเสียบสายตามช่องแล้วดูค่า/กราฟบนเครื่องมือวัด พอไปถามซักยังออกมาเละเทะ พอดีทาง Gravitech ออกบอร์ดใหม่ในรุ่น Cucumber รุ่น RS ที่ตั้งราคาขายไว้แค่ 405 บาทไม่รวม VAT กลับมีเซ็นเซอร์บนบอร์ดมาด้วยถึง 3 ตัวคือ

  • เซ็นเซอร์ HTS221 ของ ST Microelectronics สำหรับวัดอุณหภูมิ (-40 ~ 120 °C) และความชื้น (0 ~ 100 %RH) ซึ่งเป็นช่วงที่พอเหมาะกับการวัดสภาพแวดล้อมในชีวิตประจำวัน
  • เซ็นเซอร์ BMP280 ของ Bosch สำหรับวัดความดันอากาศแบบสัมบูรณ์ (300 ~ 1100 hPa) ซึ่งแม้จะไม่ละเอียดมาก (> 1 เมตร) ในการวัดความสูงแบบ altimeter แต่พอใช้ตรวจสอบสภาพแวดล้อมหรือตรวจจับความสูงของตึกได้
  • เซ็นเซอร์ MPU-6050 ของ TDK InvenSense ที่ภายในประกอบด้วยเซ็นเซอร์วัดความเร่งแบบ 3 แกน (ย่านสูงสุด ±16g) และไจโรสโคปแบบ 3 แกน (ย่านสูงสุด ±2000 องศา/วินาที) ทำให้ใช้ในการตรวจจับการเคลื่อนไหวได้
อุปกรณ์บนบอร์ด Cucumber รุ่น RS (เอามาจากเว็บ Gravitech)

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

  • เซ็นเซอร์บนบอร์ดเป็นแบบ digital ที่เชื่อมต่อผ่าน I2C เลยต้องหาเซ็นเซอร์แอนะล็อกเพิ่ม เพื่อให้เข้าใจการแปลงแอนะล็อกเป็นดิจิตอล ่เซ็นเซอร์วัดแสงประเภท LDR ก็ถูกและตรงตามเป้าหมายพอดี
  • การสอบเทียบเซ็นเซอร์ที่เรื่องปวดหัวหลักคือการหา calibration standard มาวัดเทียบ ซึ่งเดิมวางแผนว่าจะเรียนรู้ด้วยเซ็นเซอร์ load cell โดยใช้น้ำบรรจุขวดเป็นมวลมาตรฐาน พอสลับมาใช้บอร์ด Cucumber เลยต้องเปลี่ยนมาเรียนรู้การสอบเทียบเซ็นเซอร์ความเร่งโดยใช้แรงโน้มถ่วงที่กระทำกับบอร์ดบนมุมเอียงแทน ยังคงไอเดียของการสอบเทียบอยู่แต่คำนวณยากขึ้น

พอฮาร์ดแวร์ลงตัว เรื่องปวดหัวถัดมาคงต้องเป็นซอฟต์แวร์ที่นักศึกษาสาขาวิศวกรรมไฟฟ้าที่ ม.ธรรมศาสตร์ ยังอ่อนมากเรื่องการเขียนโค้ดด้วยหลายปัจจัย หากจะให้นักศึกษาทดลองด้วยบอร์ด Cucumber เลยต้องมาออกแรงเตรียมโค้ดตัวอย่างเป็นจุดเริ่มต้นให้ก่อน เลยสั่งซื้อบอร์ดมาทดลองก่อน

บอร์ด Cucumber รุ่น RS ที่ควักกระเป๋ามาเตรียมก่อน

เนื้อหาต่อจากนี้จะเป็นการเล่าถึงประสบการณ์ในการเขียนโค้ดสำหรับชิพ ESP32-S2 บนบอร์ด Cucumber โดยใช้ ESP-IDF ร่วมกับ Visual Studio Code

hello_world บน Cucumber

บอร์ด Cucumber ใช้โมดูล ESP32-S2-WROVER โดยมีหน่วยประมวลผล ESP32-S2 ที่มีจุดเด่นทั้งในแง่ประสิทธิภาพการประมวลผล (32bit/240MHz/4MB flash/2MB RAM) และการสื่อสารไร้สายผ่านโครงข่าย WiFi แต่ตัว ESP32-S2 เป็นไมโครคอนโทรลเลอร์ที่เพิ่งเข้าสู่ตลาดช่วงปลายปี 2562 ทำให้ยังไม่รองรับการเขียนโค้ดบนแพลตฟอร์ม Arduino การพัฒนาซอฟต์แวร์ ณ เดือน พค. 63 ยังคงต้องใช้ชุดเครื่องมือพัฒนา ESP-IDF รุ่น 4.2 ของบริษัท Espressif เองที่ยังคงเป็น master development branch โดยจะต้องใช้ git ในการดาวน์โหลดมาติดตั้งเอง แน่นอนว่าการอธิบายนักศึกษาสาขาไฟฟ้าว่าด้วยเรื่อง git คืออะไรและใช้อย่างไร รวมทั้งการ build โค้ดผ่าน command line ไม่ใช่ตัวเลือกที่ดีแน่นอน ผมจึงเลือกที่จะติดตั้งและใช้งานผ่าน extension ของ ESP-IDF ของ Visual Studio Code ที่ทางบริษัท Espressif เป็นผู้พัฒนาเอง ก่อนเริ่มต้นก็เตรียมซอฟต์แวร์พื้นฐานไว้ก่อนคือ

  1. โปรแกรม Visual Studio Code สำหรับใช้เขียนโค้ดและใช้งาน ESP-IDF
  2. โปรแกรม Python 3.x ซึ่งแนะนำให้ติดตั้งเป็นรุ่น 3.6 หรือ 3.7 หากจะลองเขียนโค้ดสำหรับ OpenCV ด้วย (มีไลบรารีแบบไบนารีติดตั้งด้วย pip ได้เลย) ทั้งนี้ผมมีประสบการณ์ไม่ค่อยดีกับค่าย Anaconda จึงไม่สามารถแนะนำอะไรได้ นอกจาก
    “ถอดทิ้งไปเถอะ แล้วใช้ Python จากต้นทางดีกว่า”
  3. โปรแกรม git รุ่นสำหรับ Microsoft Windows ส่วนใครที่ใช้ Linux หรือ Mac ขอให้ติดตั้งตามวิธีการของระบบปฏิบัติการตัวเอง

หลังจากติดตั้งโปรแกรมทั้งสามตัวแล้ว ขั้นตอนต่อไปคือ การเริ่มติดตั้ง ESP-IDF extension ผ่านทางตัวเลือก extension ของ Visual Studio Code ดังรูป

การติดตั้ง ESP-IDF extension ใน Visual Studio Code

หลังจาก Visual Studio Code ดาวน์โหลดไฟล์ต่างๆของ ESP-IDF extension มาติดตั้งเสร็จแล้ว จะเริ่มขั้นตอนการตั้งค่าต่างๆของ extension (หากจะแก้ไขภายหลัง ให้กดปุ่ม F1 แล้วเลือก ESP-IDF: Configure ESP-IDF extension) การตั้งค่าจะแบ่งออกเป็น 3 ขั้นตอน ได้แก่

  1. เลือก git และ Python ที่ติดตั้งในเครื่อง
  2. เลือกติดตั้ง ESP-IDF รุ่น master (development branch) และโฟลเดอร์ที่จะติดตั้ง (ตัว extension จะใช้ git ดาวน์โหลดเข้ามาในโฟลเดอร์ย่อย esp-idf) โดยมีเงื่อนไขว่าโฟลเดอร์ห้ามมี space หรือตัวอักษรไทย
  3. เลือกโฟลเดอร์ที่จะติดตั้งชุดโปรแกรม ESP-IDF tools (ตัว extension จะใช้ git ดาวน์โหลดมาขยายในโฟลเดอร์ย่อย .expressif) โดยมีเงื่อนไขว่าโฟลเดอร์ห้ามมี space หรือตัวอักษรไทย ขั้นตอนการติดตั้งจะใช้ pip ในการดาวน์โหลดแพคเกจและไลบรารี Python ที่เกี่ยวข้อง จึงแนะนำให้เช็คว่าคำสั่ง pip ทำงานบน command line ได้และเป็นรุ่นล่าสุดแล้ว
การตั้งค่า ESP-IDF extension สำหรับ Visual Studio Code

หลังจากติดตั้งเครื่องมือทั้งหมดแล้ว ส่วนตั้งค่า ESP-IDF extension จะแสดงปุ่มกดเพื่อใช้ยืนยันเครื่องมือต่างๆ พร้อมทั้งแสดง PATH ไปยังเครื่องมือต่างๆสำหรับเพิ่มไปยัง PATH ของระบบ รวมทั้งปุ่มกดสำหรับแสดงรายการของ project ตัวอย่าง ข้อควรระวังคือ ESP32-S2 จะมีฮาร์ดแวร์ที่แตกต่างจาก ESP32 เช่น ไม่มีส่วน bluetooth จึงควรเลือก project ตัวอย่างที่สอดคล้องด้วย

หน้าจอของ ESP-IDF extension แสดงรายการของ project ตัวอย่าง

ผมเลือกสร้าง project ตัวอย่าง hello_world ซึ่งจะพิมพ์ข้อความ hello, world แล้วแสดงข้อมูลของหน่วยประมวลผลออกทาง UART สำหรับขั้นตอนที่ต้องตั้งค่าก่อนการ build แบ่งออกเป็น 3 ขั้นคือ

  1. กดปุ่ม F1 แล้วเลือก ESP-IDF: Set Expressif device target แล้วเลือก ESP32-S2 เป็นหน่วยประมวลผล
  2. เสียบสายจากบอร์ด Cucumber แล้วกดปุ่ม Win+x แล้วเลือก Device Manager เพื่อตรวจสอบพอร์ตอนุกรม COMx จากนั้นกดปุ่ม F1 แล้วเลือก ESP-IDF: Select port to use เพื่อกำหนดพอร์ตอนุกรม
  3. กดปุ่ม F1 แล้วเลือก ESP-IDF: Build your project

การ build ครั้งแรกจะนานพอสมควรเพราะจะคอมไพล์ทุกอย่างตั้งแต่ bootloader ไปจนถึงไลบรารีต่างๆ เช่น WiFi HTTP ฯลฯ หากต้องการตรวจสอบสถานะการ build ให้เลือกเมนู View > Output เพื่อแสดงหน้าต่างย่อยแล้วเลือกที่หัวข้อ ESP-IDF build

การตรวจสอบสถานะการ build

เมื่อ build สำเร็จ เราสามารถโปรแกรมลงบอร์ดโดยกดปุ่ม F1 แล้วเลือก ESP-IDF: Flash your project สำหรับการทำงานของ project ตัวอย่าง hello_world ดูได้จากโปรแกรม serial terminal ที่ตั้ง baud rate เป็น 115200 bps

หน้าต่างโปรแกรม serial terminal แสดงผลของ project <hello_world>

การสร้าง project ใหม่

ผมขอทิ้งท้ายบทความนี้ด้วยการสร้าง project ใหม่แบบ clean โดยเจาะจงการปรับเงื่อนไขสำหรับบอร์ด Cucumber ซึ่งแบ่งออกเป็น 2 กลุ่มตามโมดูลคือ กลุ่ม R และกลุ่ม M ซึ่งมีข้อแตกต่างที่การมี/ไม่มีหน่วยความจำ PSRAM ขนาด 2 MB สำหรับเนื้อหาของเซ็นเซอร์ทั้ง 3 ตัวขอยกยอดไปบทความหน้า

การสร้าง project ใหม่ด้วย ESP-IDF extension เริ่มด้วยการสร้างโฟลเดอร์ใหม่แล้วใช้เมนู File > Open Folder เพื่อเข้าสู่โฟลเดอร์นั้น จากนั้นกดปุ่ม F1 เพื่อแสดงรายการของคำสั่งแล้วพิมพ์ ESP-IDF เพื่อเข้าสู่กลุ่มคำสั่งของ extension ลำดับของคำสั่งและการตั้งค่ามีดังนี้

  1. Create new project: ให้เลือก template-app เพื่อให้ตัว extension สร้างไฟล์พื้นฐานและโฟลเดอร์ย่อย ตัวซอร์สโค้ดจะมีเฉพาะไฟล์ main.c ในโฟลเดอร์ย่อย main ซึ่งมีส่วนโค้ดเดียวกับ hello_world
  2. Configure Paths: กำหนด PATH ไปยัง ESP-IDF (โฟลเดอร์ esp-idf) และ ESP-IDF tools (โฟลเดอร์ .expressif) จากนั้นเลือก Custom extra paths เพื่ออัพเดท PATH จากนั้น restart ตัว Visual Studio Code เพื่อให้ PATH อัพเดท
  3. Set Expressif device target: เลือก ESP32-S2 เป็นหน่วยประมวลผล ทำให้เกิดไฟล์ sdkconfig ที่ระบุรายละเอียดในการ build ที่สอดคล้องกับหน่วยประมวลผล
  4. Select port to use: เลือกพอร์ตอนุกรมที่เชื่อมต่อกับบอร์ด
  5. Launch gui configurion tool: เปิดหน้าต่างที่มีตัวเลือกต่างๆสำหรับปรับแต่งรายละเอียดของหน่วยประมวลผลและองค์ประกอบซอฟต์แวร์ต่างๆ (FreeRTOS, WiFi, HTTP, TLS, …) ตัวเลือกสำหรับโมดูล ESP32-S2-WROVER บนบอร์ด Cucumber ประกอบด้วย
  • Serial flasher config: Flash size = 4MB
  • Component config > ESP32S2-specific: CPU frequency = 80/160/240 MHz
  • พิมพ์ SPIRAM ในช่อง search parameters เพื่อเข้าสู่ตัวเลือกพิเศษที่ไม่แสดงของ Component config > ESP32S2-specific จากนั้นเลือกเปิดใช้งานหน่วยความจำ PSRAM ตัวเลือกของขนาด RAM (Autodetect) และการเข้าถึง PSRAM (Make RAM allocatable using malloc() as well) สามารถปรับได้ตามความเหมาะสม
การใช้ GUI เพื่อเปิดใช้งาน PSRAM ของบอร์ด Cucumber รุ่น R/RS/RI/RIS

หลังจากตั้งค่าต่างๆแล้ว กดปุ่ม F1 แล้วเลือกกลุ่มคำสั่งในการ build และ flash ไปยังบอร์ด การแสดงผลของโค้ดจะคล้ายกับ project ตัวอย่าง hello_world โดยมีจุดแตกต่างคือ พบหน่วยความจำ PSRAM ขนาด 16 Mbit แล้ว

ผลลัพธ์ของโปรแกรมที่ตั้งค่า PSRAM

--

--

Supachai Vorapojpisut
Supachai Vorapojpisut

Written by Supachai Vorapojpisut

Assistant Professor at Thammasat University

No responses yet