Arduino:
การทำงานกับ YAML

วิธีการ:

การทำงานกับ YAML โดยตรงบน Arduino ไม่ง่ายเหมือนในสภาพแวดล้อมการเขียนโปรแกรมระดับสูง เนื่องจากข้อจำกัดของหน่วยความจำและไม่มีไลบรารีการประมวลผล YAML เนทีฟ อย่างไรก็ตาม สำหรับโปรเจคที่ต้องการการแยกวิเคราะห์หรือการสร้าง YAML วิธีการทั่วไปคือการใช้คอมพิวเตอร์พาหนะ (เช่น Raspberry Pi) หรือการแปลงไฟล์ YAML เป็นรูปแบบที่เหมาะกับ Arduino มากขึ้น (เช่น JSON) โดยใช้สคริปต์ภายนอก เพื่อจุดประสงค์ในการสาธิต เราจะเน้นที่วิธีการหลังโดยใช้ไลบรารีที่ได้รับความนิยม: ArduinoJson

ขั้นตอนที่ 1: แปลงการตั้งค่า YAML ของคุณเป็น JSON คุณสามารถใช้เครื่องมือออนไลน์หรือยูทิลิตี้บรรทัดคำสั่งเช่น yq

ไฟล์ YAML (config.yaml):

wifi:
  ssid: "YourSSID"
  password: "YourPassword"

แปลงเป็น JSON (config.json):

{
  "wifi": {
    "ssid": "YourSSID",
    "password": "YourPassword"
  }
}

ขั้นตอนที่ 2: ใช้ไลบรารี ArduinoJson เพื่อวิเคราะห์ไฟล์ JSON ในสเกตช์ Arduino ของคุณ ก่อนอื่น คุณต้องติดตั้งไลบรารี ArduinoJson ผ่าน Library Manager ใน Arduino IDE

ขั้นตอนที่ 3: โหลดและวิเคราะห์ JSON ในโค้ดของคุณ เนื่องจากข้อจำกัดด้านพื้นที่จัดเก็บของ Arduino จินตนาการว่าสตริง JSON ถูกจัดเก็บในตัวแปรหรืออ่านจากการ์ด SD

ตัวอย่างสเกตช์ Arduino:

#include <ArduinoJson.h>

const char* jsonConfig = "{\"wifi\":{\"ssid\":\"YourSSID\",\"password\":\"YourPassword\"}}";

void setup() {
  Serial.begin(9600);

  StaticJsonDocument<200> doc;
  DeserializationError error = deserializeJson(doc, jsonConfig);

  if (error) {
    Serial.print(F("deserializeJson() failed: "));
    Serial.println(error.f_str());
    return;
  }

  const char* ssid = doc["wifi"]["ssid"]; // "YourSSID"
  const char* password = doc["wifi"]["password"]; // "YourPassword"

  Serial.print("SSID: ");
  Serial.println(ssid);
  Serial.print("Password: ");
  Serial.println(password);
}

void loop() {
  // ไม่มีอะไรที่นี่สำหรับตัวอย่างนี้
}

ผลลัพธ์เมื่อทำการรันสเกตช์:

SSID: YourSSID
Password: YourPassword

วิธีการนี้ที่เกี่ยวข้องกับการแปลงเป็น JSON และการใช้ไลบรารี ArduinoJson ทำให้สามารถจัดการการตั้งค่า YAML ภายในโปรเจค Arduino ได้อย่างง่ายดาย หลีกเลี่ยงการวิเคราะห์ YAML โดยตรงบนไมโครคอนโทรลเลอร์