Acquisto WiFi Shield

Buongiorno a tutti.

Ho la necessità di collegare la mia scheda Arduino alla mia rete Wifi (Router domestico).

Attualmente per farlo utilizzo questo codice con la Ethernet Shield:

#include <String.h>
#include <SPI.h>
#include <Ethernet.h>
#include <dht11.h>
#include "EmonLib.h"                   // Include Emon Library

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; 
byte ip[] = { 192, 168, 1, 177 }; // indirizzo IP della shield
byte gateway[] = { 192, 168, 1, 5 }; // indirizzo ip del router
byte subnet[] = { 255, 255, 255, 0 }; //subnet mask
EthernetServer server(80); 

String readString; 
boolean LEDON = false; 

/*-----( Declare objects )-----*/
dht11 DHT11;

/*-----( Declare Constants, Pin Numbers )-----*/
#define DHT11PIN 4

  void setup(){
    Ethernet.begin(mac, ip, gateway, subnet);
    pinMode(pin9, OUTPUT);
    Serial.begin(9600);
  }
  
  void loop(){
    
    EthernetClient client = server.available();
    if (client) {
     boolean currentLineIsBlank = true;
     while (client.connected()) {
       if (client.available()) {
         char c = client.read();
         readString.concat(c); 
         //Serial.print(c);
         if (c == '\n' && currentLineIsBlank) {
         
          readString = getValue(readString, ' ', 1);
           
           readString="";
           client.stop();
        
        }//FINE IF DI LETTURA 
      }//FINE IF CLIENT 
    }//FINE WHILE 
   }//FINE IF PRINCIPALE 
  }//FINE LOOP
  
  void sendHeader(EthernetClient client) {
    client.println("HTTP/1.1 200 OK");
    client.println("Content-Type: text/html");
    client.println();
   // client.print("<html><head><title>");
   // client.print(title);
   // client.println("</title><body>");
  }
  
  void sendResponseJson(EthernetClient client,float temperatura,float umidita,double corrente) {
    client.println("HTTP/1.1 200 OK");
    client.println("Content-Type: application/json");
    client.println();
    client.print("[{");
    client.print("\"TEMP");
    client.print("\": ");
    client.print(temperatura);
    client.print(",");
    client.print("\"UMID");
    client.print("\": ");
    client.print(umidita);
    client.print(",");
    client.print("\"CORRENTE");
    client.print("\": ");
    client.print(corrente);
    client.println("}]");
  }

Adesso vorrei utilizzare lo stesso codice, ma vorrei utilizzare la shield Wifi. Ovviamente questa si dovrebbe collegare direttamente al router avere un suo IP e io quindi posso scambiare dati con arduino.

Mi potreste consigliare quale componente acquistare per ciò che mi serve?

Mah ... per rimanere su uno shield standard e non stravolgere il programma, direi che ti potresti orientare sulo shield ufficiale, QUESTO ... ::slight_smile:

Trovi gli esempi di uso nell'IDE ...

Guglielmo

Per restare su hardware originale fai come consigliato da Guglielmo.

Altrimenti per abbattere i costi e semplificare le cose (sia come codice sia perché altri modulini WiFi come gli ESP8266 vanno a 3.3V per cui dovresti mettere adattatori di livello) e visto che il progetto mi sembra relativamente semplice, puoi anche provare un WeMos D1 (ad esempio QUESTO), che non è uno shield ma una board autonoma e che programmi e gestisci con l'IDE di Arduino, con lo stesso linguaggio.

Quindi gli sketch possono restare quasi identici tranne piccole differenze legate all'hardware (es. ha un solo pin analogico, e i pin digitali devi chiamarli D0, D1, D2... invece di 0,1,2...) mentre per la gestione dello stack TCP/IP hai una libreria apposita, praticamente identica a quella Ethernet. Io ne ho già usati due, e funzionano bene, tra l'altro hanno anche ben 3 mega di FLASH dove memorizzare dati (invece del 1k di Arduino Uno)...
Vedi tu.

buon intervento @docdoc

giusto due precisazioni, anche su esp puoi chiamare i pin 1,2,3 (sono i nomi dei pin reali), e poi la Uno ha 32kB di flash

@gbp01: i tuoi puntini sospensivi sono eccezionali :smiley:

Testato:
giusto due precisazioni, anche su esp puoi chiamare i pin 1,2,3 (sono i nomi dei pin reali)

Si, vero, ma 1,2,3 non corrispondono ai D1, D2, D3.
Quando ad esempio si usa 5 si intende impostare in output il GPIO5 che corrisponde al pin D3 di Arduino, mentre il D5 è il GPIO14 quindi 14. Il layout degli header segue quindi quello di Arduino se si usano i simboli D0, D1, D2 eccetera, ma in realtà sono nell'ordine GPIO 3, 1, 16, 5, 4, 14 eccetera.
Per cui uno sketch creato per Arduino va modificato mettendo la "D" davanti al numero di pin.

e poi la Uno ha 32kB di flash

Hai ragione, ho scritto male, mi riferivo all'EEPROM, utile per memorizzare informazioni che non vengono mai resettate né in assenza di alimentazione né cambiando sketch... Con la WeMos D1 abbiamo a disposizione ben 3 Mbyte, e con la libreria FS (SPIFFS) lo si può persino vedere come un file system, cosa comodissima e che per alcuni casi può evitare di dover usare una shield microSD!
!

e' normale che devi controllare a quali pin corrispondono poi realmente i numeri usati, ma e' un vantaggio in piu' in quanto a portabilita', indipendetemente dalla board usata puoi lasciare lo sketch inalterato collegandoti fisicamente ai pin giusti

