ESP32 C3 Super Mini RS485

RS485는 강력한 노이즈 보호 기능으로 긴 전선을 통해 데이터를 보내는 시리얼 표준입니다. 저렴한 TTL to RS485 모듈만 있으면 ESP32 C3 Super Mini가 수백 미터 떨어진 장치와 통신할 수 있습니다. 이 튜토리얼에서는 ESP32 C3 Super Mini에서 RS485 통신을 배선하고 프로그래밍하는 방법을 보여줍니다.

이 튜토리얼에서 배울 내용:

ESP32 C3 Super Mini - rs485

필요한 하드웨어

1×ESP32 C3 Super Mini 아마존
1×USB 케이블 타입-A to 타입-C (USB-A PC용) 쿠팡 | 아마존
1×USB 케이블 타입-C to 타입-C (USB-C PC용) 아마존
1×TTL-RS485 변환 모듈 쿠팡 | 아마존
1×(또는) MAX485 RS485 to TTL Module (NOT soldered) 아마존
1×(또는) MAX485 RS485 to TTL Module *(soldered) 아마존
1×점퍼케이블 쿠팡 | 아마존
1×(옵션) USB-RS485 변환기 쿠팡 | 아마존
1×(옵션) USB to RS485 Cable 아마존
공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

TTL to RS485 모듈 정보

TTL to RS485 모듈은 ESP32 C3 Super Mini의 TTL 시리얼 신호를 RS485 신호로, 그리고 그 반대로 바꿔주는 작은 보드입니다.

ESP32 C3 Super Mini는 TX 핀으로 시리얼 데이터를 보내고 RX 핀으로 받습니다. 이 핀들은 TTL 레벨을 사용하며, 짧은 전선에서만 작동합니다. 긴 케이블을 사용하려면 TTL을 RS232, RS485 또는 RS422 같은 더 강한 표준으로 변환해야 합니다.

주요 기능:

  • 장거리: 좋은 케이블에서 약 1200미터까지 작동합니다
  • 노이즈 방지: 반대 신호를 가진 두 개의 전선을 사용하므로 노이즈가 상쇄됩니다
  • 다중 장치: 여러 장치가 같은 전선 쌍을 공유할 수 있습니다
  • 사용이 간단함: 일반 시리얼 코드로 작동하며 특별한 라이브러리가 필요 없습니다
  • 3.3V 호환: 대부분의 모듈은 ESP32 C3 Super Mini의 3.3V 핀에서 잘 작동합니다

기술 사양:

  • 일반적인 칩: MAX13487, MAX3485, SP3485, MAX485
  • 공급 전압: 모듈에 따라 3.3V 또는 5V
  • 로직 레벨: ESP32 C3 Super Mini에는 반드시 3.3V여야 합니다
  • 케이블 유형: 트위스트 페어 한 쌍과 GND 선 하나
  • 종단: 긴 케이블의 양쪽 끝에 각각 120옴 저항
  • 일반적인 속도: 9600 ~ 115200 보드레이트

WARNING

ESP32 C3 Super Mini는 3.3V 보드입니다. 3.3V 로직의 TTL to RS485 모듈만 사용하거나 레벨 시프터를 추가하세요. 5V TXD/RO 출력을 GPIO 핀에 직접 보내면 칩이 손상될 수 있습니다. RS485 쪽에서는 항상 A와 B를 케이블의 같은 트위스트 페어로 연결하고, A는 A에, B는 B에 연결하며, 긴 케이블의 양쪽 끝에 120옴 저항을 다세요.

핀아웃

RS485 to TTL 모듈에는 두 쪽이 있습니다: 보드용 TTL 쪽과 긴 케이블용 RS485 쪽입니다.

  • VCC 핀: 전원 입력, ESP32 C3 Super Mini의 3.3V에 연결
  • GND 핀: 접지(0V), ESP32 C3 Super Mini와 공유
  • RXD 핀 (DI): 모듈의 데이터 입력, ESP32 C3 Super Mini의 TX 핀에 연결
  • TXD 핀 (RO): 모듈의 데이터 출력, ESP32 C3 Super Mini의 RX 핀에 연결
  • D+ 핀 (A 또는 TR+): RS485 쌍의 한쪽 전선, 데이터 통신에 사용
  • D- 핀 (B 또는 TR-): RS485 쌍의 다른 쪽 전선, 데이터 통신에 사용
  • GND 핀 (RS485 쪽): 선택 사항이지만 강력히 권장, 노이즈 문제를 줄여줍니다
  • DE/RE 핀 (일부 모듈에만 있음): 방향 제어, 송신 시 HIGH, 수신 시 LOW

※ 주의:

