การใช้ Hardware serial ของ esp32 ทั้ง 3 ชุด

สำหรับโพสต์นี้ แล้วจะมาดูเรื่อง การใช้ Hardware serial ของ esp32 กันนะครับ ผมจะอ้างข้อมูลจากโพสของ @Remy_Martin กันนะครับ

UART RX IO TX IO CTS RTS
UART0 GPIO3 GPIO1 N/A N/A
UART1 GPIO9 GPIO10 GPIO6 GPIO11
UART2 GPIO16 GPIO17 GPIO8 GPIO7

จากตารางนี้เราจะเห็นว่า esp32 จะมี uart จำนวนทั้งหมด 3 ชุดด้วยกันซึ่งแต่ละชุดจะถูกกำหนดค่าเอาไว้แล้วดังแสดงในตาราง โดยในที่นี้ผมจะสนใจเฉพาะขา RX และ TX เท่านั้นครับ

โดยตารางชุดนี้จะมาจาก ไฟล์ที่ชื่อว่า Hardware Serial.ccp โดยจะสามารถหาได้ในตำแหน่งนี้ C:\Users\ชื่อเครื่องคอมพิวเตอร์ของเรา\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\cores\esp32\HardwareSerial.cpp

    if(_uart_nr == 0 && rxPin < 0 && txPin < 0) {
        rxPin = 3;
        txPin = 1;
    }
    if(_uart_nr == 1 && rxPin < 0 && txPin < 0) {
        rxPin = RX1;
        txPin = TX1;
    }
    if(_uart_nr == 2 && rxPin < 0 && txPin < 0) {
        rxPin = RX2;
        txPin = TX2;
    }

โดยชุด code ในไฟล์นี้เราสามารถเปลี่ยนตำแหน่งขาให้เป็นขาอื่นๆตามที่เราต้องการได้ยกตัวอย่างเช่น

 if(_uart_nr == 0 && rxPin < 0 && txPin < 0) {
        rxPin = 16;
        txPin = 17;
    }
    if(_uart_nr == 1 && rxPin < 0 && txPin < 0) {
        rxPin = 13;
        txPin = 15;
    }
    if(_uart_nr == 2 && rxPin < 0 && txPin < 0) {
        rxPin = 12;
        txPin = 14;
    }

จากนั้นก็ทำการบันทึกไฟล์ และมากำหนดค่า Pin ในโค้ดของเราอีกที

#include <PZEM004Tv30.h>
#include <HardwareSerial.h>

//--- Phase A
#define RX2 14
#define TX2 12

PZEM004Tv30 pzem_A(&Serial2);


//-----------------------------------

//--- Phase B

#define RX1 13
#define TX1 15

PZEM004Tv30 pzem_B(&Serial1);

//-----------------------------------

//--- Phase C

PZEM004Tv30 pzem_C(&Serial);


void setup()
{

  Serial2.begin(9600, SERIAL_8N1, RX2, TX2);
  Serial1.begin(9600, SERIAL_8N1, RX1, TX1);
  Serial.begin(9600, SERIAL_8N1);


}

สังเกตนะครับว่า Serial ที่เราใช้ไป เราใช้ไปหมดแล้วเพราะฉะนั้น Serial Monitor ที่ใช้ในการ Monitor ของ arduino ide ก็จะไม่สามารถใช้งานได้อีก
ยังไงลองนำไปประยุกต์ใช้งานดูครับ

1 Likes

ตอนนั้นผมทำอะไรสักอย่างแล้ว ได้ Knowhow มาเลยมาตั้งกระทู้ เก็บไว้จนลืมไปแล้วนะครับนี้ :joy:

ผมได้ความรู้จาก @Remy_Martin มา แล้วคิดต่อยอดดู ปรากฎว่ามันสำเร็จครับ ขอบคุณมากครับ

เยี่ยมเลยครับพี่ :grin: