Untitled

 avatar
unknown
plain_text
a year ago
9.3 kB
5
Indexable
#include <WiFi.h>
#include <WebServer.h>
#include <HTTPUpdateServer.h>
#include <WiFiManager.h>
#include <ArduinoHA.h>
#include <Wire.h>
#include <PCF8575.h>

#define BROKER_ADDR IPAddress(192, 168, 200, 211)
#define I2C_SDA 21
#define I2C_SCL 22
#define PCF8575_ADDRESS 0x20
bool buttonDebounceDelay;

PCF8575 pcf8575;

WebServer server(80);
HTTPUpdateServer httpUpdateServer;
WiFiManager wm;

WiFiClient client;
HADevice device("ESP_ETAJ");
HAMqtt mqtt(client, device);

// devices types go here
HASwitch switch1("mySwitch1");
HASwitch switch2("mySwitch2");
HASwitch switch3("mySwitch3");
HASwitch switch4("mySwitch4");
HASwitch switch5("mySwitch5");
HASwitch switch6("mySwitch6");
HASwitch switch7("mySwitch7");
HASwitch switch8("mySwitch8");
HASwitch switch9("mySwitch9");
HASwitch switch10("mySwitch10");
HASwitch switch11("mySwitch11");
HASwitch switch12("mySwitch12");
HASwitch switch13("mySwitch13");
HASwitch switch14("mySwitch14");
HASwitch switch15("mySwitch15");
HASwitch switch16("mySwitch16");


#define NUME_PLACA "ESP_ETAJ"


#define INTRERUPATOR1 15
#define INTRERUPATOR2 2
#define INTRERUPATOR3 0
#define INTRERUPATOR4 4
#define INTRERUPATOR5 16
#define INTRERUPATOR6 17
#define INTRERUPATOR7 5
#define INTRERUPATOR8 18
#define INTRERUPATOR9 19
#define INTRERUPATOR10 3
#define INTRERUPATOR11 23
#define INTRERUPATOR12 25
#define INTRERUPATOR13 26
#define INTRERUPATOR14 27
#define INTRERUPATOR15 14
#define INTRERUPATOR16 12

//FREE GPIO's
//13 32 33 25 26


void handleNotFound() {  // default webserver response for unknow requests
  String message = "File Not Found\n\n";
  message += "URI: ";
  message += server.uri();
  message += "\nMethod: ";
  message += (server.method() == HTTP_GET) ? "GET" : "POST";
  message += "\nArguments: ";
  message += server.args();
  message += "\n";
  for (uint8_t i = 0; i < server.args(); i++) {
    message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
  }
  server.send(404, "text/plain", message);
}

void onSwitchCommand(bool state, HASwitch* sender) {
  if (sender == &switch1) {
    pcf8575.write(0, !state);
  } else if (sender == &switch2) {
    pcf8575.write(1, !state);
  } else if (sender == &switch3) {
    pcf8575.write(2, !state);
  } else if (sender == &switch4) {
    pcf8575.write(3, !state);
  } else if (sender == &switch5) {
    pcf8575.write(4, !state);
  } else if (sender == &switch6) {
    pcf8575.write(5, !state);
  } else if (sender == &switch7) {
    pcf8575.write(6, !state);
  } else if (sender == &switch8) {
    pcf8575.write(7, !state);
  } else if (sender == &switch9) {
    pcf8575.write(8, !state);
  } else if (sender == &switch10) {
    pcf8575.write(9, !state);
  } else if (sender == &switch11) {
    pcf8575.write(10, !state);
  } else if (sender == &switch12) {
    pcf8575.write(11, !state);
  } else if (sender == &switch13) {
    pcf8575.write(12, !state);
  } else if (sender == &switch14) {
    pcf8575.write(13, !state);
  } else if (sender == &switch15) {
    pcf8575.write(14, !state);
  } else if (sender == &switch16) {
    pcf8575.write(15, !state);
  }

  sender->setState(state);  // report state back to the Home Assistant
}

void setup() {
  Wire.begin(I2C_SDA, I2C_SCL);
  pcf8575.begin(PCF8575_ADDRESS);
  pcf8575.write16(0xFFFF);  // Set all pins to HIGH initially (off)

  // aici incepi sa definesti intrerupatoarele ca input
  pinMode(INTRERUPATOR1, INPUT_PULLUP);
  pinMode(INTRERUPATOR2, INPUT_PULLUP);
  pinMode(INTRERUPATOR3, INPUT_PULLUP);
  pinMode(INTRERUPATOR4, INPUT_PULLUP);
  pinMode(INTRERUPATOR5, INPUT_PULLUP);
  pinMode(INTRERUPATOR6, INPUT_PULLUP);
  pinMode(INTRERUPATOR7, INPUT_PULLUP);
  pinMode(INTRERUPATOR8, INPUT_PULLUP);
  pinMode(INTRERUPATOR9, INPUT_PULLUP);
  pinMode(INTRERUPATOR10, INPUT_PULLUP);
  pinMode(INTRERUPATOR11, INPUT_PULLUP);
  pinMode(INTRERUPATOR12, INPUT_PULLUP);
  pinMode(INTRERUPATOR13, INPUT_PULLUP);
  pinMode(INTRERUPATOR14, INPUT_PULLUP);
  pinMode(INTRERUPATOR15, INPUT_PULLUP);
  pinMode(INTRERUPATOR16, INPUT_PULLUP);

  delay(100);

  WiFi.mode(WIFI_AP_STA);
  wm.setConfigPortalTimeout(120);
  bool res = wm.autoConnect("ESP_ETAJ");
  if (!res) {
    ESP.restart();
  }

  httpUpdateServer.setup(&server);

  server.on("/", []() {  // trigger manual reset
    server.send(200, "text/html", NUME_PLACA);
  });

  server.on("/reset", []() {  // trigger manual reset
    server.send(200, "text/html", "reset");
    delay(1000);
    ESP.restart();
  });

  server.onNotFound(handleNotFound);
  server.begin();

  switch1.onCommand(onSwitchCommand);
  switch1.setName("sw1");
  switch1.setIcon("mdi:lightbulb");
  switch2.onCommand(onSwitchCommand);
  switch2.setName("sw2");
  switch2.setIcon("mdi:lightbulb");
  switch3.onCommand(onSwitchCommand);
  switch3.setName("sw3");
  switch3.setIcon("mdi:lightbulb");
  switch4.onCommand(onSwitchCommand);
  switch4.setName("sw4");
  switch4.setIcon("mdi:lightbulb");
  switch5.onCommand(onSwitchCommand);
  switch5.setName("sw5");
  switch5.setIcon("mdi:lightbulb");
  switch6.onCommand(onSwitchCommand);
  switch6.setName("sw6");
  switch6.setIcon("mdi:lightbulb");
  switch7.onCommand(onSwitchCommand);
  switch7.setName("sw7");
  switch7.setIcon("mdi:lightbulb");
  switch8.onCommand(onSwitchCommand);
  switch8.setName("sw8");
  switch8.setIcon("mdi:lightbulb");
  switch9.onCommand(onSwitchCommand);
  switch9.setName("sw9");
  switch9.setIcon("mdi:lightbulb");
  switch10.onCommand(onSwitchCommand);
  switch10.setName("sw10");
  switch10.setIcon("mdi:lightbulb");
  switch11.onCommand(onSwitchCommand);
  switch11.setName("sw11");
  switch11.setIcon("mdi:lightbulb");
  switch12.onCommand(onSwitchCommand);
  switch12.setName("sw12");
  switch12.setIcon("mdi:lightbulb");
  switch13.onCommand(onSwitchCommand);
  switch13.setName("sw13");
  switch13.setIcon("mdi:lightbulb");
  switch14.onCommand(onSwitchCommand);
  switch14.setName("sw14");
  switch14.setIcon("mdi:lightbulb");
  switch15.onCommand(onSwitchCommand);
  switch15.setName("sw15");
  switch15.setIcon("mdi:lightbulb");
  switch16.onCommand(onSwitchCommand);
  switch16.setName("sw16");
  switch16.setIcon("mdi:lightbulb");

  mqtt.begin(BROKER_ADDR);
}

