сайт для палких паяльників

Для работы с различными дисплеями 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

Видео

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

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

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

 
Translate
Архіви

© 2011-2017 Андрій Корягін, Кременчук - Київ, Україна