-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathNodeMCU_Alexa_pub.ino
141 lines (119 loc) · 3.44 KB
/
NodeMCU_Alexa_pub.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#include <Arduino.h>
#ifdef ESP32
#include <WiFi.h>
#else
#include <ESP8266WiFi.h>
#endif
#include "fauxmoESP.h"
#define VELOCIDAD_PUERTO_SERIE 115200
/* Network credentials */
#define WIFI_SSID "TU_SSID"
#define WIFI_PASS "TU_PASS"
fauxmoESP fauxmo;
bool estadoDispositivos[7]= {false, false, false, false, false, false, false};
#define PIN_1 D5
#define PIN_2 D6
#define PIN_3 D7
#define PIN_4 D8
#define DISPOSITIVO_1 "Ventilador"
#define DISPOSITIVO_2 "Luz roja"
#define DISPOSITIVO_3 "Luz verde"
#define DISPOSITIVO_4 "Luz azul"
#define GRUPO_1 "Luces"
#define TODO "TODO"
void setup() {
// Iniciamos puerto serie
Serial.begin(VELOCIDAD_PUERTO_SERIE);
// Iniciamos wifi
wifiSetup();
// Configuramos como pines de salida
pinMode(PIN_1, OUTPUT);
pinMode(PIN_2, OUTPUT);
pinMode(PIN_3, OUTPUT);
pinMode(PIN_4, OUTPUT);
// Habilitamos la librería para el descubrimiento y cambio de estado
// de los dispositivos
fauxmo.enable(true);
// Damos de alta los diferentes dispositivos y grupos
fauxmo.addDevice(DISPOSITIVO_1); //ID0
fauxmo.addDevice(DISPOSITIVO_2); //ID1
fauxmo.addDevice(DISPOSITIVO_3); //ID2
fauxmo.addDevice(DISPOSITIVO_4); //ID3
fauxmo.addDevice(GRUPO_1); //ID4
fauxmo.addDevice(TODO); //ID6
// Decimos cuales van a ser nuestras funciones para obtener estado
// y para establecerlo...
fauxmo.onSetState(establecerEstado);
fauxmo.onGetState(obtenerEstado);
}
void loop() {
// Nos quedamos esperando peticiones todo el tiempo...
fauxmo.handle();
}
void establecerEstado(unsigned char idDispositivo, const char * nombreDispositivo, bool estado){
Serial.printf("Dispositivo #%d (%s) estado: %s\n", idDispositivo, nombreDispositivo, estado ? "encendido" : "apagado");
// Establecemos el estado del dispositivo concreto
estadoDispositivos[idDispositivo] = estado;
// En función del dispositivo recibido...
switch (idDispositivo) {
case 0:
{
digitalWrite(PIN_1, estado);
}
break;
case 1:
{
digitalWrite(PIN_2, estado);
}
break;
case 2:
{
digitalWrite(PIN_3, estado);
}
break;
case 3:
{
digitalWrite(PIN_4, estado);
}
break;
case 4:
{
digitalWrite(PIN_2, estado);
digitalWrite(PIN_3, estado);
digitalWrite(PIN_4, estado);
}
break;
case 5:
{
digitalWrite(PIN_1, estado);
digitalWrite(PIN_2, estado);
digitalWrite(PIN_3, estado);
digitalWrite(PIN_4, estado);
}
break;
}
delay(50);
}
bool obtenerEstado(unsigned char idDispositivo, const char * nombreDispositivo){
return estadoDispositivos[idDispositivo];
}
void wifiSetup() {
// Configuramos modo de wifi (estación)
WiFi.mode(WIFI_STA);
// Realizamos la conexión
Serial.println ();
Serial.printf("[WIFI] Conectando con %s ", WIFI_SSID);
Serial.println();
WiFi.begin(WIFI_SSID, WIFI_PASS);
// Esperamos a que la conexión esté lista
while (WiFi.status() != WL_CONNECTED)
{
Serial.print(".");
delay(100);
}
// Conexión realizada
Serial.println(" [WIFI] Conexión realizada con éxito" );
Serial.println();
Serial.printf("[WIFI] Modo estación, SSID: %s, Dirección IP asignada: %s\n", WiFi.SSID().c_str(), WiFi.localIP().toString().c_str());
Serial.println();
}