บอร์ด Cucumber RS ด้วย Arduino IDE

Supachai Vorapojpisut
2 min readSep 12, 2020

--

เปิดเทอมมาสักพักแล้ว เลยถือโอกาสอัพเดทสถานะของการใช้บอร์ด Cucumber RS สำหรับการเรียนการสอนวิชา การวัดและเครื่องมือวัด ครั้งนี้จะอธิบายถึงการใช้ Arduino IDE แทน ESP-IDF ซึ่งหากใครสนใจสาย hardcore หน่อยก็สามารถไปดูได้จาก post เดิม

ตอนแรก เริ่มต้นใช้งานบอร์ด Cucumber แนะนำการติดตั้ง ESP-IDF สำหรับหน่วยประมวลผล ESP32-S2 บนบอร์ด Cucumber RS

ตอนที่สอง การใช้งานเซ็นเซอร์ของ Cucumber RS อธิบายการเขียนโค้ด C/C++ เพื่ออ่านค่าจากเซ็นเซอร์ BMP280 และ HTS221 ผ่านทางรีจิสเตอร์

ผมเอง ok กับการใช้ ESP-IDF บน Visual Studio Code แต่ยังกังวลใจกับนักศึกษาที่ประสบการณ์เขียนโค้ดยังไม่ค่อยดี อาจจะไม่ได้อะไรเลยจากการเห็นโค้ดที่ค่อนข้างจะยาวสักหน่อย พอดีว่ามีการ port ตัว Arduino Core for ESP32 ให้รองรับ ESP32-S2 แต่จะวุ่นวายหน่อยตรงที่ต้องอัพเดท dev tools ใน Arduino IDE ให้เป็นรุ่นที่รองรับ ESP32-S2 ผมเลยสลับไปใช้ Arduino IDE แทน เพื่อทำโค้ดตัวอย่างเพื่ออ่านค่าจากเซ็นเซอร์บนบอร์ด Cucumber RS เลยถือโอกาสนี้เขียนบันทึกมาเผยแพร่กัน

เตรียม Arduino IDE

ผมเตรียม Arduino IDE ให้กับนักศึกษาด้วยรูปแบบ portable เพื่อความสะดวกในการให้ copy ไปที่เครื่องแล้ว run ได้เลย ส่วนขั้นตอนการติดตั้ง Arduino Core for ESP32 ใน branch esp32s2 ไปดูจากเว็บ Cytron ขั้นตอนของการติดตั้งเพื่อทำไฟล์ zip แจกให้กับนักศึกษามีดังนี้

  1. ดาวน์โหลด Arduino IDE แบบ zip จากเว็บ Arduino แล้วขยายไฟล์ออกมา จะได้โฟลเดอร์ชื่อ arduino
  2. สร้างโฟลเดอร์ย่อย portable ข้างในโฟลเดอร์ arduino ซึ่งจะทำให้โปรแกรม Arduino IDE ติดตั้งและเรียกใช้ซอฟต์แวร์เสริม (tools, library) ทั้งหมดจากในโฟลเดอร์นี้ การนำไปใช้เลยไม่ต้องไปติดตั้งใหม่ รวมทั้งไม่ขัดกับโปรแกรม Arduino IDE เดิมที่มีอยู่
  3. เปิดใช้โปรแกรม Arduino IDE ใหม่ด้วยการคลิกเลือกจากในโฟลเดอร์ arduino แล้วเลือกเมนู File > Preferences แล้วพิมพ์ link สำหรับเชื่อมกับ github ของ Arduino Core for ESP32
    https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json
  4. ไปที่เว็บ github ของ Arduino Core for ESP32 ใน branch ของ esp32s2 แล้วดาวน์โหลดไฟล์ zip
  5. ขยายไฟล์แล้วเข้าไปในโฟลเดอร์ย่อย tools แล้วคลิก get.exe เพื่อดาวน์โหลด development toolchain ของ ESP32-S2
  6. เข้าไปในโฟลเดอร์ portable\packages\esp32\hardware\esp32\1.0.4 ซึ่งเป็นตำแหน่ง development tools ของ Arduino IDE แบบ portable แล้ว copy โฟลเดอร์ย่อยและไฟล์จากข้อ 5 มาทับ
    cores/ libraries/ tools/ variants/ และ boards.txt platform.txt programmers.txt
  7. แก้ไขตำแหน่งขา SCL และ SDA เป็น 40 และ 41 เพื่อให้ตรงกับขา I2C ของบอร์ด Cucumber RS ที่เชื่อมกับเซ็นเซอร์บนบอร์ด โดยนิยามของขาอยู่ที่ไฟล์ portable\packages\esp32\hardware\esp32\1.0.4\variants\esp32s2\pins_arduino.h
  8. เสียบสาย USB-C กับบอร์ด Cucumber RS แล้วเช็คด้วย Device Manager ว่ามีพอร์ต USB Serial หากไม่เจอให้ดาวน์โหลดไดรเวอร์ของชิพ FT231 มาติดตั้ง
  9. เปิดโปรแกรม Arduino IDE แล้วเลือกบอร์ดเป็น ESP32S2 Dev Module
  10. เลือกเมนู Tools > Manage Libraries แล้วติดตั้งไลบรารีสำหรับอุปกรณ์บนบอร์ดคือ Adafruit BMP280, Adafruit HTS221, Adafruit MPU6050 และ Adafruit NeoPixel

