Bosszi

รับออกแบบวงจร รับทำวงจรสำหรับ ARDUINO ตามความต้องการ

Monthly Archives พฤษภาคม 2021

serial interface isolated 5V 3.3V การสื่อสาร Serial แบบแยก Ground

serial interface isolated 5V 3.3V การสื่อสาร Serial แบบแยก Ground

Serial-Opto

บอร์ดการสื่อสาร Serial แบบแยก Ground

การสื่อสาร Serial นิยมใช้ในการสื่อสารระหว่างไมโครคอนโทรลเลอร์ 2 บอร์ดโดยเฉพาะการสื่อสารระหว่างบอร์ด Arduino กับ บอร์ดตระกูล ESP ต่างๆ เพื่อใช้ในงาน IOT โดยทั่วไปมักจะต่อสาย RX TX เข้าตรงๆ โดยไม่คำนึงถึงว่าไมโครคอนโทรลเลอร์ของ Arduino ใช้ไฟ 5V แต่ ESP ใช้เพียง 3.3V  การนำไปใช้จึงมีความเสี่ยงที่บอร์ด ESP จะเสียหายเนื่องจาก Logic ของ Arduino มีแรงดันที่มากกว่า

เพื่อที่จะใช้งานอุปกรณ์ให้เหมาะสมจึงต้องแยกด้าน 5V กับ 3.3V ออกจากกัน นอกจากนี้การใช้ Opto แยก Ground ยังเป็นการตัดสัญญาณรบกวนของทั้งสองด้านเพื่อป้องกันข้อมูลผิดพลาด

 

Serial-Opto-PinOut

ขาการเชื่อมต่อต่างๆของบอร์ดหรือต่อเข้ากับ 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-Serial-ESP

การต่อสายทดสอบการทำงาน

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);
  }
}

 

Serial_Moni

 

หลังจากอัพโหลด Code เข้าบอร์ดทั้ง 2 แล้วเปิด Serial monitor ของทั้งสองขึ้นมา

และพิมพ์ตัวเลขเข้าไปใน Serial monitor บอร์ดใดบอร์ดหนึ่ง

Serial monitor ของบอร์ดที่พิมพ์จะขึ้น Send: ตามด้วยเลขที่พิมพ์เข้ามา

และ Serial monitor ของอีกบอร์ดหนึ่งจะแสดง Receiver: ตามด้วยเลขที่พิมพ์มาจากอีก monitor หนึ่ง

  • เรื่องล่าสุด

  • คลังเก็บ

  • บันทึกส่วนตัว