[RISOLTO] Sensore temperatura e umidità 4.0

Ciao a tutti, sono nuovo di questo forum, e nonostante ho letto il regolamento spero di non fare errori. Vi premetto che ho una dimestichezza medio/bassa nella programmazione di arduino e nonostante ciò avevo l’idea di creare un sensore umidità/temperatura che dal telefono attraverso il web mi permettesse di leggere tali valori. Leggendo e informandomi ho scoperto il servizio ThingSpeak che mi è sembrato essere perfetto. Ho acquistato un DHT22 e un ESP8266. Inizialmente ho giocherellato solo con il DHT e nessun problema, poi quando ho provato ad inserire il modulo wifi sono sorti i problemi. Ho buttato giù un codice più o meno scopiazzato che spero mi possiate aiutare a controllare, compila e carica, l’unico problema è che poi non arrivano i dati sul sito come dovrebbero. Avreste qualche idee su come capire dov’è il problema? (ad es. mancata connessione, mancata acquisizione, errore di codice,ESP rotto,connessioni hardware errate) Io ho provato davvero in tutti i modi e spero vivamente possiate aiutarmi. Grazie in anticipo.

#include <SerialESP8266wifi.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <WiFi.h>
#include <DHT_U.h>
#define myPeriodic 15 //in sec | Thingspeak pub is 15sec
#define ONE_WIRE_BUS 2  // DS18B20 on arduino pin2 corresponds to D4 on physical board
DHT dht(2,DHT22);
const char* server = "api.thingspeak.com";
String apiKey ="miocodice";
const char* MY_SSID = "Sitecom";
const char* MY_PWD = "password";
int sent = 0;
void setup() {
  Serial.begin(115200);
    dht.begin();
  connectWifi();
}
 
void loop() {

  float hum = dht.readHumidity(); // Leggo il valore di umidità
  float temp = dht.readTemperature(); // Leggo il valore di temperatura
  if (isnan(temp) || isnan(hum)) // Se almeno uno dei due valori è NaN (Not a Number)
  {
    Serial.println("Impossibile leggere il sensore!");
  }
  else //altrimenti
  {
    Serial.print("Umidità: ");
    Serial.print(hum);
    Serial.print(" %\t");
    Serial.print("Temperatura: ");
    Serial.print(temp);
    Serial.println(" *C");
  delay(1000); 
  }

 
  Serial.print(String(sent)+" Temperature: ");
  Serial.println(temp);
 
 
  sendTemperatureTS(temp);
  int count = myPeriodic;
  while(count--)
  delay(1000);
}
 
void connectWifi()
{
  Serial.print("Connecting to "+*MY_SSID);
  WiFi.begin(MY_SSID, MY_PWD);
  while (WiFi.status() != WL_CONNECTED) {
  delay(1000);
  Serial.print(".");
  }
 
  Serial.println("");
  Serial.println("Connected");
  Serial.println("");  
}//end connect
 
void sendTemperatureTS(float temp)
{  
   WiFiClient client;
 
   if (client.connect(server, 80)) { // use ip 184.106.153.149 or api.thingspeak.com
   Serial.println("WiFi Client connected ");
   
   String postStr = apiKey;
   postStr += "&field1=";
   postStr += String(temp);
   postStr += "\r\n\r\n";
   
   client.print("POST /update HTTP/1.1\n");
   client.print("Host: api.thingspeak.com\n");
   client.print("Connection: close\n");
   client.print("X-THINGSPEAKAPIKEY: " + apiKey + "\n");
   client.print("Content-Type: application/x-www-form-urlencoded\n");
   client.print("Content-Length: ");
   client.print(postStr.length());
   client.print("\n\n");
   client.print(postStr);
   delay(1000);
   
   }
   sent++;
 client.stop();
}

Buongiorno,
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… 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 rileggere con MOLTA attenzione il su citato REGOLAMENTO ... Grazie. :slight_smile:

Guglielmo

P.S.: Qui una serie di link utili, NON necessariamente inerenti alla tua domanda:
- serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections
- pinout delle varie schede by xxxPighi: Pinout
- link generali utili: Link Utili

Innanzitutto grazie mille per l'aiuto, hai perfettamente ragione! Mi sono appena presentato, scusate ancora.
Forse ripensandoci sarebbe meglio eliminare questo Topic e rifare uno più specifico, almeno proviamo a eliminare i problemi a mano a mano. Credo infatti che il mio problema sia nell'esp8266 perché quando lo collego al PC e apro il serial monitor mi manda segnali che il PC legge come caratteri alfanumerici senza senso. In più non riesco ne a flasharlo ne a caricarvi uno sketch.

>Rambo32: ... hai notato che in Megatopic c'è un thread di oltre 170 pagine interamente dedicato al ESP8266?

Nella prima pagina troverai una serie di link a guide e tutorials che quasi sicuramente ti permetteranno di trovare la risposta hai tuoi quesiti. :wink:

Guglielmo

Purtroppo già gli ho dato un'occhiata, ma vuoi la mia inesperienza, vuoi le difficoltà nel trovare le informazioni, non riesco a capire cosa succede. Ho delle lacune e non capisco se devo flashare un firmware del caso lo voglia usare standalone, non capisco perché quando è in modalità flash non si accende nessun led e non risponde, e sopratutto perchè mi manda in seriale tutti quegli strani simboli. Nessuno sembra citarli in quei post.
P.S. voglio usarlo stand alone solo per vedere se funziona, in seguito vorrei accoppiarlo ad Arduino ma attualmente non compila.

