티스토리 뷰

ESP32Nano 2개 사이를 RS-485 방식으로 데이터를 송신 및 수신하고자 함.
원본 데이터의 형식은 JSON임.

 

[송신측 코드]

* Serial2.begin(9600) 사용 가능

#include <HardwareSerial.h>
#include <ArduinoJson.h>

#define DE_RE 2  // RS-485 모듈 DE & RE 핀

HardwareSerial RS485Serial(1); // UART1 사용 (TX = GPIO17, RX = GPIO16)

void setup() {
    pinMode(DE_RE, OUTPUT);
    digitalWrite(DE_RE, HIGH); // 송신 모드 활성화

    RS485Serial.begin(9600, SERIAL_8N1, 16, 17); // RX = GPIO16, TX = GPIO17
    Serial.begin(115200);
}

void loop() {
    StaticJsonDocument<200> jsonDoc;
    jsonDoc["temperature"] = 22.5;
    jsonDoc["humidity"] = 55;
    jsonDoc["status"] = "OK";

    char jsonString[200];
    serializeJson(jsonDoc, jsonString);

    // RS-485로 JSON 데이터 전송
    digitalWrite(DE_RE, HIGH);  // 송신 모드
    RS485Serial.println(jsonString);
    digitalWrite(DE_RE, LOW);   // 수신 모드로 전환

    Serial.print("Sent: ");
    Serial.println(jsonString);

    delay(1000);
}

 

[수신측 코드]

* Serial2.begin(9600) 사용 가능

#include <HardwareSerial.h>
#include <ArduinoJson.h>

#define DE_RE 2  // RS-485 모듈 DE & RE 핀

HardwareSerial RS485Serial(1); // UART1 사용 (TX = GPIO17, RX = GPIO16)

void setup() {
    pinMode(DE_RE, OUTPUT);
    digitalWrite(DE_RE, LOW); // 수신 모드 활성화

    RS485Serial.begin(9600, SERIAL_8N1, 16, 17); // RX = GPIO16, TX = GPIO17
    Serial.begin(115200);
}

void loop() {
    if (RS485Serial.available()) {
        String receivedData = RS485Serial.readStringUntil('\n');  // 데이터 수신

        StaticJsonDocument<200> jsonDoc;
        DeserializationError error = deserializeJson(jsonDoc, receivedData);

        if (error) {
            Serial.print("JSON Parsing Failed: ");
            Serial.println(error.c_str());
            return;
        }

        float temperature = jsonDoc["temperature"];
        int humidity = jsonDoc["humidity"];
        const char* status = jsonDoc["status"];

        Serial.println("Received JSON Data:");
        Serial.print("Temperature: "); Serial.println(temperature);
        Serial.print("Humidity: "); Serial.println(humidity);
        Serial.print("Status: "); Serial.println(status);
    }
}

 

 

반응형
반응형
250x250
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함