It's a super super basic design, but here it is. Also a picture of the device:
The 2-terminal connector is connected to GND and one end of the switches go there.
The 3-terminal connector is for the other end of the switches, and each terminal goes to one pin (D1, D2 and D5).
The power comes from an external PSU that has the conector underneath the Wemos board.
First I was using D0, D1 and D2 for the switches, but since @Juraj mentioned that D0 does not have a pull-up resistor, I switched it to D5 and used D0 as an output pin instead. Is my circuit now correct? And how can I make pins D0 and D6 to be on LOW at startup?
And the full code:
/*
This is a basic example on how to use Espalexa and its device declaration methods.
*/
#ifdef ARDUINO_ARCH_ESP32
#include <WiFi.h>
#else
#include <ESP8266WiFi.h>
#endif
#include <Espalexa.h>
int encendido = 0;
int apagado = 1;
int luz_balcon = D7;
int persiana = D0;
int fase = D6;
int interruptor = D1;
int int_sube_persiana = D2;
int int_baja_persiana = D5;
int status_luz;
int status_sube_persiana;
int status_baja_persiana;
const char* ssid = "MiFibra-5FB8";
const char* password = "cbYjPvi6";
Espalexa alexa;
void FuncionLuz(uint8_t brightness);
void FuncionPersiana(uint8_t brightness);
void setup() {
Serial.begin(115200);
pinMode(luz_balcon, OUTPUT);
pinMode(persiana, OUTPUT);
pinMode(fase, OUTPUT);
pinMode(LED_BUILTIN, OUTPUT);
pinMode(int_sube_persiana, INPUT_PULLUP);
pinMode(int_baja_persiana, INPUT_PULLUP);
pinMode(interruptor, INPUT_PULLUP);
digitalWrite(luz_balcon, LOW);
digitalWrite(persiana, LOW);
digitalWrite(fase, LOW);
ConectarWiFi();
alexa.addDevice("Luz balcon", FuncionLuz);
alexa.addDevice("Persiana comedor", FuncionPersiana);
alexa.begin();
}
void loop() {
if (WiFi.status() == WL_CONNECTED) {
digitalWrite(LED_BUILTIN, 0);
} else {
digitalWrite(LED_BUILTIN, 1);
}
alexa.loop();
if (status_luz != digitalRead(interruptor)) {
digitalWrite(luz_balcon, !digitalRead(luz_balcon));
status_luz = digitalRead(interruptor);
}
if ((status_sube_persiana != digitalRead(int_sube_persiana)) || (status_baja_persiana != digitalRead(int_baja_persiana))) {
status_sube_persiana = digitalRead(int_sube_persiana);
status_baja_persiana = digitalRead(int_baja_persiana);
if ((digitalRead(int_sube_persiana) == LOW) && (digitalRead(int_baja_persiana) == LOW)) {
digitalWrite(fase, apagado);
}
else if (digitalRead(int_sube_persiana) == HIGH) {
digitalWrite(fase, encendido);
digitalWrite(persiana, encendido);
}
else if (digitalRead(int_baja_persiana) == HIGH) {
digitalWrite(fase, encendido);
digitalWrite(persiana, apagado);
}
}
delay(1);
}
void ConectarWiFi() {
if (WiFi.status() != WL_CONNECTED) {
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
}
}
void FuncionLuz(uint8_t brightness) {
if (brightness) {
digitalWrite(luz_balcon, encendido);
}
else {
digitalWrite(luz_balcon, apagado);
}
}
void FuncionPersiana(uint8_t brightness) {
if (brightness > 240) {
if (digitalRead(fase) == apagado) { digitalWrite(fase, encendido); }
digitalWrite(persiana, encendido);
}
else if (brightness < 20) {
if (digitalRead(fase) == apagado) { digitalWrite(fase, encendido); }
digitalWrite(persiana, apagado);
}
else {
digitalWrite(fase, apagado);
}
}