Go Down

Topic: Modulo Wi-Fi ESP8266 (Read 620868 times) previous topic - next topic

nero773

#2955
Jan 05, 2021, 07:54 pm Last Edit: Jan 05, 2021, 08:54 pm by nero773
Ho provato a caricare alcuni scketch d'esempio e sembra funzionare quasi correttamente, quando ho caricato WiFiClientStaicIP:
Code: [Select]
/*
     Example of connection using Static IP
     by Evandro Luis Copercini
     Public domain - 2017
*/

#include <WiFi.h>

const char* ssid     = "Vodafone-Home";
const char* password = "******";
const char* host     = "example.com";
const char* url      = "/index.html";

IPAddress local_IP(192, 168, 8, 170);
IPAddress gateway(192, 168, 8, 1);
IPAddress subnet(255, 255, 0, 0);
//IPAddress primaryDNS(8, 8, 8, 8); //optional
//IPAddress secondaryDNS(8, 8, 4, 4); //optional

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

  if (!WiFi.config(local_IP, gateway, subnet, primaryDNS, secondaryDNS)) {
    Serial.println("STA Failed to configure");
  }

  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected!");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
  Serial.print("ESP Mac Address: ");
  Serial.println(WiFi.macAddress());
  Serial.print("Subnet Mask: ");
  Serial.println(WiFi.subnetMask());
  Serial.print("Gateway IP: ");
  Serial.println(WiFi.gatewayIP());
  Serial.print("DNS: ");
  Serial.println(WiFi.dnsIP());
}

void loop()
{
  delay(5000);

  Serial.print("connecting to ");
  Serial.println(host);

  // Use WiFiClient class to create TCP connections
  WiFiClient client;
  const int httpPort = 80;
  if (!client.connect(host, httpPort)) {
    Serial.println("connection failed");
    return;
  }

  Serial.print("Requesting URL: ");
  Serial.println(url);

  // This will send the request to the server
  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" +
               "Connection: close\r\n\r\n");
  unsigned long timeout = millis();
  while (client.available() == 0) {
    if (millis() - timeout > 5000) {
      Serial.println(">>> Client Timeout !");
      client.stop();
      return;
    }
  }

  // Read all the lines of the reply from server and print them to Serial
  while (client.available()) {
    String line = client.readStringUntil('\r');
    Serial.print(line);
  }

  Serial.println();
  Serial.println("closing connection");
}

Si è collegato subito alla WIFI, le cose che non capisco sono 3:
  • Nel monitor seriale dovrei vedere le varie fasi di connessione, mentre quello che appare è una serie di simboli (vedi screenshot allegato).EDIT_RISOLTO Baudrate =9600
  • Nella rete io vedo l'ESP32 all'indirizzo da me scelto, ma risulta avere tutte le porte chiuse e nessun servizio disponibile. Non dovrebbe avere una Web Interface?
  • Qual'è la funzione delle 2 righe di dichiarazione "host" e "url"  nello sketch?

Molte grazie.


Tekniko

riguardo alla breadboard, ho avuto lo stesso problema, ho risolto semplicemente.... segandola in due sulla parte "scavata" (non ci sono connessioni li) .

Per quell'esempio mi pare che faccia da client, quindi semplicemente si collega a HOST e URL che imposti all'inizio del listato e stampa quello che riceve. Se vuoi connetterti a LUI, devi usarlo come SERVER.

Il baudrate é 115200 di solito 


nero773

Ciao tekniko, riguardo la breadboard penso che acquisterò un paio di mini breadboard in modo da lasciare perennemente l'ESP32 innestato, visto quanto è duro da inserire, lasciandomi la mia unica breadboard da usare per i test.
Quando ho impostato il baudrate del monitor seriale a 9600, ho cominciato a leggere correttamente dal monitor seriale. (vedi allegato)
Nei giorni che verranno, proverò (usando i diversi esempi presenti anche in questa discussione), a caricare il più classico e semplice sketch per l'accessione e spegnimento dell' onboard led tramite WIFI, BT ed app android, tanto per iniziare a capirne il funzionamento. Se ho ben capito in questo tipo di funzionamento l'ESP32 deve essere client.
E' quello che poi dovrò fare per i led di casa, accendere e spegnere da remoto, comando del fade ed eventuale spegnimento contemporaneo di tutte le luci accese. Che applicazione mi consigli di usare? Devo poter aggiungere solo dei pulsanti e la segnalazione di led acceso/spento.

