OLED и Wi-Fi не работают вместе на ESP8266 Heltec NodeMCU

У меня есть это плата ESP8266 Heltec NodeMCU с ОЛЕД. Контакты описаны здесь.

У меня следующая проблема. И OLED (с u8g2), и Wi-Fi работают нормально по отдельности. Есть проблема с их совместной работой.

В частности, работает следующий код (он отображает Hello World, затемняет экран и затем повторяет):

#include <U8g2lib.h>
U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE);

void setup() {
  u8g2.begin();
}

void loop() {
  u8g2.setFont(u8g2_font_ncenB14_tr);
  u8g2.firstPage();
  do {
    u8g2.setCursor(0, 20);
    u8g2.print(F("Hello World!"));
  } while ( u8g2.nextPage() );
  delay(2000);
  u8g2.clear();
  delay(2000);
}

Добавление Wi-Fi в код (единственное отличие от кода выше — 2 строки в настройке).

#include <ESP8266WiFi.h>
#include <U8g2lib.h>
U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE);

void setup() {
  u8g2.begin();

  WiFi.begin ( "xxx", "yyy" ); 
  while ( WiFi.status() != WL_CONNECTED  ) { delay(500); } 
}

void loop() {
  u8g2.setFont(u8g2_font_ncenB14_tr);
  u8g2.firstPage();
  do {
    u8g2.setCursor(0, 20);
    u8g2.print(F("Hello World!"));
  } while ( u8g2.nextPage() );
  delay(2000);
  u8g2.clear();
  delay(2000);
}

В данном случае «Hello World»; появляется 3 раза, а затем экран остается пустым.

Изменить:

Когда я включил отладку Wi-Fi, я заметил кое-что, что, по моему мнению, является важной информацией.

Дисплей перестает работать после вывода pm open,type:2 0 отладчика. Я считаю, что pm относится к управлению питанием. Может ли быть так, что система переходит в спящий режим? Как этого не допустить?

, 👍1

Обсуждение

Действительно ли Wi-Fi подключается, или что-то застряло в цикле while в setup()?, @ocrdu

Это действительно соединяется. Я просто привел минимальный пример., @Fabian

@ocrdu: Интересно, что «Привет, мир» появляется 3 раза (детерминировано), а затем экран остается пустым., @Fabian

замените весь код OLED на мигающий светодиод... возможно проблема не в OLED, @jsotola

Без OLED Wi-Fi работает. Таким образом, либо OLED, либо WiFi работают индивидуально. Вместе работает только Wi-Fi. OLED перестает работать через некоторое время., @Fabian


1 ответ


4

Мне удалось решить проблему и выяснить, в чем проблема. Я положил здесь ответ для справки, если этот вопрос появится снова. Оказывается, важен сброс OLED. Это легко увидеть, если использовать библиотеку Adafruit_SSD1306. Код

  #define SCREEN_WIDTH 128 
  #define SCREEN_HEIGHT 32
  #define OLED_RESET 0 
  Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

вызывает именно проблемы, описанные в тексте. Изменив его на

  #define SCREEN_WIDTH 128 
  #define SCREEN_HEIGHT 32
  #define OLED_RESET 16 
  Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

решает проблему. Аналогично, замена U8X8_PIN_NONE на 16 в приведенном выше коде работает так, как ожидалось. Похоже, что пример, прилагаемый к плате, неверен.

,