//nice Code generated by Arduino IoT Cloud
#include <ArduinoIoTCloud.h>
#include <Arduino_ConnectionHandler.h>
const char DEVICE_LOGIN_NAME[] = "61b1d96c-61f3-4be7-acc0-0cd15ac9ac5f";
const char SSID[] = "Wokwi-GUEST";
const char PASS[] = "";
const char DEVICE_KEY[] = "MOwWVtkCCIc0Gegrw6ZfAtzzW";
bool button;
bool led;
CloudSwitch switch1;
CloudSwitch switch2;
int LED1=19;
int LED2=18;
void initProperties() {
ArduinoCloud.setBoardId(DEVICE_LOGIN_NAME);
ArduinoCloud.setSecretDeviceKey(DEVICE_KEY);
ArduinoCloud.addProperty(button, READWRITE, ON_CHANGE, onButtonChange);
ArduinoCloud.addProperty(led, READ, ON_CHANGE, NULL);
ArduinoCloud.addProperty(switch1, READWRITE, ON_CHANGE, onSwitch1Change);
ArduinoCloud.addProperty(switch2, READWRITE, ON_CHANGE, onSwitch2Change);
}
WiFiConnectionHandler ArduinoIoTPreferredConnection(SSID, PASS);
void setup() {
Serial.begin(9600);
delay(1500);
initProperties();
ArduinoCloud.begin(ArduinoIoTPreferredConnection);
setDebugMessageLevel(2);
ArduinoCloud.printDebugInfo();
pinMode(26, INPUT_PULLUP);
pinMode(25, OUTPUT);
pinMode(19, OUTPUT);
pinMode(18, OUTPUT);
}
void loop() {
ArduinoCloud.update();
if (!digitalRead(26)) led = true;
else led = false;
}
void onButtonChange() {
if (button) digitalWrite(25, HIGH);
else digitalWrite(25, LOW);
}
void onSwitch2Change() {
digitalWrite(LED2, switch2);
}
void onSwitch1Change() {
digitalWrite(LED1, switch1);
}
#include <HardwareSerial.h>
#include <ModbusMaster.h>
// Pin definitions
#define MAX485_DE 5
#define PUSH_BUTTON 4
// Modbus slave ID (change to match your PLC)
#define SLAVE_ID 1
// Instantiate ModbusMaster object
ModbusMaster node;
// Button state tracking
bool lastButtonState = HIGH;
bool currentButtonState = HIGH;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;
void setup() {
pinMode(MAX485_DE, OUTPUT);
pinMode(PUSH_BUTTON, INPUT_PULLUP);
// Init in receive mode
digitalWrite(MAX485_DE, LOW);
// Serial1 for Modbus (adjust pins if needed)
Serial1.begin(9600, SERIAL_8N1, 16, 17);
// Initialize Modbus communication
node.begin(SLAVE_ID, Serial1);
// Callbacks for RS485 transceiver control
node.preTransmission(preTransmission);
node.postTransmission(postTransmission);
Serial.begin(115200);
Serial.println("ESP32 Modbus RTU Master Ready");
}
void loop() {
// Read the button with debounce
int reading = digitalRead(PUSH_BUTTON);
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading != currentButtonState) {
currentButtonState = reading;
if (currentButtonState == LOW) {
// Button pressed - toggle M0 coil
togglePLCcoil();
}
}
}
lastButtonState = reading;
}
void togglePLCcoil() {
Serial.println("Button pressed - toggling M0");
// Read current state of M0 (coil address 0)
uint8_t result = node.readCoils(0, 1);
if (result == node.ku8MBSuccess) {
bool currentState = node.getResponseBuffer(0);
// Write opposite state
result = node.writeSingleCoil(0, !currentState);
if (result == node.ku8MBSuccess) {
Serial.print("M0 set to: ");
Serial.println(!currentState ? "ON" : "OFF");
} else {
Serial.print("Failed to write coil, error: ");
Serial.println(result, HEX);
}
} else {
Serial.print("Failed to read coil, error: ");
Serial.println(result, HEX);
}
}
// RS485 control functions
void preTransmission() {
digitalWrite(MAX485_DE, HIGH);
}
void postTransmission() {
digitalWrite(MAX485_DE, LOW);
}
#include <ModbusMaster.h>
#define MAX485_DE_RE 2
#define BUTTON_PIN 4
ModbusMaster node;
void preTransmission() {
digitalWrite(MAX485_DE_RE, 1);
}
void postTransmission() {
digitalWrite(MAX485_DE_RE, 0);
}
void setup() {
pinMode(MAX485_DE_RE, OUTPUT);
digitalWrite(MAX485_DE_RE, 0);
pinMode(BUTTON_PIN, INPUT_PULLUP); // Active LOW button
Serial.begin(115200);
Serial1.begin(9600, SERIAL_8N1, 16, 17); // RS485 on UART1
node.begin(1, Serial1); // Slave ID 1
node.preTransmission(preTransmission);
node.postTransmission(postTransmission);
}
void loop() {
static bool lastButtonState = HIGH;
bool buttonState = digitalRead(BUTTON_PIN);
if (buttonState == LOW && lastButtonState == HIGH) {
// Button Pressed
uint8_t result = node.writeSingleCoil(0x0001, 0xFF00); // Turn ON
Serial.print("Write Coil Result: ");
Serial.println(result, HEX);
delay(500); // Debounce
}
lastButtonState = buttonState;
}