Eventuali altre aggiunte (basculante garage, tende da sole, condizionatori, stufa a pellet, trasmettitori di temperatura, anemometro, crepuscolare, sensore pioggia ecc..) col tempo quando imparerò bene ad usarlo.
Per fugare eventuali malintesi preciso che, i led sono a 24Vdc, e tutti gli altri comandi sono in bassissima tensione comandati tramite contatto pulito.
Sempre gentile. Buona serata




Tekniko

#2958
Jan 05, 2021, 11:23 pm Last Edit: Jan 05, 2021, 11:27 pm by Tekniko
Blynk, senza dubbio... ad ora credo sia la piattaforma IoT piú supportata, utilizzata e con una ottima community.

Ti registri, carichi le librerie sul device e metterá in comunicazione l'app sul cellulare ed ESP32 (o qualunque cosa riesci a collegare su internet, compresi shield ethernet)

Ah, per le breadboard, ci sono i "kit" su amazon che ne danno 5 a prezzi irrisori, occhio solamente a prendere quelle da 400 punti, le 170 sono troppo piccole.
Poi siccome rimane scomodo attaccarne due a fianco per un solo ESP, valuta come ti ho detto di segarne una a metá, incastrare l'ESP in quelli interni e, per fare una cosa "fissa", togli la copertura inferiore (é un biadesivo, una parte copre i contatti mentre l'altra la puoi usare) e incollalo su una basetta di plastica, o comunque qualcosa di rigido in modo che i due pezzi non si possano piú muovere

nero773

Quote
Blynk, senza dubbio... ad ora credo sia la piattaforma IoT piú supportata, utilizzata e con una ottima community.

Ti registri, carichi le librerie sul device e metterá in comunicazione l'app sul cellulare ed ESP32 (o qualunque cosa riesci a collegare su internet, compresi shield ethernet)
Avevo già visto blynk. Se ho ben capito si possono comandare direttamente le uscite, invece quello che voglio é semplicemente fare un parallelo (sw) fra i pulsanti fisici ed il comando (impulsivo) da app e mostrare lo stato dei led. Si deve interfacciare ad un programma più complesso che opera già con ingressi fisici.

nero773

Ciao, sto provando il modulo ESP32 in abbinata a Blynk con alcuni semplici sketch:
Code: [Select]
#define BLYNK_PRINT Serial


#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
WidgetLED led1(V1);
int buttonstate = 0;

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "++++++++++++++++++++++++++++";

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "Vodafone-Home";
char pass[] = "****************";

BlynkTimer timer;

void setup()
{
  // Debug console
  Serial.begin(9600);
  pinMode (2,INPUT);
  Blynk.begin(auth, ssid, pass);
  timer.setInterval(300L,leggibt);
}

void loop()
{
  Blynk.run();
  timer.run();}

void leggibt(){
  if (digitalRead(2)){
    Blynk.virtualWrite(V10,255);
  }
  else {
    Blynk.virtualWrite(V10,0);
  }
}


Il dubbio (sicuramente dettato dalla mia inesperienza) che mi è venuto è come adattare lo sketch per il comando le strip led di casa:


Code: [Select]
int PINpb1 = 2;
int LED1 = 3;
bool StatoPB1 = LOW;
bool onClick1 = LOW;
bool StatoPB1old = LOW;
volatile int Step1 =0;
int lumin1 = 0;
int increm = 2;
unsigned long Tpress1 = 0;


void setup() {
  Serial.begin(9600);
  pinMode(PINpb1, INPUT);
  pinMode(LED1, OUTPUT);
}

void loop() {
  Serial.print ("Click=  ");
  Serial.print (onClick1);
  Serial.print ("/    Step1=  ");
  Serial.println (Step1);
  StatoPB1 = digitalRead (PINpb1);
  analogWrite(LED1, lumin1);
   
  switch (Step1){
    case 0: Spento1(); break;
    case 1: Acceso1(); break;
  }
  if ((StatoPB1 == HIGH) && (StatoPB1old == LOW)) {
    unsigned long tempoH = millis();
    StatoPB1old = StatoPB1;
    Tpress1 = tempoH;}
   
  else if ((StatoPB1 == LOW) && (StatoPB1old == HIGH)) {
   unsigned long tempoL = millis();
   StatoPB1old = StatoPB1;
   Serial.print ("Tempo on  ");
   Serial.println (tempoL - Tpress1);
   if ((tempoL - Tpress1) <= 2000) {
     onClick1 = HIGH;
     Serial.print ("/    onClick1=  ");
     Serial.println (onClick1);
     Tpress1 = tempoL;}
  }
}

