Connectar Arduino i Phyphox: Estació meteorològica

En una entrada anterior explicava com s’havia de fer amb l’aplicació Phyphox per obtenir en el telèfon les dades recollides pels sensors de temperatura i distància connectats a Arduino. En tots dos casos els sensors mesuraven només un únic valor, però hi ha sensors, com el sensor BME280 que mesuren a la vegada la pressió atmosfèrica, la temperatura i la humitat, i per això el codi dels projectes per connectar Arduino a Phyphox per aquests tipus de sensor difereix una mica respecte al necessari per als “monosensors”.

El sensor BME ja l’he utilitzat amb anterioritat per estudiar la Segona Llei de Gay-Lussac recollint les dades en el mòbil amb l’aplicació Serial Bluetooth Terminal. És una virgueria de sensor i amb un preu estupendo (5 € a Terres de l’Ebre, i la meitat a les botigues ultramarines).

El sensor el venen amb els connectors sense soldar. Els companys de tecnologia sempre disposen d’un soldador que ens podran deixar, encara que tampoc passa res per comprar-ne un. Per soldar els connectors el més fàcil és punxar-los en una placa de proves (protoboard) i col·locar la plaqueta del sensor damunt, com l’expliquen els tècnics d’Adafruit.

La connexió del sensor a la placa

Per anar més còmodes, la placa a utilitzar ha d’integrar la connexió bluetooth, així que una placa amb el microprocessador esp32 és la ideal. A mi m’agrada molt la Wemos D1 R32 ja que integra els pins per a connectar directament els cables pont.

Per endollar el sensor a la placa Wemos D1 R32 les connexions són: Vcc a 5V, GND a GND (terra), SCL a pin ASCL i SDA a pin SDA, com es veu al dibuix i la fotografia de sota. A les plaques esp32 en les que no estan marcats els pins SCL i SDA s’ha de punxar l’SCL al pin 22 i l’SDA al pin 21.

Com que la placa no és el estàndard Arduino (encara que Arduino és a la família de microprocessadors el que és Danone al iogurts) s’han d’instal·lar el seus controladors, si encara no l’estan, tant a Windows com a l’IDE d’Arduino. Si Windows no reconeix la placa, s’instal·la el controlador del circuit integrat de connexió USB CH340/CH341.

Per instal·lar la placa a l’IDE de Arduino, en Archivo/Preferencias, a la pestanya d’Ajustes s’enganxa la direcció https://dl.espressif.com/dl/package_esp32_index.json en el Gestor de URLs Adicionales de Tarjetas. Després a Herramientas/Placa/Gestor de tarjetas apareixerà esp32 by Espressif Systems. Es pitja en More info y després en el botó Instalar. Trigarà una mica mentre indica Descargardo definiciones de tarjetas.

Quan s’hagi descarregat se busca la placa en Herramientas/Placa, es selecciona DOIT ESP32 DEVKIT V1 i ja està preparat l’IDE per a funcionar amb la tarja Wemos D1 R32 (i altres plaques amb el xip esp32). També funciona la placa si es selecciona el mòdul ESP 32 Dev.

El projecte d’estacio meteorològica

El sensor BME280 utilitza diferents llibreries en funció del projecte que es disseny i del protocol (I2C o SPI) que es vulgui utilitzar. El projecte que proposo usa el protocol I2C i està basat en un exemple de Lambort de Seeedstudio i a l’exemple CreateExperiment de la llibreria de Phyphox.

La llibreria del sensor (Grove_BME280-master.zip) se ha de baixar de Github. Es clica en Code i es baixa el ZIP. També es necessita la llibreria Wire para I2C però ja està inclosa de sèrie a l’IDE d’Arduino.

Amés s’ha d’instal·lar la llibreria phyphox-arduino-master.zip que és la que proporciona phyphoxBle.h, necessària per a que l’Arduino enviï les dades per bluetooth a l’aplicació Phyphox. En github s’ha de pitjat en code i baixar el zip. S’instal·la a l’IDE com totes les llibreries en programa, incloure llibreria, incloure llibreria zip.

