esp8266 error rst cause:2 y red insegura

pd: gracias por tomarse el tiempo de leer y desde ya gracias

pd: de nada :o

perdon no salió el otro mensaje que envié antes de ese :o :confused:. les cuento tengo un esp8266 nodemcu1.0 y este al cargar el sketch 1 me imprime en el monitor serie rst cause:2 no se que significara eso, esta alimentado desde mi pc y no tiene ninguna conexión.

además les quería hacer otra consulta yo lo intente conectar a una red de mi celular con el sketch 2 y me imprime en el puerto serie red insegura, lo conecto con otra red de otro celular y me deja conectarme al mismo. también lo intente conectar a un repetidor tp-link en modo repetidor y en modo punto de acceso. alguien sabe si se puede conectar a estos repetidores ?. todas las redes mencionadas tienen seguridad wpa2 y trabajan a 2.4gh.
muchísimas gracias por tomarse el tiempo de leer y disculpen el inconveniente con los mensajes anteriores :disappointed_relieved:.

sketch 1:

// temperatura
#include <DHT.h>
#include <DHT_U.h>

int TEMPERATURA = 0;
int HUMEDAD = 0;

DHT dht(D2, DHT11);

int lock = 1; //tx
#define sensor_mov D8
#define fan D3
#define stove D0
int light = 3;
#define air D1

// tiempos
unsigned long previousMillis = 0;
byte estado_time_fan;

#include “Ubidots.h”

const char* UBIDOTS_TOKEN = “”; // Put here your Ubidots TOKEN
const char* WIFI_SSID = “”; // Put here your Wi-Fi SSID
const char* WIFI_PASS = “”;
const char* DEVICE_LABEL = “rffid”; // Nombre del dispositivo

Ubidots ubidots(UBIDOTS_TOKEN, UBI_TCP);

void setup()
{

Serial.begin(115200);

ubidots.wifiConnect(WIFI_SSID, WIFI_PASS);

// ubidots.setDebug(true); //Uncomment this line for printing debug messages
Serial.print("\n");
Serial.print( “ok1”);
pinMode(sensor_mov, INPUT);
pinMode(fan, OUTPUT);
pinMode(stove, OUTPUT);
pinMode(light, OUTPUT);
pinMode(air , OUTPUT);
Serial.print("\n");
Serial.print( “ok2”);
dht.begin();

Serial.print(“hola”);
delay(2000);
}

