**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?1088x777}} **Progettazione e costruzione** Tramite l'IDE di Arduino dobbiamo scaricare la board corretta e installare le librerie relative al sensore. {{ide.png}} 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. // Template ID, Device Name and Auth Token are provided by the Blynk.Cloud // See the Device Info tab, or Template settings #define BLYNK_TEMPLATE_ID "********" #define BLYNK_DEVICE_NAME "********" #define BLYNK_AUTH_TOKEN "********" // Comment this out to disable prints and save space #define BLYNK_PRINT Serial #define DHTPIN 13 #define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321 #include #include #include #include "DHT.h" #include char auth[] = BLYNK_AUTH_TOKEN; // Your WiFi credentials. // Set password to "" for open networks. char ssid[] = "********" char pass[] = "********" float temperatura = 0; float umidita = 0; DHT dht(DHTPIN, DHTTYPE); void setup() { // Debug console Serial.begin(115200); Blynk.begin(auth, ssid, pass); // You can also specify server: //Blynk.begin(auth, ssid, pass, "blynk.cloud", 80); //Blynk.begin(auth, ssid, pass, IPAddress(192,168,1,100), 8080); /* // Clear the terminal content terminal.clear(); // This will print Blynk Software version to the Terminal Widget when // your hardware gets connected to Blynk Server terminal.println(F("Blynk v" BLYNK_VERSION ": Device started")); terminal.println(F("-------------")); terminal.println(F("Type 'Marco' and get a reply, or type")); terminal.println(F("anything else and get it printed back.")); terminal.flush(); */ dht.begin(); } void loop() { Blynk.run(); temperatura = dht.readTemperature(); Serial.print("temperatura: "); Serial.println(temperatura); umidita = dht.readHumidity(); Serial.print("umidita: "); Serial.println(umidita); Blynk.virtualWrite(V4, temperatura); // Set Virtual Pin 0 frequency to PUSH in Blynk app Blynk.virtualWrite(V5, umidita); // Set Virtual Pin 1 frequency to PUSH in Blynk app delay(5000); } 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) {{blynk_console.png}} 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 //LCD+DHT22+Blynk locale #include #include #include #include #include "DHT.h" #include LiquidCrystal_I2C lcd(0x27, 16, 2); // set the LCD address to 0x27 for a 16 chars and 2 line display #define DHTPIN 13 #define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321 const char* ssid = "*************"; const char* password = "*************"; const char* auth = "*************"; float temperatura = 0; float umidita = 0; DHT dht(DHTPIN, DHTTYPE); void setup() { lcd.init(); //initialize the lcd lcd.backlight(); //open the backlight //Blynk.begin(auth, ssid, password); Blynk.begin(auth, ssid, password, IPAddress(192,168,1,4), 8001); Serial.begin(115200); dht.begin(); } void loop() { Blynk.run(); temperatura = dht.readTemperature(); Serial.print("temperatura: "); Serial.println(temperatura); umidita = dht.readHumidity(); Serial.print("umidita: "); Serial.println(umidita); String stringOne = "Temp C "; String stringTwo = stringOne + temperatura; lcd.setCursor(0, 0); // set the cursor to column 3, line 0 lcd.print(stringTwo); // Print a message to the LCD stringOne = "Hum % "; stringTwo = stringOne + umidita; lcd.setCursor(0, 1); // set the cursor to column 3, line 0 lcd.print(stringTwo); // Print a message to the LCD Blynk.virtualWrite(V0, temperatura); // Set Virtual Pin 0 frequency to PUSH in Blynk app Blynk.virtualWrite(V1, umidita); // Set Virtual Pin 1 frequency to PUSH in Blynk app delay(5000); }