Risoluzione dei problemi

Suggerimenti per la risoluzione dei problemi

La connessione è instabile (il dispositivo passa continuamente da “online” a “offline” nella dashboard di SinricPro)

Su ESP32 / ESP8266, aggiungere un delay() (o codice bloccante di lunga durata) incide direttamente sulle prestazioni e sulla stabilità del Wi-Fi, per via di come funziona lo stack Wi-Fi. I ritardi brevi (pochi ms) di solito non creano problemi. I ritardi lunghi (> ~100ms), invece, possono causare timeout del Wi-Fi, pacchetti persi o disconnessioni.

Se nella funzione loop() hai dei delay(x); lunghi, potresti doverli riscrivere in modo non bloccante.

Esempio (codice sbagliato):

const int ledPin = 2;

void setup() {   
    pinMode(ledPin, OUTPUT);
}

void loop() {
    delay(5000) //!!!!!!!!!!! DO NOT DO THIS!!!!!!!!!
    digitalWrite(ledPin, !digitalRead(ledPin));
}

Esempio (codice corretto):

const int ledPin = 2;

// Variables to manage timing
unsigned long previousMillis = 0;  // Stores last time LED was updated
const long interval = 1000;        // Interval for blinking (milliseconds)

void setup() {
    // Initialize the LED pin as an output
    pinMode(ledPin, OUTPUT);
}

void loop() {
    // Get the current time
    unsigned long currentMillis = millis();

    // Check if the interval has passed
    if (currentMillis - previousMillis >= interval) {
        // Save the current time
        previousMillis = currentMillis;

        // Toggle the LED state
        digitalWrite(ledPin, !digitalRead(ledPin));
    }
}

Problema noto: instabilità del WiFi su ESP32/ESP8266 quando si usano i pin ADC

Se sviluppi con ESP32 o ESP8266 e noti un comportamento anomalo del WiFi, come disconnessioni frequenti, segnale debole o connessioni non riuscite, potresti esserti imbattuto in una particolarità hardware ben documentata: l’instabilità del WiFi quando sono in uso i pin del convertitore analogico-digitale (ADC).

Cosa succede?

Sia l’ESP32 sia l’ESP8266 usano risorse interne condivise per la radio WiFi e per le operazioni dell’ADC. Quando l’ADC campiona attivamente (soprattutto ad alta frequenza o con letture continue), può interferire con i circuiti RF responsabili della comunicazione WiFi. Ne risultano:

Il problema si nota in particolare quando:

Soluzioni alternative e buone pratiche

  1. Aggiungi dei ritardi tra le letture dell’ADC
    Evita il polling continuo. Inserisci brevi ritardi (ad es. delay(10) o vTaskDelay()) tra le letture analogiche per lasciare respiro allo stack WiFi.

    ```cpp int sensorValue = analogRead(A0); delay(10); // Let WiFi recover

Cannot connect to SinricPro

Logging

SinricPro SDK Logging
ESP8266/ESP32 Core Logging
* To enable ESP8266 logs, in Arduinio IDE:

    1. `Tools -> Debug Serial Port -> Serial`

    2. `Tools -> Debug Level -> SSL + HTTP_CLIENT`

* To enable ESP32 logs, in Arduinio IDE:

    1. `Tools -> Core Debug Level -> Verbose`

Memory Limitation