ESP32 มี Serial (หรือ UART) จำนวน 3 ช่อง คือ ช่อง 0, 1, 2 โดยช่อง Serial0 ใช้อัพโหลดโปรแกรม ถูก Fix อยู่ที่ขา TXD, RXD ไม่ควรนำมาใช้ เพราะอาจจะกระทบกับการอัพโหลดโปรแกรม ส่วน Serial1 และ Serial2 ใช้งานได้อิสระ เปลี่ยนขาโดยกำหนดในโค้ดโปรแกรม
ขาของ Serial1 และ Serial2 อยู่ขาไหนก็ได้ เพราะภายใน ESP32 มีวงจร MUX I/O ที่จะ Map ให้ขาไหน ต่อกับฟังก์ชั่นไหนก็ได้ แต่โดยค่าเริ่มต้น หากเข้าไปดูที่ไฟล์ HardwareSerial.h จะเห็นว่าได้มีการกำหนดให้ขา RX1 (ขา RX ของ Serial1) เป็นขา 26, ขา TX1 เป็นขา 27 ส่วน RX2 เป็นขา 4, ขา TX2 เป็นขา 25
การกำหนดขา RX, TX ของ Serial1 และ Serial2 ใหม่ ทำได้ในคำสั่ง Serial1.begin() / Serial2.begin() หรือใช้คำสั่ง Serial1.setPins() / Serial2.setPins()
ตัวอย่างการกำหนดให้ Serial1 ขา RX เป็น 25, ขา TX เป็น 26 โดยกำหนดใน Serial1.begin() แสดงดังโค้ดด้านล่าง
Serial1.begin(9600, SERIAL_8N1, 25, 26);
ตัวอย่างการกำหนดให้ Serial1 ขา RX เป็น 25, ขา TX เป็น 26 โดยใช้คำสั่ง Serial1.setPins() แสดงดังโค้ดด้านล่าง
Serial1.begin(9600);
Serial1.setPins(25, 26);
ตัวอย่างการกำหนดให้ Serial2 ขา RX เป็น 16, ขา TX เป็น 17 โดยกำหนดใน Serial2.begin() แสดงดังโค้ดด้านล่าง
Serial2.begin(9600, SERIAL_8N1, 16, 17);
ตัวอย่างการกำหนดให้ Serial2 ขา RX เป็น 16, ขา TX เป็น 17 โดยใช้คำสั่ง Serial2.setPins() แสดงดังโค้ดด้านล่าง
Serial2.begin(9600);
Serial2.setPins(16, 17);
ตัวอย่างใช้บอร์ด IOXESP32 ต่อกัน 2 ตัว รับข้อมูลจาก Serial0 (ช่อง USB ที่เสียบกับคอม) แล้วส่งผ่าน Serial1 จากนั้นอีกตัวรับจาก Serial1 ส่งผ่าน Serial0 ไปแสดงผลที่คอม
โค้ดที่ได้ใช้ทดสอบมีดังนี้
เมื่อเปิด Serial Monitor ขึ้นมา ทดสอบพิมพ์ข้อความลง Serial Monitor ช่องหนึ่ง ข้อความก็จะไปแสดงที่อีกช่องหนึ่งแล้ว
ตัวอย่างใช้บอร์ด IOXESP32 ต่อกัน 2 ตัว รับข้อมูลจาก Serial0 (ช่อง USB ที่เสียบกับคอม) แล้วส่งผ่าน Serial2 จากนั้นอีกตัวรับจาก Serial2 ส่งผ่าน Serial0 ไปแสดงผลที่คอม
โค้ดที่ได้ใช้ทดสอบมีดังนี้
เมื่อเปิด Serial Monitor ขึ้นมา ทดสอบพิมพ์ข้อความลง Serial Monitor ช่องหนึ่ง ข้อความก็จะไปแสดงที่อีกช่องหนึ่งแล้ว