• No se han encontrado resultados

TREBALL DE FI DE GRAU COMPARATIVA ENTRE XIPS WIFI DE BAIX COST: ESP32 VS ESP8266. APLICACIÓ A UNA XARXA DOMÒTICA. Curs 2020/2021

N/A
N/A
Protected

Academic year: 2022

Share "TREBALL DE FI DE GRAU COMPARATIVA ENTRE XIPS WIFI DE BAIX COST: ESP32 VS ESP8266. APLICACIÓ A UNA XARXA DOMÒTICA. Curs 2020/2021"

Copied!
168
0
0

Texto completo

(1)

i

TREBALL DE FI DE GRAU

COMPARATIVA ENTRE XIPS WIFI DE BAIX COST: ESP32 VS ESP8266. APLICACIÓ A UNA XARXA DOMÒTICA

Grau en Enginyeria Electrònica Industrial i Automàtica

Curs 2020/2021

Memòria

Autor: David García Martínez

Director: Antoni Escobet Canal

Convocatòria: Juny 2021

(2)

ii

(3)

iii

Resum

En aquest projecte portarem a la pràctica diferents casos d’estudi (demostracions) que ens serviran per explorar la connectivitat sense fils presentada en els xips WiFi de baix cost que farem servir: MKR WIFI 1010 i LOLIN D1 mini.

En total es presentaran set aplicacions diferents, amb diversos grau de dificultat i complexitat. La idea del projecte és que, a mesura que anem avançant, puguem aplicar conceptes que hem anat veient en aplicacions anteriors. D’aquesta manera arribarem a la demostració final, en la qual es portarà a la pràctica una combinació de tots els coneixements adquirits, fent possible la creació d’una xarxa domòtica.

La xarxa domòtica estarà formada per un Arduino MKR WIFI 1010, que actuarà com a servidor, creant i gestionant la xarxa, i un parell de LOLIN D1 mini que actuaran com a clients. Aquests es connectaran a la xarxa creada pel servidor i li subministraran dades.

Un altre repte d’aquest projecte és el de determinar distàncies i velocitats màximes de la connexió sense fils, analitzant l’abast i les prestacions que ens proporcionen els dos xips.

Primer amb la comparació de les característiques proporcionades pels fabricants i, després, amb una aplicació pràctica per comprovar-ho en la realitat.

La programació dels dos xips estarà basada en l’IDE que ens proporciona Arduino.

Paraules clau: MKR WiFi 1010, LOLIN D1 mini, Arduino, WiFi, domòtica, IoT, I2C.

(4)

iv

Resumen

En este proyecto llevaremos a la práctica distintos casos de estudio (demostraciones) que nos servirán para explorar la conectividad inalámbrica presentada en los chips WiFi de bajo coste que utilizaremos: MKR WIFI 1010 i LOLIN D1 mini.

En total se presentarán siete aplicaciones diferentes, con distinto grado de dificultad y complejidad. La idea del proyecto es que, a medida que se avanza, podamos aplicar conceptos que se han ido viendo en aplicaciones anteriores. Con esta forma de proceder llegaremos a la demostración final, en la cual se llevará a la práctica una combinación de todos los conocimientos adquiridos, haciendo posible la creación de una red domótica.

Dicha red estará formada por un Arduino MKR WIFI 1010, que actuará como servidor, creando y gestionando la red, y un par de LOLIN D1 mini que actuarán como clientes.

Estos se conectarán a la red creada por el servidor y le subministrarán datos.

Otro reto de este proyecto es el de determinar distancias y velocidades máximas de la red inalámbrica, analizando el alcance y las prestaciones que nos proporcionan los dos chips.

Primero con la comparación de las características proporcionadas por los fabricantes y, después, con una aplicación práctica para comprobarlo en la realidad.

La programación de los dos chips estará basada en el IDE que nos proporciona Arduino.

Palabras clave: MKR WiFi 1010, LOLIN D1 mini, Arduino, WiFi, domótica, IoT, I2C.

(5)

v

Abstract

In this project, different case studies (demonstrations) are shown in order to explore the wireless connectivity presented in the low-cost WiFi chips that have been used: MKR WIFI 1010 and LOLIN D1 mini.

A total of seven different applications are presented, with different degrees of difficulty and complexity. The idea of the project is that as it progresses, concepts that have been seen in previous applications, can be applied. In this way of proceeding, the final demonstration will be reached, in which a combination of all the knowledge acquired will has been put into practice, making it possible to create a home automated network.

This network it is formed by an Arduino MKR WIFI 1010, which acts as a server, creating and managing the network, and a pair of LOLIN D1 mini that act as clients. Being connected to the created network by the server and supplying data.

There has been a setback in the determination of the maximum distance and speed of the wireless network, the analysis of the range and performance provided by both chips. First with a comparison of the characteristics provided by the manufacturers and then with a practical application to test it in reality.

The programming of both chips is based on the IDE provided by Arduino.

Keywords: MKR WiFi 1010, LOLIN D1 mini, Arduino, WiFi, Home automation, IoT, I2C.

(6)

vi

(7)

vii

Agraïments

En primer lloc m’agradaria donar les gràcies a tota la meva família per tota la confiança que han dipositat en mi, per tots els ànims que m’han donat i per tot el suport que he rebut des de sempre. També voldria agrair a tots els bons professors que m’he trobat durant tota la meva formació l’ajuda desinteressada que m’han donat sempre, gràcies a la qual m’he format com a estudiant.

Pel que fa a la realització del projecte, voldria donar les gràcies primerament al meu tutor Antoni Escobet Canal, per proposar-me un projecte relacionat amb el que li vaig demanar que m’agradaria fer i, sens dubte, per tot el temps que ha dedicat en mi per aportar-me idees i millores. També vull agrair a la meva parella Andrea Pérez Martínez i als meus amics Iago Águila Cifuentes i Jordi Moreso Milan tot el suport a nivell emocional que m’han donat per treure endavant aquest projecte.

Finalment, agraeixo a tots els meus companys i amics d’esport l’ajuda que m’han donat esportivament i emocional.

Gràcies,

David García Martínez

(8)

viii

(9)

ix

Índex General

Resum ______________________________________________________________ III Resumen ____________________________________________________________ IV Abstract _____________________________________________________________ V Agraïments __________________________________________________________ VII 1. Prefaci ___________________________________________________________ 1

1.1. Origen del treball _______________________________________________ 1 1.2. Motivació _____________________________________________________ 2 2. Introducció _______________________________________________________ 3 2.1. Objectius del treball _____________________________________________ 3 2.2. Abast del treball ________________________________________________ 4 2.3. Justificació ____________________________________________________ 4 2.4. Capítols i estructura de la memòria _________________________________ 6 3. Desenvolupament del programari mitjançant Arduino ____________________ 8 3.1. Preparació. Instal·lació de l’ESP8266 en l’IDE d’Arduino _______________ 9 3.2. Preparació. Instal·lació de l’ESP32 en l’IDE d’Arduino ________________ 11 3.3. Configuració del mòdul WiFi amb l’ESP8266 i ESP32 ________________ 12 4. Connexió de l’ESP8266 i ESP32 a una xarxa WiFi en mode STA __________ 13 4.1. Desenvolupament del codi (connexió STA) _________________________ 13 4.2. Aplicacions de l’ESP8266 i ESP32 en mode STA ____________________ 16 4.2.1. Primera aplicació: Controlar estat LED BUILTIN (ESP8266 i ESP32) 16 4.2.2. Desenvolupament del codi [Primera aplicació] ___________________ 17 4.2.3. Segona aplicació: Visualitzar la temperatura i humitat mitjançant el sensor DHT11 i un servidor web (ESP8266 i ESP32) __________________________ 20 4.2.4. Desenvolupament del codi [Segona aplicació] ____________________ 24 5. Connexió de l’ESP8266 i ESP32 a una xarxa WiFi en mode AP ___________ 28 5.1. Desenvolupament del codi (connexió SoftAP) _______________________ 29

(10)

x 5.2. Aplicacions de l’ESP826 i ESP32 en mode SoftAP ___________________ 32 5.2.1. Primera aplicació: Alarma amb pantalla LCD, teclat i WiFi (ESP32) __ 32 5.2.2. Desenvolupament del codi [Primera aplicació] ___________________ 40 5.2.3. Segona aplicació: Control LED RGB amb pantalla OLED (I2C) i WiFi (ESP8266) _______________________________________________________ 45 5.2.4. Desenvolupament del codi [Segona aplicació] ____________________ 61 5.2.5. Ampliació: zeRGBa (Blynk) _________________________________ 63 5.2.6. Ampliació: rgbActuator (AllThingsTalk Maker) __________________ 66 6. Aplicació final conjunta en mode AP + STA: Estació Meteorològica ________ 68 6.1. Coneixements teòrics previs _____________________________________ 77 6.2. Desenvolupament del codi [Aplicació final] _________________________ 81 7. Estudi i anàlisi de les xarxes ________________________________________ 85 8. Anàlisi de l’impacte ambiental______________________________________ 129 Conclusions ________________________________________________________ 135 Pressupost _________________________________________________________ 138 Bibliografia ________________________________________________________ 141