void loop()
{
Serial.print("\n");
Serial.print( “loop0”);
// comprueva estado de time fan porque prendia y apagaba
if (estado_time_fan == 1 ) {
digitalWrite(fan , HIGH);
}
else {
digitalWrite(fan , LOW);
}

TEMPERATURA = dht.readTemperature ();
HUMEDAD = dht.readHumidity ();
Serial.print("\n");
Serial.print(“loop”);
Serial.print("\n"); Serial.print("Temperatura: “); Serial.println(TEMPERATURA);
Serial.print(” humedad: "); Serial.println(HUMEDAD);

ubidots.add(“temperatura”, TEMPERATURA); // Change for your variable name
ubidots.add(“humedad”, HUMEDAD);
ubidots.add(“movimiento”, sensor_mov);

float tempe_corte = ubidots.get(DEVICE_LABEL, “temperatura_corte”);
float tempe_air = ubidots.get(DEVICE_LABEL, “temperatura_aire”);
float tempe_stove = ubidots.get(DEVICE_LABEL, “temperatura_estufa”);
float tempe_stove_sw = ubidots.get(DEVICE_LABEL, “temperatura_estufa_sw”);
float tempe_air_sw = ubidots.get(DEVICE_LABEL, “temperatura_air_sw”);
float tempe_corte_sw = ubidots.get(DEVICE_LABEL, “temperatura_corte_sw”);
float stove_read = ubidots.get(DEVICE_LABEL, “estufa”);
float fan_read = ubidots.get(DEVICE_LABEL, “ventilador”);
float air_read = ubidots.get(DEVICE_LABEL, “aire”);
float timer_fan = ubidots.get(DEVICE_LABEL, “timer_fan”);
float light_read = ubidots.get(DEVICE_LABEL, “luz_dormitorio”);

bool bufferSent = false;
bufferSent = ubidots.send(DEVICE_LABEL); // Will send data to a device label that matches the device Id

Serial.print("\n");
Serial.print(“tempe_corte:”);
Serial.print( tempe_corte);

Serial.print("\n");
Serial.print(“tempe_corte_sw:”);
Serial.print( tempe_corte_sw);

Serial.print("\n");
Serial.print(“air_read:”);
Serial.print( air_read);

// temperatura automa
if (bufferSent && tempe_air != ERROR_VALUE && tempe_corte != ERROR_VALUE && tempe_stove != ERROR_VALUE
&& tempe_air_sw != ERROR_VALUE && tempe_stove_sw != ERROR_VALUE && tempe_corte_sw != ERROR_VALUE )
{
if (tempe_air_sw ) {
if ( TEMPERATURA > tempe_air ) {
digitalWrite(stove, LOW);
digitalWrite(air, HIGH);
int x = 1;
ubidots.add(“aire”, x);
Serial.print(“temp ind aire on”);
}
else {
digitalWrite(air, LOW);
int x = 0;
ubidots.add(“aire”, x);
Serial.print(“temp ind aire off”);
}
}
if (tempe_stove_sw ) {
if ( TEMPERATURA < tempe_stove) {
digitalWrite(stove, HIGH);
digitalWrite(air, LOW);
int x = 1;
ubidots.add(“estufa”, x);
Serial.print(“temp ind estufa on”);
}
else {
digitalWrite(stove, LOW);
int x = 0;
ubidots.add(“estufa”, x);
Serial.print(“temp ind estufa off”);
}

}

if (tempe_corte_sw ) {
int x = 0;
Serial.print("\n");

Serial.print(“entramos temp automatic”);
ubidots.add(“temperatura_estufa_sw”, x);
ubidots.add(“temperatura_air_sw”, x);
if ( TEMPERATURA > tempe_corte ) {
digitalWrite(air, HIGH);
digitalWrite(stove, LOW);
ubidots.add(“estufa”, x);
x = 1;
ubidots.add(“aire”, x);
Serial.print("\n");
Serial.print(“temp aire on”);

}
else if ( TEMPERATURA < tempe_corte) {
digitalWrite(stove, HIGH);
digitalWrite(air, LOW);
ubidots.add(“aire”, x);
x = 1;
ubidots.add(“estufa”, x);
Serial.print("\n");
Serial.print(“temp estufa on”);
}
else if ( tempe_corte == TEMPERATURA) {
digitalWrite(stove, LOW);
digitalWrite(air, LOW);
ubidots.add(“estufa”, x);
ubidots.add(“aire”, x);
Serial.print("\n");
Serial.print(“temp templado”);
}
else if (tempe_corte == 0) {
x = 0;
digitalWrite(stove, LOW);
digitalWrite(air, LOW);
ubidots.add(“temperatura_corte_sw”, x);
ubidots.add(“estufa”, x);
ubidots.add(“aire”, x);

}

}
}
else {
Serial.print("\n");

Serial.print(“error value temps”);
return;
}

//timer ventilador
timer_fan = ubidots.get(DEVICE_LABEL, “timer_fan”);
unsigned long currentMillis = millis();
Serial.print("\n");
Serial.print("cuenta = ");
Serial.println(currentMillis - previousMillis);
int t ;

if (currentMillis - previousMillis >= timer_fan * 10000) {
if (currentMillis - previousMillis <= 10000) {

}
else {
digitalWrite(fan, LOW);

t = 0;
ubidots.add(“fan”, t);
ubidots.add(“timer_fan”, t);

Serial.print("\n");
Serial.print(“timero off”);
previousMillis = currentMillis;
}

}
else {
t = 1;
ubidots.add(“fan”, t);
digitalWrite(fan, HIGH);
Serial.print("\n");
Serial.print(“fan on timer on”);

}

Serial.print("\n");
Serial.print(“salida loop”);

if (estado_time_fan == 1 ) {
digitalWrite(fan , HIGH);
}
else {
digitalWrite(fan , LOW);
}
delay(2000);
}

me olvide de adjuntar el sketch 2 perdon :o
sketch2:

// This example retrieves last value of a variable from the Ubidots API
// using TCP protocol.

/****************************************

  • Include Libraries
    ****************************************/

#include "Ubidots.h"

/****************************************

  • Define Constants
    ***********************************/
    const char
    UBIDOTS_TOKEN = ""; // Put here your Ubidots TOKEN
    const char
    WIFI_SSID = ""; // Put here your Wi-Fi SSID
    const char
    WIFI_PASS = ""; // Put here your Wi-Fi password
    const char
    DEVICE_LABEL_TO_RETRIEVE_VALUES_FROM = "rffid"; // Replace with your device label
    const char
    VARIABLE_LABEL_TO_RETRIEVE_VALUES_FROM = "humedad"; // Replace with your variable label

Ubidots ubidots(UBIDOTS_TOKEN, UBI_TCP);

/****************************************

  • Auxiliar Functions
    ****************************************/

// Put here your auxiliar functions

/****************************************

  • Main Functions
    ****************************************/

void setup() {
Serial.begin(115200);
ubidots.wifiConnect(WIFI_SSID, WIFI_PASS);
ubidots.setDebug(true); //Uncomment this line for printing debug messages
}
void loop() {
/* Obtain last value from a variable as float using TCP */
float value = ubidots.get(DEVICE_LABEL_TO_RETRIEVE_VALUES_FROM, VARIABLE_LABEL_TO_RETRIEVE_VALUES_FROM);
float value1 = random(0, 9) * 10;
float value2 = random(0, 9) * 100;
float value3 = random(0, 9) * 1000;
ubidots.add("Variable_Name_One", value1); // Change for your variable name
ubidots.add("Variable_Name_Two", value2);
ubidots.add("Variable_Name_Three", value3);

bool bufferSent = false;
bufferSent = ubidots.send("good_nm"); // Will send data to a device label that matches the device Id

// Evaluates the results obtained
if (value != ERROR_VALUE && bufferSent) {
Serial.print("Value:");
Serial.println(value);
}
else {
Serial.print("\n");
Serial.println("error");
}
delay(5000);
}

Por favor, editá tu post y poné el código con su tag correspondiente, en las Normas del Foro, punto 7, se explica como. Gracias

sisi, pero no me entraba ya que excedía las 9000 palabras, lo puedo pasar como archivo pero me pareció mas practico pasarlo con code, como también lo dicen las reglas del foro.
gracias y saludos

Es que el post no puede tener mas de 9000 caracteres en total incluído código, links, etc..
Tendrías que tener mucha mala suerte para que el código haya entrado en el post y no quepan las etiquetas (igual, con borrar unos cuantos asteriscos y lineas vacías se soluciona lo del tamaño) :wink:

Sobre lo de “rst cause:2”, por lo que estuve leyendo aparentemente es por un reset provocado por el watchdog.
lnterpreto que el problema son los delay, como el micro no hace nada durante ese tiempo, el watchdog lo resetea.
Aparentemente se soluciona poniendo lo siguiente como primeras instrucciones del loop

void loop {
// estas dos lineas de abajo es lo que agregas
  ESP.wdtFeed();
  delay(0);

// tu codigo aquí...

Prueba a ver si funciona. (No tengo nodemcu, yo no lo puedo comprobar)

Sobre lo otro no te puedo ayudar. No tengo idea.

hola, lo he intentado pero no tuve éxito si quieres adjunto el mensaje de error, ya no se que puede ser.
igualmente muchas gracias por tu ayuda.

comento mis avances, encontré esto, son los menajes de excepción que imprime antes del error, la pagina donde dice los códigos de error [iurl=https://arduino-esp8266.readthedocs.io/en/latest/exception_causes.html#:~:text=Exception Causes (EXCCAUSE) ¶    EXCCAUSE,  Yes  22 more rows][/iurl]Exception Causes (EXCCAUSE) — ESP8266 Arduino Core 2.7.2-111-g96243d7c documentation (arduino-esp8266.readthedocs.io), esta es la pagina donde encontré los errores del tipo rst cause:...

nesecito su ayuda en algo, la exepcion que me figura es la 28, esta según la pagina donde figuran estas [Exception Causes (EXCCAUSE)](Exception Causes (EXCCAUSE) — ESP8266 Arduino Core 3.0.0-12-gbf6f3e7c documentation Causes (EXCCAUSE) ¶ EXCCAUSE, Yes 22 more rows) la exepcion corresponde a LoadProhibited que significa A load referenced a page mapped with an attribute that does not permit loads

no se interpretar su significado por favor no podrian ayudarme a entender esa exepcion.

gracias por su ayuda y saludos.

me olvide de adjuntar la pagina donde encontré los errores del tipo rst cause:..., aca se las adjunto: Arduino/a02-my-esp-crashes.md at 4897e0006b5b0123a2fa31f67b14a3fff65ce561 · esp8266/Arduino · GitHub.

Hola
Aunque no son los mismos errores, algo parecido me ocurrió a mi por tener un pin a low al arrancar. Como no se exactamente cual es tu ESP te paso un link para que veas como deben estar los pins al iniciar el ESP. Yo me volví loco hasta averiguar lo de los pins

Saludos

Tengo el v2 que tiene el programador cuadrado y al sospechar de eso no le conecte nada a sus pines por lo tanto no tiene nada en sus pines, no se si será necesario poner algún pin a high o low ?
gracias por su ayuda igualmente.

Moderador

Hola, bienvenido al foro Arduino en Español.

En el post#5 @gatul te pidió que edites usando etiquetas y tu respuesta fue que no entraba el código. Algo que no tiene que ver con editar el código y USAR etiquetas.

Si el código supera 9k puedes simplemente adjuntarlo y no es necesario que sea visible.
Para la próxima ya sabes. Ahora que lo has hecho te invito a que edites.

Por favor, presta atención a las normas.

Normas del foro

Respecto al código es obvio que el watchdog es quien te esta generando ese problema.
No se para que lo usas?
El watchog es el último recurso para resolver un problema que aparece aparentemente al azar. magina una situacion que no puedes encontrar y el ESP se cuelga o falla cada X dias. Cómo haces para encontrar que esta fallando? Entonces ahi si usas el watchdog pero adelantarse porque si no tiene sentido.

Por otro lado viendo tu código pienso, lo has hecho tu o ha sido copiado y pegado? Digo esto porque usar millis() y delay solo tiene sentido cuando alguien toma códigos de varios autores.
millis() no se lleva con delay() es mas no tiene sentido usar una cosa si luego usas la otra.
Cuando afirmo que no se llevan no me refiero a que no puedan cohexistir sino a que se debe verificar debidamente que el uso y abuso de dela() no conspire con lo que se intenta hacer con millis().

Miraré tu código y te haré observaciones y/o sugerencias. Luego edito este post.

Dos sketch y comienzan de la misma manera por lo que no entiendo que esperas que hagamos?
Cual es el que va o con los dos tienes el mismo problema?