ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • RS485 & Modbus RTU
    RS485 & Modbus 2024. 1. 23. 02:17

    ESP32 IoT보드를 이용해서 RS485 컨버터를 이용해서 온습도 센서값을 얻어서 
    LTE CATM1 모뎀으로 전송할 수 있게 구현했습니다. 
     
    먼저 ESP32 IoT보드에는 RS485 트랜시버가 내장되어 있지 않아서 TTL to RS485 컨버터를 사용했습니다. 

    TTL to RS485 Converter

    https://www.devicemart.co.kr/goods/view?no=1324908 에서 판매하는 제품을 구입해서 사용했는데, MAX1348 칩셋으로 자동 흐름제어(auto flow control) 기능을 지원해서 GPIO로 전송 전, 전송 후 따로 흐름제어 신호를 만들지 않아도 되는 장점이 있습니다. 
     
    RS485 온습도센서는 https://www.devicemart.co.kr/goods/view?no=14490037 제품을 사용했습니다. RS485 통신 인터페이스를 지원하고 Modbus RTU프로토콜로 통신합니다. 

    xy-md02-manual.pdf
    0.82MB
    RS485 온습도 센서

     
    ESP32 IoT 보드와 RS485 컨버터, 온습도 센서는 아래와 같이 연결합니다. 
    XY-MD02 B-  ⟶  RS485 컨버터 D-/B 터미널
    XY-MD02 A+ ⟶  RS485 컨버터 D+/A 터미널
    XY-MD02  -  ⟶  RS485 컨버터 GND 터미널 + ESP32 IoT보드 GND
    XY-MD02 +  ⟶  ESP32 IoT보드 5V

     
    RS485 컨버터 VCC 핀헤더 ⟶  ESP32 IoT보드 3V3
    RS485 컨버터 TXD 핀헤더 ⟶  ESP32 IoT보드 RXD1/33
    RS485 컨버터 RXD 핀헤더 ⟶  ESP32 IoT보드 TXD1/32
    RS485 컨버터 GND 핀헤더 ⟶  ESP32 IoT보드 GND

    온습도 센서에 RS485 컨버터 GND와 ESP32 IoT보드 GND를 함께 연결해야 하므로 아래와 같이 하나로 묶어서 센서 터미널에 연결합니다.

     
    아래와 같이 온습도 센서, 컨버터, 보드 연결 작업을 진행했습니다. 

     
    온습도 센서는 Modbus RTU 프로토콜을 사용하기 때문에 Arduino IDE에 Modbus Master 라이브러리를 설치합니다. 
    Sketch  ⟶  Include Library  ⟶  Manage Libraries.. 

    ModbusMaster를 입력하고 최신 라이브러리(2.0.1)를 설치합니다.

     
    RS485와 Modbus RTU를 이용해서 XY-MD02를 동작시키는 예제는 TYPE1SC 최신 라이브러리를 설치하시면 아래와 같이 선택하실 수 있습니다. TYPE1SC_RS485_XY-MD02 예제를 선택합니다. 

     

    예제코드를 살펴보면, Serial1을 아래와 같이 다르게 선언해서 사용했습니다.

    HardwareSerial SerialPort(1);

    SerialPort.begin(9600, SERIAL_8N1, 33, 32);

     

    다른 예제들의 경우 일반적으로 Serial1로 선언해서 사용하는데 위와 같이 선언해서 사용한 이유는 다음과 같습니다.  .arduino15/packages/esp32/hardware/esp32/2.0.0(버전)/cores/esp32/HardwareSerial.cpp에 사전 정의된 내용을 살펴보겠습니다.

    Serial1 Default 설정 핀

    Serial1 구성 요소인 RX1은 9번핀에, TX1은 10번 핀을 사용하도록 정의되어 있어 Serial1으로 선언할 경우 ESP32 IoT보드의 33, 32를 각각 RX1, TX1로 설정할 수 없기 때문입니다. 

     

    그래서 예제에서 HardwareSerial 객체를 선언하고 아래 begin함수를 호출해서 사용자가 사용하려는 핀(여기서는 RX1-33, TX1-32)으로 정의해서 사용했습니다. 

    HardwareSerial::begin

     

    RS485통신의 경우, 아래 공개된 소스코드를 참고했습니다. 
    https://github.com/TronixLab/ModBus-RTU-Temperature-Humidity-SHT20-Sensor/tree/main/Examples/1-HardwareSerial_Temperature_and_Humidity__SHT20__Sensor

     

    단, 프로젝트에 RS485 컨버터가 auto flow control을 지원하므로 아래와 같이 preTransmission와 postTransmission에 대한 GPIO제어 구현을 삭제하고 연결 함수포인터를 NULL로 처리해서 흐름제어 동작을 하지 않도록 설정했습니다.

    Modbus Slave ID 지정 및 Flow Control 함수 등록

     
    동작 영상입니다. 

    이제 RS485 통신 인터페이스를 통해 들어온 값을 TCP소켓으로 공개 Echo 서버에 보내고 결과값을 받아 보겠습니다. 
    소스코드는 첨부 파일을 참고하시기 바랍니다.

    TYPE1SC_TCP_test_RS485.ino
    0.01MB

     
    기존 TCP소켓 테스트 코드에서 아래 부분이 추가되었습니다. 소켓이 연결되면 온습도 센서의 레지스터를 읽어서 온습도 값을 얻어온 후 String 변수에 담아서 character 배열로 변경 후 전송하고 서버에서 동일한 결과 값을 받아오는지 확인하는 코드입니다. 

     
    동작영상입니다. 

     

     
    Murata Type1SC 모듈 구매, 자료 관련 문의
    (주)아성코리아
    전지만 이사 010-5418-8812 mlcc@asung.com
    박상인 수석 010-6556-5405 sipark@asung.com

    LTE-CATM1 내장형 모뎀 대량 구매 상담, 외주 개발, 협업 문의
    (주)코드주
    장병남 대표 010-8965-1323 rooney.jang@codezoo.co.kr
     
    https://www.devicemart.co.kr/goods/view?no=14077527

     

    LTE-CatM1 내장형 모뎀 / 사물인터넷 통신모듈

    사물인터넷 개발을 위한 LTE 모듈입니다. / CodeZoo / 사물인터넷 통신모듈 / 유심은 상품상세의 링크에서 별도 구매가 필요합니다.

    www.devicemart.co.kr

    https://smartstore.naver.com/codezoo/products/8514695472

     

    LTE CATM1 ESP32 IoT 보드 : codezoo

    [codezoo] IoT Global SIM, IoT Connectivity, IoT Device

    smartstore.naver.com

    https://smartstore.naver.com/codezoo/products/7153689192

     

    Vodafone Global IoT SIM Card : codezoo

    [codezoo] IoT Global SIM, IoT Connectivity, IoT Device

    smartstore.naver.com

     

Designed by Tistory.