(11)

xi

Índex d’Imatges

Imatge 3.1. Cerca de LOLIN D1 mini al “Gestor de tarjetas” amb configuració per defecte

Imatge 3.2. Introducció d’URL a “Preferencias” per a la posterior cerca de LOLIN D1 mini

Imatge 3.3. Descàrrega del paquet ESP8266 vàlid per a la configuració de LOLIN D1 mini

Imatge 3.4. LOLIN D1 mini triada com a placa per a poder-la programar

Imatge 3.5. Descàrrega del paquet Arduino SAMD Boards vàlid per a la configuració del MKR WiFi 1010

Imatge 3.6. Arduino MKR WiFi 1010 triada com a placa per poder-la programar Imatge 4.1. Diagrama de flux (configuració STA)

Imatge 4.2. Estats de la connexió que retorna la funció WiFi.status() [3]

Imatge 4.3. Connexió establerta mostrada pel port sèrie Imatge 4.4. Connexió amb la xarxa domèstica satisfactòria

Imatge 4.5. Servidor web des del qual modifiquem l’estat del LED BUILTIN

Imatge 4.6. Informació proporcionada pel port sèrie quan es realitzen accions a la web Imatge 4.7. Exemple gràfic de la part pràctica realitzada [6]

Imatge 4.8. Diagrama de flux (LED BUILTIN)

Imatge 4.9. Primera aplicació: LED BUILTIN encès en ESP32 i ESP8266, respectivament

Imatge 4.10. Primera aplicació: LED BUILTIN apagat en ESP32 i ESP8266, respectivament

Imatge 4.11. Esquema elèctric amb resistència PULL-UP[15]

Imatge 4.12. Exemple interpretació Resistència SMD [14]

(12)

xii Imatge 4.13. Exemple de muntatge en ESP8266

Imatge 4.14. Ruta d’accés per instal·lar qualsevol llibreria Imatge 4.15. Instal·lació llibreria “DHT sensor library”

Imatge 4.16. Connexió amb la xarxa domèstica satisfactòria Imatge 4.17. Segona aplicació: Informe del temps en directe Imatge 4.18. Diagrama de flux (TEMPERATURA I HUMITAT) Imatge 5.1. Exemple gràfic de la connexió AP (ESP32) [10]

Imatge 5.2. Diagrama de flux (configuració SoftAP) Imatge 5.3. Creació de la xarxa satisfactòria (ESP32) Imatge 5.4. Creació de la xarxa satisfactòria (ESP8266) Imatge 5.5. Exemple de muntatge a la placa ESP32 Imatge 5.6. Càrrega del programa a la placa Arduino Imatge 5.7. Pantalla inicial del programa

Imatge 5.8. Compte enrere previ a l’activació de l’alarma Imatge 5.9. Alarma activada + LED verd encès

Imatge 5.10. Alarma encesa + LED vermell encès

Imatge 5.11. Alarma encesa + LED vermell encès + Missatge d’error Imatge 5.12. Introducció de la contrasenya actual

Imatge 5.13. Introducció de la contrasenya nova

Imatge 5.14. MKR 1010 WiFi creant xarxa en mode softAP

Imatge 5.15. Interfície del servidor web de l’alarma amb WiFi (App Inventor) Imatge 5.16. Diagrama de flux (ALARMA)

Imatge 5.17. Exemple de muntatge a la placa ESP8266 Imatge 5.18. Pantalla de presentació a l’OLED SSD1306

(13)

xiii

Imatge 5.19. SSID + Direcció IP de la xarxa creada amb ESP8266

Imatge 5.20. Transició de colors per indicar la creació satisfactòria de la xarxa Imatge 5.21. Interfície pàgina web control RGB

Imatge 5.22. Interfície pàgina web per al color vermell Imatge 5.23. Cadena que enviem des del servidor Imatge 5.24. Representació gràfica model RGB [54]

Imatge 5.25. Representació colors RGB en numeració hexadecimal Imatge 5.26. Representació bus I2C [58]

Imatge 5.27. Adreça pantalla OLED per a connexió amb I2C Imatge 5.28. PinOut MKR 1010 WiFi [60]

Imatge 5.29. PinOut LOLIN (Wemos) D1 mini [61]

Imatge 5.30. Exemple gràfic d’una trama amb bus I2C [58]

Imatge 5.31. Representació gràfica d’1K de memòria amb pàgines, columnes i dades [57]

Imatge 5.32. PinOut pantalla LCD (cada rectangle conté una quadricula de 5 x 8 píxels) [57]

Imatge 5.33. PinOut pantalla LCD amb adaptador I2C [57]

Imatge 5.34. PinOut pantalla OLED amb I2C [57]

Imatges 5.35. i 5.36. Representació gràfica senyal PWM [62][64]

Imatge 5.37. Exemple gràfic de l’estil CSS mitjançant un enllaç [19]

Imatge 5.38. Diagrama de flux (CONTROL RGB)

Imatge 5.39. Arquitectura de funcionament de l’app Blynk [66]

Imatge 5.40. Passos per configurar el Widget zeRGBa

Imatge 5.41. Selecció de l’actuador adequat per configurar el programa Imatge 5.42. Selecció del color verd en la roda selectora de colors

(14)

xiv Imatge 6.1. Proposta de muntatge a les diferents plaques ESP8266 i la ESP32

Imatge 6.2. Exemple de muntatge a la placa ESP32

Imatge 6.3. Exemple de muntatge a la placa ESP8266 amb LED blau Imatge 6.4. Exemple de muntatge a la placa ESP8266 amb LED groc Imatge 6.5. Pantalla de presentació a l’OLED SSD1306

Imatge 6.6. SSID + Direcció IP de la xarxa creada amb ESP32 Imatge 6.7. Menú per controlar la visualització de la informació Imatge 6.8. Estació meteorològica en funcionament

Imatge 6.9. Visualització de la data i l’hora

Imatge 6.10. Clients connectats satisfactòriament al servidor Imatge 6.11. Connexió no establerta amb el servidor

Imatge 6.12. Connexió establerta amb el servidor + enviament d’informació del LOLIN blau

Imatge 6.13. Informació rebuda al servidor en forma d’URL Imatge 6.14. Model OSI [72]

Imatge 6.15. Diagrames de flux (ESTACIÓ METEOROLÒGICA) Imatge 7.1. Parts de la placa de desenvolupament [27]

Imatge 7.2. SNR a l’habitació 1 [30]

Imatge 7.3. SNR a l’habitació 2 [30]

Imatge 7.4. Bandes ISM [32]

Imatge 7.5. Regions de la UIT (Unió Internacional de les Telecomunicacions) [33]

Imatge 7.6. Representació gràfica de la banda de 2,4 GHz [36]

Imatge 7.7. Representació gràfica de la banda de 5 GHz [36]

(15)

xv

Imatge 7.8. Signal Strength a la botiga Play Store Imatge 7.9. Informació de la xarxa ESP32

Imatge 7.10. Informació de la xarxa ESP32 (gràfic) Imatge 7.11. Informació de la xarxa ESP8266

Imatge 7.12. Informació de la xarxa ESP82666 (gràfic) Imatge 7.13. Informació de la xarxa domèstica

Imatge 7.14. Informació de la xarxa domèstica (gràfic)

Imatge 7.15. Comparació de les xarxes amb el sistema operatiu Android

Imatge 7.16. Informació de la xarxa ESP32 a una distància de 9,5 metres lliure d’obstacles (gràfic)

Imatge 7.17. Informació de la xarxa ESP8266 a una distància de 9,5 metres lliure d’obstacles (gràfic)

Imatge 7.18. Informació de la xarxa domèstica a una distància de 9,5 metres lliure d’obstacles (gràfic)

Imatge 7.19. Informació de la xarxa ESP32 a una distància de 9,5 metres amb obstacles (gràfic)

Imatge 7.20. Informació de la xarxa ESP8266 a una distància de 9,5 metres amb obstacles (gràfic)

Imatge 7.21. Informació de la xarxa domèstica a una distància de 9,5 metres amb obstacles (gràfic)

Imatge 7.22. Informació de totes les xarxes disponibles

