Computer/ESP32
Updated: 2025. 4. 8. 18:45
hwaya.

RS485통신 모듈로 데이터를 수신, 이후 데이터를 디스플레이로 보여주기
반응형
아래는 ESP32에서 RS485 모듈을 통해 데이터를 수신하고,
이를 파싱하여 연결된 디스플레이에 보여주는 간단한 예제 코드입니다.

다음과 같은 환경을 가정합니다:
- ESP32 (Arduino IDE)
- RS485 통신 모듈 (예: MAX485)
- 하드웨어 시리얼 또는 SoftwareSerial 사용 가능
- 디스플레이는 I2C OLED(SSD1306, 128x64)를 예시로 사용
라이브러리 설치 (Arduino IDE에서 필요)
- Adafruit_SSD1306
- Adafruit_GFX
아래는 코드 예제입니다 :
#include <HardwareSerial.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define RXD2 16
#define TXD2 17
#define RE_DE_PIN 4 // RS485 모듈의 RE와 DE를 함께 묶어서 제어하는 핀
// OLED 디스플레이 설정 (128x64)
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// RS485 데이터 버퍼
String receivedData = "";
void setup() {
Serial.begin(115200); // 디버깅용 시리얼
Serial2.begin(9600, SERIAL_8N1, RXD2, TXD2); // RS485용 UART 통신
pinMode(RE_DE_PIN, OUTPUT);
digitalWrite(RE_DE_PIN, LOW); // 데이터 수신 모드로 설정
// OLED 초기화
if (!display.begin(SSD1306_I2C_ADDRESS, 0x3C)) {
Serial.println("OLED 초기화 실패!");
while (true);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println("ESP32 RS485 Ready");
display.display();
delay(2000);
}
void loop() {
if (Serial2.available()) {
char incomingChar = Serial2.read();
if (incomingChar == '\n') { // 데이터의 끝으로 개행 문자 사용
Serial.print("받은 데이터: ");
Serial.println(receivedData);
// OLED에 데이터 출력
display.clearDisplay();
display.setCursor(0, 0);
display.println("Received Data:");
display.println(receivedData);
display.display();
// 데이터 파싱 예시 (쉼표로 구분된 데이터라 가정)
parseData(receivedData);
receivedData = ""; // 다음 데이터를 위해 버퍼 초기화
} else {
receivedData += incomingChar; // 문자를 버퍼에 추가
}
}
}
// 데이터 파싱 함수 예시
void parseData(String data) {
int index1 = data.indexOf(',');
int index2 = data.indexOf(',', index1 + 1);
if (index1 != -1 && index2 != -1) {
String value1 = data.substring(0, index1);
String value2 = data.substring(index1 + 1, index2);
String value3 = data.substring(index2 + 1);
Serial.println("파싱된 데이터:");
Serial.println("값1: " + value1);
Serial.println("값2: " + value2);
Serial.println("값3: " + value3);
// 파싱 결과 OLED 출력
display.setCursor(0, 30);
display.println("Parsed:");
display.println("V1: " + value1);
display.println("V2: " + value2);
display.println("V3: " + value3);
display.display();
} else {
Serial.println("데이터 형식이 잘못됨");
}
}
⚙️ 작동 원리 설명:
- RS485 모듈의 DE와 RE 핀은 LOW로 설정해 수신 모드로 동작합니다.
- ESP32의 Serial2(UART2)를 통해 RS485에서 데이터를 수신합니다.
- 개행(\n)을 기준으로 받은 데이터를 문자열로 구성합니다.
- 수신된 데이터를 쉼표(',')로 파싱해 3개의 데이터로 분리합니다.
- 결과는 OLED 디스플레이와 시리얼 모니터에 동시에 출력됩니다.
반응형
'Computer > ESP32' 카테고리의 다른 글
ESP32 WT32-ETH01, WT32-S1 with an Ethernet LAN interface (2) | 2024.08.27 |
---|---|
ESP32 WiFi (0) | 2023.07.10 |