letscontrolit / ESPEasy

Easy MultiSensor device based on ESP8266/ESP32
http://www.espeasy.com
Other
3.29k stars 2.22k forks source link

0.91" Oled screen not working randomly (Heltec HTIT-W8266) #1031

Closed Nico34160 closed 1 year ago

Nico34160 commented 6 years ago

Hello,

I have bought a ESP8266 with an embeded 0.91" Oled screen (128x32), after installing ESPEasy in MEGA version (to have OLED 128x32 choice available) a bug is present, the screen work for few seconds then shutdown. At this time no I2C device is found (with I2C SCAN tool).

I have uploaded a test code provided by the manufacturer (Arduino code) the screen work fine and does not shutdown anymore.

Maybe you're aware of this bug and a solution is available but i haven't find any topics on this issue.

Could you help me ?

Steps to reproduce

Upload ESPEasy MEGA onto HTIT-w8266 board (Heltec wifi kit8). Create OLED device SD1306. Tick "enabled" Choose 128x32 for the screen size Click submit.

Does the problem persists after powering off and on? (just resetting isn't enough sometimes) Yes

Expected behavior

Tell us what should happen? The screen would does not shutdown in normal case.

Actual behavior

Tell us what happens instead? the screen shutdown after few seconds

System configuration

Hardware: Heltec HTIT-W8266 / WIFI KIT 8

Software or git version: ESP_Easy_mega-20180307_normal_ESP8266_4096.bin

Below you will find the Github from the manufacturer for this module, the link have some library available for Arduino maybe this can help you to find the problem.

https://github.com/Heltec-Aaron-Lee/WiFi_Kit_series/tree/master/esp8266/libraries/OLED

Regards.

TD-er commented 6 years ago

Do you have a link to the sketch that works?

TD-er commented 6 years ago

Never mind, saw the link.,.

Nico34160 commented 6 years ago

the link for the working script (arduino).

https://github.com/Heltec-Aaron-Lee/WiFi_Kit_series/blob/master/esp8266/libraries/OLED/examples/OLED_091_128x32_SSD1306/OLED_091_128x32_SSD1306.ino

TD-er commented 6 years ago

Have you tried setting the display to "medium" contrast? That can be done in the web interface, or by sending a command: http://192.168.1.75/control?cmd=OLEDFRAMEDCMD,med Ofcourse use the IP of your own module. You can also try "low", "med", "high", "on" or "off"

TD-er commented 6 years ago

Oh and by the way, please also test the "OLED Framed" plugin

Nico34160 commented 6 years ago

Oled framed display nothing on the screen. I will try with adjusting contrast on the OLED. I will keep you informed.

Nico34160 commented 6 years ago

Ok i have made the test, i haven't contrast settings on OLED plugin (not framed OLED), just "on", "off", "clear". if the screen display anything the command (on, off, clear) works fine but when the screen shutdown the command doesn't work anymore. Strange things is the lost of the I2C module, when the problem occur, the I2C tool display "No devices found" instead of : 0x3c PCF8547A OLED. If the OLED screen is disabled the I2C module never disappear. Another strange thing, the I2C module is lost when the screen is refreshed.

TD-er commented 6 years ago

Did you test with the OLED Framed to switch the contrast level, to see if you get something displayed? N.B. do not use both OLED plugins at the same time on the same I2C address. So either remove the other, set to other I2C address or disable the other plugin.


Verzonden vanaf laptop

On 9 March 2018 at 13:26, Nico34160 notifications@github.com wrote:

Ok i have made the test, i haven't contrast settings on OLED plugin (not framed OLED), just "on", "off", "clear". if the screen display anything the command (on, off, clear) works fine but when the screen shutdown the command doesn't work anymore. Strange things is the lost of the I2C module, when the problem occur, the I2C tool display "No devices found" instead of : 0x3c PCF8547A OLED. If the OLED screen is disabled the I2C module never disappear. Another strange thing, the I2C module is lost when the screen is refreshed.

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/letscontrolit/ESPEasy/issues/1031#issuecomment-371799223, or mute the thread https://github.com/notifications/unsubscribe-auth/ADk9lpPsjHtTUBv9o6Z6Ttae4nh8QMz2ks5tcnT7gaJpZM4SjHAA .

Nico34160 commented 6 years ago

test with OLED Framed : Nothing displayed. adjusting contrast doesn't work. I2C devices are missing (no devices found). If i disabled OLED device, the I2C devices stay detected all the time.

TD-er commented 6 years ago

That sounds like the OLED device is crashing and blocking all I2C communications. Do you have a link where these are being sold?

Nico34160 commented 6 years ago

Why OLED crash using ESPEasy firmware and not when using test code arduino (test code use also Wire.h library so the display is driven through the I2C channel...)

The link for bought the module: https://www.amazon.com/ESP8266-development-Arduino-NodeMcu-0-91inch/dp/B074373KTY/ref=sr_1_6?ie=UTF8&qid=1520603485&sr=8-6&keywords=esp8266+oled

TD-er commented 6 years ago

The OLED is connected to GPIO-2 (SDA) and GPIO-14 (SCL) and a separate reset (GPIO-4) The current implementation of the OLED plugins doesn't use any reset and maybe something is being done with GPIO-4 in ESP-easy? I assume you have nothing connected to that pin? Maybe you could set the internal pull-up resistors for that pin in the configuration page?

image

Nico34160 commented 6 years ago

Nothing connected on the module. how i can set an internal pull-up resistor in ESPEasy ?

Nico34160 commented 6 years ago

pay attention to the schematic provided by the seller, the only way to have anything on the screen is to set I2C (in Hardware tab) as the default ESPEasy config (GPIO<->SDA = GPIO-4(D2) and GPIO<->SCL = GPIO-5(D1). I have tested with the GPIO02 and GPIO14 but in this case nothing on screen at all time and I2C devices are not detect even if OLED is disabled.

Nico34160 commented 6 years ago

In the test code (working fine) i have see this :
`// This example just provide basic function test; // For more informations, please vist www.heltec.cn or mail to support@heltec.cn

include

include "OLED.h"

//WIFI_Kit_8's OLED connection: //SDA -- GPIO4 -- D2 //SCL -- GPIO5 -- D1 //RST -- GPIO16 -- D0

define RST_OLED 16

OLED display(4, 5);

// If you bought WIFI Kit 8 before 2017-8-20, you may try this initial //#define RST_OLED D2 //OLED display(SDA, SCL);

void setup() { pinMode(RST_OLED, OUTPUT); digitalWrite(RST_OLED, LOW); // turn D2 low to reset OLED delay(50); digitalWrite(RST_OLED, HIGH); // while OLED is running, must set D2 in high`

So the good settings for I2C is : GPIO<->SDA = GPIO-4(D2) and GPIO<->SCL = GPIO-5(D1).

If you look just below "void setup" reset pin is set to low and after 50ms set to high.... Maybe this informations can help you

Nico34160 commented 6 years ago

Ok, you're on the good way with the internal pull-up. I have set GPIO16 to ouput high and now the screen stay on :)

TD-er commented 6 years ago

Hmm, GPIO-16 is a special one, at least in ESPeasy.

This may prevent the unit to go into deepsleep and I wonder if it will restart properly.

Nico34160 commented 6 years ago

The project is just a fuel gauge for my home boiler, just to have an alert when the tank is at low level, it's not a critical sensor. Connected through my Domoticz Raspberry (for now he manage the swimming pool with some sensors, temperature, pressure, ph, PH Minus level in tank, with a sensitive 7" screen in the technical room). The goal is to display the fuel level, the time and date of the last measure, it's not critical if he hangs sometime, in this case i will set an heartbeat link between the Raspberry and the ESP8266 module. If the ESP stop to work, DOmoticz should send me an alert (SMS).

Thank you for your help :)

TD-er commented 6 years ago

Does the Framed plugin work, now the reset is managed? That one may allow for larger fonts, when using 1 line per screen. And also the animation may give a quick indication on its activity. Also it will show the WiFi connection strength.

Nico34160 commented 6 years ago

the screen doesn't work correctly with OLED Framed, some lines are missing or bad drawed but the screen stay "ON" with GPIO-16 = Output High

TD-er commented 6 years ago

The 32 pixel height screens only show the odd (or even) lines. Still have to fix that.

Nico34160 commented 6 years ago

If you need a beta tester for the OLED Framed plugin on 128x32 screen I can made tests.

Nico34160 commented 6 years ago

After few days, the OLED is working fine but the ESP8266 reboot every +/- 2 hours, it's not critical but i think this is due to GPIO16 settings and cabling onto this module.

TD-er commented 6 years ago

Is it a constant interval? If semi random, please try another USB cable and/or power supply.

tentious commented 6 years ago

Would also like to get this guy going. I have this exact model and would like to feed some data to the 128x32 OLED screen. Let me know if you get a beta working, will be happy to test.

rsoldie commented 6 years ago

ich auch :-)