Imatge 7.23. Representació gràfica de l’ample de banda de l’ESP32 (rosa) i l’ESP8266 (blau)

Imatge 7.24. Representació gràfica del senyal en dBm de l’ESP32 (rosa) i l’ESP8266 (blau)

(16)

xvi Imatge 7.25. Recollida de dades del senyal emès per l’ESP32

Imatge 7.26. Recollida de dades del senyal emès per l’ESP8266

Imatge 7.27. Representació gràfica de tots els senyals disponibles a la banda ISM de 2,4 GHz

Imatge 7.28. Representació gràfica de tots els senyals disponibles a la banda ISM de 5 GHz

Imatge 7.29. Informació de la xarxa creada per l’ESP32 i l’ESP8266

Imatge 7.30. Representació gràfica de l’ample de banda de l’ESP32 (verd) i l’ESP8266 (blau)

Imatge 7.31. Representació gràfica del senyal en dBm de l’ESP32 (verd) i l’ESP8266 (blau)

Imatge 7.32. Recollida de dades del senyal emès per l’ESP32 Imatge 7.33. Recollida de dades del senyal emès per l’ESP8266 Imatge 7.34. Informació de la xarxa creada per l’ESP32 i l’ESP8266

Imatge 7.35. Representació gràfica de l’ample de banda de l’ESP32 (verd) i l’ESP8266 (blau)

Imatge 7.36. Representació gràfica del senyal en dBm de l’ESP32 (verd) i l’ESP8266 (blau)

Imatge 7.37. Recollida de dades del senyal emès per l’ESP32 Imatge 7.38. Recollida de dades del senyal emès per l’ESP8266 Imatge 8.1. Directiva RoHS i marca CE [81]

Imatge 8.2. Directiva RoHS + marca CE i FCC en Arduino

(17)
(18)

1

1. Prefaci

En el següent apartat es realitzarà una breu presentació del Treball de Fi de Grau (TFG) per posteriorment explicar per què s’ha triat aquest tema i l’origen de la idea que ha permès la seva realització.

1.1. Origen del treball

El treball rep el nom de Comparativa entre Xips WiFi de Baix Cost: ESP32 vs ESP8266.

Aplicació a una Xarxa Domòtica. En el sisè quadrimestre de la carrera que estic cursant, Enginyeria Electrònica Industrial i Automàtica, es troba l’assignatura anomenada

“Informàtica Industrial”, en la qual em vaig introduir per primer cop en el món d’Arduino.

Informàtica Industrial em va cridar moltíssim l’atenció, ja que vaig poder veure part del potencial que tenen els microcontroladors. Fins a aquell moment la programació no em cridava gens l’atenció, però quan vaig veure diferents exemples pràctics realitzats amb Arduino, em vaig adonar de l’enorme potencial que aquests ofereixen. Això va despertar en mi un enorme interès, ja que vaig veure que la programació d’aquests dispositius mitjançant Arduino és apta per a gent amb poca experiència (com era el meu cas) i per a gent experta. La versatilitat dels microcontroladors és tal que el límit el poses tu.

No conforme amb tot el que vaig aprendre en aquell quadrimestre, vaig fer recerca de coneixements nous a casa per portar a terme petits projectes que trobava a Internet ja que, si per una cosa destaca Arduino, és per l’enorme suport que té per part de tots els usuaris que el fan servir. Amb l’arribada de l’elecció de tema per al TFG, vaig veure clarament que era el meu moment per fer un projecte basat en la plataforma de desenvolupament esmentada.

Va ser aleshores quan vaig contactar amb el professor d’Informàtica Industrial Antoni Escobet Canal, al qual li va semblar bona idea el treball. Ell em va suggerir fer un projecte en el qual es treballés amb la connectivitat sense fils que ofereixen els xips que vam fer servir en la seva assignatura. Així doncs, he pogut potenciar tots els coneixements que ja tenia sobre Arduino i crear diferents aplicacions que em permeten demostrar l’eficàcia i utilitat del WiFi.

D’aquesta manera neix el títol del meu projecte, en el qual, com el seu propi nom indica, comparo els dos xips mitjançant diferents aplicacions domòtiques.

(19)

2

1.2. Motivació

La motivació que sustenta el desenvolupament d’aquest treball és molt simple: es tracta de les meves ganes d’aprendre i d’ampliar coneixements sobre un tema que considero interesant, important i que, sobretot, m’agrada. Motius que fan que estigui àmpliament motivat en la presentació d’un TFG que em pot servir com a base de nous projectes en un futur com a enginyer.

El tema escollit m’inspira moltíssim a aconseguir el meu objectiu, ja que, com he comentat anteriorment, es tracta d’un projecte basat en una plataforma de desenvolupament que no té límits. Això fa que continuï aprenent de forma constant a mesura que avanço en el treball, de forma que les meves ganes de continuar no paren de créixer, i em poden servir per a un futur, aplicant tots els coneixements adquirits a gran escala.

(20)

3

2. Introducció

Seguidament s’explicaran els objectius i l’abast del treball realitzat. Així, es pretén donar a conèixer d’una forma més tècnica les metes del projecte abans de començar amb el seu desenvolupament.

2.1. Objectius del treball

L’objectiu principal del projecte és demostrar, mitjançant diferents exemples pràctics, el potencial que ens ofereix un sistema connectat a la xarxa. Per poder realitzar les demostracions presentarem els mòduls ESP32 i ESP8266, els quals ens permetran treballar amb el WiFi. Per tant, analitzarem totes les possibilitats que aquests mòduls ens ofereixen, presentarem diferents circuits de prova per poder connectar-los a Arduino, veurem amb quines comandes es programa cadascun dels mòduls i realitzarem una comparativa entre ells.

En cada demostració farem servir material divers com pantalles LCD o OLED, sensors de temperatura, d’ultrasons o temperatura i humitat, LED’s RGB i LED’s normals, polsadors o resistències. Per tant, també serà objectiu del treball proporcionar explicacions detallades del funcionament de cada dispositiu amb què es treballa. La idea és alternar explicacions teòriques amb demostracions contínuament ja que, a mesura que anem avançant, la dificultat del projecte augmentarà, creant cada cop demostracions més sofisticades i elaborades.

Per tot plegat, serà important i necessari que es vagi entenent de forma progressiva tant el programari com el funcionament dels diferents dispositius, tenint en compte que s’aniran afegint millores i/o funcionalitats noves a cada demostració. A més a més, la presentació del codi es farà per a cada un dels dos mòduls amb què treballarem.

Sumant la totalitat de coneixements i demostracions fetes es presentarà l’última aplicació, en la qual l’objectiu serà sincronitzar els mòduls ESP32 i ESP8266 alhora, formant una aplicació domòtica conjunta.

(21)

4

2.2. Abast del treball

Per aconseguir superar satisfactòriament la totalitat dels objectius anteriorment mencionats, es buscaran diferents casos d’estudi on es plantejaran diferents reptes, tots ells amb el propòsit de demostrar l’eficàcia del programari presentat.

Gràcies a aquest projecte, veurem aplicacions reals de la Internet de les Coses (IoT) i coneixerem el funcionament de diferents sensors i perifèrics. Això ens permetrà construir una base sobre la qual estudiarem els dos microcontroladors amb WiFi.

Estudiar la capacitat de connectar-nos a una xarxa ens permetrà connectar el món físic dels sensors amb el món d’Internet, cosa que, com veurem, ens obre un enorme ventall de possibilitats.

Per tant, aquest treball ens servirà com a base per conèixer una mica més els dos microcontroladors emprats ja que, d’aquí uns anys, serà necessari tenir-los presents en el desenvolupament de l’IoT i la Indústria 4.0. Tot gràcies al seu baix cost, baix consum i, cada vegada més, la seva facilitat d’ús.

En conclusió, aquest projecte no té límits i sempre es pot seguir perfeccionant i ampliant.

Per tant, el límit l’haurem de posar nosaltres. Això implica que l’objectiu d’aquest treball sigui construir una base a partir de la qual es podrà treballar i perfeccionar en un futur, presentant a petita escala l’enorme potencial que ens ofereix un sistema connectat i la importància del seu ús en qualsevol entorn.

2.3. Justificació

Com hem pogut veure fins a aquest punt, el projecte es basa en un conjunt d'aplicacions relacionades amb la domòtica i l’IoT.

Aquestes estan estretament relacionades i aporten multitud d'avantatges. Per una banda, la domòtica és una part molt important de l'automatització, ja que aquesta ens permet automatitzar respostes o moviments de certs elements, mentre que l’IoT busca la comunicació dels elements electrònics, sensors, actuadors i qualsevol altre dispositiu mitjançant l'accés a la xarxa.

(22)

