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

Table of Contents


EIGHTBOX
EIGHTBOX
hwaya.

programmer

🍋일상의 소소한 순간들부터 큰 꿈까지, 호기심을 만족시킬 다양한 카테고리를 담은 블로그 입니다. 그리고, 소소한 행동에 감동하며 기뻐하고 하루하루에 감사하는 사람🌵

Today Yesterday Total
최신글