Bitte um Hilfestellung Wemos D1 Mini mit OLED und Temperatursensor DS18B20-keine korrekte Anzeige im Display-Display blinkt

Hallo liebe Forumsmitglieder!
Nachdem ich mich "hoch und runter" gelesen habe und wirklich alles versucht habe, was ich kann, komm ich leider ohne Hilfe nicht weiter. Mein Problem ist sicherlich ein Fehler (oder mehrere?) im Code. Ich finde es allerdings nicht! Ich möchte einfach die Temperatur eines DS18B20 Sensor (https://www.amazon.de/Sätze-Temperatursensoren-Wasserdicht-Edelstahl-Sonde-Arduino/dp/B09GLP294B/ref=sr_1_17?keywords=ds18b20&qid=1707406674&sr=8-17) auf diesem Display ([https://www.amazon.de/dp/B09L1FD8GP/ref=twister_B09L1BB7XJ?_encoding=UTF8&th=1] ausgeben. Ich verwende ein D1 Mini Microcontroller. [https://www.amazon.de/AZDelivery-D1-Mini-Entwicklungsboard-kompatibel/dp/B01N9RXGHY/ref=sr_1_8?__mk_de_DE=ÅMÅŽÕÑ&crid=30KLQZ8K55W5O&keywords=az%2Bdelivery&qid=1707406877&s=computers&sprefix=az%2Bdelivery%2Ccomputers%2C95&sr=1-8&th=1]
Angeschlossen ist das Display am D1 Mini wie folgt:
GND an "G" vom D1 Mini, VCC am "5V", SCL an "D1", SCA an "D2".
Der Sensor DS18B20 ist wie folgt am D1 Mini angeschlossen: GND an "G", VCC an "3V3" und DAT an "D4". Zusätzlich ist ein 4,7kOhm-Widerstand zwischen "VCC" und "DAT" geklemmt.
Da das Display zumindest (teilweise) etwas anzeigt, sollte die Verdrahtung korrekt sein?
Wie ihr auf dem Bild sehen könnt, wird "Schlafzimmer-VL" korrekt angezeigt...Temperatur nur als Fragment "Temperatu". Der Rest geht in "Bildrauschen" unter.
Displayanzeige

Sensoranschluß

Der Code sieht wie folgt aus:

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define OLED_RESET 0
Adafruit_SSD1306 display(OLED_RESET);

#define ONE_WIRE_BUS D4
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

void setup() {
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(1);
  display.setCursor(0, 0);
  display.println("Schlafzimmer-VL:");
  display.println("Temperatur:");
  display.display();

  sensors.begin();
}

void loop() {
  sensors.requestTemperatures();
  float tempC = sensors.getTempCByIndex(0);

  display.setCursor(0, 20);
  display.setTextSize(1);
  display.println(tempC);
  display.display();
  delay(1000);
}

Da stecken irgendwo ein oder mehrere Fehler drin, welche ich partout nicht finden kann. Der Fairneß halber...ich bin Neuling, habe aber dieverses andere schon hinbekommen, nur hier komm ich einfach nicht weiter! :frowning: Zu allem Überfluß Blinkt das Display auch noch! Ich weiß nicht, warum! Ich hoffe jemand findet die Muße und kann mir ein wenig helfen?
Vielen lieben Dank schon einmal!

Wen das nicht funktioniert dann nimm, die U8g2 Lib

Sehe gerade müsste man mehr umbauen teste erst das, und im Loop alles kommentieren, erst soll der Setup vernünftig anzeigen.

Hallo fony! Vielen Dank für Deine Hilfe. Ich versuche nun mal Deinen Ratschlag zu befolgen, obwohl ich Dir noch nicht ganz folgen kann. Ich bin leider Einsteiger...

Kein Problem :wink:
die loop so machen, das ist was meine

void loop() {
/*
  sensors.requestTemperatures();
  float tempC = sensors.getTempCByIndex(0);

  display.setCursor(0, 20);
  display.setTextSize(1);
  display.println(tempC);
  display.display();
  delay(1000);
*/
}

schau mall ob noch so Kleinen Display frei habe , eher nicht wie ja :roll_eyes:

Ich habe Deinen Ratschlag befolgt, leider ohne Erfolg. Ich bin wahrscheinlich doch zu doof... :frowning:

Was wird angezeigt?
Doof war ich auch mall :wink:
Spiel mall das drauf und schreibe was wird angezeigt


 

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define OLED_RESET 0
Adafruit_SSD1306 display(OLED_RESET);

#define ONE_WIRE_BUS  D4  
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

void setup() {
  Serial.begin(115200);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(1);
  display.setCursor(0, 0);
  display.print ("Schlafzimmer-VL:");
  display.setCursor(0,20);
  display.print ("Temperatur:");
  display.display();

  sensors.begin();
 
}

void loop() {
   Serial.print( "Temp.  ");
  sensors.requestTemperatures();
  float tempC = sensors.getTempCByIndex(0);
   Serial.print("Temp.  ");
   Serial.println (tempC);
/*
  display.setCursor(0, 20);
  display.setTextSize(1);
  display.println(tempC);
  display.display();
  delay(1000);
  */
}

Mach ich gleich mal...ich Berichte!

Displayanzeige
Jetzt sieht es so aus...zwar noch Blinkend, aber sehr aufgeräumt...

Die Temp ist nicht angezeigt, warte mall
was für Display ist das 0,9 oder 1,3"?

0,96" ist es...

OK wenn das unten nicht Funktioniert hast ein Display was kann nur 128 x 34 dadurch passt die Temp nicht rein
also danach #define SCREEN_ADDRESS 0x3D auf 0x3C ädern und testen.


//https://forum.arduino.cc/t/bitte-um-hilfestellung-wemos-d1-mini-mit-oled-und-temperatursensor-ds18b20

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define OLED_RESET     -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3D ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

/*
#define OLED_RESET 0
Adafruit_SSD1306 display(OLED_RESET);
*/
#define ONE_WIRE_BUS  4 // D4
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

void setup() {
  Serial.begin(115200);
  
  display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS);
  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(1);
  display.setCursor(0, 0);
  display.print ("Schlafzimmer-VL:");
  display.setCursor(0,20);
  display.print ("Temperatur:");
  display.display();

  sensors.begin();
 
}

void loop() {
   Serial.print( "Temp.  ");
  sensors.requestTemperatures();
  float tempC = sensors.getTempCByIndex(0);
   Serial.print("Temp.  ");
   Serial.println (tempC);
/*
  display.setCursor(0, 20);
  display.setTextSize(1);
  display.println(tempC);
  display.display();
  delay(1000);
  */
}

Lösche allles aus der loop() raus.
Wenn Du den Code dann auf den Wemos überträgst, muessen Deine 2 Zeilen sauber erscheinen, da keine weiteren Operationen durchgeführt werden.

Brauch man nicht das wird so wie so nicht angezeigt.
Es soll nur Setup wie du sehen durchlaufen.
das in der Loop stört das Display nicht.

Du weisst nicht, was da auf dem I2C passiert.
Kann der Wmos mit den 5V vom I2C umgehen?

Gehe davon aus das der ist auf 3,3V drauf == tuts auch.

!!!

Ok gehe Kopf waschen :wink:

Compilation error: 'SCREEN_WIDTH' was not declared in this scope

Ich versuche den Fehler zu beheben...

Schreib dort 128,64
Adafruit_SSD1306 display(128, 64, &Wire, OLED_RESET);

UND klemm den auf 3,3V um
Sonst lebt der ESP nicht Lange!!!