first upload

This commit is contained in:
fatimaxsen committed 2025-04-24 09:34:04 +03:00
commit 1f9edb14b4
13 files changed
+357

No files matched your search

+65
View File
@@ -0,0 +1,65 @@
#include <Wire.h>
#include <I2CRelay.h>
#include <I2CMasterUtils.h>
RelayI2CMaster relayMaster(0x08); // Default address, can be changed via setAddress()
void setup() {
Serial.begin(115200);
delay(1000);
relayMaster.begin();
Serial.println("Enter:");
Serial.println(" s - to scan I2C bus");
Serial.println(" ch <old> <new> - to change slave address");
Serial.println(" <relay> <on/off> - to set relay (e.g. 3 on)");
}
void loop() {
if (Serial.available()) {
String input = Serial.readStringUntil('\n');
input.trim();
if (input == "s") {
I2CMasterUtils::scanI2C();
} else if (input.startsWith("ch")) {
uint8_t oldAddr, newAddr;
if (I2CMasterUtils::parseChangeAddressCommand(input, oldAddr, newAddr)) {
I2CMasterUtils::changeSlaveAddress(oldAddr, newAddr);
relayMaster.setAddress(newAddr); // Update master's address
Serial.print("Changed address to 0x");
Serial.println(newAddr, HEX);
} else {
Serial.println("Invalid command format. Use: ch <old_addr> <new_addr>");
}
} else {
int spaceIndex = input.indexOf(' ');
if (spaceIndex > 0) {
String relayStr = input.substring(0, spaceIndex);
String stateStr = input.substring(spaceIndex + 1);
int relayNum = relayStr.toInt();
bool state = false;
stateStr.toLowerCase();
if (stateStr == "on") state = true;
else if (stateStr == "off") state = false;
else {
Serial.println("Invalid state! Use 'on' or 'off'.");
return;
}
if (relayNum >= 1 && relayNum <= 8) {
relayMaster.setRelay(relayNum, state);
Serial.print("Relay ");
Serial.print(relayNum);
Serial.print(" turned ");
Serial.println(state ? "ON" : "OFF");
} else {
Serial.println("Invalid relay number! Use 1-8.");
}
} else {
Serial.println("Invalid command! Format: <relay_number> <on/off>");
}
}
}
}
+65
View File
@@ -0,0 +1,65 @@
#include <Wire.h>
#include <EEPROM.h>
// EEPROM settings
#define ADDR_EEPROM_LOC 0
#define EEPROM_SIZE 64
// Relay pins: GPIO0 to GPIO7
const int relayPins[8] = {0, 1, 2, 3, 4, 5, 6, 7}; // GPIOs 0-7
uint8_t i2cAddress;
// Unified I2C receive event
void receiveEvent(int howMany) {
if (howMany >= 2) {
uint8_t first = Wire.read();
uint8_t second = Wire.read();
// Check for address change command
if (first == 0xAA) {
// Change I2C address and store in EEPROM
uint8_t newAddr = second;
EEPROM.write(ADDR_EEPROM_LOC, newAddr);
EEPROM.commit();
Serial.print("I2C address changed to: 0x");
Serial.println(newAddr, HEX);
delay(100);
ESP.restart();
return;
}
// Otherwise, treat as relay control
int relay = first; // Relay number: 1-8
int state = second; // State: 1=ON, 0=OFF
if (relay >= 1 && relay <= 8) {
digitalWrite(relayPins[relay - 1], state ? LOW : HIGH); // Active LOW relays
}
}
}
void setup() {
Serial.begin(115200);
EEPROM.begin(EEPROM_SIZE);
// Read I2C address from EEPROM or use default
i2cAddress = EEPROM.read(ADDR_EEPROM_LOC);
if (i2cAddress == 0xFF || i2cAddress == 0) i2cAddress = 0x08; // Default address
Serial.print("Using I2C address: 0x");
Serial.println(i2cAddress, HEX);
// Initialize relay pins
for (int i = 0; i < 8; i++) {
pinMode(relayPins[i], OUTPUT);
digitalWrite(relayPins[i], HIGH); // Relays OFF initially (active LOW)
}
// Start I2C slave
Wire.begin(i2cAddress);
Wire.onReceive(receiveEvent);
}
void loop() {
// Nothing needed here for basic operation
}