GerdW commented 5 years ago

same problem here

TD-er commented 5 years ago

Is it this board: WIFI ESP8266 0.91 Inch Blue OLED Display WIFI Kit 32 IOT Development Board for Arduino with a heat sink ? If so, I wonder why they supply it with a heatsink.

GerdW commented 5 years ago

looks like the same board. maybe the heat-sink is for the charging chip on the backside (it has a charging circuit) the display remains dark with easyesp

sebr82 commented 5 years ago

Still somebody working on this issue? Sample code from Heltec works flawless, but no luck with espeasy. Schematic is available too: https://github.com/Heltec-Aaron-Lee/WiFi_Kit_series/blob/master/SchematicDiagram/WIFI_Kit_8_Schematic_diagram.PDF Plus the info they give about this module: "In order to reduce the pin number, we use a hardware RESET system. Before init OLED device, delay more than 10ms is must needed."

TD-er commented 5 years ago

@sebr82 If I understand your reply correctly, it means you have to wait to init the device for a while after boot?

So if you enable the plugin after boot, it is working?

sebr82 commented 5 years ago

No, unfortunately not. That was just the information from Heltec regarding the OLED on this module. Situation is like in the initial post: if OLED plugin is enabled, it is not working plus also nothing on I2C detected anymore. The issue is likely to be the reset line. Any chance to get this sorted out?