void Spento1() {
  if (onClick1) {
    Step1 = 1;
    lumin1 = 200;
    onClick1 = LOW;
  }
}

void Acceso1() {
  if (onClick1) {
        Step1 = 0;
        lumin1 = 0;
        onClick1 = LOW;
   }   
  else if (StatoPB1 && (millis() - Tpress1 > 2000)) {
    Fade();   
   }
}       
void Fade() {
  bool fadePause;
  int t1 = 0;
  Serial.println ("/  FADING  ");
  if (StatoPB1) {
   
    if (!fadePause) {
      lumin1 = lumin1 + increm;
      if (lumin1 <= 0 || lumin1 >= 255) {
        increm = -increm;
        fadePause =1;
        t1 = millis();
      }
   }
  if (fadePause && (millis()-t1 > 50)) {
    fadePause = 0;
  }
}
}


 che ho sviluppato (con tanta fatica) su UNO (lasciando perdere il cambiare pin e l'uso di analogWrite che sò già come modificare). In tutti i tutorial che ho visto, avvisano che usando Blynk, nel void loop()  non si possono eseguire alcuni comandi (p.e. comandare le uscite), pena la distruzione dell'HW.
Visto che buona parte dello sketch che ho creato è interamente sviluppato nel loop, come dovrei comportarmi per la conversione? Esiste un tool?
Grazie

gpb01

Non uso Blynk e trovo estramente inaffidabili queste soluzioni che dipendono da un servizio di terze parti come quello, per cui ... NON posso aiutarti.

Io usavo o il BT o il WiFi che è presente su ESP32 e scrivevo io l'applicazione ... magari, tramite il WiFi, usando la libreria Webbino e controllando il tutto con pagine Web che così funziona sia da mobile che da desktop :)

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

nero773

#2962
Jan 06, 2021, 10:13 pm Last Edit: Jan 06, 2021, 10:32 pm by nero773
Ciao Guglielmo, ho provato a cercare info su webbino. Sembra parecchio complicato x me. In sostanza usi un Arduino come web server. Non ho trovato niente riguardo l'interfaccia, che tipo di app hai creato? E su quale supporto gira?

EDIT : se ho ben capito hai fatto delle pagine web interattive linkare alle istituzioni di arduino.
Cosa hai usato  per creare le pagine? Io a malapena ho provato ad usare  dei CMS tantissimi anni fa, ma dubito possano essere usati per questi scopi.

Tekniko

beh non é che non puoi usare il loop(), piú che altro non ci dovresti mettere nulla che allunghi troppo il tempo di esecuzione di un singolo loop, infatti spingono molto sull'utilizzo della loro libreria timer, in modo da impostare funzioni "esterne" al loop che vengono chiamate da questi timers, ed é praticamente vietato usare delay().

Da quella poca esperienza che ho, non mi pare che quello che hai scritto nel tuo listato all'interno di loop() possa dare problemi

Poi certo... scrivere tutto a mano é sempre il top ma.... avere tempo e conoscenze....

nero773

>Teknico , sicuramente quando arrivano le breadboard farò qualche prova con blynk. Ma é interessante anche lo spunto che ha suggerito Guglielmo, un web server tutto tuo che lavora solo sulla tua wifi senza dipendere da servizi di terze parti; sto cercando di reperire informazioni/esempi sulle librerie webbino per vedere se FVGsono alla mia portata e quanto la webui é configurabile. Ho visto alcuni esempi di web server con Arduino dove devi scrivere nello sketch anche le caratteristiche della web Page, tasti, colori, animazioni ecc.. .

Tekniko

Sono sicuro che é la soluzione migliore alla fine, un pó come utilizzare le stringhe del C al posto della classe String  :)
Maaaaa... come ho detto sopra... tempo e conoscenze  :smiley-lol: (e pure memoria necessaria per la pagina a questo punto).


