File Analysis Request
Table
| Function | ESP32-S3 GPIO | Net |
|---|---|---|
| W5500 SCK | GPIO12 | ETH_SPI_SCK |
| W5500 MOSI | GPIO11 | ETH_SPI_MOSI |
| W5500 MISO | GPIO13 | ETH_SPI_MISO |
| W5500 CS | GPIO10 | ETH_CS |
| W5500 INT | GPIO9 | ETH_INT |
| W5500 RST | GPIO8 | ETH_RST |
| RS485 TX | GPIO17 | RS485_TX |
| RS485 RX | GPIO16 | RS485_RX |
| RS485 DE/RE | GPIO4 | RS485_DE_RE |
| I2C SDA | GPIO1 | S3_I2C_SDA |
| I2C SCL | GPIO2 | S3_I2C_SCL |
| IO expander INT | GPIO3 | IOEXP_INT |
| GSM modem TXD to S3 RX | GPIO15 | GSM_TXD_TO_S3_RX |
| GSM modem RXD from S3 TX | GPIO14 | GSM_RXD_FROM_S3_TX |
| GSM PWRKEY | GPIO18 | GSM_PWRKEY |
| GSM RESET | GPIO21 | GSM_RESET |
| S3↔P4 SPI SCK/MOSI/MISO/CS | GPIO35/36/37/38 | S3P4_SPI_* |
| P4 IRQ / READY | GPIO47 / GPIO48 | S3P4_IRQ_P4_TO_S3, S3P4_READY_S3_TO_P4 |
Ini
[env:esp32-s3-devkitc-1] platform = espressif32 board = esp32-s3-devkitc-1 framework = arduino monitor_speed = 115200 lib_deps = arduino-libraries/Ethernet@^2.0.2 4-20ma/ModbusMaster@^2.0.1
Cpp
#include <Arduino.h> #include <SPI.h> #include <Wire.h> #include <Ethernet.h> #include <ModbusMaster.h> #define ETH_SCK 12 #define ETH_MOSI 11 #define ETH_MISO 13 #define ETH_CS 10 #define ETH_INT 9 #define ETH_RST 8 #define RS485_TX 17 #define RS485_RX 16 #define RS485_DE_RE 4 #define I2C_SDA 1 #define I2C_SCL 2 #define IOEXP_INT 3 #define GSM_RX_FROM_MODEM 15 #define GSM_TX_TO_MODEM 14 #define GSM_PWRKEY 18 #define GSM_RESET 21 #define P4_SPI_SCK 35 #define P4_SPI_MOSI 36 #define P4_SPI_MISO 37 #define P4_SPI_CS 38 #define P4_IRQ 47 #define P4_READY 48 HardwareSerial RS485Serial(2); HardwareSerial GSMSerial(1); ModbusMaster modbus; void rs485PreTransmission(){ digitalWrite(RS485_DE_RE, HIGH); } void rs485PostTransmission(){ digitalWrite(RS485_DE_RE, LOW); } void resetEthernet(){ pinMode(ETH_RST, OUTPUT); digitalWrite(ETH_RST, LOW); delay(10); digitalWrite(ETH_RST, HIGH); delay(100); } void setup(){ Serial.begin(115200); pinMode(RS485_DE_RE, OUTPUT); digitalWrite(RS485_DE_RE, LOW); pinMode(GSM_PWRKEY, OUTPUT); digitalWrite(GSM_PWRKEY, HIGH); pinMode(GSM_RESET, OUTPUT); digitalWrite(GSM_RESET, HIGH); pinMode(ETH_INT, INPUT_PULLUP); pinMode(IOEXP_INT, INPUT_PULLUP); pinMode(P4_IRQ, INPUT_PULLUP); pinMode(P4_READY, OUTPUT); digitalWrite(P4_READY, LOW); Wire.begin(I2C_SDA, I2C_SCL); RS485Serial.begin(9600, SERIAL_8N1, RS485_RX, RS485_TX); modbus.begin(1, RS485Serial); modbus.preTransmission(rs485PreTransmission); modbus.postTransmission(rs485PostTransmission); GSMSerial.begin(115200, SERIAL_8N1, GSM_RX_FROM_MODEM, GSM_TX_TO_MODEM); SPI.begin(ETH_SCK, ETH_MISO, ETH_MOSI, ETH_CS); resetEthernet(); Ethernet.init(ETH_CS); byte mac[] = {0xDE,0xVA,0x00,0x00,0x00,0x01}; Ethernet.begin(mac); digitalWrite(P4_READY, HIGH); Serial.println("S3 controller booted"); } void loop(){ static uint32_t last = 0; if (millis() - last > 1000) { last = millis(); GSMSerial.println("AT"); uint8_t result = modbus.readHoldingRegisters(0x0000, 1); Serial.printf("Modbus result: 0x%02X, Ethernet link: %d\n", result, Ethernet.linkStatus()); } }
Pin Mapping
platformio.ini
main.cpp
Notes