Thermometer mit OLED Display - AZ-Delivery

Presente Contributo descrive la Costruzione di un semplice Termometro con un DS18B20 Sensore. Abbiamo muoiono un Board con ESP8266-E12 e integrato, Display OLED e un Sensore DS18B20 senza Board. Il Circuito è molto semplice e il Sensore direttamente con il Consiglio di amministrazione di saldature.

Circuito:

Vista:

Dato che il ESP8266 WiFi che ho in Sketch già il Supporto di un secondo di distanza, Sensore installato. Questo secondo Sensore del Termometro con ESP Now comunicare, un Protocollo con il molto di risparmio energetico Soluzioni possono essere creati. I Risultati vengono poi alternativamente sul Display. Se non remoto Sensore è collegato, viene visualizzato solo il Valore del Sensore interno di errore.

La Scenetta è ampiamente commentato.

Sketch:

/* Esp8266 con Display OLED come Termometro 
 */

//Biblioteche per WiFi 
#include <ESP8266WiFi.h>
//Biblioteca per Display OLED
#include <U8g2lib.h>
//Biblioteche per DS18B20 Sensore di Temperatura
#include <OneWire.h>
#include <DallasTemperature.h>

//Biblioteca per ESP-Now
extern "C"{
#include <espnow.h>
}

//Pin per il Sensore di temperatura
const byte bus = 0;//pin GPIO0

//Protocollo per la Lettura del Sensore
OneWire oneWire(bus);

//Sensore Istanza
DallasTemperature sensori(&oneWire);

//Array per Sensoradressen per salvare
DeviceAddress indirizzi;

//Display inizializzare
U8G2_SSD1306_128X32_UNIVISION_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ 5, /* data=*/ 4, /* reset=*/ 16);

//Offset di Calibrazione della Temperatura
const uint8_t offset = 15;

//Valori dei Sensori di temperatura -127 = il Valore, 
//si ottiene se il Sensore non è collegato    float esterno = -127;   float dentro = -127;

// Dopo un Reset è l'SSID visibile in modo remoto Sensore 
// in grado di connettersi. Dopo circa 2 Minuti, deve il nome SSID nascosto 
// Contatore per Spegnere il SSID visibile
int cnt = 24;

//Logo come immagine Bitmap per Display
#define haus_width 16
#define haus_height 16
static unsigned char haus_bits[] = {    0x80, 0x0c, 0xc0, 0x0d, 0x60, 0x0f, 0x30, 0x0e, 0x18, 0x0c, 0xcc, 0x19,    0x46, 0x31, 0 x 47, 0x71, 0xc5, 0x51, 0x04, 0x10, 0xf4, 0x16, 0x94, 0x16,    0x94, 0x16, 0x94, 0x10, 0x94, 0x10, 0xff, 0xff };

#define baum_width 16
#define baum_height 16
static unsigned char baum_bits[] = {    0x00, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x10, 0x05, 0x08, 0x0a, 0x34, 0x13,    0x04, 0x10, 0x02, 0x10, 0x02, 0x08, 0x04, 0x16, 0x18, 0x10, 0xd0, 0x17,    0xa0, 0x09, 0x80, 0x01, 0x80, 0x01, 0xff, 0xff };


//struttura dati per lo Scambio di dati tramite ESP Now
struct DATEN_STRUKTUR {     float temp = 0;
};

//Rete, Nome
char* SSID = "Termometro";