l'ESP non ha 3MB di flash (non esistono flash da 3MB), lo spazio a disposizione per il programma dipende non solo da quale flash e' saldata onboard, ma anche dalla partizione che si decide usare e che va a suddividere lo spazio tra programma e spiffs

Quindi se ad esempio si prende un modulo con 4MB e si sceglie il partizionamento 3+1, ebbene solo in quel caso si puo' dire che si ha 3MB.
Ad esempio la maggior parte degli 01 supereconomici ha ancora 512kB

scusate se mi rifaccio vivo dopo una settimana, ma non avevo letto le mail di notifica.

Vi ringrazio per le risposte.

Sinceramente è un progetto iniziale e non volevo spendere molti soldi, lo shield WiFi Originale costa un pochino e a questo punto potrei optare per acquistare un AccessPOint (Che cmq devo comprare) e collegare arduino al Ethernet visto che ho anche la Shield Ethernet.

Volevo però capire se fosse possibile acquistare questa scheda:

Da quello che ho capito si dovrebbe installare su il chip XBee

O questo

è Corretto?

bircastri:
Sinceramente è un progetto iniziale e non volevo spendere molti soldi, lo shield WiFi Originale costa un pochino e a questo punto potrei optare per acquistare un AccessPOint (Che cmq devo comprare) e collegare arduino al Ethernet visto che ho anche la Shield Ethernet.

Secondo me ti conviene fare come ho fatto io per un paio di progettini, ossia usare la WeMos D1 invece di Arduino+scheda/shield Wifi.
Una WeMos D1 ti costa poco più di una decina di Euro su eBay (se prendi la D1 R1 anche meno ma è fuori produzione, anche se funziona benissimo ed è quella che ho usato io) e ti tieni Arduino per altri progetti.

Vedi tu...

@docdoc scusami, questa WeMos D1, si programma come arduino. solo che in più ha una scheda Wifi?

Ma la soluzione che avevo proposto io non potrebbe funzionare?

bircastri:
@docdoc scusami, questa WeMos D1, si programma come arduino. solo che in più ha una scheda Wifi?

Si, la WeMos D1 si programma come Arduino, perché l'ESP8266 è a tutti gli effetti programmabile autonomamente, basta installare la scheda nell'IDE di Arduino e usare così lo stesso linguaggio che già conosci (a meno di piccole variazioni, come detto soprattutto l'indirizzamento dei pin).

Diciamo che la WeMos è comoda perché è analoga a mettere un ESP8266 con un adattatore USB-seriale e un regolatore di tensione 3.3V, più pin header in configurazione simile a quella di Arduino.
Se non devi interfacciare cose che richiedano necessariamente i 5V puoi usarlo come se fosse un Arduino con WiFi integrato, per usare device a 5V devi usare adattatori di livello (anche questi poco costosi, ma a quel punto anche epr compattezza ti conviene prendere una WiFi shield tipo le economiche Keyes e metterle su un Arduino regolare).

Se vuoi saperne di più su ESP8266 leggi QUI e sul WeMos D1R2 QUI.

Ma la soluzione che avevo proposto io non potrebbe funzionare?

Certo che può funzionare, tutto dipende dai tuoi requisiti di costo, complessità e cablaggi.
Quella soluzione Ethernet + access point ha un costo superiore al solo WeMos, e con la necessità di avere un cavo Ethernet, collegalo all'AP, e alimentare l'AP.. :wink:

A me serve l'uscita 5 V perchè la devo collegare a dei rele 5v. Mi puoi dare qualche cenno in più su queste "Keyes"

Ad esempio questo (è nella mia lista di oggetti osservati ossia che prima o poi acquisterò :slight_smile: ):

Keyes ESP8266

Ma per usare le WeMos con schede relé che funzionano a 5V puoi usare dei semplici step-up/down 3.3/5V ossia convertitori bidirezionali di livello (ogni board ne ha 4, quindi per semplicità direi a patto che non si stia parlando di più di 4 cose da interfacciare) come QUESTI

non servono adattatori di livello o schede ad hoc.
In base allo standard TTL puoi usare output a 3.3V per interfacciarti a logiche 5V in modo diretto

Infatti ho detto "puoi" :slight_smile: , dipende dalla controparte e da cosa si vuole fare...

In ingresso è possibile usare output 3.3V verso input a 5V di Arduino, per il contrario si possono anche usare due semplici diodi per scendere da 5 a circa 3.3V.
Ma in generale per evitare problemi preferisco gli step up/down...

lui ha dichiarato che serve per attivare una rele' board, quindi solo output.

per fare il contrario, se c'e' in gioco una pullup basta anche un solo diodo :wink:

Salve allora (scusate se rompo sempre)

ho trovato questo modulo https://www.enovaz.com/modulo-seriale-wifi-esp8266.html

costa poco e credo sia in grado di collegarsi al router wifi di casa mia e sostituire insomma la mia scheda Ehternet che ho collegato ad arduino attualmente.

Ora questa scheda funziona a 3.3v mentre arduino va sui 5V. Mi potreste fornire uno schema per collegare questa shield ad Arduino?

Per la parte codice invece dovrei modificare la parte del Wifi giusto??? ma credo di aprire un post a parte.

grazie

>bircastri: Ma tu sai che esiste in Megatopic un intero thread di oltre 170 pagine interamnete dedicato agli ESP8266 ? .... E che a pagina 1 ci sono i link ad una serie di documenti guida per i collegamenti e l'uso ?

Perché, prima di fare certe domande, sarebbe bene fare un minimo di ricerche sul forum visto che è una domanda fatta ... alcune centinaia di volte !!!

Guglielmo