ผมลองโค้ดตัวอย่างต่างๆของเซ็นเซอร์จาก Adafruit ก็ ok เลยทีเดียว ไม่ต้องปรับแก้อะไรก็ทำงานได้

หน้าจอโปรแกรม Arduino IDE ตอนเลือกบอร์ด ESP32S2 Dev Module

โค้ดตัวอย่าง

ส่วนนี้คือของแถม เป็นโค้ดตัวอย่างของใบงานที่ผมเตรียมให้นักศึกษาสำหรับทดลองวัดปริมาณต่างๆด้วยเซ็นเซอร์บนบอร์ด Cucumber RS

โค้ดอ่านและแสดงค่าความดันอากาศจากเซ็นเซอร์ BMP280

#include <Adafruit_BMP280.h>Adafruit_BMP280 bmp280;void setup() {
Serial.begin(115200);
if (!bmp280.begin(0x76)) {
Serial.println(F("BMP280 sensor not found, check pin and wiring!"));
while (1) {
delay(10);
}
}
bmp280.setSampling(Adafruit_BMP280::MODE_NORMAL,
Adafruit_BMP280::SAMPLING_X2,
Adafruit_BMP280::SAMPLING_X16,
Adafruit_BMP280::FILTER_X16,
Adafruit_BMP280::STANDBY_MS_500);
}
void loop() {
Serial.print(F("Temperature = "));
Serial.print(bmp280.readTemperature());
Serial.println(" degC");
Serial.print(F("Pressure = "));
Serial.print(bmp280.readPressure());
Serial.println(" Pa");
delay(2000);
}

โค้ดอ่านและแสดงค่าอุณหภูมิจากเซ็นเซอร์ BMP280 และ HTS221

#include <Adafruit_BMP280.h>
#include <Adafruit_HTS221.h>
Adafruit_BMP280 bmp280;
Adafruit_HTS221 hts221;
void setup() {
Serial.begin(115200);
if (!bmp280.begin(0x76)) {
Serial.println("BMP280 sensor not found");
while (1);
}
if (!hts221.begin_I2C(0x5F)) {
Serial.println("HTS221 sensor not found");
while (1);
}
}
void loop() {
sensors_event_t temp, humidity;
hts221.getEvent(&humidity, &temp);
Serial.print(bmp280.readTemperature());
Serial.print(',');
Serial.println(temp.temperature);
delay(1000);
}

โค้ดอ่านและแสดงค่าความเร่งจากเซ็นเซอร์ MPU6050

#include <Adafruit_MPU6050.h>Adafruit_MPU6050 mpu6050;void setup() {
Serial.begin(115200);
mpu6050.begin();
mpu6050.setAccelerometerRange(MPU6050_RANGE_2_G);
mpu6050.setFilterBandwidth(MPU6050_BAND_21_HZ);
Serial.println("Starting");
}
void loop() {
sensors_event_t a, g, temp2;

Serial.print("MPU6050 sensor: ");
mpu6050.getEvent(&a, &g, &temp2);
Serial.print(a.acceleration.x);
Serial.print(", Y: ");
Serial.print(a.acceleration.y);
Serial.print(", Z: ");
Serial.print(a.acceleration.z);
Serial.println(" m/s^2");
delay(2000);
}

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

การเปลี่ยนจาก ESP-IDF เป็น Arduino IDE ก็ถือได้ว่าประสบความสำเร็จในแง่ความสะดวก เพราะไม่ต้องไปแก้ปัญหาให้นักศึกษามากนัก ส่วนงาน ESP-IDF กำลังรอว่าโค้ดของ USB จะเรียบร้อยเมื่อไร ค่อยกลับไปทำต่ออีกที

--

--

Supachai Vorapojpisut
Supachai Vorapojpisut

Written by Supachai Vorapojpisut

Assistant Professor at Thammasat University

No responses yet