5 Amb motiu de la justificació, cal mencionar els camps d’aplicació en els quals trobem la domòtica i l’IoT [75]:

L'entorn en què normalment s'aplica la domòtica és en una casa, edifici o habitatge.

Aquestes premisses utilitzades per domotitzar edificis o habitatges s'apliquen també en entorns industrials o laborals, generant moltes possibilitats de millora en processos, facilitant el treball a les persones i estalviant en costos.

D'altra banda, la Internet de les Coses (IoT) tracta d'estendre Internet, més enllà dels ordinadors i els telèfons intel·ligents, a una àmplia gamma d'aparells, com ara electrodomèstics, processos i entorns. Per tant, consisteix en la connexió de qualsevol dispositiu amb un altre del seu voltant mitjançant Internet.

El fet que un dispositiu estigui connectat a Internet significa que pot enviar o rebre informació. Presentar aquesta capacitat és el que diferencia un dispositiu intel·ligent de la resta.

En conclusió, en tots els camps d'aplicació on podem trobar present la domòtica i l’IoT, aquestes gaudeixen de grans beneficis que ens faciliten el dia a dia. Per exemple, en un habitatge podem trobar-ne els següents [76]:

• Il·luminació: Des de qualsevol dispositiu connectat podem establir la intensitat i fins i tot el color de la llum de casa. Això permet estalviar energia quan rebem llum natural, ja que es pot arribar a regular de forma automàtica.

• Climatització Es pot controlar a distància el termòstat de cada habitació o l’aire condicionat.

• Portes automàtiques: Es pot controlar l’obertura i tancament de portes, finestres, persianes o cortines.

• Tancament i obertura: De la mateixa manera que es poden controlar remotament les portes, es poden bloquejar o obrir.

• Seguretat: Es pot controlar remotament l'accés a càmeres de vigilància per accedir a les gravacions o consultar en directe. A més a més, gràcies a la incorporació de sensors, es pot configurar l'alarma perquè detecti moviments sospitosos dins la propietat.

• Millora de la qualitat de vida: Gràcies a la recopilació de dades es pot analitzar quin ús en fem, de totes les aplicacions esmentades. Això permet que, gràcies a

(23)

6

tota la informació obtinguda, puguem saber el nostre consum i decidir si hem de baixar-lo o no.

Per acabar, en la indústria es troba molt present també l'ús d'aquestes tecnologies. De fet, la capacitat d'obtenir dades exactes en tots els processos, maquinàries i productes proporciona informació valuosa que pot ser utilitzada per optimitzar les diferents activitats i processos. Aquestes indústries connectades reben el nom d'Indústries 4.0.

Entre d’altres, aquestes empreses presenten els següents avantatges [77]:

• Millora de la traçabilitat: Cada membre de l'empresa pot conèixer en tot moment l'estat dels seus productes, per la qual cosa es poden predir adversitats.

• Reducció de costos: Gràcies a l'automatització de les cadenes de producció.

• Major productivitat i qualitat de producte: Gràcies a l'optimització dels processos industrials, ja que són més ràpids i eficients.

• Ús proactiu de les dades: Connectant les màquines a Internet es poden monitorar grans volums de dades. Això permet pronosticar errors i reduir costos de manteniment, millorar l'eficiència i la disponibilitat.

• Millora de la seguretat: En cas que hi hagi algun problema, com que els dispositius estan connectats entre ells, ho detecten i activen l'alarma per advertir tothom i evitar qualsevol mena de risc.

2.4. Capítols i estructura de la memòria

En el següent apartat es realitzarà un llistat explicatiu dels capítols en què s’ha decidit estructurar la memòria.

Capítol 1. Prefaci: Explicació sobre l’origen de la idea per al tema escollit del projecte i motivació que ha portat a fer-lo.

Capítol 2. Introducció: Es parla sobre els objectius i l’abast del projecte, on s’explica el seu potencial. A més a més, s’inclou una justificació on es parla dels principals avantatges dels sistemes connectats i el per què s’utilitzen.

Capítol 3. Desenvolupament del programari mitjançant Arduino: Es parlarà de l’estructura en què es presentarà el programari del projecte, i dels passos introductoris a seguir.

(24)

7

Capítol 4. Connexió de l’ESP8266 i ESP32 a una xarxa WiFi en mode STA:

Es tracta del primer capítol on es portarà a terme la part experimental del projecte.

En ell s’explicarà detalladament el mode de configuració STA i es portaran a la pràctica diferents demostracions.

Capítol 5. Connexió de l’ESP8266 i ESP32 a una xarxa WiFi en mode AP: Es continuarà amb la part experimental, però en aquest cas s’explicarà el mode de configuració AP, mostrant diferents demostracions pràctiques.

Capítol 6. Aplicació final conjunta en mode AP + STA: Estació meteorològica: En aquest capítol es finalitza amb la part experimental del projecte, mostrant l’aplicació final d’aquest. En ella es recopilen tots els coneixements adquirits prèviament per fer possible el funcionament simultani dels tres microcontroladors amb què es treballa.

Capítol 7. Estudi i anàlisi de les xarxes: Capítol en el qual es compararan totes les característiques de la connexió sense fils que presenten els dos mòduls amb què s’ha fet el projecte: ESP32 i ESP8266

Capítol 8. Anàlisi de l’impacte ambiental: Estudi de l’impacte ambiental causat per l’execució d’aquest projecte.

(25)

8

3. Desenvolupament del programari mitjançant Arduino

En aquest capítol es descriurà la forma en què presentarem el programari del projecte, mitjançant l’Entorn de Desenvolupament Integrat (IDE) d’Arduino.

El programari el distribuirem en diferents aplicacions, en les quals cadascuna d’elles proposa un nou repte, en incorporar millores i funcionalitats noves respecte de la versió anterior. Per tant, veurem diverses aplicacions, en les quals la complexitat anirà augmentant successivament fins a obtenir l’aplicació final. En ella recopilarem tots els coneixements que s’han obtingut de totes les aplicacions anteriors, presentant una aplicació capaç de fer interactuar l’ESP32 i els ESP8266 simultàniament, gràcies a l’ús del WiFi.

Cal tenir en compte que, en fer servir dos xips diferents, el programari i la manera de configurar-los canvia, cosa que veurem a partir de les següents entrades. Per tant, en cada apartat trobarem com programar cadascun dels xips, així com una recopilació de tots els passos a seguir fins a l’obtenció del codi final.

L’explicació del desenvolupament del programari, com s’ha comentat, mostrarà la generació de cada codi des de zero, i anirà acompanyada d’una explicació clara i concisa en la qual es detallarà la seva funció. D’aquesta manera podrem observar com contínuament s’implementen millores i/o noves funcions. A més, cada codi constarà d’un diagrama de flux gràcies al qual podrem veure de forma més visual i detallada el funcionament del programari. El codi respectiu a cada aplicació el podrem consultar en els annexos de la memòria.

Les explicacions les trobarem estructurades per apartats. En cadascun d’ells es parlarà sobre la preparació necessària (material, connexions a realitzar, funcionament, etc.) i sobre la teoria adient que caldrà tenir present a l’hora d’entendre l’aplicació proposada.

A continuació, mostrarem els passos introductoris que caldrà fer per començar a preparar el programari.

(26)

9

3.1. Preparació. Instal·lació de l’ESP8266 en l’IDE d’Arduino

Per poder fer servir l’entorn d’Arduino necessitarem configurar-lo perquè reconegui les plaques de desenvolupament ESP8266, les quals fan servir els xips LOLIN D1 mini, entre d’altres. Gràcies al suport de la comunitat és molt senzill, ja que el podem trobar disponible com un paquet descarregable i només caldrà afegir-ho al “Gestor de tarjetas”

[1].

Per defecte, l’IDE d’Arduino no reconeix les plaques de desenvolupament ESP8266 en el “Gestor de tarjetas”. En la següent imatge ho podrem comprovar.

Per tant, la comunitat ha facilitat un mètode molt senzill per poder treballar amb aquestes plaques: simplement haurem de configurar l’URL del paquet perquè puguem afegir-les sense problema al “Gestor de tarjetas” de l’IDE d’Arduino [1].

En primer lloc accedim a la finestra “Archivo” i cliquem “Preferencias” [Ctrl + Coma].

Un cop obrim la finestra anem a “Gestión de URLs adicionales de tarjeta” i afegim el següent URL [1] :

http://arduino.esp8266.com/stable/package_esp8266com_index.json Imatge 3.1. Cerca de LOLIN D1 mini al “Gestor de tarjetas” amb configuració per defecte

(27)

10

Ara ja podem anar al “Gestor de tarjetas”, buscar el paquet de plaques de desenvolupament basades en l’ESP8266 i instal·lar-lo [1].