La guida da seguire all'inizio è quella di SukkoPera (utente piuttosto attivo su questo forum) ... ovvero QUESTA.

Ti da tutte le info per iniziare, specie per problemi di alimentazione, di connessione, di adattamento dei livelli, ecc ecc

Prova a studiarla con attenzione :wink:

Guglielmo

Purtroppo me la sono già studiata tutta, sto provando e riprovando i procedimenti ma manca un'adeguata risoluzione dei problemi. Il mio modulo a volte non sembra accendersi, altre volte non riceve i segnali, non riesco a capire cosa succede perché non è spigato da nessuna parte.

Ma come lo hai collegato ad Arduino ?

perchè c’e’ questa che non mi torna

#include <SerialESP8266wifi.h>

Ho collegato tx e rx, con dei diodi in modo da essere sicuro da abbassare il voltaggio. Il problema è che l'esp8266 non mi funziona neanche in standalone. Se uso l'adattatore tll e collego: Vc e EN -->3.3V, GND-->GND, TX-->RX,RX-->TX, la luce blù si accende e spegne subito. Ieri almeno rimaneva fissa blù e mandava stranissimi segnali in seriale, oggi si spegne subito. Non riesco a farlo accendere correttamente, o almeno a capire se è funzionante o l'ho bruciato.

Io ti ho chiesto " come lo hai collegato ad Arduino" e tu mi rispondi
Ho collegato tx e rx, con dei diodi in modo da essere sicuro da abbassare il voltaggio
Non è una risposta

in quanto all'adattatore TTL
E' normale che la luce blu faccia un lampeggio solo quando lo connetti

poi, se con ci dici di più, è dura aiutarti

Scusa, sono abbastanza neofita.
Allora i collegamenti con Arduino quando li ho usati insieme erano 3.3V–>vcc,gnd–>gnd,TX–>2x1N400X–>TX,RX–>2x1N400X–>RX.

Con l’adatttore TLL fa un solo lampeggio, ma poi da serial non risponde ai comandi AT e non da segni di vita.
Chiedimi pure altro, non ho idea di cos’altro possa provare.

Attenzione aggiornamento: a 74880 baud, dopo il reset mi manda in seriale:
ets Jan 8 2013,rst cause:2, boot mode:(7,6)

waiting for host

Cosa significa? Tuttavia continua a non rispondere a comandi AT.

Aggiornamento 2: ho letto una guida dove per risolvere questo problema dicevano di mettere GPI15 a Gnd. L'ho fatto, e ora la luce blù è fissa e da serial mi dice:
Fatal exception (0):
epc1=0x40100000, epc2=0x00000000, epc3=0x00000000, excvaddr=0x00000000, depc=0x00000000

GPIO15 ??
Ma quale ESP hai ?

esp-12, è così:
esp-12

Bene, piano piano si riesce a capire qualcosa..

Visto che hai il solo modulino
Su GPIO0 e GPIO2 hai messo una resistenza di pullup ?

e i 3.3V da dove li prendi ? dall'adattatore USB ?

Rambo32:
esp-12, è così:
così funziona meglio :smiley:

No, a dir la verità GPI02 non l’ho neanche messo ai 3.3V perché sennò proprio non si accende come se fosse in corto.
Si l’aliementazione dal usb impostata a 3.3v. Ho misurato ora e sta erogando 120 mA.
Ed ora nonostante dovrebbe lavorare sui 115200 baud mi manda in seriale a 748800 :
exception (0):
epc1=0x4021058c, epc2=0x00000000, epc3=0x00000000, excvaddr=0x00000000, depc=0x00000000

Patrick non ho capito scusa.

Aggiornamento: dopo aver provato a riflashare tutto, nonostante continuasse a darmi quel problema da seriale ho provato a caricare da arduino ide un blink con il led interno. Ha funzionato! Il problema è che con questo:

#include <Adafruit_Sensor.h>

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

DHT dht(2,DHT22); //Definisco il pin al quale è collegato il sensore e il tipo

void setup()
{
  Serial.begin(9600);
  Serial.println("DHT test");
  dht.begin();
}

void loop()
{
  float h = dht.readHumidity(); // Leggo il valore di umidità
  float t = dht.readTemperature(); // Leggo il valore di temperatura
//  if (isnan(t) || isnan(h)) // Se almeno uno dei due valori è NaN (Not a Number)
//  {
//    Serial.println("Impossibile leggere il sensore!");
//  }
//  else //altrimenti
 // {
    Serial.print("Umidità: ");
    Serial.print(h);
    Serial.print(" %\t");
    Serial.print("Temperatura: ");
    Serial.print(t);
    Serial.println(" *C");
  delay(1000);  // non è necessario mettere un dalay() perchè ci vogliono due secondi per leggere i valori, quindi il serial monitor riceverà dati ogni 2 secondi.
  //}
   }

mi ha ridato il solito problema:warning: espcomm_sync failed
error: espcomm_open failed
error: espcomm_upload_mem failed
error: espcomm_upload_mem failed

ESP12.jpg

Questo per il normale funzionamento o per caricare gli sketch?

Per programmarlo devi mettere il GPIO0 a massa

ESP_Prog.jpg