User Tools

Site Tools


discover

Alla scoperta del makerspace

Introduzione

L'obiettivo di questo progetto è quello di creare un dispositivo in grado di misurare la temperatura ambientale e visualizzare i dati su un'applicazione per telefono. Per raggiungere questo obiettivo, abbiamo utilizzato un modulo ESP8266, un sensore di temperatura DHT22, l'app Blynk e il case stampato in 3D.

Materiali e metodi

  NodeMCU con modulo Wi-Fi SoC ESP8266
  Sensore di temperatura DHT22
  Applicazione Blynk
  IDE Arduino
  Stampante 3D
  Saldatore
  Altri componenti elettronici come cavi
  

20230116_143548.jpg

Progettazione e costruzione

Tramite l'IDE di Arduino dobbiamo scaricare la board corretta e installare le librerie relative al sensore.

Abbiamo collegato il sensore di temperatura al microcontrollore utilizzando i pin appropriati.

Ora scriviamo il codice utilizzando l'ambiente di sviluppo integrato (IDE) per acquisire i dati dal sensore di temperatura e visualizzarli sull'applicazione del telefono.

temperatura.ino
  1. // Template ID, Device Name and Auth Token are provided by the Blynk.Cloud
  2. // See the Device Info tab, or Template settings
  3. #define BLYNK_TEMPLATE_ID "********"
  4. #define BLYNK_DEVICE_NAME "********"
  5. #define BLYNK_AUTH_TOKEN "********"
  6.  
  7.  
  8. // Comment this out to disable prints and save space
  9. #define BLYNK_PRINT Serial
  10.  
  11. #define DHTPIN 13
  12. #define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
  13.  
  14. #include <Wire.h>
  15. #include <ESP8266WiFi.h>
  16. #include <ESP8266HTTPClient.h>
  17. #include "DHT.h"
  18. #include <BlynkSimpleEsp8266.h>
  19.  
  20.  
  21. char auth[] = BLYNK_AUTH_TOKEN;
  22.  
  23. // Your WiFi credentials.
  24. // Set password to "" for open networks.
  25. char ssid[] = "********"
  26. char pass[] = "********"
  27.  
  28.  
  29. float temperatura = 0;
  30. float umidita = 0;
  31.  
  32. DHT dht(DHTPIN, DHTTYPE);
  33.  
  34.  
  35. void setup() {
  36. // Debug console
  37. Serial.begin(115200);
  38.  
  39. Blynk.begin(auth, ssid, pass);
  40. // You can also specify server:
  41. //Blynk.begin(auth, ssid, pass, "blynk.cloud", 80);
  42. //Blynk.begin(auth, ssid, pass, IPAddress(192,168,1,100), 8080);
  43. /*
  44. // Clear the terminal content
  45. terminal.clear();
  46.  
  47. // This will print Blynk Software version to the Terminal Widget when
  48. // your hardware gets connected to Blynk Server
  49. terminal.println(F("Blynk v" BLYNK_VERSION ": Device started"));
  50. terminal.println(F("-------------"));
  51. terminal.println(F("Type 'Marco' and get a reply, or type"));
  52. terminal.println(F("anything else and get it printed back."));
  53. terminal.flush();
  54. */
  55. dht.begin();
  56. }
  57.  
  58. void loop() {
  59. Blynk.run();
  60.  
  61. temperatura = dht.readTemperature();
  62. Serial.print("temperatura: ");
  63. Serial.println(temperatura);
  64. umidita = dht.readHumidity();
  65. Serial.print("umidita: ");
  66. Serial.println(umidita);
  67.  
  68.  
  69. Blynk.virtualWrite(V4, temperatura); // Set Virtual Pin 0 frequency to PUSH in Blynk app
  70. Blynk.virtualWrite(V5, umidita); // Set Virtual Pin 1 frequency to PUSH in Blynk app
  71.  
  72. delay(5000);
  73. }

