He estado trabajando casi todo el dia en un programa para mi NodeMCU, funcionaba todo perfectamente
De repente al intentar cargarlo me sale este error
raise FatalError('Failed to connect to %s: %s' % (self.CHIP_NAME, last_error))
esptool.FatalError: Failed to connect to ESP8266: Timed out waiting for packet header
esptool.FatalError: Failed to connect to ESP8266: Timed out waiting for packet header
Y ahora ya no funciona.
Además, el PIN VU donde he puesto el rele está siempre en ENCENDIDO y el monitor seriale pone caratceres extraños
⸮HQȸ⸮⸮⸮;ld⸮⸮|⸮$⸮|⸮$⸮c|ǃ⸮e⸮{⸮c⸮⸮⸮o|g'|⸮⸮`sd$ܟ<⸮l⸮<⸮l⸮c|⸮⸮⸮⸮r⸮#⸮c⸮⸮go⸮do'⸮⸮⸮csp⸮dsdrl⸮ee'⸮⸮<⸮⸮⸮g|'o|؛`{ld⸮⸮|⸮$⸮|⸮d⸮c<ǃ⸮e⸮{⸮c⸮⸮⸮o<og|⸮⸮`{$l⸮⸮|⸮d⸮|⸮d⸮b|⸮⸮⸮e⸮s⸮c⸮#⸮⸮no⸮$gn⸮⸮⸮c{p⸮d{$sd⸮en⸮⸮|⸮Ĝ'|og|⸮⸮`sd$⸮⸮|⸮l⸮<⸮l⸮c|⸮⸮⸮⸮r⸮#⸮⸮⸮g|'o<؛`;ld⸮⸮|⸮$⸮|⸮d⸮c|ǃ⸮e⸮{⸮c⸮b⸮⸮og⸮l'o⸮⸮⸮#;x⸮l{l{$⸮eo⸮⸮|⸮⸮⸮o<o'|⸮⸮`
que puede haber pasado?
Gracias
EDIT: si lo enchufo con la USB del ordenador si que va (conecta a internet y activa el Rele), sin embargo si la USB la enchufo a la corriente el VU se pone siempre a HIGH y no responde mas.
EDIT2: Si enchufo al pin de 3V el Rele, aunque es de 5V de momento se activa...
He intentado cargar el programas en otras NodeMCU recien abiertas y me da el mismo error
File "/home/mauro/.arduino15/packages/esp8266/hardware/esp8266/2.7.1/tools/upload.py", line 65, in <module>
esptool.main(cmdline)
File "/home/mauro/.arduino15/packages/esp8266/hardware/esp8266/2.7.1/tools/esptool/esptool.py", line 2938, in main
operation_func(esp, args)
File "/home/mauro/.arduino15/packages/esp8266/hardware/esp8266/2.7.1/tools/esptool/esptool.py", line 2374, in write_flash
esp.flash_defl_block(block, seq, timeout=DEFAULT_TIMEOUT * ratio * 2)
File "/home/mauro/.arduino15/packages/esp8266/hardware/esp8266/2.7.1/tools/esptool/esptool.py", line 104, in inner
return func(*args, **kwargs)
File "/home/mauro/.arduino15/packages/esp8266/hardware/esp8266/2.7.1/tools/esptool/esptool.py", line 672, in flash_defl_block
self.ESP_FLASH_DEFL_DATA, struct.pack('<IIII', len(data), seq, 0, 0) + data, self.checksum(data), timeout=timeout)
File "/home/mauro/.arduino15/packages/esp8266/hardware/esp8266/2.7.1/tools/esptool/esptool.py", line 369, in check_command
val, data = self.command(op, data, chk, timeout=timeout)
File "/home/mauro/.arduino15/packages/esp8266/hardware/esp8266/2.7.1/tools/esptool/esptool.py", line 347, in command
p = self.read()
File "/home/mauro/.arduino15/packages/esp8266/hardware/esp8266/2.7.1/tools/esptool/esptool.py", line 292, in read
return next(self._slip_reader)
File "/home/mauro/.arduino15/packages/esp8266/hardware/esp8266/2.7.1/tools/esptool/esptool.py", line 2045, in slip_reader
raise FatalError("Timed out waiting for packet %s" % waiting_for)
esptool.FatalError: Timed out waiting for packet header
esptool.FatalError: Timed out waiting for packet header
⸮HQȸ⸮⸮⸮;ld⸮⸮|⸮$⸮| ⸮ $⸮c|ǃ⸮e⸮{⸮c⸮⸮⸮o|g'|⸮⸮sd$ܟ<⸮l⸮< ⸮l⸮ c|⸮⸮⸮⸮r⸮#⸮c⸮⸮go⸮do'⸮⸮⸮csp⸮dsdrl⸮ee'⸮⸮<⸮⸮⸮g| 'o|؛
{ld⸮⸮|⸮$⸮| ⸮ d⸮c<ǃ⸮e⸮{⸮c⸮⸮⸮o<og|⸮⸮{$l⸮⸮|⸮d⸮| ⸮ d⸮ b|⸮⸮⸮e⸮s⸮c⸮ #⸮⸮no⸮$gn⸮⸮⸮c{p⸮d{$sd⸮en⸮⸮|⸮Ĝ'| og|⸮⸮
sd$⸮⸮|⸮l⸮< ⸮l⸮c|⸮⸮⸮⸮r⸮#⸮⸮⸮g| 'o<؛;ld⸮⸮|⸮$⸮| ⸮ d⸮c|ǃ⸮e⸮{⸮c⸮ b⸮⸮og⸮l'o⸮⸮⸮ #;x⸮l{l{$⸮eo⸮⸮|⸮⸮⸮o<o'|⸮⸮
Coloca el monitor serial a 74880 y fíjate si tiene sentido
Ahora cuando la enchufo con la USB al ordenador si que imprime bien en el monitor serial (115200) sin embargo si la USB la enchufo a la corriente el VU se pone siempre a HIGH y no responde mas.
Además, Si enchufo al pin de 3V el Rele, aunque es de 5V de momento se activa...
¿que pines estas utilizando? Coloca el programa y el conexionado. Recuerda que no es conveniente utilizar GPI 00 y GPI 02 con cargas al momento de arranque.
El código es este
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClientSecureBearSSL.h>
#include <Keypad.h>
int Rele = 15;
///WIFI///////
const char *ssid = "XXXXXXXX"; //ENTER YOUR WIFI SETTINGS
const char *password = "XXXXXXX";
const char *host = "miweb.com";
const int httpsPort = 443; //HTTPS= 443 and HTTP = 80
//certificado de miweb.com ya que es un https
const char fingerprint[] PROGMEM = "XX XX XX XX XX etc";
/////TECLADO
char codigo[6]; //Cadna donde se guardaran los caracteres de las teclas presionadas
int cont=0; //variable que se incrementara al presionar las teclas
const byte ROWS = 4; //Numero de filas del teclado que se esta usando
const byte COLS = 4; //Numero de columnas del teclado que se esta usando
char hexaKeys[ROWS][COLS] = //Aquí pondremos la disposición de los caracteres tal cual están en nuestro teclado
{
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {D4, D5, D6, D7};
byte colPins[COLS] = {D0, D1, D2, D3};
Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); //inicializa el teclado
void setup() {
pinMode(Rele, OUTPUT);
digitalWrite(Rele, HIGH);
Serial.begin(9600); //inicializar puerto serie
pinMode(5, OUTPUT);
digitalWrite(5, LOW);
delay(1000);
Serial.begin(115200);
WiFi.mode(WIFI_OFF); //Prevents reconnection issue (taking too long to connect)
delay(1000);
WiFi.mode(WIFI_STA); //This line hides the viewing of ESP as wifi hotspot
WiFi.begin(ssid, password); //Connect to your WiFi router
Serial.println("");
Serial.print("Connecting");
// Wait for connection
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
//If connection successful show IP address in serial monitor
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP()); //IP address assigned to your ESP
}
//=======================================================================
// Main Program Loop
//=======================================================================
void loop() {
char customKey = customKeypad.getKey(); //se guarda en la variable customKey el caracter de la tecla presionada
if (customKey != NO_KEY) //se evalúa si se presionó una tecla
{
codigo[cont]=customKey; //se guarda caracter por caracter en el arreglo codigo[]
Serial.println(codigo[cont]); //se imprime en el puerto serie la tecla presionada
cont=cont+1;
if(customKey=='0')
{
cont=0;
}
if(cont==6) //si ya fueron presionadas 6 teclas se evalúa si la contraseña es correcta
{
WiFiClientSecure httpsClient;
//Serial.println(host);
//Serial.printf("Using fingerprint '%s'\n", fingerprint);
httpsClient.setFingerprint(fingerprint);
httpsClient.setTimeout(15000); // 15 Seconds
//delay(1000);
//Serial.print("HTTPS Connecting");
int r=0; //retry counter
while((!httpsClient.connect(host, httpsPort)) && (r < 30)){
delay(100);
Serial.print(".");
r++;
}
if(r==30) {
//Serial.println("Connection failed");
}
else {
//Serial.println("Connected to web");
}
String code, Link;
int i;
for (i = 0; i < 6; i++) {
code = code + codigo[i];
}
Link = "/miscript.php?aid=" + code;
//Serial.print("requesting URL: ");
//Serial.println(host+Link);
httpsClient.print(String("GET ") + Link + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
//Serial.println("request sent");
while (httpsClient.connected()) {
String line = httpsClient.readStringUntil('\n');
if (line == "\r") {
//Serial.println("headers received");
break;
}
}
//Serial.println("reply was:");
String line;
while(httpsClient.available()){
line = httpsClient.readStringUntil('\n'); //Read Line by Line
//Serial.println(line); //Print response
}
if (line =="1") {
Serial.println("enciendo");
digitalWrite(Rele, LOW);
delay(2000);
digitalWrite(Rele, HIGH);
}
else{
Serial.println("nada");
}
cont=0; //resetear a 0 la variable cont
}
}
}
NODEMCU ESP8266:
- Pin de D0 a D7 con un teclado 4x4
- Pin D8 al In2 del Rele
- Pin 3v al UCC del Rele
- Pin G al GND del rele
El Rele tiene una bombilla en los pines COM2 Y NO2
El GPIO 15 (D8) se utiliza en la configuración del arranque, no es buena idea conectar una carga.
Otros pequeños errores:
-declaras dos veces Serial.Begin con dos velocidades diferentes (Solo tiene en cuenta la ultima).
- En el setup haces pinMode(5, OUTPUT), pero ese pin (GPIO05) corresponde a D1 que ya lo utilizaste en el teclado.
-Bueno, los Delays (no es importante en este momento, pero te impedirán en el futuro escalar el programa)
¿Que tipo de Rele estas utilizando?
Muchas gracias! Voy a corregir los errores. A cual me recomiendas poner la carga en lugat del D8?
El rele es este
Hola
Estoy notando que las únicas veces que da problema es justo durante el arranque.
Actualmente mi configuración es esta
NODEMCU ESP8266:
- Pin de D0 a D7 con un teclado 4x4
- Pin D8 al In2 del Rele
- Pin VU al UCC del Rele
- Pin G al GND del rele
El Rele tiene una bombilla en los pines COM2 Y NO2
HI,
Seria de gran utilidad si haces un dibujo de como tienes alambrado el projecto.Pues algunasd veces explicandolo en palabraas uno se puede confundir para poder diagnosticar donde esta el problema.
Hola
Aqui va el dibujo del cableado
Hi,
He buscado ese MCU y no he podido encontrar ninguna informacion para ver cual es la funcion del pin VU. Normalmentehay un pin denominado Vin pero no se si el VU = Vin pero segun tu dibujo de aqui alimentas el relay. En el dibujo no tienes el alambrado de como le suministra el voltaje al MCU. Para mi no es correcto alimentar los relays directamente del voltaje que alimenta al MCU ya que los relays producen ruidos electromenecticos que puede afectar la operacion del MCU.
El NodeMCU es alimentado por un cable USB, como los de los móviles.
Creo que no paso corriente al relay, es decir solo lo acciono (la bombilla que dibujo va conectada al enchufe de la luz..)
Perdona mi lenguaje básico pero llevo poco tiempo en esto ejeje
Hi,
Los modulos de relay require de un voltaje para energizar el coil del relay. Tu estas alimentado el voltaje al modulo del relay usando el pin VU segun tu dibujo.
Hola
Si, lo estoy alimentando desde el VU. Funciona muy bien, el único problema es que si lo desconecto de la corriente y lo vuelvo a conectar, sin quitar los cables, el relay se queda "encendido". Sin embargo si enciendo el nodeMCU y DESPUÉS le pongo los cables al rele, funciona bien.
No se si me he explicado bien, si quieres puedo hacer un video.
He intentado alimentar el rele tambien con la salida del nodeMCU de 3.3V. Al principio funciona, pero despues de unos días conectado es como que no llega suficiente potencia el rele (se enciendo la luz roja muy floja y no se oye el "click")
Hi,
Puedes adjuntar el sketch que estas usando. El relay esta controlado por mcu. Para ver si puede ser un problema de programacion seria bueno que adjuntara el sketch.
Hola
Lo puse en los primeros post, te lo vuelvo a poner
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClientSecureBearSSL.h>
#include <Keypad.h>
int Rele = 15;
///WIFI///////
const char *ssid = "XXXXXXXX"; //ENTER YOUR WIFI SETTINGS
const char *password = "XXXXXXX";
const char *host = "miweb.com";
const int httpsPort = 443; //HTTPS= 443 and HTTP = 80
//certificado de miweb.com ya que es un https
const char fingerprint[] PROGMEM = "XX XX XX XX XX etc";
/////TECLADO
char codigo[6]; //Cadna donde se guardaran los caracteres de las teclas presionadas
int cont=0; //variable que se incrementara al presionar las teclas
const byte ROWS = 4; //Numero de filas del teclado que se esta usando
const byte COLS = 4; //Numero de columnas del teclado que se esta usando
char hexaKeys[ROWS][COLS] = //Aquí pondremos la disposición de los caracteres tal cual están en nuestro teclado
{
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {D4, D5, D6, D7};
byte colPins[COLS] = {D0, D1, D2, D3};
Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); //inicializa el teclado
void setup() {
pinMode(Rele, OUTPUT);
digitalWrite(Rele, HIGH);
delay(1000);
Serial.begin(115200);
WiFi.mode(WIFI_OFF); //Prevents reconnection issue (taking too long to connect)
delay(1000);
WiFi.mode(WIFI_STA); //This line hides the viewing of ESP as wifi hotspot
WiFi.begin(ssid, password); //Connect to your WiFi router
Serial.println("");
Serial.print("Connecting");
// Wait for connection
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
//If connection successful show IP address in serial monitor
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP()); //IP address assigned to your ESP
}
//=======================================================================
// Main Program Loop
//=======================================================================
void loop() {
char customKey = customKeypad.getKey(); //se guarda en la variable customKey el caracter de la tecla presionada
if (customKey != NO_KEY) //se evalúa si se presionó una tecla
{
codigo[cont]=customKey; //se guarda caracter por caracter en el arreglo codigo[]
Serial.println(codigo[cont]); //se imprime en el puerto serie la tecla presionada
cont=cont+1;
if(customKey=='0')
{
cont=0;
}
if(cont==6) //si ya fueron presionadas 6 teclas se evalúa si la contraseña es correcta
{
WiFiClientSecure httpsClient;
//Serial.println(host);
//Serial.printf("Using fingerprint '%s'\n", fingerprint);
httpsClient.setFingerprint(fingerprint);
httpsClient.setTimeout(15000); // 15 Seconds
//delay(1000);
//Serial.print("HTTPS Connecting");
int r=0; //retry counter
while((!httpsClient.connect(host, httpsPort)) && (r < 30)){
delay(100);
Serial.print(".");
r++;
}
if(r==30) {
//Serial.println("Connection failed");
}
else {
//Serial.println("Connected to web");
}
String code, Link;
int i;
for (i = 0; i < 6; i++) {
code = code + codigo[i];
}
Link = "/miscript.php?aid=" + code;
//Serial.print("requesting URL: ");
//Serial.println(host+Link);
httpsClient.print(String("GET ") + Link + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
//Serial.println("request sent");
while (httpsClient.connected()) {
String line = httpsClient.readStringUntil('\n');
if (line == "\r") {
//Serial.println("headers received");
break;
}
}
//Serial.println("reply was:");
String line;
while(httpsClient.available()){
line = httpsClient.readStringUntil('\n'); //Read Line by Line
//Serial.println(line); //Print response
}
if (line =="1") {
Serial.println("enciendo");
digitalWrite(Rele, LOW);
delay(2000);
digitalWrite(Rele, HIGH);
}
else{
Serial.println("nada");
}
cont=0; //resetear a 0 la variable cont
}
}
}
Hi,
Perdona pero se me paso de que habias puesto el sketch al principio. De todas manera por fin encontre informacion del VU = VUSB. En otras palabras quire decir que este pin es para alimenetar el MCU usando el voltaje del USB. Este pin no suple voltaje. Trata de alimentar el relayu usando otra fuente de 5 voltios y mira ver si te trabaja.Adjunto link que explica para que se usa el VU.
Link:NodeMCU - Vin pin as 5V output? - Arduino Stack Exchange
Hola
Muchas gracias por la búsqueda. El problema es que en el nodeMCU no hay una salida directa de 5V.
Como puedo hacer?
Hi,,
Pregunta el systema va a estar conectado al USB o s una conneccion temporera?Aqui la unica alternativa seria usar un PS externo. Ahora si va estar conectado al PC entonces puedes usar otro cable de USB y le corta el conector y usas los 5 voltios para el relay. Tienes que tener cuidado cuando hagas las conecciones pues un error puedes danar el puerto de USB.La mejor sulucion es consiguite un power suply de 5 voltios.Otra sugerencia es de usar un cable connectado a los 5 voltios del PS de tu computadora. No se si tu computadora es portable o es de cabinete.