Blynk é la classica cosa che va ( piú o meno), é alla portata di tutti e il tempo necessario come curva di apprendimento é abbastanza breve (e comunque puoi impostare manualmente alcune cose, cosa che preferisco, come tutta la parte di connessione del wifi invece di usare il suo Blynk.connect(ssid, pwd)).


D'altro canto non é gratis: ogni tasto/led/display/ecc sulla APP ha un "costo energia", di base (gratis) hai una "quantitá di energia" sufficiente per fare alcune prove, ma certo per progetti piú complessi o per piú progetti, ti tocca pagare.
Oltre a questo come dice gpb passa per server esterni (hanno rapinato un casinó a Las Vegas ultraprotetto connettendosi ad un sensore di temperatura dell'acquario lasciato con le impostazioni standard.... non sará certo il tuo caso immagino, ma é una cosa che fa pensare)

gpb01

#2966
Jan 07, 2021, 04:44 am Last Edit: Jan 09, 2021, 10:03 am by gpb01
Ovviamente per usar Webbino occorre avere un minimo di conoscenza anche dell'HTML e saper disegnare, per quanto semplici, delle pagine HTML.

E' una libreria che, tramite un file di configurazione (che è nella sottocartella src), permette di selezionare l'hardware che si utilizza. Attualmente supportati sono:

- WIZ5100
- WIZ5500
- ENC28J60
- ENC28J60_UIP
- ESP8266 (visto come modulino WiFi connesso ad Arduino)
- ESP8266_STANDALONE (modulo a se stante in cui gira l'intera applicazione)
- WIFI (ESP32 modulo a se stante in cui gira l'intera applicazione)
- WIFI101
- FISHINO
- DIGIFI

Per capire bene come si usa occorre studiarsi tutti i vari esempi che sono a corredo della libreria. Io consiglio sempre di partire dal classico esempio "LEDcontrol" che, con un "radio button" su una paginetta web, permette di vedere lo stato attuale di un LED e di commutarlo.

Con le dovute limitazioni, causa la pochissima memoria, è comunque utilizzabile anche con Arduino UNO, una scheda di rete e, magari, una scheda SD dove memorizzare le pagine HTML (che, comunque, possono risiedere anche in flash).  Con ESP8266/ESP32 standalone da il massimo grazie alla quantità di memoria disponibile su dette schede ed alla possibilità di memoriazzare le pagine HTML anche in SPIFFS (ormai deprecato) o in LittleFS (file system attuale), oltre che, ovviamente, su flash o su SD esterna.

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

nero773

>tekniko  :) non é certo il mio caso, qui non c'è trippa per gatti. Avevo già comunque pensato, nel caso usassi blynk di pagare per energia extra, non é molto dispendioso (se resta una tantum).


>Gpb01 purtroppo l' HTML non lo conosco (così come il C++) ma penso che perdendoci un po' di tempo, scopiazzando qua e là qualcosa di grezzo e basilare riesco a tirare fuori. Le poche esperienze che ho fatto nel web authoring, per mia conoscenza, sono state fatte con CMS o kompozer su dominio free di Altervista. Usando questi tools non serve avere particolari conosce in HTML. Sarebbe stato più semplice creare la pagina tramite kompozer per poi linkarci le funzioni di Arduino, ma non sembra essere così. 
Riguardo lo spazio d'archiviazione, ho visto che ci. Sono dei moduli sd da pochi euro, all'occorrenza potrei provare ad inserirlo.
Ho trovato la pagina di webbino su GitHub, appena possibile darò comunque un occhiata agli esempi e proverò a fare qualcosa.
Grazie ad entrambi e buona giornata.

gpb01

KompoZer va benissimo ... usando Webbino NON devi fare altro che disegnare la pagina e mettere dei TAG identificativi (ovvero tue paole chiave chiuse tra due simboli # o $ a seconda della versione di Webbino) che saranno poi quelli che automaticamente verranno modificati dalla libreria.

Ripeto ancora ... STUDIARE gli esempi ... sono abbastanza chiari :)

Per domande ... c'è l'apposito THREAD dove chi di noi lo conosce e lo usa, o l'autore stesso (Sukkopera qui sul forum), fornisce supporto :)

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

nero773

Quote
Ripeto ancora ... STUDIARE gli esempi ... sono abbastanza chiari :)
Ho iniziato a guardare LedControl :o, qualcosa riesco a capirlo ma parecchie cose no. :smiley-sweat: Piano Piano....

Go Up