Connettere Arduino a Internet

Se hai appena iniziato a lavorare con Arduino, la connessione a Internet può essere un compito molto arduo. Ricordo le mie lotte con esso nei miei primi giorni di programmazione Arduino. Con la mancanza di un’interfaccia adeguata e senza strumenti di debug integrati, può essere difficile capire dove hai sbagliato. In questo articolo, tratteremo tutto ciò che devi sapere sulla connessione della tua scheda Arduino a Internet, incluso il codice.

Quando ho iniziato a giocare con il mio Arduino Uno, ero molto orgoglioso di far lampeggiare i LED e far suonare i sensori. Ma presto ho capito che il vero potenziale di un Arduino può essere raggiunto solo dopo averlo connesso a Internet.

Praticamente qualsiasi progetto Arduino di livello intermedio o avanzato richiederà la connessione a Internet per vari motivi, che si tratti di registrare dati sul cloud come dati meteorologici o trasmettere comandi in tempo reale al tuo dispositivo da remoto, ad esempio tramite un’app sul tuo Telefono.

In questo articolo tutorial, vedremo come connettere il tuo dispositivo Arduino a Internet in modo completo. Tutto, dall’hardware al circuito e al codice, sarà coperto.

Connessione tramite Ethernet

La prima opzione per connettere Arduino a Internet è tramite un cavo Ethernet. Se stai utilizzando una scheda Arduino dotata di una porta Ethernet integrata come Arduino Yún, puoi saltare la sezione “Requisiti hardware” e la descrizione del progetto del circuito fornita di seguito. Basta collegare il cavo Ethernet al dispositivo e iniziare a programmare. Tuttavia, se, come la maggior parte delle persone, possiedi una versione più semplice di Arduino come Arduino Uno che non dispone di una porta Ethernet incorporata, dovrai acquistare un dispositivo separato chiamato “Ethernet Shield” da collegare al tuo Arduino.

Requisiti hardware

Avrai bisogno di un cavo Ethernet con Internet, una scheda Arduino Uno e uno scudo Ethernet. Ecco una descrizione del progetto del circuito.

  1. Collega l’Ethernet Shield sopra Arduino Uno.

    Figura 1: Arduino Uno e Ethernet Shield
    Figura 1: Arduino Uno e Ethernet Shield

  2. Collegare il cavo Ethernet allo schermo Ethernet.
    La Figura 1 mostra la progettazione del circuito di Arduino Uno e Ethernet Shield. Dopo aver collegato i due, il tuo Arduino Uno dovrebbe apparire come quello in Figura 2.

Il codice

Prima di iniziare con il codice per connettere Arduino a Internet, dobbiamo prima includere una libreria esterna da utilizzare nel programma. Questa libreria ci aiuterà a stabilire una connessione e inviare/ricevere dati su Internet.

Appunti: Questa libreria dovrebbe essere preinstallata con il tuo IDE. Se per qualche motivo riscontri errori, scarica questa libreria dal repository GitHub ufficiale del progetto Arduino.
#include 

Nella fase successiva, definiremo alcune costanti e variabili richieste per questo programma. Innanzitutto, abbiamo bisogno dell’indirizzo MAC. Questo è spesso stampato su un adesivo sul tuo Ethernet Shield. Successivamente, dobbiamo definire un indirizzo IP statico. Assicurati che l’indirizzo IP che stai aggiungendo non sia utilizzato da nessun altro utente. Infine, definiremo la variabile EthernetClient.

Figura 2: Ethernet Shield collegato ad Arduino Uno
Figura 2: Ethernet Shield collegato ad Arduino Uno
byte mac[] = { oxDE, oxAD, oxBE, oxEF, oxFE, oxED };
IPAddress staticIP(10, 0, 0, 20);

EthernetClient client;

Possiamo ora scrivere il metodo per la connessione a Internet. Ci sono due passaggi qui. Innanzitutto, proviamo a ottenere un IP tramite il DHCP (protocollo di configurazione host dinamico), ovvero, proviamo a recuperare il tuo IP dinamico. Se questo passaggio fallisce, ripieghiamo sull’IP statico che abbiamo definito sopra.

void connectToInternet()
{
// Step 1 - Try connecting with DHCP
If (Ethernet.begin(mac) == 0)
{
Serial.print(“[ERROR] Failed to connect via DHCP”);
Ethernet.begin(mac, staticIP); // Connect via static IP defined earlier
}
// Add a delay for initialization
delay(1000);

Serial.println(“[INFO] Connection Successful”);
Serial.print(“”);
printConnectionInformation(); // Custom method
Serial.println(“---------------------------------”);
Serial.println(“”);
}

Come puoi vedere nel codice sopra, abbiamo utilizzato un metodo personalizzato printConnectionInformation() per visualizzare le informazioni di connessione. Quindi andiamo avanti e scriviamo il codice per questo.

void printConnectionInformation()
{
// Print IP Address
Serial.print(“[INFO] IP Address: ”);
Serial.println(Ethernet.localIP());

// Print Subnet Mask
Serial.print(“[INFO] Subnet Mask: ”);
Serial.println(Ethernet.subnetMask());

// Print Gateway
Serial.print(“[INFO] Gateway: ”);
Serial.println(Ethernet.gatewayIP());

// Print DNS
Serial.print(“[INFO] DNS: ”);
Serial.println(Ethernet.dnsServerIP());
}

Infine, scriveremo le funzioni standard per il programma, ovvero, impostare() e ciclo continuo().

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

// Connect to the internet
connectToInternet();
}

void loop()
{
// Nothing much to do here.
}

Se tutto va a buon fine, dovresti vedere un output simile alla Figura 3 nella finestra Monitor seriale.