I am new to espeasy but might the "rules" function be helpful to toggle GPIO-16 on boot?

TD-er commented 5 years ago

GPIO-16 does not have a pull-up resistor like the other pins have. You could try to add a switch plugin to that pin and set it to output "1".

The thing is, I don't have this board so I cannot test it. I can try to add a checkbox to pull it high, but it may be a rather iterative process to make some changes, make a build, let someone test it, try to get the answers without knowing exactly what's wrong, etc.

Also it is a 128x32 OLED, which is not really very well supported by the OLED framed plugin at this moment.

rsoldie commented 5 years ago

schön das jemand sich der sache hier annimmt. ich habe immernoch das problem, das ich das gerät verbinde und ausser dem blinken der LED keine andere aktion erfolgt. keine anzeige auf dem display, keine reaktion am pc. ist das teil defekt?

TD-er commented 5 years ago

@rsoldie It looks like this particular module is keeping the OLED display in reset state. So unless we release this reset state, it will not work.

rsoldie commented 5 years ago

danke für die schnelle antwort, aber wie kann ich das ändern?

TD-er commented 5 years ago

It looks like we have to change something in ESPeasy itself, like adding another pin definition for the reset in the plugin.

But apart from that there also has to be made a few more changes in the plugin to support the 128x32 display.

rsoldie commented 5 years ago

ich kann kein neuen code aufspielen. das gerät wird erkannt aber der upload wird mit fehler abgebrochen.

rsoldie commented 5 years ago

die led unter BAT blinkt mit hoher frequenz ohne ende. ich installiere die wifi-kit-series neu und versuche es noch einmal

TD-er commented 5 years ago

