consigli anomalia ESP32

Buonasera a tutti, vorrei sottoporvi un problema che non riesco proprio a risolvere. Ho letto molto e fatto moltissime prove ma niente.
Ho un ESP32 che ho compilato tramite sketch Arduino. Questo si collega ai miei account IFTT Adafruit E Google Home per pilotare 4 uscite digitali, tutto questo printato sul monitor seriale. Fin qui tutto ok e perfettamente funzionante.
Il problema è iniziato quando ho deciso di tentare di implementare il sistema pilotando una ulteriore uscita digitale tramite un input. Premetto che la parte che ho implementato, quindi il pulotare una uscita tramite un ingresso se presa singolarmente funziona alla perfezione senza però riportare nulla sul monitor seriale.
Lo sketch non da nessun tipo di errore e viene caricato regolarmente. Il problema è che la parte delle uscite gestite da Google Home funziona regolarmente mentre l'uscita pilotata dall'input non da segni di vita.
Avete qualche suggerimento?
Grazie

Inserisco immagine del sistema

Inserisco il codice

****************************************************/
//for esp32 use <wifi.h> ,for esp8266 use <esp8266wifi.h>
// this code is for esp32 for using esp8266 you just need to change <wifi.h> into <esp8266wifi.h> and also change the relay pin 
#include <WiFi.h>
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"





/************************* Pin Definition *********************************/

//Relays for switching appliances
#define Relay1            13
#define Relay2            12
#define Relay3            14
#define Relay4            27
int ledPin = 32;  // LED connected to digital pin 32
int inPin = 4;    // pushbutton connected to digital pin 4
// variable for storing the pushbutton status 
int val = 0;      // variable to store the read value

//buzzer to know the status of MQTT connections and can be used for any other purpose according to your project need.



/************************* WiFi Access Point *********************************/

#define WLAN_SSID       "SSID"
#define WLAN_PASS       "Password"

/************************* Adafruit.io Setup *********************************/

#define AIO_SERVER      "io.adafruit.com"
#define AIO_SERVERPORT  1883                   // use 8883 for SSL
#define AIO_USERNAME    "xxxxxxxxx"
#define AIO_KEY         "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

/************ Global State (you don't need to change this!) ******************/

// Create an ESP8266 WiFiClient class to connect to the MQTT server.
WiFiClient client;
// or... use WiFiFlientSecure for SSL
//WiFiClientSecure client;

// Setup the MQTT client class by passing in the WiFi client and MQTT server and login details.
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);

/****************************** Feeds ***************************************/

// Notice MQTT paths for AIO follow the form: <username>/feeds/<feedname>

Adafruit_MQTT_Publish prova_led = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/prova_led");


// Setup a feed called 'onoff' for subscribing to changes.
Adafruit_MQTT_Subscribe led_1 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/led_1");
Adafruit_MQTT_Subscribe led_2 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/led_2");
Adafruit_MQTT_Subscribe led_3 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/led_3");
Adafruit_MQTT_Subscribe led_4 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/led_4");
Adafruit_MQTT_Subscribe led_Pin = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/led_Pin");



/*************************** Sketch Code ************************************/

// Bug workaround for Arduino 1.6.6, it seems to need a function declaration
// for some reason (only affects ESP8266, likely an arduino-builder bug).
void MQTT_connect();

void setup() {
Serial.begin(115200);

delay(10);

pinMode(Relay1, OUTPUT);
pinMode(Relay2, OUTPUT);
pinMode(Relay3, OUTPUT);
pinMode(Relay4, OUTPUT);

pinMode(ledPin, OUTPUT);  // sets the digital pin 32 as output
pinMode(inPin, INPUT);    // sets the digital pin 4 as input



Serial.println(F("Adafruit MQTT demo"));

// Connect to WiFi access point.
Serial.println(); Serial.println();
Serial.print("Connecting to ");
Serial.println(WLAN_SSID);

WiFi.begin(WLAN_SSID, WLAN_PASS);
while (WiFi.status() != WL_CONNECTED) {
  delay(500);
  Serial.print(".");
}
Serial.println();

Serial.println("WiFi connected");
Serial.println("IP address: "); 
Serial.println(WiFi.localIP());

// Setup MQTT subscription for onoff feed.
mqtt.subscribe(&led_1);
mqtt.subscribe(&led_2);
mqtt.subscribe(&led_3);
mqtt.subscribe(&led_4);
mqtt.subscribe(&led_Pin);
}