Registriamoci sulla console di Blynk (per chi conosceva già questa soluzione di recente è migrata su una console online, il vecchio progetto ora è conosciuto come Blynk Legacy)

e dall'app configuriamo i nostri widget

blynk.jpg

Abbiamo progettato il case utilizzando un software di modellazione 3D e lo abbiamo stampato utilizzando una stampante 3D. 20230116_143451.jpg

Risultato finale

termometro.jpg

Possibili evoluzioni

Questo progetto è da valutare come uno spunto per progetti più ampli. Sicuramente ci sono decine di evoluzioni / migliorie semplici che si possono applicare a questo semplice progetto, come ad esempio un'alimentazione indipendente (creo un case che preveda una spazio per una batteria), oppure inserisco un display invece (o in aggiunta) dell'invio dei dati alla mia applicazione. Posso creare un trigger che se rilevo una temperatura troppo alta (60°C ad esempio) mi avvisa tramite una notifica. Così come sostituire il sensore di temperatura con uno di movimento.

Inoltre è possibile non utlizzare la console Blynk (limitata senza un abbonamento), ma installarci localmente il vecchio Blynk (Blynk Legacy) e modificare il nostro file ino per puntare sul nostro server locale.

display.jpg

Un esempio di codice può essere il seguente

temperatura_LCD_localServer.ino
  1. //LCD+DHT22+Blynk locale
  2. #include <Wire.h>
  3. #include <LiquidCrystal_I2C.h>
  4. #include <ESP8266WiFi.h>
  5. #include <ESP8266HTTPClient.h>
  6. #include "DHT.h"
  7. #include <BlynkSimpleEsp8266.h>
  8.  
  9. LiquidCrystal_I2C lcd(0x27, 16, 2); // set the LCD address to 0x27 for a 16 chars and 2 line display
  10.  
  11. #define DHTPIN 13
  12. #define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
  13.  
  14. const char* ssid = "*************";
  15. const char* password = "*************";
  16. const char* auth = "*************";
  17.  
  18.  
  19. float temperatura = 0;
  20. float umidita = 0;
  21.  
  22. DHT dht(DHTPIN, DHTTYPE);
  23.  
  24. void setup()
  25. {
  26. lcd.init(); //initialize the lcd
  27. lcd.backlight(); //open the backlight
  28.  
  29. //Blynk.begin(auth, ssid, password);
  30. Blynk.begin(auth, ssid, password, IPAddress(192,168,1,4), 8001);
  31.  
  32. Serial.begin(115200);
  33. dht.begin();
  34.  
  35.  
  36. }
  37.  
  38. void loop()
  39. {
  40.  
  41. Blynk.run();
  42.  
  43.  
  44. temperatura = dht.readTemperature();
  45. Serial.print("temperatura: ");
  46. Serial.println(temperatura);
  47. umidita = dht.readHumidity();
  48. Serial.print("umidita: ");
  49. Serial.println(umidita);
  50.  
  51.  
  52. String stringOne = "Temp C ";
  53. String stringTwo = stringOne + temperatura;
  54.  
  55.  
  56. lcd.setCursor(0, 0); // set the cursor to column 3, line 0
  57. lcd.print(stringTwo); // Print a message to the LCD
  58.  
  59. stringOne = "Hum % ";
  60. stringTwo = stringOne + umidita;
  61.  
  62.  
  63. lcd.setCursor(0, 1); // set the cursor to column 3, line 0
  64. lcd.print(stringTwo); // Print a message to the LCD
  65.  
  66. Blynk.virtualWrite(V0, temperatura); // Set Virtual Pin 0 frequency to PUSH in Blynk app
  67. Blynk.virtualWrite(V1, umidita); // Set Virtual Pin 1 frequency to PUSH in Blynk app
  68.  
  69. delay(5000);
  70. }
discover.txt · Last modified: 2023/04/17 09:37 by gorgolabroot