MAX13487 계열 같은 많은 모듈은 스스로 방향을 전환하므로 DE/RE 핀이 없습니다. 모듈에 DE/RE 핀이 있다면 ESP32 C3 Super Mini의 GPIO5에 연결하고, 송신 전에 HIGH로, 수신할 때는 LOW로 설정하세요.

rs-485 모듈 핀아웃
image source: diyables.io

배선 다이어그램

모듈의 TTL 쪽을 ESP32 C3 Super Mini에 연결하고, RS485 쪽을 긴 케이블에 연결합니다.

  • 참고: 3.3V 로직만 사용하세요. GPIO 핀에 5V 신호를 절대 넣지 마세요.
  • 참고: GPIO20과 GPIO21은 시리얼 모니터가 사용하는 UART이므로 비워 두세요.
  • 참고: 모듈의 RXD는 보드의 TX 핀으로, TXD는 RX 핀으로 연결합니다. 서로 교차됩니다.
  • 참고: GPIO8이나 GPIO9는 사용하지 마세요 — 부트 스트래핑 핀입니다.
  • 참고: 모듈과 ESP32 C3 Super Mini는 GND를 공유해야 합니다. 그렇지 않으면 아무것도 작동하지 않습니다.
ESP32 C3 Super Mini ttl to rs485 배선 다이어그램

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

RS485 모듈 핀 ESP32 C3 Super Mini 핀
VCC 3.3V
GND GND
RXD (DI) GPIO6
TXD (RO) GPIO7
DE/RE (모듈에 있는 경우에만) GPIO5

RS485 모듈을 사용하도록 ESP32 C3 Super Mini를 프로그래밍하는 방법

ESP32 C3 Super Mini에는 하드웨어 UART가 여러 개 있으므로 RS485에는 두 번째 UART를 사용합니다.

※ 주의:

ESP32 C3 Super Mini에는 SoftwareSerial 라이브러리가 없습니다. 대신 내장된 HardwareSerial 클래스를 사용하세요. 더 빠르고 안정적이며 추가 CPU 시간을 사용하지 않습니다. GPIO20과 GPIO21은 시리얼 모니터에 필요한 첫 번째 UART에 속하므로 RS485 모듈은 별도의 핀을 사용합니다.

  • RS485 시리얼 핀을 정의합니다:
#define RX1PIN 7 // GPIO7, to the TXD (RO) pin of the RS485 module #define TX1PIN 6 // GPIO6, to the RXD (DI) pin of the RS485 module
  • 두 번째 하드웨어 시리얼 포트를 만듭니다:
HardwareSerial rs485Serial(1);
  • 시리얼 모니터와 RS485 포트를 시작합니다:
Serial.begin(115200); // Serial Monitor, uses GPIO20/GPIO21 rs485Serial.begin(9600, SERIAL_8N1, RX1PIN, TX1PIN); // RS485, uses GPIO7 (RX) and GPIO6 (TX)

ESP32 C3 Super Mini 코드 - RS485

이 스케치는 RS485에서 받은 모든 문자를 에코하고 시리얼 모니터에도 출력합니다.

이 코드가 하는 일:

  • 보드 자체 UART에서 115200 보드레이트로 시리얼 모니터를 시작합니다
  • GPIO7(RX)과 GPIO6(TX)에서 9600 보드레이트로 RS485용 두 번째 하드웨어 UART를 시작합니다
  • RS485에서 새 문자가 도착했는지 계속 확인합니다
  • 같은 문자를 RS485 송신자에게 다시 보냅니다. 이는 간단한 에코 테스트입니다
  • 문자를 시리얼 모니터에 출력하여 PC에서 확인할 수 있게 합니다
/* * 이 ESP32 C3 Super Mini 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 C3 Super Mini 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32-c3/esp32-c3-super-mini-rs485 */ #define RX1PIN 7 // The ESP32 C3 SuperMini pin GPIO7 connected to the TXD pin of the RS485 module #define TX1PIN 6 // The ESP32 C3 SuperMini pin GPIO6 connected to the RXD pin of the RS485 module // use the second hardware UART of the ESP32 C3 SuperMini // UART0 (GPIO20/GPIO21) is used by the Serial Monitor, so it must stay free HardwareSerial rs485Serial(1); void setup() { // start communication with the Serial Monitor Serial.begin(115200); // Serial Monitor // start communication with the RS485 module on GPIO7 (RX) and GPIO6 (TX) rs485Serial.begin(9600, SERIAL_8N1, RX1PIN, TX1PIN); // RS485 // wait a moment to allow serial ports to initialize delay(100); } void loop() { // Check if there's data available on the RS485 serial port if (rs485Serial.available()) { char data = rs485Serial.read(); // read the received character rs485Serial.print(data); // echo back to data to the sender Serial.print(data); // print the recived data to Serial Monitor } }