void loop() {

val = digitalRead(inPin);   // read the input pin
digitalWrite(ledPin, val);  // sets the LED to the button's value

// Ensure the connection to the MQTT server is alive (this will make the first
// connection and automatically reconnect when disconnected).  See the MQTT_connect
// function definition further below.
MQTT_connect();
// this is our 'wait for incoming subscription packets' busy subloop
// try to spend your time here

Adafruit_MQTT_Subscribe *subscription;
while ((subscription = mqtt.readSubscription(20000))) {
 
  if (subscription == &led_1) {
    Serial.print(F("led 1: "));
    Serial.println((char *)led_1.lastread);
    int led_1_State = atoi((char *)led_1.lastread);
    digitalWrite(Relay1, led_1_State);
    
  }
  if (subscription == &led_2) {
    Serial.print(F("led 2: "));
    Serial.println((char *)led_2.lastread);
    int led_2_State = atoi((char *)led_2.lastread);
    digitalWrite(Relay2, led_2_State);
  }
  if (subscription == &led_3) {
    Serial.print(F("led 3: "));
    Serial.println((char *)led_3.lastread);
    int led_3_State = atoi((char *)led_3.lastread);
    digitalWrite(Relay3, led_3_State);
  }
  if (subscription == &led_4) {
    Serial.print(F("led 4: "));
    Serial.println((char *)led_4.lastread);
    int led_4_State = atoi((char *)led_4.lastread);
    digitalWrite(Relay4, led_4_State);
    
  }
}






// ping the server to keep the mqtt connection alive
// NOT required if you are publishing once every KEEPALIVE seconds
/*
  if(! mqtt.ping()) {
  mqtt.disconnect();
  }
*/
}

// Function to connect and reconnect as necessary to the MQTT server.
// Should be called in the loop function and it will take care if connecting.
void MQTT_connect() {
int8_t ret;

// Stop if already connected.
if (mqtt.connected()) {
  return;
}

Serial.print("Connecting to MQTT... ");

uint8_t retries = 3;
digitalWrite(ledPin, HIGH);
delay(200);
digitalWrite(ledPin, LOW);
delay(200);
digitalWrite(ledPin, HIGH);
delay(200);
digitalWrite(ledPin, LOW);
delay(200);
while ((ret = mqtt.connect()) != 0) { // connect will return 0 for connected
  Serial.println(mqtt.connectErrorString(ret));
  Serial.println("Retrying MQTT connection in 5 seconds...");
  mqtt.disconnect();
  delay(5000);  // wait 5 seconds
  retries--;
  if (retries == 0) {
    // basically die and wait for WDT to reset me
    while (1);
  }
}
Serial.println("MQTT Connected!");
digitalWrite(ledPin, HIGH);
delay(2000);
digitalWrite(ledPin, LOW);
}

Buonasera, :slight_smile:
essendo il tuo primo post nella sezione Italiana del forum, nel rispetto del regolamento di detta sezione (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (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 tutto il su citato REGOLAMENTO ...

... poi, in conformità al suddetto regolamento, punto 7, devi editare il tuo post qui sopra (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 usati per le tabelle !!!

In pratica, tutto il tuo codice dovrà trovarsi racchiuso tra due tag: [code] _il _tuo_ codice_ [/code] così da non venire interpretato e non dare adito alla formazione di caratteri indesiderati o cattiva formattazione del testo. Grazie. :slight_smile:

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread e sistemato il codice come da regolamento, nessuno ti potrà rispondere, quindi ti consiglio di fare il tutto al più presto. :wink:

>hurricane74: cortesemrnte leggi ATTENTAMENTE quello che ti ho scritto relativamente al codice .... c'è in dettaglio ciò che devi fare. Grazie.

Guglielmo

gpb01:
>hurricane74: cortesemrnte leggi ATTENTAMENTE quello che ti ho scritto relativamente al codice .... c'è in dettaglio ciò che devi fare. Grazie.

Guglielmo

Buongiorno Guglielmo, ho letto ma in realtà non ho la sezione edit e quindi neanche la possibilità di racchiudere il codice tra < /> che ovviamente non vedo. Ti chiedo di pazientare e di indicarmi dove sbaglio.

Grazie

Luigi

Quando fai il "modify" vai a finire nella pagina di "edit", dove puoi modificare il tuo post e quindi aggiustare il tutto. Ecco, quando fai "modify" sul tuo post, hai questa schermata ...


... da dove puoi modificare.

Guglielmo