การส่งและรับ ข้อมูล ผ่าน Rx Tx ด้วย ESP32

การต่อใช้งาน

ตัวอ่าน

#include <HardwareSerial.h>
String a;

void setup() {
  // initialize serial:
  Serial.begin(115200);
  Serial2.begin(9600,SERIAL_8N1, 16, 17);
}

void loop() {
  

  Serial.println(String("Trst => ") + Serial2.read());
  delay(200);

  
}

ตัวส่งค่า

#include <HardwareSerial.h>
//HardwareSerial Serial2(2);             //Needed since this is an ESP32
int a = 55;
void setup() {
  Serial.begin(115200);
  Serial2.begin(9600, SERIAL_8N1, 16, 17);

}

void loop() {  
 
     //if (Serial2.readString()){

   

     //if(Serial2.readString()== "Question1"){ //มีการถามคำถาม Question1 ส่งข้อมูลตัวแปร a ออกไป

      //Serial.print(a);

     //}
     
     //}
     Serial2.write(a);
     delay(200);
  
}

output ที่ตัวอ่าน

image


รูปแบบที่ 2

ตัวรับ

#include <HardwareSerial.h>

int a;

void setup() {

  // initialize serial:

  Serial.begin(115200);

  Serial2.begin(9600,SERIAL_8N1, 16, 17);

}

void loop() {

a = Serial2.read();

Serial.println("กำลังอ่านข้อมูล");

 if (a == 123){

  Serial.println(String("ค่าจากเซ็นเซอร์ตัวที่2 => ") + Serial2.read());

  delay(200);

 }

  
  

}

ตัวส่ง

#include <HardwareSerial.h>
//HardwareSerial Serial2(2);             //Needed since this is an ESP32
int Sensor1_val1 = 123; //รหัส อ่าน
int _Sensor1_val1 = 50; // ค่าที่อ่านได้





void setup() {
  Serial.begin(115200);
  Serial2.begin(9600, SERIAL_8N1, 16, 17);

}

void loop() {  
 

     Serial2.write(Sensor1_val1);
     Serial2.write(_Sensor1_val1);
     delay(200);
  
}

output จากตัวรับ

image

อ่านค่า ได้ไม่เกิน 255

ตัวส่งเต็ม

#include <HardwareSerial.h>

//HardwareSerial Serial2(2);             //Needed since this is an ESP32

int Sensor3_val1 = 123; //รหัส อ่าน

int _Sensor3_val1 = 50; // ค่าที่อ่านได้

int Sensor3_val2 = 223; //รหัส อ่าน

int _Sensor3_val2 = 40; // ค่าที่อ่านได้

int Sensor4_val1 = 245; //รหัส อ่าน

int _Sensor4_val1 = 30; // ค่าที่อ่านได้

int Sensor4_val2 = 255; //รหัส อ่าน

int _Sensor4_val2 = 20; // ค่าที่อ่านได้

bool Read_Sensor3_val1 = false;

bool Read_Sensor3_val2 = false;

bool Read_Sensor4_val1 = false;

bool Read_Sensor4_val2 = false;

void setup() {

  Serial.begin(115200);

  Serial2.begin(9600, SERIAL_8N1, 16, 17);

}

void loop() {  

 

    if(Read_Sensor3_val1 == false){

       Serial2.write(Sensor3_val1);

       Serial2.write(_Sensor3_val1);

       Serial.println("Send_Sensor3_val1");

       delay(200);

       Read_Sensor3_val1 = Serial2.read();

    }

    if((Read_Sensor3_val2 == false) && (Read_Sensor3_val1 == true)){

       Serial2.write(Sensor3_val2);

       Serial2.write(_Sensor3_val2);

       Serial.println("Send_Sensor3_val2");

       delay(200);

       Read_Sensor3_val2 = Serial2.read();

    }

    if((Read_Sensor4_val1 == false) && (Read_Sensor3_val2 == true)){

       Serial2.write(Sensor4_val1);

       Serial2.write(_Sensor4_val1);

       Serial.println("Send_Sensor4_val1");

       delay(200);

       Read_Sensor4_val1 = Serial2.read();

    }

    if((Read_Sensor4_val2 == false) && (Read_Sensor4_val1 == true)){

       Serial2.write(Sensor4_val2);

       Serial2.write(_Sensor4_val2);

       Serial.println("Send_Sensor4_val2");

       delay(200);

       Read_Sensor4_val2 = Serial2.read();

    }

       Read_Sensor3_val1 = false;

       Read_Sensor3_val2 = false;

       Read_Sensor4_val1 = false;

       Read_Sensor4_val2 = false;

       

}

ตัวรับ

#include <HardwareSerial.h>

int Get_data_esp2;

bool Read_Sensor3_val1 = false;

bool Read_Sensor3_val2 = false;

bool Read_Sensor4_val1 = false;

bool Read_Sensor4_val2 = false;

int _Sensor3_val1; // ค่าที่อ่านได้

int _Sensor3_val2; // ค่าที่อ่านได้

int _Sensor4_val1; // ค่าที่อ่านได้

int _Sensor4_val2; // ค่าที่อ่านได้

void setup() {

  // initialize serial:

  Serial.begin(115200);

  Serial2.begin(9600,SERIAL_8N1, 16, 17);

}