빠른 단계

  • ESP32 C3 Super Mini가 처음이신가요? 먼저 ESP32 C3 슈퍼 미니 - 시작하기 튜토리얼을 완료하여 개발 환경을 설정하세요.
  • 부품 배선: 위의 배선 다이어그램을 따라 RS485 모듈을 ESP32 C3 Super Mini에 연결합니다.
  • 보드 연결: USB Type-C 케이블로 ESP32 C3 Super Mini를 PC에 연결합니다.
  • Arduino IDE 열기: Arduino IDE 소프트웨어를 실행합니다.
  • 보드 선택: Tools > Board에서 ESP32 C3 Super Mini가 선택되어 있는지 확인하세요.
  • 포트 선택: Tools > Port에서 ESP32 C3 Super Mini의 COM 포트를 선택합니다.
  • 코드 업로드: 위의 코드를 복사하여 Arduino IDE에 붙여넣은 다음 Upload 버튼을 클릭합니다.
  • 시리얼 모니터 열기: 보드레이트를 115200으로 설정합니다.
  • 데이터 보내기: 다른 RS485 장치에서 몇 개의 문자를 보냅니다.
  • 결과 확인: 시리얼 모니터에 문자가 표시되는 것을 확인합니다.
  • 전문가 팁: 아무것도 보이지 않으면 A와 B 선을 바꿔 보세요. 쌍을 교차 연결하는 것이 RS485에서 가장 흔한 실수입니다.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32C3 Dev Module
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32C3 Dev Module' on 'COM15')
New Line
9600 baud
Hello from RS485 Sensor value: 24.6 Sensor value: 24.9 Sensor value: 25.1
Ln 11, Col 1
ESP32C3 Dev Module on COM15
2

라인별 코드 설명

위의 ESP32 C3 Super Mini 코드에는 라인별 설명이 포함되어 있습니다. 코드의 주석을 읽어주세요!

테스트

RS-485를 통해 PC에서 ESP32 C3 Super Mini로 데이터를 보내고 다시 돌려받아 설정을 테스트할 수 있습니다. 다음 단계를 따르세요:

  • 하드웨어 연결: 아래와 같이 RS485-to-USB 케이블로 ESP32 C3 Super Mini를 PC에 연결합니다.
  • 터미널 설치: Tera Term 또는 PuTTY 같은 시리얼 터미널 프로그램을 설치합니다.
  • 파라미터 설정: 터미널을 열고 COM 포트와 보드레이트 9600을 선택합니다.
  • 데이터 입력: 터미널에서 ESP32 C3 Super Mini로 몇 개의 문자를 보냅니다.
  • 에코 확인: 작동하면 같은 문자가 터미널로 돌아옵니다.
  • 보드 쪽 확인: 같은 문자가 115200 보드레이트의 Arduino IDE 시리얼 모니터에도 표시됩니다.
ESP32 C3 Super Mini rs485와 pc 간 통신

※ 주의:

RS485 링크는 9600 보드레이트로, 시리얼 모니터는 115200 보드레이트로 작동합니다. 두 숫자는 의도적으로 다르며, 문제없습니다. RS485 케이블의 양쪽 끝이 같은 속도를 사용하는지만 확인하세요.

응용/프로젝트 아이디어

ESP32 C3 Super Mini에서 RS485를 사용하는 간단한 방법은 다음과 같습니다.

  • 장거리 센서: 500미터 떨어진 곳에 설치된 온도 센서를 읽습니다.
  • Modbus RTU 마스터: Modbus를 사용하는 산업용 계측기와 모터 드라이브와 통신합니다.
  • 다중 보드 네트워크: 여러 ESP32 C3 Super Mini 보드를 하나의 전선 쌍에 연결합니다.
  • 농장 모니터링: 밭의 토양 및 날씨 데이터를 집으로 보냅니다.
  • 출입 통제: 큰 건물 곳곳에 설치된 RFID 리더를 읽습니다.
  • 태양광 인버터 로거: 인버터에서 에너지 데이터를 가져와 온라인에 게시합니다.

도전 과제

ESP32 C3 Super Mini에서 RS485를 더 깊이 다루려면 다음 아이디어를 시도해 보세요.

  • 쉬움: 문자가 도착할 때마다 GPIO8의 내장 LED를 깜빡입니다.
  • 쉬움: 양쪽 모두 RS485 속도를 9600에서 19200으로 변경합니다.
  • 중간: 한 문자씩이 아니라 rs485Serial.readStringUntil()로 한 줄 전체를 읽습니다.
  • 중간: GPIO5에 DE/RE 핀을 추가하고 직접 작성한 코드로 방향을 전환합니다.
  • 고급: 각 보드에 주소를 부여하여 해당 보드만 응답하도록 만듭니다.
  • 고급: Wi-Fi를 통해 RS485 데이터를 웹 페이지로 보냅니다.