Arduino - Es posible programar NodeMCU con reloj NTP + Alexa + LCD + botones

 
Vista:

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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder