Modbus is a widely used communication protocol in industrial automation for interfacing various electronic devices. In this tutorial, we will explore how to create a Modbus client using the XIAO ESP32C3 microcontroller to read holding registers of Modbus TCP/IP devices. The XIAO ESP32C3, equipped with Wi-Fi connectivity, allows us to establish communication with Modbus TCP/IP devices over a network.
Prerequisites
- XIAO ESP32C3 microcontroller board
- A Modbus TCP/IP device (e.g., PLC, sensor, or any other Modbus-enabled device or Simulator)
- Arduino IDE installed on your computer
- Basic understanding of Modbus protocol
Install Modbus Library
To communicate with Modbus devices, we need to install the Modbus library. Follow these steps to install the library:
- Open the Arduino IDE and navigate to Sketch > Include Library > Manage Libraries.
- Search for "modbus-esp8266" and install the "
modbus-esp8266
" library.
Writing the Code
Now, let's write the code to create a Modbus client using the XIAO ESP32C3. Below is a sample code snippet to read holding registers from a Modbus TCP/IP device:
#include <WiFi.h>
#include <ModbusIP_ESP8266.h>
const char* ssid = "YourWiFiSSID";
const char* password = "YourWiFiPassword";
IPAddress remote(192, 168, 1, 7); // Address of Modbus Slave device
const int START_REG = 0; // Starting holding register
const int NUM_REGS = 10; // Number of holding registers to read
const int INTERVAL = 5000; // Interval between reads (in milliseconds)
WiFiClient client;
ModbusIP mb;
uint16_t res[NUM_REGS];
uint8_t show = NUM_REGS; // Counter for displaying values
uint32_t LastModbusRequest = 0; // Variable to track the last Modbus request time
void setup() {
Serial.begin(115200);
// Connect to WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
// Initialize Modbus client
mb.client();
}
void loop() {
if (millis() - LastModbusRequest >= INTERVAL) {
LastModbusRequest = millis();
if (mb.isConnected(remote)) {
// Read holding registers from Modbus Slave
uint8_t transaction = mb.readHreg(remote, START_REG, res, 10, nullptr, 1);
// Wait for the transaction to complete
while(mb.isTransaction(transaction)) {
mb.task();
delay(10);
}
// Print holding register values
Serial.println("Holding Register Values:");
for (int i = 0; i < NUM_REGS; i++) {
Serial.print("Register ");
Serial.print(i);
Serial.print(": ");
Serial.println(res[i]);
}
} else {
// If not connected, try to connect
mb.connect(remote);
}
}
}
Replace "YourWiFiSSID"
and "YourWiFiPassword"
with your Wi-Fi credentials. Also, set the serverIP
variable to the IP address of your Modbus TCP/IP device.
Upload the Code
Connect your XIAO ESP32C3 board to your computer using a USB cable. Select the correct board and port from the Tools menu, then click the "Upload" button to upload the code to your XIAO ESP32C3 board.
Testing
Once the code is uploaded successfully, open the Serial Monitor in Arduino IDE. You should see the XIAO ESP32C3 connecting to your Wi-Fi network and then attempting to read holding registers from the Modbus TCP/IP device. If everything is set up correctly, you should see the data received from the Modbus device in the Serial Monitor.
Conclusion
In this tutorial, we've learned how to create a Modbus client using the XIAO ESP32C3 microcontroller to read holding registers from Modbus TCP/IP devices. With this knowledge, you can now build your own Modbus-enabled IoT applications and integrate them into industrial automation systems. Experiment with different Modbus functions and parameters to explore more functionalities offered by the Modbus protocol.
Comments
Post a Comment