ESP8266 NodeMCU. U8G


31.07.2017

Для работы с различными дисплеями NodeMCU использует библиотеку U8glib. Поддерживаются дисплеи работающих по шине SPI или IIC. В документации к NodeMCU можно проверить поддерживается именно ваша модель дисплея: https://nodemcu.readthedocs.io/en/master/en/modules/u8g/ В примере используется графический OLED дисплей SSD1306 который работает по шине IIC.

Схема подключения: Примечание: NodeMCU позволяет выбрать GPIO выводы которые будут использованы для линий SDA и SCL. NodeMCU надо собрать с нужными модулями (сайт для собственной сборки NodeMCU: https://nodemcu-build.com). Должны быть включены следующие модули: I2C, U8G Когда включили U8G, становятся доступны опции для выбора модели дисплея и шрифтов. Для того чтобы выбрать шрифты нажмите "Select". Появится окно для выбора шрифтов: Выберите нужные шрифты и нажмите кнопку "Apply" В самом низу страницы: В результате должны получить примерно такую картину: Теперь, когда нужные модули выбраны, можно нажать "Start your build". Подробно о сборке и заливку прошивки NodeMCU говорилось в статье ESP8266 NodeMCU Прошивка. Делаем WiFi розетку Обратите внимание что библиотека u8glib позволяет использовать несколько шрифтов. Но они должны быть включены во время сборки NodeMCU. После заливки NodeMCU. Можно залить скрипт и графические файлы (в формате MONO). Скачать файлы примера можно здесь: https://github.com/avislab/NodeMCUExamples/tree/master/SSD1306_IIC_U8G Рассмотрим как работает скрипт примера. Сначала настраивается шина IIC:


-- IIC init
local sda = 3 -- GPIO14
local scl = 4 -- GPIO12
local sla = 0x3c
i2c.setup(0, sda, scl, i2c.SLOW)
Затем выполняется инициализация дисплея:

-- Display init
disp = u8g.ssd1306_128x64_i2c(sla)
disp:begin()
Первая часть примера - текст на экране. Выбираем шрифт, выводим текст на экран, и в конце задержка на 2 секунды.

-- Set Font
disp:setFont(u8g.font_10x20)
-- Draw a text
disp:firstPage()
repeat
  disp:drawStr(0, 16, "I`s just")
  disp:drawStr(0, 32, "a test.")
until disp:nextPage() == false
tmr.delay(2000000)
Обратите внимание на функции disp:firstPage(), disp:nextPage(). Для тех, кто раньше не использовал библиотеку u8glib такой метод вывода на экран может показаться не совсем понятным. Что это за Page и зачем несколько раз выполнять одну и ту же операцию? На самом деле такой метод - это выход из сложного положения. Такой подход одновременно дает возможность работать с различными дисплеями с разной организацией памяти, и в то же время экономит оперативную память микроконтроллера. Мы не будем углубляться в технические тонкости работы с памятью различных дисплеев, это выходит за рамки данной статьи. Просто примите это как факт. Библиотека u8glib требует именно такого подхода. Вторая часть примера - геометрические фигуры:

-- Draw
disp:firstPage()
repeat
  disp:drawLine(0,0,127,64);
  disp:drawLine(0,64,127,0);
  disp:drawFrame(10,10,40,40);
  disp:drawCircle(100,20,20);
  disp:drawTriangle(60,60, 80,55, 70,40);
until disp:nextPage() == false
tmr.delay(2000000)
Последняя часть примера - использование графических файлов:

-- Read a picture #1
file.open("example1.MONO", "r")
local xbm_data_t = file.read()
file.close()
-- Draw a picture #1
disp:firstPage()
repeat
  disp:drawXBM(26, 0, 76, 64, xbm_data_t)
until disp:nextPage() == false
tmr.delay(2000000)
-- Read a picture #2
file.open("example2.MONO", "r")
local xbm_data_t = file.read()
file.close()
-- Draw a picture #2
disp:firstPage()
repeat
  disp:drawXBM(32, 0, 64, 64, xbm_data_t)
until disp:nextPage() == false
Реализация библиотеки u8glib для NodeMCU использует графические файлы в формате MONO. Можно найти редактор, который способен сохранять файлы в этом формате, или использовать on-line конвертор. Например этот: https://www.online-utility.org/image/convert/to/MONO Важно указывать правильный размер изображения при вызове функции drawXBM. Если размер указать неправильно изображение будет искажено. Подробнее о функционале библиотеки u8glib читайте здесь: https://github.com/olikraus/u8glib/wiki/userreference Скачать пример можно здесь: https://github.com/avislab/NodeMCUExamples/tree/master/SSD1306_IIC_U8G

Видео

Желаю успехов.

Смотри также:

Коментарі:
Владимир говорить:
03.03.2018 13:44
День добрый!
Уточни вопрос, ты пишешь, что
local sda = 3 -- GPIO14
local scl = 4 -- GPIO12
по даташиту, 3 пин - GPIO 0, 4 пин - GPIO 2, проясни как правильно!!!
Не получается подключить монитор 0-96-inch-IIC-SPI-Serial-128X64-Yellow-Blue-OLED-Display-Module-I2C-LCD-Screen-Board, ты не смог бы посмотреть? я подключаю D0(ssd1306) - D4(nodencu v3); D1 - D3, возможно я не правильно подключаю
Владимир говорить:
04.03.2018 08:21
У меня походу монитор подключается по 4SPI стандарту вы можете рассказать про это подключение?
Владимир говорить:
04.03.2018 14:33
Спасибо за оперативную помощь, разобрался
Владимир говорить:
05.03.2018 09:07
Я извиняюсь за назойливость, подскажите как отправить на монитор русский текст? На мониторе отображает "кракозябры"
Андрей говорить:
05.03.2018 12:13
Для этого шрифты должны поддерживать кирилицу. Обратите внимание когда вбираете шрифты, если я не ошибаюсь, с буковкой "r" в конце названия шрифта как раз те, которые с кирилицей.
andre говорить:
16.04.2018 07:14
Comments are disabled due to spam.
Коментарі відключені через спам.
Комментарии отключены из за спама.

Додати коментар

* - обов'язкові поля

Архіви