Es posible programar NodeMCU con reloj NTP + Alexa + LCD + botones
Publicado por Kimikobro (1 intervención) el 14/12/2020 07:21:38
Hola a todos y espero se encuentren bien, soy Miguel Díaz y estoy pidiendo ayuda con un NodeMCU ESP8266 para programarlo ya que antes yo programaba PICs con lenguaje Basic pero ahora me estoy modernizando con Arduino por sus multiples ventajas de velocidad, capacidad, etc., pero estoy viendo que utiliza otro lenguaje muy diferente al que estoy acostumbrado y se me ha complicado, anteriormente hice un proyecto de automatizar mi luz de cochera con LCD se encendía y se apagaba a cierta hora y es programable ahora con la nueva tecnología (nodemcu) quiero que ponga la hora NTP poder apagar y encender manualmente y con Alexa, claro conectado a un LCD 16x2 ya pude compilar sin errores el reloj NTP y con Alexa pero al dar la instrucción de prender luz a Alexa se reinicia el nodemcu por eso la pregunta del titulo es posible juntar los códigos ya que por separado me funcionan a la perfección pero los junto y sale ese problema me apoyan por favor ya me atore :o se los agradecería mi código es el siguiente:) :
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
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <NTPClient.h>
#include <WiFiUdp.h>
#include <LiquidCrystal.h>
#include "fauxmoESP.h"
#define SERIAL_BAUDRATE 115200 //Velocidad del Puerto Serial
#define WIFI_SSID "TTyKmK" //Credenciales de RED
#define WIFI_PASS "123456"
fauxmoESP fauxmo;
bool estadoDispositivos[1]= {false};
// Dispositivos
#define PIN_1 D0
#define DISPOSITIVO_1 "Luz Cochera"
LiquidCrystal lcd(D6, D5, D1, D2, D3, D4);
int status = WL_IDLE_STATUS;
const long utcOffsetInSeconds = -21600; //Zona horaria (GMT-6) con formula (-6*60*60 = -21600)
char daysOfTheWeek[7][12] = {"Domingo", "Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado"};
// Define el cliente NTP para obtener el Tiempo
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "mx.pool.ntp.org", utcOffsetInSeconds);
void setup()
{
Serial.begin(SERIAL_BAUDRATE); //Iniciando puerto serial
pinMode(PIN_1, OUTPUT); //Ponemos el pin como salida
digitalWrite(PIN_1, LOW); //Apagamos el pin
lcd.begin(16, 2); //Iniciamos el LCD Display 16x2
//Conectamos el Wifi se dirige a la variable declarada wifiSetup
wifiSetup();
//Imprimimos el estado del WiFi en Display y Monitor serial se dirige a la variable declarada printWiFiStatus
printWifiStatus();
Serial.println("\nIniciando la conexión al servidor NTP...");
//fauxmo.createServer(true); // not needed, this is the default value
//fauxmo.setPort(80); // This is required for gen3 devices
// Habilitamos la librería para el descubrimiento y cambio de estado de los dispositivos
fauxmo.enable(true);
// Damos de alta el dispositivo
fauxmo.addDevice(DISPOSITIVO_1);
// Decimos cuales van a ser nuestras funciones para obtener estado y para establecerlo...
fauxmo.onSetState([](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;
}
delay(50);
});
fauxmo.onGetState(obtenerEstado);
}
void loop()
{
fauxmo.handle();
static unsigned long last = millis();
if (millis() - last > 5000) {
last = millis();
Serial.printf("[MAIN] Free heap: %d bytes\n", ESP.getFreeHeap());
}
timeClient.update();
//Imprime en Monitor Serial el día de la semana y el tiempo cada segundo
Serial.print(daysOfTheWeek[timeClient.getDay()]);
Serial.print("-> ");
/*Serial.print(timeClient.getHours());
Serial.print(":");
Serial.print(timeClient.getMinutes());
Serial.print(":");
Serial.println(timeClient.getSeconds());*/
Serial.println(timeClient.getFormattedTime());
//Imprime en Display el día de la semana y el tiempo cada segundo
lcd.setCursor(0, 0);
lcd.print(daysOfTheWeek[timeClient.getDay()]);
lcd.setCursor(0, 1);
lcd.print(timeClient.getFormattedTime());
delay(1000);
}
bool obtenerEstado(unsigned char idDispositivo, const char * nombreDispositivo)
{
return estadoDispositivos[idDispositivo];
}
//Istrucciones a realizar - Variable declarada WiFiSetup
void wifiSetup()
{
//Realizando la conexion del WiFi al NodeMCU
Serial.println();
Serial.printf("conectandose a WiFi: ", WIFI_SSID);
Serial.println();
WiFi.begin(WIFI_SSID, WIFI_PASS);
//Esperamos a que la conexión esté lista
while ( WiFi.status() != WL_CONNECTED)
{
lcd.clear();
lcd.print("Conectandose a ");
lcd.setCursor(0, 1);
lcd.print("WiFi: ");
lcd.print(WIFI_SSID);
delay(500);
}
}
//Istrucciones a realizar - Variable declarada printWiFiStatus
void printWifiStatus()
{
//Imprime en Display y Monitor Serial la conexion realizada al SSID y espera por 2 segundos
lcd.clear();
lcd.print("Conectado a wifi");
lcd.setCursor(5, 1);
lcd.print(WiFi.SSID());
Serial.print("SSID: ");
Serial.println(WiFi.SSID());
Serial.println("Conectado con exito al wifi");
delay(2000);
//Imprime en Display y Monitor Serial la direccion IP y espera por 2 segundos
IPAddress ip = WiFi.localIP();
Serial.print("Direccion IP: ");
Serial.println(ip);
lcd.clear();
lcd.print("Direccion IP: ");
lcd.setCursor(2, 1);
lcd.print(ip);
delay(2000);
//Imprime en Display y Monitor Serial la intensidad de señal RSSI y espera por 2 segundos
long rssi = WiFi.RSSI();
Serial.print("Intensidad de señal (RSSI):");
Serial.print(rssi);
Serial.println(" dBm");
lcd.clear();
lcd.print("Intensidad(RSSI)");
lcd.setCursor(5, 1);
lcd.print(rssi);
lcd.print(" dBm ");
delay(2000);
//Imprime en Display la conexion del NTP por 2 segundos
lcd.clear();
lcd.print("Conectando al");
lcd.setCursor(0, 1);
lcd.print("Servidor NTP");
lcd.setCursor(12, 1);
lcd.print(".");
delay(500);
lcd.setCursor(13, 1);
lcd.print(".");
delay(500);
lcd.setCursor(14, 1);
lcd.print(".");
delay(500);
lcd.setCursor(15, 1);
lcd.print(".");
delay(500);
lcd.clear();
}
Valora esta pregunta


0