//funzione di Callback quando sono stati ricevuti i Dati 
void on_receive_data(uint8_t *mac, uint8_t *r_data, uint8_t len) {       DATEN_STRUKTUR data;     //copiamo i Dati ricevuti alla struttura dei dati     //per la struttura di dati di accesso     memcpy(&data, r_data, sizeof(data));     l'esterno = data.temp;   };
 
// function per una Sensoradressen stampa
void printAddress(DeviceAddress indirizzi)
{   for (uint8_t i = 0; i < 8; i++)   {     if (indirizzi[i] < 16) Serial.print("0");     Serial.print(indirizzi[i], HEX);   }
}

void setup() {   Serial.begin(115200);       WiFi.begin();   //Configurazione dell'Access Point   WiFi.moda(WIFI_AP);      WiFi.softAP(SSID);    //ESOP-Now inizializzare   if (esp_now_init()!=0) {     ESP.restart();     delay(1);   }       // ESP Ruolo imposta 1=Master, 2 = Slave 3 = Master + Slave   esp_now_set_self_role(2);    //e funzione di callback registrare   esp_now_register_recv_cb(on_receive_data);     //Display preparare   u8g2.begin();   u8g2.enableUTF8Print();   u8g2.setFontMode(0);   //inizializzazione Sensore di temperatura   sensori.begin();   Serial.print(sensori.getDeviceCount(), DEC);   Serial.system.out.println(" Sensori trovato.");   //Ora controlliamo se il Bus in parassitaria Modalità   Serial.print("Parassitario Modalità ");   if (sensori.isParasitePowerMode()) {     Serial.system.out.println("UN");   } else {     Serial.system.out.println("DA");   }   //Ora controlliamo se uno dei Sensori sul Bus un Sensore di Temperatura è   if (!sensori.getAddress(indirizzi,0)) {     Serial.system.out.println("Nessun Sensore di temperatura presente!");   }   //gli indirizzi mappa   Serial.print("Indirizzo: ");   printAddress(indirizzi);   Serial.system.out.println();   sensori.setResolution(indirizzi,12);   Serial.print("Risoluzione = ");   Serial.print(sensori.getResolution(indirizzi), DEC);   Serial.system.out.println();   //Resistenza Pullup per il Sensore di temperatura   pinMode(0,INPUT_PULLUP);
}

void loop() {   char testo[50] = {0}; //Textbuffer per Display   int tmp; //Temporaneamente per Temperature   sensori.requestTemperatures(); // Sensore di avviare la Misurazione   delay(800);//Tempo per misurare la Temperatura   interna = sensori.getTempC(indirizzi); //Temperatura dal Sensore di lettura   //camminiamo la Temperatura dopo integer, con una cifra Decimale   tmp = round(dentro * 10);   //testo di output generare   sprintf(testo,"%2d.%01d°C", tmp/10-offset, abs(tmp%10));   //e Display inviare   u8g2.firstPage(); do {     //per prima cosa il Logo     u8g2.drawXBM( 0, 8, haus_width, haus_height, haus_bits);     //il Testo     u8g2.setFont(u8g2_font_osb26_tf);     u8g2.setFontDirection(0);     u8g2.drawUTF8(20, 30, testo);   } while ( u8g2.nextPage() );     delay(5000); //attendere 5 Secondi   //Contatore ridurre   if (cnt > 0) cnt--;   //Abbiamo un Valore di distanza Sensore   //dimostriamo l'   if (esterno !=  -127) {     //camminiamo la Temperatura dopo integer, con una cifra Decimale     tmp = round(esterno * 10);     //testo di output generare     sprintf(testo,"%2d.%01d°C", tmp/10, abs(tmp%10));     //e Display inviare     u8g2.firstPage(); do {       //per prima cosa il Logo       u8g2.drawXBM( 0, 8, baum_width, baum_height, baum_bits);       //il Testo       u8g2.setFont(u8g2_font_osb26_tf);       u8g2.setFontDirection(0);       u8g2.drawUTF8(20, 30, testo);     } while ( u8g2.nextPage() );     delay(5000); //attendere 5 Secondi     //Contatore ridurre     if (cnt>0) cnt--;   }   //Se il Contatore a 0 il SSID nascondere   if (cnt <= 0) WiFi.softAP(SSID,ZERO,1,1);
}   


Con un adeguato LiPo-Batteria 3.7 V il Termometro può funzionare a Batteria. Regolatore di carica e Batteriebuchse sono il Board è presente.

 

DisplaysEsp-8266Projekte für anfängerSensoren

16 commenti

Gerald Lechner

Gerald Lechner

Vielen Dank!

Die Buchse für den Akku an der Untrerseite der Platine ist ein 1.25mm JST 2.

Rahul

Rahul

Tolles Projekt!
Von dem Aufbau habe ich ein System mit DS18B20 und eins mit DHT22 aufgebaut.
Die loggen ihre Temperatur- (und Feuchte-) Werte auf einem Intranet-Webserver.

Um welchen Steckverbinder handelt es sich bei dem Akku-Anschluss?

Bernd Albrecht

Bernd Albrecht

Die eingebaute LED ist die Lade-Kontrollleuchte für einen LiPo-Akku. Rot = laden, grün = laden fertig, rot-blinkend = kein Akku und dunkel = geladener Akku. Diese LED kann nicht abgeschaltet werden.

AndreasD

AndreasD

Hallo,

kann mir jemand helfen, wie ich die Onboard-LED abschalte? Ich weiß nicht, warum ich mich so anstelle. Bei mir blinkt sie sehr schnell. Im Sketch habe ich allerdings nichts gefunden.
Danke für eine Antwort.
Andreas

István Maszlik

István Maszlik

Hallo! Ich kann die externen und internen Thermometer nicht anschließen. Wie richte ich es ein?

Carsten Jürges

Carsten Jürges

Man könnte das noch um die Luftfeuchtigkeit (bme280) erweitern.
Weiterhin habe ich einen Balken spendiert, der anzeigt, wie alt die Messung vom Aussensensor ist. Ist diese zu alt, setze ich den Wert wieder zurück, damit dessen Anzeige unterdrückt wirdWas interessiert eine Temperatur von vor zwei Stunden …
Wenn der Wert sehr alt ist, lasse ich dieses Thermometer im WiFi sichtbar werden, damit sich das Aussenthermometer neu verbinden kann …

Mario Spies

Mario Spies

Guten Tag,
ist es möglich das Board mit ESPEASY zu betreiben?
An welchen I/O Ports hängt das Display.

Michael Riedel

Michael Riedel

Hallo ich bin neu Hier ,
versuche seit Tagen das kleine Projekt zum laufen zu bringen und verzweifle ….
beim überprüfen bleib es hier hängen
#include
Meldung “no such file oder Directory”
wo kann ich und welche Libary " espNow " herunterladen ???
habe schon vieles versucht ohne Erfolg
beim anstecken des ESP 8266 steht auf dem Display 10 nets found
wer kann mir helfen ??
mfG Michael

Helmut Riethmeier

Helmut Riethmeier

Warum gibt es bei den Kommentare keine Antworten zu lesen, werden die Antworten nur über Email verschickt.

Gruß Helmut

AndreasD

AndreasD

Hallo,
ich bin neu hier und dementsprechend nicht der Profi. Das Projekt finde ich sehr gut. Meine erste Frage ist, warum ist bei
esp_now_set_self_role(2);
standardmäßig Slave eingestellt?
Die zweite Frage: Wann nutze ich (3) Master & Slave und wann (1) Master?
Und drittens: Wenn ich einen Aussensensor mit dem ‘Master’ verbinden möchte, was trage ich dann beim Master ein, (1) oder (3)? Und wenn ich es richtig deute, dann trage ich bei dem zweiten (2) ein. Wie viele könnte ich an den Master anmelden?
Viertens: Wenn ich einen Aussensensor habe, der kein Display benötigt, kann ich dann auch einen esp8266 ESP01S WLAN nutzen? Was müsste dann im Code geändert werden?
Ich bin dankbar für jeden Hinweis.
Beste Grüße, Andreas

Thomas

Thomas

Hallo.
Super Projekt. Ich hätte allerdings 2 Fragen.
1. Was stellt die Schaltung im ersten Bild dar? Die mit dem 10 kOhm Widerstand?
2. Warum ein Temperaturoffset von 15? Wozu ist das Offset gut?
Ich habe das Offset auf 0 gestellt, nun zeigt mir das Thermometer die richtige Temperatur an.

Vielen Dank.
Grüße, Thomas

Gerald

Gerald

Ein 1200mAh Akku hält ohne Aufladung ca. 1 Tag.
Der 4.7 kOhm Widerstand ist nicht nötig wenn man den Datenpin mit pinMode auf INPUT_PULLUP setze.
Für einen Temperatursensor der dei Daten mit WiFi und mit Batterie betrieben werden kann, möchte ich auf den nächsten Beitrag in diesem Blog verweisen.

Sören

Sören

Meines Erachtens fehlt zwischen Plus-Pol und Daten-Pin ein 4,7kOhm Widerstand – oder ist der bei 3.3V nicht nötig?
Ich arbeite grundsätzlich mit 5V.

Passende Widerstände sollte az-delivery auch anbieten…

Stephan

Stephan

Hallo Manuel,

du könntest die Temperaturen mit MQTT versenden. Für OpenHab gibt es da dann entsprechende Unterstützung.
Nutze ich auch für diverse Sensoren. Z.B.: https://github.com/stritti/smart-swimming-pool

Ralph

Ralph

Das mit der Batterie würde mich auch interessieren.

Zu. Kühlschrank, der ist ein relativ guter Farradayscher Käfig mit Wifi innen ist da nicht viel. Funfakt deswegen hatte Snowden als die Journalisten ihn in HongKong aufsuchten, deren Smartphones in den Kühlschrank gesteckt.

Manuel

Manuel

Hi,

interessante Sache. Wie lange würde die Batterie in etwa halten? Und wäre das WiFi geeignet, um den Sensor im SmartHome (openHAB) zu integrieren? Suche noch eine Lösung um die Kühlschranktemperatur zu überwachen.

Danke für Kommentar.

Grüße

Manuel

Lascia un commento

Tutti i commenti vengono moderati prima della pubblicazione