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 относится к управлению питанием. Может ли быть так, что система переходит в спящий режим? Как этого не допустить?
@Fabian, 👍1
Обсуждение1 ответ
Мне удалось решить проблему и выяснить, в чем проблема. Я положил здесь ответ для справки, если этот вопрос появится снова. Оказывается, важен сброс 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
в приведенном выше коде работает так, как ожидалось. Похоже, что пример, прилагаемый к плате, неверен.
- Как заставить 5-вольтовое реле работать с NodeMCU
- ESP8266 не подключается к Wi-Fi
- Разница между этими двумя платами NodeMCU?
- NodeMCU - использовать кнопку flash в качестве входного сигнала в loop()
- Как определить размер Flash?
- Как изменить имя модуля ESP8266-12E по умолчанию
- Простой запрос GET с ESP8266HTTPClient
- В ESP-12E NodeMCU, какой выход PIN A0?
Действительно ли Wi-Fi подключается, или что-то застряло в цикле while в
setup()
?, @ocrduЭто действительно соединяется. Я просто привел минимальный пример., @Fabian
@ocrdu: Интересно, что «Привет, мир» появляется 3 раза (детерминировано), а затем экран остается пустым., @Fabian
замените весь код OLED на мигающий светодиод... возможно проблема не в OLED, @jsotola
Без OLED Wi-Fi работает. Таким образом, либо OLED, либо WiFi работают индивидуально. Вместе работает только Wi-Fi. OLED перестает работать через некоторое время., @Fabian