Arduino i IoT: Connectar-se a una xarxa WiFi amb Arduino/ESP8266

La clau de tot projecte d’internet de les coses (IoT) és la connectivitat. El salt de qualitat que suposa passar del simple treball amb sensors a la recollida i magatzemament massius de dades, el marca la capacitat d’enviar aquesta informació a un repositori virtual en el núvol.

Aquí trobaràs la manera d’iniciar-se en l’ús d’una placa tipus D1 com la de la figura 1. Aquest dispositiu integra la flexibilitat i simplicitat de la tecnologia Arduino amb la connectivitat WiFi del mòdul ESP8266. El resultat és un dispositiu compacte low cost, molt recomanable per a iniciar-se en el món de l’IoT des de l’univers Arduino. Tanmateix, la guia es pot aplicar a la majoria de plaques basades en el xip ESP8266.

Figura 1. Placa tipus E12 D1. Compatible Arduino i basada en ESP8266

Elements necesaris:

  • Entorn Arduino IDE
  • Placa tipus WeMos D1
  • Cable micro USB
  • Xarxa WiFi

Primer de tot cal tenir el compte que la placa D1 es defineix com “compatible amb Arduino” i “basada en ESP8266“, per tant no és ni una cosa ni l’altra sinó barreja de les dues. Per tant, abans de res, caldrà preparar l’entorn Arduino IDE perquè reconegui la placa D1:

  1. Si no tenim l’Arduino IDE, caldrà descarregar-se’l d’arduino.cc i seguir les instruccions d’instal.lació.
  2. Obrir l’Arduino IDE.
  3. Anar a Archivo/Preferencias/Gestor de URLs adicionales de Tarjetas y añadimos la URL: http://arduino.esp8266.com/stable/package_esp8266com_index.json
  4. En Herramientas/Placa/Gestor de Tarjetas buscamos esp8266 by ESP8266 Community y la instalamos.
  5. Ahora ya podemos seleccionar la placa en Herramientas/Placa (Generic ESP8266 Module)
  6. Connectar la placa a l’ordinador amb el cable microUSB i en seleccionar el port adient

ESP8266: Connecting to a WiFi Network

Prova 1: esbrinar l’adreça MAC de la placa

L’adreça MAC és un nombre d’identificació fix i únic de 6 bytes obligatori en tots els dispositius actius de la xarxa, com ara l’ESP8266, que pot actuar com a emissor i receptor de dades en internet.

Com a primer test per comprovar el bon funcionament de la placa, aquest codi permet escriure l’adreça MAC del nostre dispositiu al monitor sèrie:

#include <ESP8266WiFi.h>
void setup(){
   Serial.begin(115200);
   delay(500);
   Serial.println();
   Serial.print("MAC: ");
   Serial.println(WiFi.macAddress());
}
void loop(){}

Prova 2: obtenir una llista de les xarxes WiFi disponibles

Per començar a comprovar les funcionalitats WiFi, el següent codi ens permet obtenir una llista de les xarxes WiFi que la placa detecta amb la intensitat del senyal (en dB) que es rep.

#include "ESP8266WiFi.h"
void setup() {
   Serial.begin(115200);
   int numberOfNetworks = WiFi.scanNetworks();
   for(int i =0; i<numberOfNetworks; i++){
      Serial.print("Network name: ");
      Serial.println(WiFi.SSID(i));
      Serial.print("Signal strength: ");
      Serial.println(WiFi.RSSI(i));
      Serial.println("-----------------------");
   }
 }
void loop() {}

Prova 3: establir connexió amb una xarxa WiFi

Mirem de connectar-nos a una de les xarxes WiFi disponibles, igual com ho faríem amb el nostre telèfon mòbil. En el següent codi, cal assignar a les variables ssid i password el nom de la xarxa de i la seva contrasenya, respectivament.

#include <ESP8266WiFi.h>
const char* ssid = "***********";   //per exemple "Orange-7AD4"
const char* password = "········";  //contrasenya de la xarxa WiFi
void setup(){
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
     delay(1000);
     Serial.println("Connecting..");
  }
  Serial.println(WiFi.localIP());
 }
void loop(){}

Prova 4: llegir dades d’internet

Per comprovar l’accés a internet farem la crida a un arxiu penjat a la xarxa, com ho faria un navegador amb una pàgina web. Emetent l’URL d’aquest arxiu, la xarxa ens ha de retornar una còpia del seu contingut. Aquest contingut l’escriurem al monitor sèrie.

 

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>

const char* ssid = "***********";   //per exemple "Orange-7AD4"
const char* password = "........";  //contrasenya de la xarxa WiFi
void setup() {
 
 Serial.begin(115200);
 WiFi.begin(ssid, password);
 
 while (WiFi.status() != WL_CONNECTED) {
  delay(1000);
  Serial.print("Connecting..");
 }
 if (WiFi.status() == WL_CONNECTED) { //Check WiFi connection status
  HTTPClient http;            //Declare an object of class HTTPClient
  http.begin("http://instilab.cat/iot/send.php?t1=dada1&t2=dada2");        //Specify request destination
  int httpCode = http.GET();  //Send the request
  if (httpCode > 0) {         //Check the returning code
     String payload = http.getString(); //Get the request response payload
     Serial.println(payload); //Print the response payload
  }
  http.end();                 //Close connection
  }
}
 
void loop() {}

En l’exemple es fa la crida a la URL:

http://instilab.cat/iot/send.php?t1=dada1&t2=dada2

En aquest cas el servidor retornarà un error 404 de pàgina no trobada (perquè send.php no existeix), però es podria programar un arxiu PHP que efectués l’escriptura dels valors de les variables t1 i t2 en un fitxer o bé que en fes la inserció a una base de dades mySQL prèviament definida.


			

Leave a Reply

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