Figura 3: Connessione riuscita a Internet tramite Ethernet
Figura 3: Connessione riuscita a Internet tramite Ethernet

Connessione tramite Wi-Fi

La seconda opzione è connettere il tuo Arduino a Internet in modalità wireless tramite Wi-Fi. Se, come la maggior parte delle persone, possiedi un Arduino Uno o qualsiasi altra scheda Arduino che non ha una funzionalità Wi-Fi integrata, dovrai acquistare separatamente un “Wireless Shield”, proprio come abbiamo acquistato l’Ethernet Shield in la sezione precedente.

Se possiedi un Arduino Yún o qualsiasi altra scheda Arduino con funzionalità wireless integrate, puoi saltare i “Requisiti hardware” e la descrizione del progetto del circuito fornita di seguito e iniziare subito con il codice.

Requisiti hardware

Avrai bisogno di un Arduino Uno e di uno scudo wireless. Ecco una descrizione del progetto del circuito.

1. Collega il Wireless Shield sopra Arduino Uno.
2. Collega Arduino Uno al tuo computer tramite la porta USB.

Figura 4: Arduino Uno e Wireless Shield
Figura 4: Arduino Uno e Wireless Shield

La Figura 4 mostra il progetto del circuito di Arduino Uno e Wireless Shield. Se tutto è collegato correttamente, la tua scheda Arduino Uno dovrebbe apparire come quella in Figura 5.

Figura 5: Wireless Shield collegato ad Arduino Uno
Figura 5: Wireless Shield collegato ad Arduino Uno

Il codice

Durante la connessione a Internet tramite Ethernet, abbiamo utilizzato la libreria esterna . Allo stesso modo, per connettere Internet in modalità wireless, utilizzeremo la libreria esterna .

Appunti: Questa libreria dovrebbe essere preinstallata con il tuo IDE. Se per qualche motivo riscontri errori, scarica questa libreria dal repository GitHub ufficiale del progetto Arduino.
#include 
#include 

Successivamente, definiremo le costanti e le variabili richieste per la connessione wireless. Per la connessione con il Wi-Fi, richiediamo l’ssid e la password del Wi-Fi che utilizzeremo. Creeremo anche una variabile WiFiClient per la connessione a Internet.

char ssid[] = “Write WiFi SSID here”;
char pass[] = “Write WiFi password here”;

int keyIndex - 0;
int status = WL_IDLE_STATUS;

WiFiClient client;

Ora definiremo alcuni metodi personalizzati per la connessione e l’invio/ricezione di dati su Internet. Per prima cosa, creiamo un metodo connectToInternet() per la connessione a Internet.

void connectToInternet()
{
status = WiFi.status();

if (status == WL_NO_SHIELD)
{
Serial.println(“[ERROR] WiFi Shield Not Present”);
while (true);
}

while ( status != WL_CONNECTED)
{
Serial.print(“[INFO] Attempting Connection - WPA SSID: ”);
Serial.println(ssid);

status = WiFi.begin(ssid, pass);
}

Serial.print(“[INFO] Connection Successful”);
Serial.print(“”);
printConnectionInformation();
Serial.println(“-------------------------”);
Serial.println(“”);
}

Come puoi vedere nel codice sopra, abbiamo chiamato un metodo personalizzato stampaInformazioniConnessione() per visualizzare le informazioni della nostra connessione Wi-Fi. Quindi andiamo avanti e scriviamo quel metodo:

void printConnectionInformation()
{
Serial.print(“[INFO] SSID: ”);
Serial.println(WiFi.SSID());

// Print Router’s MAC address
byte bssid[6];
WiFi.BSSID(bssid);
Serial.print(“[INFO] BSSID: ”);

Serial.print(bssid[5], HEX);
Serial.print(“:”);

Serial.print(bssid[4], HEX);
Serial.print(“:”);

Serial.print(bssid[3], HEX);
Serial.print(“:”);

Serial.print(bssid[2], HEX);
Serial.print(“:”);

Serial.print(bssid[1], HEX);
Serial.print(“:”);

Serial.println(bssid[0], HEX);

// Print Signal Strength
long rssi = WiFi.RSSI();
Serial.print(“[INFO] Signal Strength (RSSI) : ”);
Serial.println(rssi);

// Print Encryption type
byte encryption = WiFi.encryptionType();
Serial.print(“[INFO] Encryption Type : ”);
Serial.println(encryption, HEX);
// Print WiFi Shield’s IP address
IPAddress ip = WiFi.localIP();
Serial.print(“[INFO] IP Address : ”);
Serial.println(ip);

// Print MAC address
byte mac[6];
WiFi.macAddress(mac);

Serial.print(“[INFO] MAC Address: ”);

Serial.print(mac[5], HEX);
Serial.print(“:”);

Serial.print(mac[4], HEX);
Serial.print(“:”);

Serial.print(mac[3], HEX);
Serial.print(“:”);

Serial.print(mac[2], HEX);
Serial.print(“:”);

Serial.print(mac[1], HEX);
Serial.print(“:”);

Serial.println(mac[0], HEX);
}

Infine, annotiamo le funzioni standard, ovvero setup() e loop():

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

// Connect to the internet
connectToInternet();
}

void loop()
{
// Nothing to do here
}

Evviva! Abbiamo finito con il codice Arduino per la connessione a Internet tramite Wi-Fi. Se non ci sono errori, l’output sulla finestra del monitor seriale dovrebbe essere simile all’output nella Figura 6.

Figura 6: Connessione riuscita a Internet tramite Wi-Fi
Figura 6: Connessione riuscita a Internet tramite Wi-Fi

Leave a Comment

Your email address will not be published. Required fields are marked *