Imatge 3.2. Introducció d’URL a “Preferencias” per a la posterior cerca de LOLIN D1 mini

Imatge 3.3. Descàrrega del paquet ESP8266 vàlid per a la configuració de LOLIN D1 mini

(28)

11 Per finalitzar la instal·lació del paquet ESP8266 a l’IDE d’Arduino, només queda anar a

“Herramientas  Placa” i seleccionar la que desitgem; en aquest cas serà l’anomenada

“LOLIN(WEMOS) D1 R2 & mini”..

3.2. Preparació. Instal·lació de l’ESP32 en l’IDE d’Arduino

Com hem pogut veure en la secció anterior, perquè l’IDE d’Arduino ens reconegués les plaques de desenvolupament ESP8266 era necessari fer un pas previ per poder descarregar el paquet al “Gestor de tarjetas”. Per sort, aquest pas ens el podem estalviar amb la nostra placa ESP32, ja que el model que farem servir (MKR WiFi 1010) és de la marca Arduino i, per tant, el paquet el trobarem directament com a descarregable.

Imatge 3.5. Descàrrega del paquet Arduino SAMD Boards vàlid per a la configuració del MKR WiFi 1010 Imatge 3.4. LOLIN D1 mini triada com a placa per a poder-la programar

(29)

12

Per finalitzar amb la instal·lació del paquet Arduino SAMD Boards a l’IDE d’Arduino, només queda anar a “Herramientas  Placas” i seleccionar la que desitgem; en aquest cas serà l’anomenada ”Arduino MKR WiFi 1010”.

3.3. Configuració del mòdul WiFi amb l’ESP8266 i ESP32

Els dos xips que s’han triat per a la realització de la part pràctica d’aquest projecte consten d’un mòdul WiFi, el qual es pot programar de tres maneres diferents, en funció de si volem que el nostre xip sigui un servidor, un client o la combinació dels dos. Aquestes són el mode STA (Station), AP (Acces Point) i AP + STA (Acces Point + Station).

El primer mode (STA) ens permet connectar el nostre dispositiu a un punt d’accés AP.

En altres paraules, si triem el mode STA ens podrem connectar a una WiFi ja existent, de tal forma que el nostre xip actuaria com a client.

El segon mètode (AP), tal com indica el seu nom, permet actuar al nostre xip com a “punt d’accés” generant la seva pròpia xarxa WiFi [2]. Per tant, amb aquesta configuració el xip funcionarà com a servidor i serà possible que altres dispositius es connectin a la seva xarxa com a clients. Per exemple, podríem fer servir el nostre ordinador, telèfon mòbil o tauleta i connectar-nos a la WiFi creada pel servidor. D’aquesta manera, el nostre mòbil seria el client del nostre xip, ja que ell és el servidor.

L’últim mètode (AP + STA) ens permet configurar l’ESP8266 o ESP32 per actuar tant com client com servidor, és a dir, pot actuar tant en mode STA com en mode AP. Veurem més endavant que gràcies a aquesta configuració hem fet l’aplicació final.

Imatge 3.6. Arduino MKR WiFi 1010 triada com a placa per poder-la programar

(30)

13

4. Connexió de l’ESP8266 i ESP32 a una xarxa WiFi en mode STA

Com s’ha comentat anteriorment, existeixen tres possibilitats de configuració.

Començarem pel mode STA, ja que és el mode més senzill i ens permet connectar tant l’ESP8266 com l’ESP32 a una xarxa WiFi existent [3].

Gràcies a les funcions de la llibreria “ESP8266WiFi” que venen incloses quan descarreguem el paquet de plaques de desenvolupament basades en l’ESP8266, connectar-nos a una xarxa WiFi amb el xip LOLIN D1 mini és molt senzill. En canvi, en el cas de l’ESP32 haurem de fer diversos canvis, ja que l’MKR 1010 WiFi té una llibreria anomenada “WiFiNINA” que està més limitada que l’“ESP8266WiFi” i, per tant, caldrà adaptar el programa lleugerament.

4.1. Desenvolupament del codi (connexió STA)

En aquesta secció parlarem de com s’ha desenvolupat el codi que permet fer funcionar els dos xips en mode STA.

En primer lloc, mitjançant un diagrama de flux es marcaran les etapes que processa l’IDE d’Arduino al compilar el codi, juntament amb explicacions detallades dels processos.

D’aquesta manera podrem interpretar correctament el codi quan el consultem als annexos.

(31)

14

El primer pas a realitzar és incloure la llibreria “ESP8266WiFi”, en el cas que vulguem programar el LOLIN D1 mini, o la llibreria “WiFiNINA”, si volem treballar amb l’MKR WiFi 1010. Seguidament, definirem com a cadena l’SSID i la contrasenya de la xarxa local a la qual ens volem connectar. Aquesta informació quedarà emmagatzemada en la RAM de la placa [5].

A la següent línia de codi trobem la instrucció void setup (), la qual constitueix la preparació del programa. Per tant, a partir d’aquesta línia de codi es descriuen les funcions que realitzarà el microcontrolador.

La primera funció que realitzarà la placa serà inicialitzar el port sèrie, el qual ens podrà servir per monitoritzar el programa. A continuació es defineix com a STA el dispositiu quan s’executa la funció WiFi.begin () que, a més, guarda els credencials indicats de la nostra xarxa en la memòria flash no volàtil de la placa [3]. D’aquesta manera, si hi ha un error de connexió, la placa tornarà a intentar connectar-se a la xarxa de manera automàtica. Per saber quan s’ha establert la connexió amb la xarxa es fa servir la funció WiFi.status() dintre d’un bucle, del qual només es sortirà quan s’estableixi la connexió

Imatge 4.1. Diagrama de flux (configuració STA)

(32)

15

“WL_CONNECTED”. A continuació es mostra una imatge de tots els estats que retorna la funció WiFi.status():

Per acabar, quan la connexió ja ha estat establerta s’imprimeix pel port sèrie la xarxa a la qual ens hem connectat amb la respectiva direcció IP. A la següent imatge ho podrem comprovar:

Els programes vàlids pels mòduls ESP32 i ESP8266 els podrem consultar adjunts a aquesta memòria amb els noms d’ESP32-STA.ino i ESP8266-STA.ino, respectivament.

Imatge 4.2. Estats de la connexió que retorna la funció WiFi.status() [3]

Imatge 4.3. Connexió establerta mostrada pel port sèrie

(33)

16

4.2. Aplicacions de l’ESP8266 i ESP32 en mode STA

En aquesta secció es portaran a la pràctica diversos codis que es podran aplicar a l’ESP32 i/o l’ESP8266. Gràcies a aquests codis podrem veure aplicacions reals en què el mòdul WiFi es configurarà en mode STA.

Tots els exemples que veurem a continuació consten d’un diagrama de flux i explicacions pas a pas. Per tant, quan consultem el codi original als annexos ens resultarà molt més fàcil d’interpretar.

4.2.1. Primera aplicació: Controlar estat LED BUILTIN (ESP8266 i ESP32) L’objectiu d’aquesta primera aplicació és canviar l’estat del LED integrat de les dues plaques (LED BUILTIN) fent servir una pàgina web amb la IP de la nostra xarxa.

En primer lloc, ens connectarem a la xarxa domèstica que actuarà com a punt d’accés, fent possible la connexió amb la nostra placa. A través del port sèrie podrem veure si la connexió ha estat establerta i, en cas afirmatiu, obtindrem la direcció IP a la qual ens hem de connectar per controlar l’estat del LED. La connexió la podrem realitzar amb qualsevol dispositiu de casa que tingui accés a la mateixa xarxa local a la qual hem connectat la placa.

Quan accedim a l’adreça que es mostra a la Imatge 4.4. entrem en un servidor web com el que es mostrarà a continuació. Podrem decidir l’estat del LED i consultar mitjançant la web l’estat actual d’aquest.

Imatge 4.4. Connexió amb la xarxa domèstica satisfactòria

Imatge 4.5. Servidor web des del qual modifiquem l’estat del LED BUILTIN

(34)

17 Cada cop que realitzem una acció en el servidor web, pel port sèrie constarà i ens informarà quina ha estat la ultima acció realitzada. A la imatge següent veurem un exemple en què primer el LED està OFF (GET /builtin/0) i després ON (GET /builtin/1).

En conclusió, gràcies a aquest petit exemple podem veure de forma aplicada la possibilitat de realitzar una connexió amb la xarxa domèstica en mode STA, amb els dos xips amb els qual es treballa.

4.2.2. Desenvolupament del codi [Primera aplicació]