void loop() {

Get_data_esp2 = Serial2.read();

Serial.println(String("กำลังอ่านข้อมูล => ") + Get_data_esp2);

  if (Get_data_esp2 == 123){

  _Sensor3_val1 = Serial2.read();

  Serial.println("อ่านเซ็นเซอร์ตัวที่3 Temp");

  Read_Sensor3_val1 = true;

  Serial2.write(Read_Sensor3_val1);

  delay(200);

 }

  if (Get_data_esp2 == 223){

  _Sensor3_val2 = Serial2.read();

  Serial.println("อ่านเซ็นเซอร์ตัวที่3 Humidity");

  Read_Sensor3_val2 = true;

  Serial2.write(Read_Sensor3_val2);

  delay(200);

 }

 if (Get_data_esp2 == 245){

  _Sensor4_val1 = Serial2.read();

  Serial.println("อ่านจากเซ็นเซอร์ตัวที่4 Temp");

  Read_Sensor4_val1 = true;

  Serial2.write(Read_Sensor4_val1);

  delay(200);

 }

if (Get_data_esp2 == 255){

  _Sensor4_val2 = Serial2.read();

  Serial.println("อ่านเซ็นเซอร์ตัวที่4 Humidity");

  Read_Sensor4_val2 = true;

  Serial2.write(Read_Sensor4_val2);

  delay(200);

 }

 

 Serial.println(String("ค่าจากเซ็นเซอร์ตัวที่3 Temp => ") + _Sensor3_val1);

 Serial.println(String("ค่าจากเซ็นเซอร์ตัวที่3 Humidity => ") + _Sensor3_val2);

 Serial.println(String("ค่าจากเซ็นเซอร์ตัวที่4 Temp => ") + _Sensor4_val1);

 Serial.println(String("ค่าจากเซ็นเซอร์ตัวที่4 Humidity => ") + _Sensor4_val2);

delay(2000);

  
  

}

output

image

พี่ครับโค๊ดของพี่ แบบนี้เลยครับที่ผมตามหา มันเป็นประโยชน์มากเลยครับ ขอบคุณมากเลยนะครับพี่

1 Likes

จัดไปคร้าาาพ

ถ้าตัวส่งเป็น arduino unor3 ตัวรับเป็น ESP32 ต้องต่อขา tx rx เเบบไหนครับ

ถ้าใช้เป็น arduino uno กับ ESP32 โดยทั้งคู่ต้องเป็นทั้งตัวส่งและตัวรับ ควรต่อ tx rx แบบไหนครับ

Serial Communication between an ESP32

Serial Communication between an ESP32 and an Arduin

โค้ต URT ฝั่ง Arduino

void setup() {
  Serial.begin(9600);
}
void loop() {
  Serial.println("Hello eleceasy.com");
  delay(1500);
}

โค้ต URT ฝั่ง ESP32

#define RX2pin 16
#define TX2pin 17
void setup() {
  Serial.begin(115200);
  Serial2.begin(9600, SERIAL_8N1, RX2pin, TX2pin);
}
void loop() {
    Serial.println("Message Received: ");
    Serial.println(Serial2.readString());
}

image
ในกรณีที่ arduino Serial.print temp เเละ temp1 เเล้วต้องการให้ esp32 อ่านค่า temp เเละ temp1 ต้องเเก้ไขโค๊ดส่วนไหนครับ

void setup() {
  Serial.begin(9600);
}
void loop() {
  Serial.println(temp);
  delay(1500);
Serial.println(temp1);
  delay(1500);
}
1 Likes

ครับตอนนี้ผมเหลือโค๊ดฝั่งของ esp32 เพื่อให้อ่านค่า temp เเละ temp1 จาก arduino

ทำตามตัวอย่างเลยครับ

1 Likes


ถ้า esp32 อ่านค่า temp เเละ temp1 เเล้ว นำค่าของ temp เปิด ไฟหลอที่ 1 , temp1 เปิดไฟหลอดที่ 2 ต้องเเก้ไขเพิ่มเติมในส่วนของโค๊ด esp32 ยังไงครับ

ผมยังไม่เห็นการใส่เงื่อนไขในส่วนนี้ เราเรียนพื้นฐาน การเขียนมาบ้างรึป่าวครับ

พอเรียนมาบ้างเเล้วครับ ตอนนี้ที่ผมกำลังทำอยู่คือ ถ้าต้องการนำค่า temperature ที่ esp32 อ่านได้ออกควบคุมหลอดไฟ ผมต้องเขียนโค๊ดเพิ่มในส่วน ของesp32 ยังไงครับ

ลองใช้ที่เรียนมาใส่ดูสิครับ ว่าเป็นยังไงผมจะช่วยตรวจดูให้ ที่เห็นอยู่นี้คือโค้ตที่ยังไม่ได้ทำอะไรเลยครับ

ขอวิธีการส่งข้อมูลระหว่างบอร์ด ESP32 ไปบอร์ด ESP32-cam พร้อมโค้ดตัวอย่างหน่อยครับ

ใช้โค้ตในกระทู้นี้ก็ได้

ในโค้ดจำเป็นต้องระบุรหัสที่อ่านมั้ยคะ หากต้องการต่อกับเซนเซอร์หลายๆตัวแล้วให้วัดค่าออกมาพร้อมๆกันค่ะ

ถ้าไม่ระบุรหัสเราก็ไม่รู้สิครับว่ารับค่าของตัวไหนมา