OK, I re-read the whole thread and before I do anything for it, there has to be something really clear here. What are the pins used by this board? I see a drawing which is using totally different pins compared to the PDF and also the linked source code that appears to be working. Also it looks like there are several versions of this board. And it seems like the board also supports a battery, so there should be some deepsleep wake functionality, which is using GPIO-16 to wake. But that one appears to be connected to the RST of the OLED.

So in short:

rsoldie commented 5 years ago

ich möchte nur einen wifi-test auf das board senden. die pinbelegung ist unbekannt. die bezeichnung der pins ist minimal abweichend von der abbildung oben. IMG_20190312_133255 ich hoffe das bild ist sichtbar.

TD-er commented 5 years ago

Is there maybe something written at the bottom of the PCB which may relate to the year/week of production? Or some version number of the PCB?

rsoldie commented 5 years ago

IMG_20190312_155538 ich kann nichts finden, aber sieh selbst

rsoldie commented 5 years ago

na schön, da das hier doch nicht sooo fruchtbar ist hab ich mir ein neues modul bestellt. neuinstallation von git und co haben auch nichts gebracht. danke für eure mühe. mfg r.

sebr82 commented 5 years ago
  • What pin is the RST connected to?

  • What version of the board is at use => also related to the pins

  • Is the board capable of wake up after deepsleep? => then RST and D0/GPIO-16 are connected

  • What pins are used for SDA/SDC? Some links suggest the normal GPIO-4 and -5, but there is also a schematic which suggests GPIO-2 and -14.

  • What code does work?

There are indeed different versions of this board, most likely clones, out there but also wrong schematics. From what I know I have a legit Heltec board. The pinout/connections is exactly as shown here: http://stefanfrings.de/esp8266/index.html (Version A) The following code (1st post) is running flawless on the board: https://www.mikrocontroller.net/topic/438027

TD-er commented 5 years ago

@rsoldie Based on the images shown here it looks like you have a "version A".

image

Version A:

version B:

It think it should be possible to simply test with either GPIO-16 pulled high, or GPIO-4 pulled high to see if the display can be found via I2C. If so, then it is no longer in reset.

And the part that should fix it from that source code:

    if (reset_pin != NO_RESET_PIN)
    {
        pinMode(reset_pin, OUTPUT);
        digitalWrite(reset_pin, LOW);
        delay(10);
        digitalWrite(reset_pin, HIGH);
    }
    delay(100);

In that code, the reset pin is set to be GPIO-16. (thus the "A" version)

sebr82 commented 5 years ago

It think it should be possible to simply test with either GPIO-16 pulled high, or GPIO-4 pulled high to see if the display can be found via I2C. If so, then it is no longer in reset.

It is. Just connected a pullup resistor between GPIO-16 and 3.3V and the display works reliable now.

Would be great if the sequence from the code above could make it into espeasy for display init.

rsoldie commented 5 years ago

ich danke euch sehr. inzwischen habe ich ein neues board da ich für das alte board immer neue fehlermeldungen bekam und der frust mich von meinem vorhaben abhält konstruktiv zu sein. ich hoffe der chat hilft mir die gemachten fehler, welche auch immer das waren, zu vermeiden. mit freundlichen grüßen rs

RallyHagge commented 5 years ago

I have the "A" version of the Heltec Wifi Kit 8 (AKA: HTIT-W8266)

I have the display working if I'll set GPIO-16 to 1 at boot, but it won't display anything until I click "Submit" in Devices -> Edit (Display - OLED SSD1306). If I reset or power off the device I have to go into the HTTP interface and click the Submit button again.

Added a rule for the GPIO-16 pin:

On System#Boot do gpio,16,1 endon

RallyHagge commented 5 years ago

It think it should be possible to simply test with either GPIO-16 pulled high, or GPIO-4 pulled high to see if the display can be found via I2C. If so, then it is no longer in reset.

It is. Just connected a pullup resistor between GPIO-16 and 3.3V and the display works reliable now.

Would be great if the sequence from the code above could make it into espeasy for display init.

I wasn't able to get it working reliably by adding the pullup resistor. After being left w/o power for a minute the display was scrambled upon next boot.

However, adding a connection or a 1K resistor between RESET and GPIO-16 did the trick and hasn't failed me since.

image