Igual que en la Secció 4.1. es parlarà del desenvolupament del codi que ens ha permès encendre o apagar el LED integrat de les dues plaques.

Primer mostrarem el corresponent diagrama de flux on es definiran les etapes que processa l’IDE d’Arduino. A continuació s’inclouran explicacions detallades de cada part del procés, de forma que interpretar el codi font als annexos ens resultarà més senzill.

Els programes vàlids pels mòduls ESP32 i ESP8266 els podrem consultar adjunts a aquesta memòria amb els noms de LED_BUILTIN-ESP32-STA.ino i LED_BUILTIN- ESP8266-STA.ino, respectivament.

Imatge 4.6. Informació proporcionada pel port sèrie quan es realitzen accions a la web

Imatge 4.7. Exemple gràfic de la part pràctica realitzada [6]

(35)

18

Com podem veure a la Imatge 4.8., el primer pas a realitzar és incloure la llibreria

“ESP8266WiFi”, en el cas que vulguem programar el LOLIN D1 mini, o la llibreria

“WiFiNINA”, si volem treballar amb l’MKR WiFi 1010.

En aquest exemple s’ha incorporat una petita millora, gràcies a la qual s’aconsegueix tenir una mica més de seguretat. Es tracta d’haver definit l’SSID i la contrasenya de la xarxa local en una finestra separada del codi font. D’aquesta manera, només haurem de fer una instància de la variable en la qual emmagatzemarem aquesta informació en el codi font i evitarem que aparegui explícitament en el codi font.

Seguidament, es crea una instància del servidor, especificant el port en què es crearà. A la següent línia de codi trobem la instrucció void setup (), la qual constitueix la preparació del programa. Per tant, a partir d’aquesta línia de codi es descriuen les funcions que realitzarà el microcontrolador.

La primera funció que executarà serà inicialitzar el port sèrie, des del qual podrem veure, entre altres coses, la adreça IP a la qual ens hem de connectar per modificar l’estat del

Imatge 4.8. Diagrama de flux (LED BUILTIN)

(36)

19 LED. A continuació, es configura el LED com a sortida, i s’inicia la connexió a la xarxa.

Igual que en el codi anterior, per saber quan s’ha establert la connexió amb la xarxa es fa servir la funció WiFi.status() dintre d’un bucle, del qual només es sortirà quan s’estableixi la connexió “WL_CONNECTED”. Quan la connexió s’estableix, s’imprimeix pel port sèrie la direcció IP a la qual ens podem connectar per modificar l’estat del LED.

El següent pas que es realitza és crear el bucle que haurà de fer el programa cada cop que s’executa. Aquest rep el nom de void loop () i farà el següent:

Primer farà una comprovació per saber si el servidor està disponible. En cas afirmatiu podrem accedir a l’adreça, introduint-la al nostre navegador de Google (Exemple:

http://192.168.1.17). En segon lloc s’estableix un temps d’espera, en el qual el programa llegeix i mostra pel port sèrie la sol·licitud que rep del servidor quan realitzem una acció (Exemple: GET /builtin/1 HTTP/1.1). En aquest cas, la nostra petició permet encendre el LED. A continuació, es crea una condició que permet modificar l’estat del LED cada cop que aparegui la paraula "/builtin/1" o "/builtin/0" en el nostre navegador. Això succeirà quan en les següents línies de codi configurem el servidor web perquè cada cop que premem “AQUI” l’adreça també canviï (Exemple: http://192.168.1.17/builtin/1).

Per acabar, quan la petició s’hagi dut a terme satisfactòriament s’imprimirà per pantalla el missatge “Desconnectant del client”, el qual hem d’interpretar com que cada petició al servidor és independent ja que, en estar dintre d’un bucle, aquest es repeteix tantes vegades com accions realitzem.

Imatge 4.9. Primera aplicació: LED BUILTIN encès en ESP32 i ESP8266 respectivament

Imatge 4.10. Primera aplicació: LED BUILTIN apagat en ESP32 i ESP8266 respectivament

(37)

20

4.2.3. Segona aplicació: Visualitzar la temperatura i humitat mitjançant el sensor DHT11 i un servidor web (ESP8266 i ESP32)

Aquesta segona aplicació aprofita idees que hem introduït en l’anterior aplicació, com l’ús d’un servidor web que fèiem servir per modificar l’estat del LED integrat de les plaques. En aquest cas el farem servir per obtenir els valors de temperatura i humitat que ens proporcionarà el sensor DHT11. Així mateix, veurem que hi ha un grau extra de complexitat, ja que crearem una interfície més elaborada.

L’objectiu d’aquest exemple és proposar un cas més “pràctic” que l’anterior i aprofitar la connectivitat WiFi dels nostres dispositius, ja que gràcies a ella podrem saber la temperatura i humitat des de qualsevol dels nostres dispositius que tinguin accés a la xarxa local.

Per dur a terme aquesta aplicació farem servir tant l’ESP32 com l’ESP8266, ja que els dos disposen d’un mòdul WiFi amb el que crearem un servidor web. Quan qualsevol dispositiu (mòbil, tauleta, PC etc.) connectat a la xarxa accedeix al servidor web, el nostre microcontrolador llegeix la temperatura i la humitat relativa del sensor DHT11 i ho envia al navegador web que, com hem dit abans, perfeccionarem perquè sigui mes agradable de consultar.

Connexió del sensor a la placa protoboard:

El model del sensor DHT11 del qual disposem ve incorporat dins d’una PCB, per la qual cosa integra una resistència de PULL-UP. Aquesta resistència ens és molt útil, ja que ens permet establir un estat lògic (HIGH) en un pin quan es troben en estat de repòs. Això evita els falsos estats que es produeixen pel soroll generat pels circuits electrònics [13].

La resistència que incorpora aquest model amb PCB és una SMD amb codi de 3 dígits.

Aquest és el 512, on els primers dos dígits ens indiquen el numero inicial i el tercer la quantitat de zeros. Per tant, la resistència que farem servir és de 5100 ohms (5kΩ) [14].

(38)

21 Els pins de la versió amb PCB del DHT11 són:

1) DATA (cable taronja): Transmissió de dades 2) VCC (cable blanc) : Alimentació a 3,3V 3) GND (cable negre): Connexió a terra

El segon pin i el tercer (VCC i GND respectivament) els connectarem a les entrades de la nostra placa que també s’anomenen com aquests pins i, el segon pin el connectarem a qualsevol de les entrades digitals de la placa. En aquest cas s’ha triat l’entrada D4.

Imatge 4.11. Esquema elèctric amb resistència PULL-UP [15] Imatge 4.12. Exemple interpretació Resistència SMD [14]

Imatge 4.13. Exemple de muntatge en ESP8266

(39)

22

Instal·lació de la llibreria per al sensor DHT11

Un cop completada la connexió dels pins procedirem a la instal·lació de la llibreria DHT Sensor proporcionada per Adafruit, la qual s’encarregarà de la correcta gestió de dades mitjançant una sincronització precisa [8]. Per instal·lar-la només hem d’anar a “Programa

 Incluir Librería  Administrar Bibliotecas”.

A continuació introduïm en el buscador “DHT Sensor” i instal·lem la segona llibreria, que ha estat realitzada per Adafruit.

Veurem un missatge quan instal·lem aquesta llibreria que ens diu que cal instal·lar una més per complementar-la; nosaltres simplement diem que si a tot i el propi IDE d’Arduino s’encarrega de la resta.

Imatge 4.14. Ruta d’accés per instal·lar qualsevol llibreria

Imatge 4.15. Instal·lació llibreria “DHT sensor library”

(40)

23 Accés al servidor web del ESP32 o ESP8266 utilitzant el mode STA

Quan acabem de realitzar tots els passos descrits fins al moment, es pot procedir a la configuració del nostre microcontrolador en mode STA i, per tant, podrem accedir al servidor web que crearem, des de qualsevol dispositiu (client) connectat a la mateixa xarxa.

Un cop carregat el programa visualitzarem pel port sèrie l’adreça IP obtinguda del nostre encaminador, si la connexió ha estat establerta. També podrem veure un missatge que ens indicarà que el servidor està iniciat. Per tant, per veure el seu contingut haurem d’introduir la IP en el nostre navegador web.

A continuació accedim al servidor web des de qualsevol dispositiu connectat a la mateixa xarxa que l’encaminador.

Imatge 4.16. Connexió amb la xarxa domèstica satisfactòria

Imatge 4.17. Segona aplicació: Informe del temps en directe

(41)

24

4.2.4. Desenvolupament del codi [Segona aplicació]

En aquesta secció parlarem de com s’ha arribat a l’obtenció del codi final que ha permès dur a terme aquesta aplicació. Per complementar les explicacions es farà servir un diagrama de flux en el qual es marcaran totes les etapes diferents d’aquest, per tal d’explicar de la millor forma possible el programa. El programa el podrem consultar adjunt a aquesta memòria amb el nom de TEMPERATURA-STA.ino.

Igual que en exemples anteriors, el primer pas a realitzar és declarar totes les llibreries que es faran servir. En aquest cas, farem ús de les llibreries <ESP8266WiFi.h> i

<ESP8266WebServer.h> en el cas de treballar amb l’ESP8266. A més a més, inclourem la llibreria “DHT.h”, vàlida pels dos xips, la qual s’encarregarà de gestionar les dades del sensor. A continuació declararem el tipus de sensor DHT que farem servir, ja que existeixen diversos models (treballarem amb el DHT11). Per preparar la connexió WiFi definirem el nostre SSID i contrasenya, i obrirem el port 80 de l’encaminador, gràcies al qual el servidor web es comunicarà amb tots els clients, igual que en exemples anteriors.

Amb la finalitat de deixar clar el procediment realitzat fins al moment, a continuació es mostra el pseudocodi d’aquesta part:

#afegir <llibreria_WiFi>

#afegir <llibreria_servidorweb>

#afegir “DHT.h” Llibreria que gestionarà les dades del sensor mitjançant una sincronització precisa definir-tipus_sensor_dht DHT11 Existeixen diversos models de sensor DHT. Per tant, especifiquem el que farem servir

definir ssid = “MiFibra-ACDB”;

definir contrasenya = “mYnsjgb5”;

ServidorWiFi servidor (80) Obrim el port 80 (port per a transmissions HTTP) del nostre encaminador, per què el servidor es pugui comunicar amb la resta de clients

Abans de definir el programa cal decidir on connectarem el pin 1 del sensor (DATA) a la nostra placa [21], configurar el sensor DHT11 [22] i definir totes les variables que es faran servir per emmagatzemar els valors de la temperatura, humitat i els seus valors màxims i mínims. A continuació veurem en forma de pseudocodi aquesta part:

(42)

25 uint8_t DHTPin = D4; Definim on connectarem físicament el pin 1 (DATA) del sensor a la nostra placa i indiquem el nombre de bits utilitzats per emmagatzemar aquesta variable

DHT dht (DHTPin, DHTTYPE);  Configurem el sensor DHT indicant el pin al que es connecta i el tipus de sensor utilitzat

float Temperatura;

float Humitat;

float maxTemperatura;

float minTemperatura;

float maxHumitat;

float minHumitat;

Ara ja podem definir el programa principal. El primer pas a realitzar és el que hem fet en tots els exemples anteriors: connectar-nos a la xarxa domèstica i, quan s’aconsegueix, imprimir pel port sèrie la direcció IP a què cal connectar-se per consultar el servidor web.

A més, inclourem un parell de funcions addicionals. Handle_OnConnect() s’encarregarà de llegir o escriure informació per intercanviar-la amb el client. Per fer-ho, serà necessari que ens connectem al servidor, mitjançant la IP obtinguda [24]. Handle_NotFound() farà el contrari, és a dir, si el client sol·licita connectar-se mitjançant una IP diferent de l’especificada, l’usuari rebrà un missatge d’error conforme no s’ha pogut connectar. Per acabar, inicialitzarem el servidor amb la funció server.begin (), ho reflectirem pel port sèrie i acabarem definint una funció que farem servir més endavant amb la qual obtindrem els valors de temperatura i humitat màxims i mínims.

Procedim ara a explicar el funcionament del bucle del nostre programa. En ell farem servir la funció server.handleClient() que s’encarregarà de controlar les peticions HTTP [23].

També assignarem a les variables Temperatura i Humitat la tasca de llegir el valor de temperatura i humitat del sensor DHT11. Amb el pseudocodi que veurem a continuació també creem una variable que farem servir més endavant, gràcies a la qual determinarem el valors màxims i mínims de la temperatura i humitat.

definició bucle() {

server.handleClient(); Per controlar les peticions HTTP entrants, necessitem aquesta funció float Temperatura = dht.llegeixTemperatura (); La variable Temperatura llegirà el valor temperatura del sensor

float Humitat = dht.readHumidity La variable Humitat llegirà el valor humitat del sensor temperaturahumitatminmax( Temperatura, Humitat); (); Creem una variable per a continuació fer una funció

}

Definim variables que emmagatzemaran els valors de temperatura, humitat i els seus respectius màxims i mínims. Float indica que el valor serà decimal

(43)

26

Quan ja hem definit el bucle, definim altres funcions necessàries per a la implementació del nostre programa.

La primera d’aquestes ens permet donar valor a les variables que contindran els valors màxims i mínims de la lectura del sensor. La següent funció aprofitarà aquests valors, ja que, mitjançant condicionals, determinarà els màxims i mínims de totes les variables [18].

A continuació trobem les funcions handle_OnConnect() i handle_NotFound() que havíem definit anteriorment.

El programa d’exemple acaba amb la funció String SendHTML , on generarem una pàgina web cada cop que el servidor web del microcontrolador rebi una petició del client. En aquesta funció primer declarem totes les variables que farem servir a la pàgina web i, a continuació, definirem el seu disseny fent servir format HTML, que contindrà la informació, i format CSS (Cascading Style Sheets), que contindrà l’estil [19].

Veurem que el codi comença amb "<!DOCTYPE html> <html>\n" per indicar que enviarem codi en format HTML. Després es configuren altres paràmetres, entre els quals els més destacables són: "<meta http-equiv='refresh' content='5'>", que ens permet mantenir el contingut de les dades actualitzat cada 5 segons [17]; "%&nbsp;</c>" , per poder fer espais en el text HTML [20] i "&#186, &#224 o &#237”, que són caràcters especials que s’han fet servir per poder ficar accents o el símbol dels ºC consultant una taula especial de codis HTML [16].

Per acabar les explicacions, a la Imatge 4.18. es mostra el diagrama de flux que havíem comentat prèviament, en el qual es reflecteixen tots els passos descrits de forma gràfica.

(44)

27

Imatge 4.18. Diagrama de flux (TEMPERATURA I HUMITAT)

(45)

28

5. Connexió de l’ESP8266 i ESP32 a una xarxa WiFi en mode AP

Com hem comentat en la Secció 3.3., existeixen diverses formes de configurar el nostre mòdul WiFi. En aquesta secció parlarem sobre el segon dels tres mètodes: el mètode AP (Acces Point). Aquest es caracteritza per presentar la capacitat de crear una comunicació sense fils sense dependre d’una xarxa existent (encaminador) ja que, com el seu propi nom indica, el nostre microcontrolador actua com a punt d’accés. Això permet que qualsevol dispositiu amb WiFi (smartphone, tauleta, PC, microcontrolador etc.) es pugui connectar a la xarxa del nostre microcontrolador. Cal tenir present que, tot i estar connectats a una xarxa, aquesta no té la capacitat de subministrar-nos Internet.

A continuació veurem una imatge en la qual podem veure de forma visual un cas pràctic de connexió :

Si comparem aquesta imatge amb la Imatge 4.7., en la qual fèiem servir el mode STA, podrem comprovar com efectivament el punt d’accés és l’encaminador. Per tant, els dispositius connectats a aquesta xarxa disposen d’internet, cosa que en el mode AP no passa, ja que aquest mode de connexió només permet connectar dispositius. Aquest mode es denomina “SoftAP” [2]. Per tant, a partir d’aquest moment ens referirem al mode AP com mode SoftAP.

Imatge 5.1. Exemple gràfic de la connexió AP (ESP32) [10]

(46)

29 Gràcies a les funcions de la llibreria “ESP8266WiFi”, la qual utilitzem en totes les demostracions amb el xip LOLIN D1 mini, fer servir el mode SoftAP per crear una xarxa WiFi existent és igual de senzill que fer servir el mode STA. En el cas de l’MKR WiFi 1010 farem servir la llibreria “WiFiNINA” i adaptarem lleugerament el codi per poder configurar en mode SoftAP els dos microcontroladors, tal com podrem veure en la següent secció.

5.1. Desenvolupament del codi (connexió SoftAP)

En aquesta secció parlarem de com s’ha desenvolupat el codi que permet fer funcionar els dos xips en mode SoftAP.

En primer lloc, mitjançant un diagrama de flux es marcaran les etapes que processa l’IDE d’Arduino en compilar el codi. Així mateix, s’inclourà una mica de pseudocodi juntament amb explicacions detallades dels processos. D’aquesta manera podrem interpretar correctament el codi que trobarem adjunt a aquesta memòria amb el nom d’ESP32- SOFTAP.ino i ESP8266-SOFTAP.ino, vàlids per a les plaques ESP32 i ESP8266, respectivament.