El projecte a instal·lar, sketch_estacion_metereologica_BME280.ino, es pot descarregar i obrir, o bé es pot copiar el següent codi a l’IDE d’Arduino:

/*Medida de la presión atmosférica, la temperatura, y la humedad con el sensor BMP280
 * en una placa Wemos D1 R32 con microprocesador esp32, que dispone de Bluetooth
 * Se ha de seleccionar la placa DOIT ESP32 DEVKIT V1
 * Se pueden visualizar los valores en un monitor sèrie en el ordenador
 * como es el propio del IDE de arduino o en otro como RealTerm, https://sourceforge.net/projects/realterm/
 * Los datos también se pueden visualizar en el teléfono móvil o la tableta 
 * con la aplicación Phyphox (https://phyphox.org/) a través de BT (BlueTooth)
 * /
 /*El projecto está basado en un ejemplo de Lambort (Copyright (c) 2016 seeed technology) inc.
 * Website: www.seeedstudio.com
 * y en el ejemplo CreateExperiment de la libreria de Phyphox
 */
/*La libreria del sensor se ha de bajar de
 * https://github.com/Seeed-Studio/Grove_BME280
 * Wire para I2C ya está incluida de serie en el IDE de Arduino
 */

/*Conexiones del sensor: Vcc a 3,3V o 5V, GND a Gnd, SCL a SCL, SDA a SDA
*/

#include <phyphoxBle.h>   //Phyphox BLE library
#include "Seeed_BME280.h" //Librería del sensor 
#include <Wire.h>

BME280 bme280;

  //Se definen las variables
  float pressure;
  float temperature;
  float humidity;

void setup()
{
  Serial.begin(9600);
  if(!bme280.init()){
    Serial.println("Device error!");
  }

  PhyphoxBLE::start("Estacion"); //Nombre de la placa Arduino para conectarse por bluetooth

   //Experiment
   PhyphoxBleExperiment estacion;   //genera experimento en Arduino 

   estacion.setTitle("Estación Meteorológica");  //Nombre del experimento
   estacion.setCategory("Arduino Experiments");  //Categoría de experimentos en la que se guardará
   estacion.setDescription("Se obtienen tres gráficas con los valores de presión, temperatura y humedad respecto al tiempo");
                            //Descripción del experimento que aparece en la ayuda

   //View
   PhyphoxBleExperiment::View firstView;
   firstView.setLabel("FirstView"); //Create a "view"

   //First Graph
   PhyphoxBleExperiment::Graph firstGraph;      //Crea un gráfico con los valores de la presión frente al tiempo
   firstGraph.setLabel("Presión frente al tiempo");
   firstGraph.setUnitX("s");
   firstGraph.setUnitY("hPa");
   firstGraph.setLabelX("Tiempo");
   firstGraph.setLabelY("Presión");

   /* Assign Channels, so which data is plotted on x or y axis 
   *  first parameter represents x-axis, second y-axis
   *  Channel 0 means a timestamp is created after the BLE package arrives in phyphox
   *  Channel 1 to N corresponding to the N-parameter which is written in server.write()
   */

   firstGraph.setChannel(0,1);

   //Second Graph
   PhyphoxBleExperiment::Graph secondGraph;      //Crea un gráfico de la temperatura frente al tiempo     
   secondGraph.setLabel("Temperatura frente al tiempo");
   secondGraph.setUnitX("s");
   secondGraph.setUnitY(" C");
   secondGraph.setLabelX("Tiempo");
   secondGraph.setLabelY("Temperatura");

   secondGraph.setChannel(0,2);

 //Third Graph
   PhyphoxBleExperiment::Graph thirdGraph;      //Crea un gráfico de l ahumedad frente al tiempo  
   thirdGraph.setLabel("Humedad frente al tiempo");
   thirdGraph.setUnitX("s");
   thirdGraph.setUnitY("%");
   thirdGraph.setLabelX("Tiempo");
   thirdGraph.setLabelY("Humedad");

   thirdGraph.setChannel(0,3);

   firstView.addElement(firstGraph);            //attach graph to view
   firstView.addElement(secondGraph);            //attach second graph to view
   firstView.addElement(thirdGraph);            //attach third graph to view
   estacion.addView(firstView);         //Attach view to experiment
   PhyphoxBLE::addExperiment(estacion);      //Attach experiment to server

}

