สวัสดีครับ คำถามที่พบบ่อยมากว่าทำไมเปิด Serial monitor ที่อยู่บน Arduino IDE แล้วพบว่าขึ้นภาษาต่างดาวมาแบบนี้
ผมก็จะตอบแบบสั้น ๆ ไปว่า ลองหาตัวเลขตัวนึงที่อยู่ในโค้ดตรงส่วนของ Serial.begin(XXXX); แล้วให้ปรับเลขในหน้าต่าง Serial monitor ให้ตรงกับเลข XXXX นั้น ตามด้วยกดปุ่ม Reset บนบอร์ด 1 ครั้งถ้วน เป็นอันเสร็จพิธี
ถ้าให้ตอบยาวขึ้นหน่อย ปัญหานี้เกิดจากการตั้งค่าการสื่อสารแบบ Serial ด้วยความเร็วของการอ่านค่า ไม่ตรงกับความเร็วของการส่ง เหมือนกับการปรับจูนช่องทีวีให้มีความถี่ตรงกับความถี่ของสัญญาณจากเสาสัญญาณนั่นแหละครับ แต่ในทางการสื่อสารแบบ Serial เค้าเรียกกันว่า “Baud rate”
Baud rate คือความถี่ในการส่งสัญญาณดิจิตอลออกไป มีหน่วยเป็น baud/วินาที เช่นสมมติเราตั้งค่าให้ Arduino มีการสื่อสารด้วย Serial ความเร็ว 9600 หรือการสั่ง Serial.begin(9600); นั่นหมายถึงความเร็วสูงสุดที่ระบบจะส่งได้คือ 9600 baud/วินาที
Baud rate มีความสัมพันธ์แปรผันตรงกับ Bit rate ซึ่งหาก Baud rate มีค่าสูงนั่นหมายถึงเราสามารถส่งข้อมูลด้วย Bit rate ที่สูงขึ้นด้วย สมมติ Baud rate มีค่าเท่ากับ Bit rate นั่นคือเมื่อเราจะพิมพ์คำว่า Hello world ซึ่งมีความยาว 11 อักขระ (หากรวม end line ก็จะเป็น 12) ก็จะใช้เวลาส่งจาก Arduino ไปยัง Serial monitor เพื่อให้ข้อความสมบูรณ์สุทธิประมาณ 11*8/9600 ~ 10 มิลลิวินาที จะเห็นได้ว่าหากค่าความเร็วการส่งมีค่ามากเช่น 115200 ตัว Arduino ก็จะหยุดตรงคำสั่ง Serial.print เพื่อรอส่งข้อมูลให้ครบทุกตัวอักษรโดยใช้เวลาน้อยลงตามไปด้วย
แต่เดี๋ยวก่อน ค่า Baud rate ไม่ใช่ว่าเราจะตั้งให้สูงเท่าไรก็ได้นะครับ ความเร็วในการส่งยังขึ้นกับ hardware เฉพาะเจาะจงของบอร์ดนั้น ๆ ด้วย เช่น clock speed ไปจนถึงสาย USB ที่เราใช้ก็ล้วนมีผลทำให้ความเร็วมีค่าสูงสุดได้แค่ค่าหนึ่ง ๆ
สำหรับ Arduino UNO ค่าที่สูงสุดที่ใช้แล้วมักไม่เกิดปัญหาคือ 115200 สำหรับ ESP32 สามารถดันไปได้มากกว่า ทั้งนี้ใน Arduino IDE ตรงส่วนของ Serial monitor เราสามารถเลือกค่าความเร็วได้ดังนี้ 300, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 74880, 115200, 230400, 250000,500000 และ 1000000 แต่หากเราใช้ PlatformIO เราสามารถเลือก Baudrate ที่อิสระได้มากกว่าจากการตั้งค่า Environment variable ซึ่งสำหรับข้อมูลเบื้องต้นน่าจะเพียงพอให้เข้าใจหลักการตั้งค่าเบื้องต้นแล้วนะครับ หวังว่าจะมีประโยชน์ไม่มากก็น้อย
ธนบดี บุหลันศรีชาติ
ผู้เขียน