Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Erro ao rodar o código com o display...

Tentei pesquisar bastante e várias outras coisas, tenho uma boa bagagem com embarcados já, mas acredito que algo bobo pode estar passando.

Quando a função Begin do display é invocada o erro abaixo acontece.

Achei várias explicações depois de tentar um debug sem pesquisar:

Nesse link tem parte da explicação (tradução da causa de reset): https://www.espressif.com/sites/default/files/documentation/esp8266_reset_causes_and_common_fatal_exception_causes_en.pdf

E nesse aqui um pouco mais completo, que me disse para não apelar pro google, mas eu fui mesmo assim quando não consegui: https://arduino-esp8266.readthedocs.io/en/latest/exception_causes.html

Alimentação: A causa mais comum apontada para o problema era alimentação...Mesmo com o display desconectado o mesmo erro acontece.

  • Tentei alimentar com uma fonte USB de 2A e nada evoluiu.
  • Não tentei ligar em uma fonte de bancada ainda, pois acredito que seja um problema com código.

Exemplo com WiFi Tentei usar um exemplo do pacote ESP8266 que utilizasse a função WiFi da placa, ela deve puxar bastante corrente e desestabilizar a placa, mas ainda assim funcionou perfeito, risquei alimentação da lista. (Achei comentários sobre usar um capacitor eletrolítico de 470uF entre GND e VCC para evitar resets aleatórios, não tentei e não acredito que vá funcionar)

Outro palpite que achei era o fato de não haver delay entre as funções (no caso a pessoa estava tentando receber interrupções e ele travava no loop principal).

E por último: O Watchdog parece ser o culpado, mas não sei como desativar ele ainda ou "alimentar ele" a cada ciclo. Não tentei espetar o osciloscópio nele também. Não sei se valia todo esse esforço se parece que os outros conseguem fazer sem problemas.

Fiquei bem desanimado, deixei isso dias a fio de lado...

Não tentei modificar a biblioteca da Adafruit, sei programar em C/C++, não é um problema, mas trabalho bastante e estou com bem pouco tempo para ficar escovando bit, se alguém souber e puder me ajudar.

O erro que recebo através da serial (sei que dá para tentar traduzir aquele dump, mas não fiz ainda):

 ets Jan  8 2013,rst cause:2, boot mode:(3,6)

load 0x4010f000, len 1384, room 16 
tail 8
chksum 0x2d
csum 0x2d
vbc204a9b
~ld

Exception (3):
epc1=0x402053b8 epc2=0x00000000 epc3=0x00000000 excvaddr=0x40239afa depc=0x00000000

\>>>stack>>>

ctx: cont
sp: 3ffffd60 end: 3fffffc0 offset: 01a0
3fffff00:  0000000b 00000017 00000000 00000000  
3fffff10:  402046d9 feefeffe feefeffe 00000001  
3fffff20:  00000001 0000003c 00000020 40100c48  
3fffff30:  0000001c 0001c200 00000000 00000001  
3fffff40:  00000001 0000003c 3ffee808 40201b3a  
3fffff50:  00000001 00000001 3ffee9a4 3ffeea0c  
3fffff60:  00000002 00000001 3ffee9a4 40202bf4  
3fffff70:  00000000 feefeffe feefeffe 3ffeea0c  
3fffff80:  3fffdad0 00000000 3ffee808 402010c8  
3fffff90:  3fffdad0 00000000 3ffee9cc 402010ff  
3fffffa0:  feefeffe feefeffe feefeffe 402033f4  
3fffffb0:  feefeffe feefeffe 3ffe84ec 4010100d  
<<<stack<<<
1 resposta
solução!

Ao reinstalar bibliotecas e ver o header do código de exemplo da Adafruit, o código passou a funcionar.

Aparentemente estava relacionado com o reset do display.

Parece simples, mas o código conforme o curso não parecia estar funcionando nas versões de biblioteca que eu tinha, mesmo usando o código baixado do instrutor o erro ocorria.

Testei todos os hardwares com uma placa Arduino comum, para saber se estava tudo bem, tentei com um segundo ESP8266 e por ultimo reinstalei as bibliotecas e consegui fazer funcionar!

//--DISPLAY--
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET     -1 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);