Go Down

Topic: Funzionamento del codice solo appena caricato sulla board (Read 108 times) previous topic - next topic

dexter_39

Salve a tutti, sono nuovo del mondo e con non poche difficoltà sono riuscito a creare il mio progetto per uno switch per un pulsante da remoto, usando un nodemcu 1.0 basato su esp8266, col protocollo MQTT usando l'arduino IDE.
Dal IDE apro il monitor seriale, e carico lo sketch sulla board, il codice funziona egregiamente, ma quando vado a staccare e/o cambiare l'alimentazione è come se non girasse più.  E' come se funzionasse solo con monitor aperto.

Di seguito vi lascio il codice
Grazie anticipatamente

Code: [Select]
#include <WiFiClient.h>
#include <ESP8266WiFi.h>
#include <MQTT.h>
#include <PubSubClient.h>
 
//----SERIAL CONFIG ----
#define SERIAL_SPEED        115200
 
//----WIFI CONFIG ----
#define WIFI_SSID           "**********" //your Wifi SSID
#define WIFI_PASSWD         "**********" //your wifi password
#define MAX_WIFI_INIT_RETRY 10
#define WIFI_RETRY_DELAY    500
 
//----MQTT CONFIG ----
#define MQTT_CLIENT_ID      "**********"
#define MQTT_SERVER         "**********" //MQTT broker sever. I use https://www.cloudmqtt.com/
#define MQTT_UNAME          "**********"     //MQTT brokor user name - I use this broker https://www.cloudmqtt.com/
#define MQTT_PASSW          "**********" //MQTT broker passowrd
#define MQTT_BROKER_PORT    12345         //MQTT BROKER listening port
#define MQTT_TOPIC          "**********"
 
#define ESP_NAME            "**********"
 
#define ESP_SUB_ROLE      
 
WiFiClient wifi_client;
PubSubClient mqtt_client(wifi_client, MQTT_SERVER, MQTT_BROKER_PORT);
bool mqtt_status;
 
int pin = 5;                 // LED connected to digital pin 13
 
 
//Wifi Initialization function
int WiFi_init()
{
        const char* wifi_ssid   = WIFI_SSID;
        const char* wifi_passwd = WIFI_PASSWD;
        
        int retries = 0;
 
        Serial.println("Connecting to WiFi AP..........");
 
        WiFi.mode(WIFI_STA); //set wifi station mode
      
        WiFi.begin(wifi_ssid, wifi_passwd); //start connecting to WiFi AP
      
        //check the status of WiFi connection to be WL_CONNECTED
        while ((WiFi.status() != WL_CONNECTED) && (retries < MAX_WIFI_INIT_RETRY)) {
               retries++;
               delay(WIFI_RETRY_DELAY);
               Serial.println("#");
        }
        Serial.println(String(WiFi.localIP()[0]) + "." + String(WiFi.localIP()[1]) + "." + String(WiFi.localIP()[2]) + "." + String(WiFi.localIP()[3]));
 
        return WiFi.status(); //return the WiFi connection status
}
 
//MQTT callback function invoked for every MQTT received message on a subscribed topic
void mqtt_callback(const MQTT::Publish& pub)
{
        Serial.println("MQTT receiving a message:");
        Serial.println(pub.payload_string());
      
         //partenza da Acqua ON
        if (pub.payload_string() == "ON") {
        digitalWrite(pin, HIGH);
        delay(300);
        digitalWrite(pin, LOW);
        //Riscaldamento ON
        Serial.println("Riscaldamento ON");
        }  else if (pub.payload_string() == "OFF") {
        digitalWrite(pin, HIGH);
        delay(300);
        digitalWrite(pin, LOW);
        //Caldaia OFF
        delay(4000);        
        digitalWrite(pin, HIGH);
        delay (300);
        digitalWrite(pin, LOW);
        //Acqua ON
        Serial.println("Riscaldamento OFF, Acqua ON");        
        }
      
        Serial.println();  
}
 
int MQTT_init(boolean topic_subscribe)
{
        Serial.println("Initializing MQTT communication.........");
              
        mqtt_client.set_callback(mqtt_callback); //set callback on received messages
        mqtt_client.set_max_retries(255);
      
        //here we connect to MQTT broker and we increase the keepalive for more reliability
        if (mqtt_client.connect(MQTT::Connect(MQTT_CLIENT_ID).set_keepalive(90).set_auth(String(MQTT_UNAME), String(MQTT_PASSW)))) {
                Serial.println("Connection to MQTT broker SUCCESS..........");
              
                //if role is SUB subscribe to topic
                if (topic_subscribe) {
                        if (mqtt_client.subscribe(MQTT_TOPIC)) {
                                Serial.println("Subscription to MQTT topic [" + String(MQTT_TOPIC) + "] SUCCESS.........");
                        } else {
                                Serial.println("MQTT unable to subscribe to [" + String(MQTT_TOPIC) + "] ERROR.........");
                                mqtt_client.disconnect();
                                return false;
                        }
                }
        } else {
                Serial.println("Connection to MQTT broker ERROR..........");
        }
      
        return mqtt_client.connected();
}
 
 
void setup() {
 
 
 
   pinMode(pin, OUTPUT);      // sets the digital pin as output
  
        Serial.begin(SERIAL_SPEED);
        delay(100);
 
        Serial.println();
        Serial.println("MQTT_basic starting....");
        if (WiFi_init() != WL_CONNECTED) {
                Serial.println("WiFi connection ERROR....");
        } else {
            Serial.println("WiFi connection OK....");
                          
            #ifdef ESP_SUB_ROLE
                mqtt_status = MQTT_init(true); //if ESP is Subscriber do subscribe to topic
            #endif
 
            if (!mqtt_status)
                    Serial.println("MQTT connection ERROR....");        
            else
                    Serial.println("MQTT connection OK....");        
        }
}
 
void loop() {
     if (mqtt_status) {
                
         #ifdef ESP_SUB_ROLE
             mqtt_client.loop();
             delay(100);
         #endif
     }
}

gpb01

Buonasera,
prima di tutto, essendo il tuo primo post, nel rispetto del regolamento (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il succitato REGOLAMENTO ...

... poi,  in conformità al suddetto regolamento, punto 7, devi editare il tuo post (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More -> Modify che si trova in basso a destra del tuo post) e racchiudere il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra) e NON all'intero dei tag QUOTE che invece hai usato. Grazie :)

Guglielmo
Search is Your friend ... or I am Your enemy !

dexter_39

Buonasera,
prima di tutto, essendo il tuo primo post, nel rispetto del regolamento (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il succitato REGOLAMENTO ...

... poi,  in conformità al suddetto regolamento, punto 7, devi editare il tuo post (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More -> Modify che si trova in basso a destra del tuo post) e racchiudere il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra) e NON all'intero dei tag QUOTE che invece hai usato. Grazie :)

Guglielmo
Grazie Guglielmo per la risposta, pensavo di aver letto per bene tutto ma evidentemente così non è stato, ho usato il quote poichè il tasto code non c'era come nel tutorial.

[RISOLTO] Per quanto riguarda il problema ho trovato la falla, non è il codice ma il wifi a dar problemi, per questo quasi sempre il codice sembrava non funzionare. Resto in attesa se qualcuno ha da proporre un progetto ancor più semplice di quello da me utilizzato :)

Go Up