0.96" Display: Steuerungsfragen

Begonnen von M_I_B, 31 Januar 2018, 09:48:54

Vorheriges Thema - Nächstes Thema

M_I_B

... nachdem nun WeMOS und NodeMCU einwandfrei am laufen habe und gestern diese niedlichen 0.96" Displays aufgeschlagen sind, welche ja u.a. auch eine als Anzeige missbrauchte HM- Platine ersetzen soll, habe ich am Abend gleich damit herum gespielt; feine Sache das! Nicht wirklich was für Brillenträger, aber trotzdem knorke... So was als ePaper- Display wäre dann der absolute Oberhammer...

Hätte dazu dennoch einige Fragen, welche ich über die Suche und manuellem Stübern nicht lösen konnte; wenn's schon irgendwo aufgedröselt ist, wäre ein Link echt super...

Wenn ich das richtig sehe, kann ich das Display nur komplett löschen (oledcmd clear), nicht aber zeilenweise? Wie also macht Ihr das denn, wenn Ihr nur einen Teil einer Zeile neu beschreiben wollt?
Spontan fällt mir dazu gerade mein Rumprobieren von gestern Abend ein. Dort setze ich in Zeile 1 direkt aus ESPeasy Datum und Uhrzeit (mit Sekunden und Refresh im Sekundentakt), in Zeile 2 habe ich aktuell die IP stehen. Zeile 3 ist leer.
In Zeile 4 bis 7 habe ich vorab die Beschriftung geschrieben (Brenner, Heizpumpe, Ladepumpe, Zirkulation) so wie jeweils in jede Zeile einen Doppelpunkt an Pos. 14. Das haut auch alles hin. Nun schreibe ich die Werte der zugehörenden Aktoren aus $EVENT jeweils in die passende Zeile an Pos. 16. Auch das klappt vollkommen schmerzfrei. Aber...
Wenn an Pos. 16 ein "off" gestanden hat und nun ein "on" geschrieben wird, bleibt das zweite "f" von "off" da stehen. Blöder Weise kann man (ich zumindest) den Platz nicht einfach vorher mit Spaces überschreiben. Gesendet wird immer nur ein Space und ich bin noch nicht dahinter gekommen, wie man hier z.B. drei Spaces absetzen kann...
Schöner wäre natürlich wenn man einfach einen auf "set EM08 oled 4 16 $EVENT DELtoEOL" machen könnte... Aber sowas gibt es dazu leider wohl nicht...

Dazu bräuchte ich mal irgendwie einen Lösungsansätze, wie man solche Dinge am schlausten löst...

Tobias

Hast du schonmal in die dazu passende Arduino Library und die examples geschaut?
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Reinhart


Hallo M_I_B!

Ich habe vor ein paar Wochen sowas mit dem Modul DLCD getestet, da gibt es zumindest eine Formatierung der Ausgabe, aber ich kann dir nicht mehr genau sagen ob dein beschriebenes Problem damit lösbar ist. Auf jeden Fall Zeilenweise löschen geht damit auch nicht!


Ich benutze seit neuestem den Echo Spot für solche Ausgaben, da habe ich das Problem mit den nicht erhältlichen Oled Rahmen und dem Einbau nicht.
Der Preis von so einem Oled ist natürlich unschlagbar!


LG
Reinhart

FHEM auf Raspy4 mit Bullseye + SSD, Homematic, ESP8266, ESP32, Sonoff, eBus, NanoCUL, MapleCUL, , MQTT2, Alexa

M_I_B

Zitat von: Tobias am 01 Februar 2018, 17:30:56Hast du schonmal in die dazu passende Arduino Library und die examples geschaut?
Ich? Wo denkst Du hin? Ne, im Ernst... Die Lib hilft mir mangels Kenntnissen nicht weiter und in den Beispielen habe ich nichts finden können, was dieses Problemchen löst.
Wenn ich das richtig verstanden habe, kann man in dsa ESPeasy auch irgendwie selbstgeschriebenes (ich meine nicht die Regeln) einbinden, um z.B. neue Bauteile/Geräte anzubinden. Aber auch da habe ich keinen blassen Schimmer, wie so was geht. Mir ist noch nicht mal klar, was mir in dem Zusammenhang Arduino nutzt...

Zitat von: Reinhart am 01 Februar 2018, 17:58:10... mit dem Modul DLCD getestet, da gibt es zumindest eine Formatierung der Ausgabe, ...
Das schaue ich mir mal an; wäre ja zumindest eine Option. Derzeit sende ich stumpf eine komplette Zeile mit einem nicht darstellbaren ASCII- Zeichen rüber zum Löschen einer Zeile. ABer da die Nummer sehr träge ist, sieht das natürlich nicht nur doof aus, sondern dauert auch...
Zitat von: Reinhart am 01 Februar 2018, 17:58:10... Echo Spot .../... da habe ich das Problem mit den nicht erhältlichen Oled Rahmen und dem Einbau nicht.
Ist ne Option, aber nicht wirklich die Meine. Echo, Alexa & Co. kommen mir vorerst nicht ins Haus. Der Einbau des OLED ist hingegen für mich eher kein Problem. Wir haben in der Firma einen Lasercutter und 3D-Drucker, so das hier sauberes CNC-Arbeiten möglich ist. Allerdings bin ich mir noch nicht schlüssig, wo ich das Display dann letztlich einbaue...