void loop() {
  // put your main code here, to run repeatedly:
  if (digitalRead(INTRERUPATOR1) == LOW) {
    pcf8575.write(0, switch1.getCurrentState());
    switch1.setState(!switch1.getCurrentState());
    buttonDebounceDelay = true;
  } else if (digitalRead(INTRERUPATOR2) == LOW) {
    pcf8575.write(1, switch2.getCurrentState());
    switch2.setState(!switch2.getCurrentState());
    buttonDebounceDelay = true;
  } else if (digitalRead(INTRERUPATOR3) == LOW) {
    pcf8575.write(2, switch3.getCurrentState());
    switch3.setState(!switch3.getCurrentState());
    buttonDebounceDelay = true;
  } else if (digitalRead(INTRERUPATOR4) == LOW) {
    pcf8575.write(3, switch4.getCurrentState());
    switch4.setState(!switch4.getCurrentState());
    buttonDebounceDelay = true;
  } else if (digitalRead(INTRERUPATOR5) == LOW) {
    pcf8575.write(4, switch5.getCurrentState());
    switch5.setState(!switch5.getCurrentState());
    buttonDebounceDelay = true;
  } else if (digitalRead(INTRERUPATOR6) == LOW) {
    pcf8575.write(5, switch6.getCurrentState());
    switch6.setState(!switch6.getCurrentState());
    buttonDebounceDelay = true;
  } else if (digitalRead(INTRERUPATOR7) == LOW) {
    pcf8575.write(6, switch7.getCurrentState());
    switch7.setState(!switch7.getCurrentState());
    buttonDebounceDelay = true;
  } else if (digitalRead(INTRERUPATOR8) == LOW) {
    pcf8575.write(7, switch8.getCurrentState());
    switch8.setState(!switch8.getCurrentState());
    buttonDebounceDelay = true;
  } else if (digitalRead(INTRERUPATOR9) == LOW) {
    pcf8575.write(8, switch9.getCurrentState());
    switch9.setState(!switch9.getCurrentState());
    buttonDebounceDelay = true;
  } else if (digitalRead(INTRERUPATOR10) == LOW) {
    pcf8575.write(9, switch10.getCurrentState());
    switch10.setState(!switch10.getCurrentState());
    buttonDebounceDelay = true;
  } else if (digitalRead(INTRERUPATOR11) == LOW) {
    pcf8575.write(10, switch11.getCurrentState());
    switch11.setState(!switch11.getCurrentState());
    buttonDebounceDelay = true;
  } else if (digitalRead(INTRERUPATOR12) == LOW) {
    pcf8575.write(11, switch12.getCurrentState());
    switch12.setState(!switch12.getCurrentState());
    buttonDebounceDelay = true;
  } else if (digitalRead(INTRERUPATOR13) == LOW) {
    pcf8575.write(12, switch13.getCurrentState());
    switch13.setState(!switch13.getCurrentState());
    buttonDebounceDelay = true;
  } else if (digitalRead(INTRERUPATOR14) == LOW) {
    pcf8575.write(13, switch14.getCurrentState());
    switch14.setState(!switch14.getCurrentState());
    buttonDebounceDelay = true;
  } else if (digitalRead(INTRERUPATOR15) == LOW) {
    pcf8575.write(14, switch15.getCurrentState());
    switch15.setState(!switch15.getCurrentState());
    buttonDebounceDelay = true;
  } else if (digitalRead(INTRERUPATOR16) == LOW) {
    pcf8575.write(15, switch16.getCurrentState());
    switch16.setState(!switch16.getCurrentState());
    buttonDebounceDelay = true;
  }

  server.handleClient();
  mqtt.loop();
  if (buttonDebounceDelay) {
    delay(300);
    buttonDebounceDelay = false;
  }
}
Leave a Comment