void loop()
{
  pressure = bme280.getPressure();
  temperature = bme280.getTemperature();
  humidity = bme280.getHumidity();

  //Ver los valores en el Monitor Serie
  //Conseguir y imprimir temperaturas
  Serial.print("Temp: ");
  Serial.print(temperature);
  Serial.println("C");//Unidad para grados Celsius
  
  //Conseguir y imprimir la presión atmosférica
  Serial.print("Presión: ");
  Serial.print(pressure);
  Serial.println("Pa"); //Presion en pascales

  //Conseguir y imprimir la humedad
  Serial.print("Humedad: ");
  Serial.print(humidity);
  Serial.println("%");

  //Envío de los datos a Phyphox: pressure (1), temperature (2), humidity (3)
  PhyphoxBLE::write(pressure, temperature, humidity);

  PhyphoxBLE::poll(); //Only required for the Arduino Nano 33 IoT, but it does no harm for other boards.
  
  delay(1000);
}

Ara, si ja s’ha seleccionat la placa a Eines i el port COM corresponent, s’ha de carregar el codi del projecte (fletxa a dalt a l’esquerra de la pantalla de l’IDE).

Podeu comprovar que la estació ja està prenent pressions, temperatures i humitats si obriu el monitor sèrie propi de l’IDE (lupa a dalt a la dreta) ja que el projecte incorpora la sortida de dades pel port sèrie a 9600 bauds.

Però es pot desconnectar l’Arduino de l’ordinador i fer-lo funcionar autònomament, connectant-li una pila o una bateria, com les bateries externes que s’utilitzen pels mòbils, deixar la placa amb el sensor a la garita, i ja tenim una part de la nostra estació meteorològica. Els valors que recull el sensor es podran visualitzar en el telèfon mòbil amb l’aplicació Phyphox ja que la placa li està enviant les dades per bluetooth.

Per obtenir les dades en el telèfon s’ha de tenir connectat el bluetooth i la ubicació, s’ha d’obrir l’aplicació Phyphox i s’ha de pitjar en el botó més. Apareixerà una pantalla com la de sota a l’esquerra on es pot escollir entre afegir un experiment amb codi QR, afegir-lo per bluetooth o iniciar un experiment simple que es genera “simplement” escollint el sensor del telèfon que es vol utilitzar. Si s’opta per experiment per bluetooth apareix una pantalla en la que s’ha de seleccionar el dispositiu Estacion, que és el nom que s’ha assignat en el codi del projecte. En aquest moment l’app pregunta si es vol guardar l’experiment en la llista de la pantalla d’inici per altres vegades.

Una vegada dins la pantalla de l’Estació meteorològica, si es pitja en la fletxa de dalt l’app començarà a agafar dades de pressió, temperatura i humitat que aniran apareixen en tres gràfics com els de la captura de pantalla de dalt a la dreta. Qualsevol dels gràfics es pot ampliar i consultar els valors sobre ell mateix. En aturar la presa de dades es poden guardar o enviar per tractar-les posteriorment i/o guardar aquest experiment concret amb els seus valors en la pantalla inicial de l’aplicació.


Deixa un comentari

Fill in your details below or click an icon to log in:

WordPress.com Logo

Esteu comentant fent servir el compte WordPress.com. Log Out /  Canvia )

Google photo

Esteu comentant fent servir el compte Google. Log Out /  Canvia )

Twitter picture

Esteu comentant fent servir el compte Twitter. Log Out /  Canvia )

Facebook photo

Esteu comentant fent servir el compte Facebook. Log Out /  Canvia )

S'està connectant a %s

Aquest lloc utilitza Akismet per reduir els comentaris brossa. Apreneu com es processen les dades dels comentaris.