BTW: Das Ding ist ja ein Grafik- Display, aber so wie ich das sehe, wird derzeit nur Text unterstützt, oder? Ich hatte auch irgendwo was gelesen über einen Symbolsatz, den man irgendwie da rein compilieren kann (ich kann's nicht). Was ich auch noch nicht gefunden habe ist eine Tabelle über den vorhandenen Zeichensatz. Steht bestimmt irgendwo, aber ...

Reinhart

#4
ich habe mir einmal ein Python geschrieben damit ich das Oled (0,96) auch direkt vom Raspi ansteuern kann und kein ESPEasy und auch kein Fhem benötige.
Da kann man sogar grafische Symbole setzen und die Schrift beliebig formatieren und skalieren.
Mit deinem Problem der noch immer angezeigten Rest Zeichen gibt es dabei keine Schwierigkeiten, weil ich nach einer Anzeige immer den gesamten Screen lösche bevor ich die nächsten Messwerte anzeige.

# read bme280 data
def get_temp():
   temperature,pressure,humidity = readBME280All() 
   return "%.1f C" % (((temperature)*5+128)/10)

font = ImageFont.truetype('FreeSans.ttf', 18)
draw.text((1, 1), '  - BME Temp -', font=font, fill=1)
font = ImageFont.truetype('FreeSans.ttf', 25)
draw.text((1, 33), ("     " + get_temp()),  font=font, fill=1)
logo = Image.open('temp.png').resize((14, 32), Image.ANTIALIAS).convert('1')
draw.bitmap((1, 33), logo, fill=1)
oled.display()
sleep(waittime)
oled.cls()

Beispielcode für eine BME280 Temperatur, Font Schriftart setzen und skalieren, Icon einlesen umwandeln und auf Koordianten ausgeben.
Es werden in meinem Besipielcode etwa 10 Messwerte hintereienander angezeigt, das läuft 2 x in der Schleife und das Oled geht dann schlafen bis es wieder mit einem Tastendruck geweckt wird.

Wenn du vorhast sowas selber zu schreiben oder anzupassen kann ich dir gerne den gesamten Pythoncode posten, der ist speziell für den Sensor BME280 ausgelegt der die Bibliothek von Adafruit benutzt. Ich kann damit auch alle Fhem Readings auslesen und anzeigen. Ich habe das seinerzeit gemacht weil ich direkt am Raspi kein ESPEasy habe und außerdem ESPEasy mir mit den Ausgabe Möglichkeiten zu beschränkt war.
Am Raspi muss lediglich der I2C Bus aktiviert werden, Phyton und die Adafruit Bibliothek installiert werden, die beinhaltet auch die Oled Treiber.
Macht jedoch nur Sinn wenn du dich in Python zurecht findest.

Ich wollte dir damit aber nur zeigen, dass auf diesem Display vieles möglich ist, auch grafische Anzeigen, man muss derzeit aber selbst noch Hand anlegen. Übrigens, die Aussentemperatur habe ich direkt über den eBus von Fhem abgeholt.

LG
Reinhart

FHEM auf Raspy4 mit Bullseye + SSD, Homematic, ESP8266, ESP32, Sonoff, eBus, NanoCUL, MapleCUL, , MQTT2, Alexa

M_I_B

Moin Reinhard...

... wie ich unten schon anmerkte, bin ich in Sachen Software ein DAU. Ok, ich habe in meinem ersten Leben mal ein bisschen ASM und Bascom auf Atmel gemacht, mit PHP kann ich auch ganz gut um, aber das war's dann auch. Ich bin mehr der Hardware- Mann, begonnen mit Röhrentechnik (mache ich immer noch) und nun als Layout-Designer (Altium) in der Entwicklung von MedTech tätig; irgendwann habe ich halt entschieden, das ich mich nur sinnvoller Weise auf eine Sache konzentrieren kann, und die Softwareseite ist dabei hinten runter gefallen.

Für das angestrebte Projekt kann ich keinen PI einsetzen. Da geht nur WeMOS oder NodeMCU. Und da dran muss ich halt irgendwie 4 Tageslichtsensoren (OPT3001), den besagten Bosch BME und bevorzugt noch zwei analoge Eingänge zwecks D/A anbinden, welche per FHEM-HTTP oder MQTT ihre Werte bereit stellen; an das Teil kommt man später im Live- Betrieb nur mit Mühe wieder dran...

Die Display- Nummer ist davon unabhängig. Die OLED-WeMOS-Kombis sollen letztlich rein informativen Charakter haben und werden per Puffer direkt mit Netzspannung gespeist ...

dev0

Zitat von: M_I_B am 31 Januar 2018, 09:48:54
Wenn an Pos. 16 ein "off" gestanden hat und nun ein "on" geschrieben wird, bleibt das zweite "f" von "off" da stehen.
Wenn das Attribut displayTextWidth gesetzt ist, dann wird in der entsprechenden Zeile alles vor und nach gesendeten String gelöscht (mit Leerzeichen überschrieben). Dann müßtest Du nur die Beschriftung jedes mal mitschicken.

M_I_B

... vielen Dank für den Hinweis; den hatte ich falsch verstanden ...
Probiere ich mal aus, ob das ggf. besser funktioniert, mit Augenmerk auf Optik. Das Ding bleibt ja später immer an; bei den Kosten für so ein Display kann man das gerne nach 1-2 Jahren ersetzen, sollte es dann schwächeln...