serial interface isolated 5V 3.3V การสื่อสาร Serial แบบแยก Ground
บอร์ดการสื่อสาร Serial แบบแยก Ground
การสื่อสาร Serial นิยมใช้ในการสื่อสารระหว่างไมโครคอนโทรลเลอร์ 2 บอร์ดโดยเฉพาะการสื่อสารระหว่างบอร์ด Arduino กับ บอร์ดตระกูล ESP ต่างๆ เพื่อใช้ในงาน IOT โดยทั่วไปมักจะต่อสาย RX TX เข้าตรงๆ โดยไม่คำนึงถึงว่าไมโครคอนโทรลเลอร์ของ Arduino ใช้ไฟ 5V แต่ ESP ใช้เพียง 3.3V การนำไปใช้จึงมีความเสี่ยงที่บอร์ด ESP จะเสียหายเนื่องจาก Logic ของ Arduino มีแรงดันที่มากกว่า
เพื่อที่จะใช้งานอุปกรณ์ให้เหมาะสมจึงต้องแยกด้าน 5V กับ 3.3V ออกจากกัน นอกจากนี้การใช้ Opto แยก Ground ยังเป็นการตัดสัญญาณรบกวนของทั้งสองด้านเพื่อป้องกันข้อมูลผิดพลาด
ขาการเชื่อมต่อต่างๆของบอร์ดหรือต่อเข้ากับ ESP-01 ได้โดยตรง
ฝั่ง 5V ฝั่ง 3.3V
5V -> 5V 3.3V -> 3.3V
GND -> GND_5V GND -> GND_3.3V
RX -> RX RX -> RX
TX -> TX TX -> TX
ตัวอย่างการใช้งานบอร์ดสื่อสาร Serial แบบแยก Ground
การต่อสายทดสอบการทำงาน
Arduino uno
7 -> RX
6 -> TX
5V -> 5V
GND -> GND
Code สำหรับ Arduino uno
#include <SoftwareSerial.h> SoftwareSerial ESP8266(7,6); int Rece = 0; void setup() { Serial.begin(9600); ESP8266.begin(9600); } void loop() { if(Serial.available() > 0){ int Send = Serial.parseInt(); Serial.print("Send: "); Serial.println(Send); ESP8266.write(Send); } if(ESP8266.available() > 0){ Rece = ESP8266.read(); Serial.print("Receiver: "); Serial.println(Rece); } }
ESP8266
D1 -> RX
D2-> TX
3.3V -> 3.3V
GND -> GND
Code สำหรับ ESP8266
#include <SoftwareSerial.h> SoftwareSerial Arduino; void setup() { Serial.begin(115200); Arduino.begin(9600, SWSERIAL_8N1, 5, 4, false, 95, 11); } void loop() { while(Serial.available() > 0){ int Send = 0; Send = Serial.parseInt(); Serial.print("Send: "); Serial.println(Send); Arduino.write(Send); } while(Arduino.available() > 0){ int Rece = Arduino.read(); Serial.print("Receiver: "); Serial.println(Rece); } }
หลังจากอัพโหลด Code เข้าบอร์ดทั้ง 2 แล้วเปิด Serial monitor ของทั้งสองขึ้นมา
และพิมพ์ตัวเลขเข้าไปใน Serial monitor บอร์ดใดบอร์ดหนึ่ง
Serial monitor ของบอร์ดที่พิมพ์จะขึ้น Send: ตามด้วยเลขที่พิมพ์เข้ามา
และ Serial monitor ของอีกบอร์ดหนึ่งจะแสดง Receiver: ตามด้วยเลขที่พิมพ์มาจากอีก monitor หนึ่ง