이전 기사 에서,
나는 ESP8266에 아주 싼 RS485 모듈을 연결하는 방법을 검토했다.
일반적으로 낙뢰 등의 트러블에 대한 보호 기능이 없는 MAX485 칩으로
가격은 약 0.3$ 5개 단위로 도매 구매하는 것이 좋다 .
매우 저렴한 RS485 인터페이스 보드
이전에 검토한 XY-485 또는 XY-017와 같은 보호기능이 있는 조금 비싼 모듈을 사용하는 것이 좋습니다 .
일부 산업 문제로부터 더 보호되고 자동 흐름 제어 기능이 있습니다.
ESP32 DevKit V1이 있는 RS485 연결 개략도
ESP32 DevKit V1보드 에는 U0UXD, U1UXD, U2UXD로 명명된 세 개의 UART 포트가 있습니다.
- U0UXD : ESP32DevKit V1 의 USB 변환기가 사용.
- U1UXD : 자체 프로젝트에 사용할 수 있고, 일부 보드에서는 SPI 플래시가 차지하는 핀입니다.
U1UXD를 다른 핀으로 옮기지 않으면 오류가 발생할 수 있습니다. - U2UXD는 자체 프로젝트에 사용할 수 있습니다.
따라서 대부분의 개발자 보드에서는 ESP32 U0UXD를 기반으로 USB 변환기를 사용합니다.
2개의 무료 UART 포트만 사용할 수 있습니다.
ESP32 LuaNode32를 저렴한 RS485 모듈에 연결하는 방법은 다음과 같습니다.
저렴한 RS485 모듈에 ESP32 연결
내 예시RS485 보드는 LuaNode32 보드의 3,3V 핀에서 공급되는 전원입니다. 이것의일하고있는방법. RS485 보드에 별도의 전원 공급 장치를 사용하려면 다음과 같아야 합니다.
RS485 보드용 전원 공급 장치는 3,3V여야 합니다 .
그렇지 않으면 GPIO ESP32를 태울 수 있습니다!!!
또는 TTL 레벨 변환기를 사용하십시오 .
ESP32 루아노드32 | RS485(MAX485 칩셋) |
RX (PIN RX2, GPIO16) | RO (Receive Output) |
TX (PIN TX2, GPIO17) | DI (Driver Input) |
DE_RE (GPIO4, D4) | DE (Driver Enable) RE (Receive enable) |
3,3V | VCC (3,3V) |
GND | GND |
RO (Receive Output) – 송신기 디지털 입력;
DI (Driver Input) – 수신기 디지털 출력;
DE (Driver Enable)) – 송신기가 작동하도록 합니다.
RE (Receive enable) – 수신기가 작동하도록 합니다.
핀 DE와 RE가 연결되어야합니다..
DE/RE 핀이 있는 RS485 보드와 함께 작동하는 ESP32 프로그램
#include "ModbusMaster.h" //https://github.com/4-20ma/ModbusMaster
/*!
We're using a MAX485-compatible RS485 Transceiver.
Rx/Tx is hooked up to the hardware serial port at 'Serial'.
The Data Enable (DE) and Receiver Enable (RE) pins are hooked up as follows:
*/
#define MAX485_RE_NEG 4 //D4 RS485 has a enable/disable pin to transmit or receive data. Arduino Digital Pin 2 = Rx/Tx 'Enable'; High to Transmit, Low to Receive
#define Slave_ID 1
#define RX_PIN 16 //RX2
#define TX_PIN 17 //TX2
// instantiate ModbusMaster object
ModbusMaster modbus;
void preTransmission()
{
digitalWrite(MAX485_RE_NEG, HIGH); //Switch to transmit data
}
void postTransmission()
{
digitalWrite(MAX485_RE_NEG, LOW); //Switch to receive data
}
void setup()
{
pinMode(MAX485_RE_NEG, OUTPUT);
// Init in receive mode
digitalWrite(MAX485_RE_NEG, LOW);
// Modbus communication runs at 9600 baud
Serial.begin(9600, SERIAL_8N1);
Serial2.begin(9600, SERIAL_8N1, RX_PIN, TX_PIN);
modbus.begin(Slave_ID, Serial2);
// Callbacks allow us to configure the RS485 transceiver correctly
modbus.preTransmission(preTransmission);
modbus.postTransmission(postTransmission);
}
long lastMillis = 0;
void loop()
{
long currentMillis = millis();
if (currentMillis - lastMillis > 1000)
{
uint8_t result = modbus.readInputRegisters(0x01, 2);
if (getResultMsg(&modbus, result))
{
Serial.println();
double res_dbl = modbus.getResponseBuffer(0) / 10;
String res = "Temperature: " + String(res_dbl) + " C\r\n";
res_dbl = modbus.getResponseBuffer(1) / 10;
res += "Humidity: " + String(res_dbl) + " %";
Serial.println(res);
}
lastMillis = currentMillis;
}
}
bool getResultMsg(ModbusMaster *node, uint8_t result)
{
String tmpstr2 = "\r\n";
switch (result)
{
case node->ku8MBSuccess:
return true;
break;
case node->ku8MBIllegalFunction:
tmpstr2 += "Illegal Function";
break;
case node->ku8MBIllegalDataAddress:
tmpstr2 += "Illegal Data Address";
break;
case node->ku8MBIllegalDataValue:
tmpstr2 += "Illegal Data Value";
break;
case node->ku8MBSlaveDeviceFailure:
tmpstr2 += "Slave Device Failure";
break;
case node->ku8MBInvalidSlaveID:
tmpstr2 += "Invalid Slave ID";
break;
case node->ku8MBInvalidFunction:
tmpstr2 += "Invalid Function";
break;
case node->ku8MBResponseTimedOut:
tmpstr2 += "Response Timed Out";
break;
case node->ku8MBInvalidCRC:
tmpstr2 += "Invalid CRC";
break;
default:
tmpstr2 += "Unknown error: " + String(result);
break;
}
Serial.println(tmpstr2);
return false;
}
ESP32 및 RS485용 Fritzing 부품
MH-ET LIVE ESP32 DEVKIT 38핀 프리칭 부품 *.fzpz
RS485 모듈 MAX485 fritzing 부분 *.fzpz.
'ESP32' 카테고리의 다른 글
ESP32 Serial 통신 라이브러리, software Serial? (0) | 2021.09.02 |
---|---|
How to work with RS485 interface on ESP32 (0) | 2021.08.23 |
Connection of Thermocouple (K-Type) to ESP8266/ESP32/Arduino (0) | 2021.08.23 |
ESP32 Serial 통신 라이브러리 (0) | 2021.08.17 |
ESP32 Data Logging Temperature to MicroSD Card (0) | 2021.08.16 |