weylon
February 8, 2024, 4:03pm
1
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.
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! 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!
fony
February 8, 2024, 4:13pm
2
Wen das nicht funktioniert dann nimm, die U8g2 Lib
fony
February 8, 2024, 4:17pm
3
Sehe gerade müsste man mehr umbauen teste erst das, und im Loop alles kommentieren, erst soll der Setup vernünftig anzeigen.
weylon
February 8, 2024, 4:23pm
4
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...
fony
February 8, 2024, 4:26pm
5
Kein Problem
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
weylon
February 8, 2024, 4:49pm
6
Ich habe Deinen Ratschlag befolgt, leider ohne Erfolg. Ich bin wahrscheinlich doch zu doof...
fony
February 8, 2024, 4:52pm
7
Was wird angezeigt?
Doof war ich auch mall
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);
*/
}
weylon
February 8, 2024, 4:59pm
8
Mach ich gleich mal...ich Berichte!
weylon
February 8, 2024, 5:07pm
9
Jetzt sieht es so aus...zwar noch Blinkend, aber sehr aufgeräumt...
fony
February 8, 2024, 5:13pm
10
Die Temp ist nicht angezeigt, warte mall
was für Display ist das 0,9 oder 1,3"?
fony
February 8, 2024, 5:24pm
12
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.
fony
February 8, 2024, 5:28pm
14
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?
fony
February 8, 2024, 5:30pm
16
Gehe davon aus das der ist auf 3,3V drauf == tuts auch.
weylon
February 8, 2024, 5:32pm
19
Compilation error: 'SCREEN_WIDTH' was not declared in this scope
Ich versuche den Fehler zu beheben...
fony
February 8, 2024, 5:36pm
20
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!!!