Imatge 5.2. Diagrama de flux (configuració SoftAP)

(47)

30

Com es pot observar en la Imatge 5.2., el primer pas a seguir és incloure les llibreries adequades que fa servir cadascun dels nostres microcontroladors. En el cas del xip ESP32 aquesta serà la “WiFiNINA”, mentre que en el cas del xip ESP8266 serà l’“ESP8266WiFi”. Totes dues s’han fet servir en exemples anteriors i, com sabem, alguna té funcions que l’altre no i viceversa. Per aquest motiu, la forma en què programem cadascuna de les plaques és diferent, tot i que al final les dues faran el mateix.

El següent pas a seguir és establir un SSID (nom de la xarxa) i una contrasenya. Gràcies a aquests dos paràmetres, trobarem com a xarxa disponible una amb el nostre SSID i podrem connectar-nos introduint la contrasenya que hem establert. És cert que es podria haver fet la programació sense indicar cap contrasenya, de forma que l’accés a la xarxa fos lliure, però per motius de seguretat s’ha decidit posar contrasenya. A més, cal tenir en compte que el màxim de dispositius connectats alhora és de quatre per defecte (ampliable fins a vuit dispositius) [25].

A continuació es mostra en forma de pseudocodi els passos descrits fins el moment:

#afegir <llibreria_SPI> Llibreria complementària que necessita la WiFiNINA per funcionar

#afegir <llibreria_WiFiNINA>

definir ssid = “TFG – ESP32”;

definir contrasenya = “password”;

#afegir <llibreria_ESP8266WiFi. >

definir ssid = “TFG – ESP8266”;

definir contrasenya = “password”;

El següent pas a realitzar és inicialitzar el port sèrie. Acció que no és gaire necessària en aquest exemple, ja que no necessitem saber la IP (com en exemples anteriors) per connectar-nos. Simplement, coneixent l’SSID i la contrasenya de la xarxa ens hi podem connectar. Per acabar, inicialitzem el mòdul WiFi en mode SoftAP i mostrem pel port sèrie la adreça IP de la xarxa i un missatge on ens indica que la xarxa ja està disponible.

A continuació podrem veure la part final del codi que s’acaba d’explicar:

Versió ESP32

Versió ESP8266

(48)

31 configuració programa () {

Portsèrie.inicialitzar(115200); Entre parèntesi s’indica la velocitat d’escriptura del port sèrie espera (10); Entre parèntesi s’indiquen els mil·lisegons

mentre (WiFi.inicialitza_modeSoftAP (ssid, contrasenya)) { Inicialitzem el mode SoftAP Portsèrie.imprimeix (".” );

espera (100);

}

AdreçaIP ip = WiFi.IPlocal (); Definim variable ip per a que emmagatzemi el valor de la IP local Portsèrie.imprimeix ("Mode AP actiu” );

Portsèrie.imprimeix ("Nom de la xarxa:” );

Portsèrie.imprimeix _a continuació(ssid );

Portsèrie.imprimeix ("Adreça IP:” );

Portsèrie.imprimeix _a continuació(ip );

}

definició bucle () {}

configuració programa () {

Portsèrie.inicialitzar(115200); Entre parèntesi s’indica la velocitat d’escriptura del port sèrie espera (10); Entre parèntesi s’indiquen els mil·lisegons

mentre (WiFi.inicialitza_modeSoftAP (ssid, contrasenya)) { Inicialitzem el mode SoftAP Portsèrie.imprimeix (".” );

espera (100);

}

Portsèrie.imprimeix ("Mode AP actiu” );

Portsèrie.imprimeix ("Nom de la xarxa:” );

Portsèrie.imprimeix _a continuació(ssid );

Portsèrie.imprimeix ("Adreça IP:” );

Portsèrie.imprimeix _a continuació(WiFi.softAPIP() );  Funció que ens permet conèixer la IP local }

definició bucle () {}

Com es pot apreciar, la diferència entre un codi i l’altre és mínima. Simplement canvia alguna funció que la llibreria WiFiNINA ofereix i l’ESP8266WiFi no i a l’inrevés, però a efectes pràctics tots dos programes fan la mateixa funció.

Versió ESP32

Versió ESP8266

(49)

32

5.2. Aplicacions de l’ESP826 i ESP32 en mode SoftAP

En aquesta secció es portaran a la pràctica diversos codis que es podran aplicar a l’ESP32 i/o l’ESP8266. Gràcies a aquests codis podrem veure aplicacions reals en què el mòdul WiFi es configurarà en mode SoftAP.

Tots els exemples que veurem a continuació disposen d’un diagrama de flux que explica de forma gràfica els processos que duu a terme la nostra placa quan processa el codi.

També constaran d’explicacions detallades de cada procés i del codi corresponent adjunt al final d’aquesta memòria.

5.2.1. Primera aplicació: Alarma amb pantalla LCD, teclat i WiFi (ESP32) En aquesta aplicació aprofitarem conceptes i idees que hem posat en pràctica en exemples anteriors, i introduirem funcionalitats noves que encara no hem vist.

L’objectiu d’aquesta aplicació és presentar un model d’alarma funcional que pugui ser activada o desactivada des de qualsevol dispositiu connectat a la xarxa o des del propi teclat integrat. Si triem la opció d’activar l’alarma des del mòbil, accedirem al servidor web creat pel mateix MKR WiFi 1010, que s’encarregarà de gestionar la xarxa a la qual ens connectem. En canvi, si es desitja activar l’alarma manualment, disposarem d’un teclat que ens ho permetrà.

Aquesta aplicació només es durà a terme amb l’ESP32, ja que un dels avantatges que presenta aquest respecte de l’ESP8266 és el número de pins disponibles per realitzar connexions. Per tant, l’MKR 1010 és la placa triada per realitzar aquest exemple, tot i que el LOLIN D1 mini també el podríem haver fet servir en cas d’haver utilitzat menys pins.

Imatge 5.3. Creació de la xarxa satisfactòria (ESP32) Imatge 5.4. Creació de la xarxa satisfactòria (ESP8266)

(50)

33 Com es tracta d’un exemple més complex, detallarem a continuació tots els components que han estat necessaris per poder portar-lo a terme:

- 1 brunzidor

- 1 potenciòmetre P103 (10 kΩ) - 1 LED verd

- 1 LED vermell

- 2 resistències de 220 Ω - 1 sensor HC-SR04 - 1 MKR WiFi 1010 - 1 pantalla LCD 16x2 - 1 teclat matricial 4x4 - Cables

El brunzidor el farem servir per emetre un so quan l’alarma detecti moviment o quan es premin tecles; el potenciòmetre l’utilitzarem per ajustar el contrast de la pantalla; els dos LED aniran amb una resistència en sèrie de 220 Ω, respectivament, i els farem servir per indicar l’estat de l’alarma (activada/desactivada) i el sensor HC-SR04 serà l’encarregat d’emetre ones ultrasòniques, gràcies a les quals detectarem la presència d’objectes en el seu abast (fins a 4 metres) [51].

L’MKR 1010 és la placa sobre la qual carregarem el programa i realitzarem totes les connexions, com la de la pantalla LCD, des de la qual veurem el menú, o el teclat matricial des del qual controlarem l’alarma.

Referencias

Documento similar

La biblioteca d’aula ha de ser un centre d’investigació i recursos de la nostra classe, tant per als alumnes com per a la mestra, per això, en ella s’han de trobar molts

&#34;No porque las dos, que vinieron de Valencia, no merecieran ese favor, pues eran entrambas de tan grande espíritu […] La razón porque no vió Coronas para ellas, sería

de Γυ penlona , olvidados de que puede el Principe imaginarlos muertos , privarte de ellos , y pr σ veerfè de

Una acció remarcable que s’ha dut a terme conjuntament entre el sector i els Mossos d’Esquadra a diferents ciutats de Catalunya, i així de la província de Girona, és

La heterogeneidad clínica de esta patolo- gía hizo que se considerasen a numerosos genes de pro- teínas de la matriz extracelular (elastina, fibronectina, genes de los colágenos de

D’altra banda, en el cas concret dels estudis a la Universitat Jaume I, la participa- ció de l’assignatura en un programa transversal de primer curs amb la metodologia

Pero el mismo señor García Icazbalceta indica el camino cuando aconseja aprovechar las bibliografías especiales como elementos para la formación de las generales. De ahí me ha venido

Reunión Nacional de Profesores Casi 1,400 profesores de todos los campus participaron en este evento, cuyos objetivos fueron fortalecer la identificación disciplinar como un solo