Это старая версия документа!


Эксперимент 29. Привет, Мир! LCD

В теоретической части (перед экспериментом) мы познакомились с интерфейсами, в частности с шиной I2C. Кроме того, мы изучили способ подключения дисплея в нашем конструкторе. Разберемся с библиотекой для работы с дисплеем.

Ранее мы использовали стандартную библиотеку не замечая этого, т.к. она подключена по умолчанию. В ней определены различные функции вроде pinMode(), digitalWright() и многие другие. Теперь мы впервые столкнемся с пользовательской библиотекой. Это библиотека функций, которую написал кто-то другой или, даже ты сам, и теперь желаешь использовать для своего эксперимента. Отличие заключается в том, что стандартная библиотека является частью языка программирования, а пользовательские библиотеки перед использованием нужно загрузить в Arduino IDE.

Открыть окно «Управление библиотеками» можно с помощью

Инструменты Управление библиотеками.. или кнопкой

Здесь можно увидеть какие файлы уже загружены. Файл boot.py — это системный файл, его код исполняется сразу после загрузки микроконтроллера. Файл init.py — содержит код функции _init(), которую мы вызываем в каждом эксперименте.

Сюда же нужно загрузить файлы библиотеки. Для этого служит кнопка Upload…. После ее нажатия открывается стандартное диалоговое окно выбора файла. После выбора файла он загружается. Так выглядит файловый менеджер после загрузки файлов библиотеки:

Когда файлы загружены, можно приступить к сборке схемы и написанию программы.

Схема эксперимента

Вся сборка заключается в подключении двух проводов:

Рисунок 1. Монтажная схема эксперимента

Внимание! В зависимости от модели микросхемы I2C, установленной в Лаборатории IoT, адрес на шине может быть 0x3F или 0x27. Запусти данный пример с указанием адреса 0x3F или 0x27, чтобы узнать какой вариант актуален для твоей платы.

Программный код эксперимента

Exp29.py
  1. from machine import I2C, Pin
  2. from esp8266_i2c_lcd import I2cLcd
  3. _init()
  4.  
  5. DEFAULT_I2C_ADDR = 0x3F # Или 0x27 в зависимости от твоей платы IoT
  6.  
  7.  
  8. i2c = I2C(scl=Pin(5), sda=Pin(4), freq=400000)
  9. lcd = I2cLcd(i2c, DEFAULT_I2C_ADDR, 2, 16)
  10. lcd.backlight_on()
  11. lcd.putstr("Hello, World!\nSecond Line")

Сначала мы подключаем библиотеки, которые необходимы для работы программы.

  1. from machine import I2C, Pin
  2. from esp8266_i2c_lcd import I2cLcd

На шине I2C каждое ведомое устройство имеет адрес. Чтобы обратиться к устройству, необходимо знать его адрес. Наша микросхема, которая управляет дисплеем, имеет адрес 0x3F или 0x27. Попробуй оба варианта, чтобы понять на каком адресе находится именно твоя микросхема I2C.

Настраиваем контроллер шины I2C:

  1. i2c = I2C(scl=Pin(5), sda=Pin(4), freq=400000)

Здесь мы сообщили контроллеру, что для сигнала SCL нужно использовать вывод 5, а для SDA — 4. Задали частоту шины 400 кГц. Настроенный объект контроллера записали в переменную i2c.

Теперь настраиваем дисплей.

  1. lcd = I2cLcd(i2c, DEFAULT_I2C_ADDR, 2, 16)

Создаем объект дисплея и в качестве параметров передаем объект контроллера I2C, адрес устройства, количество строк дисплея и количество символов в строке, соответственно.

Теперь мы имеем объект дисплея, с которым можно работать. Начнем с включения подсветки. Для этого используем функцию backlight_on():

  1. lcd.backlight_on()

Выведем текст на дисплей с помощью функции putstr()

  1. lcd.putstr("Hello, World!\nSecond Line")

В качестве параметра в функцию putstr() передается текст для вывода на дисплей. Можно заметить, что мы передаем одну строку, но на дисплее текст отображается в две строки. Дело в том, что переданная строка содержит специальный символ новой строки \n. Этот символ сообщает дисплею, что необходимо перейти на новую строку.

Дополнительное задание

  • Попробуй выводить на дисплей различные текстовые данные
  • Мигать подсветкой дисплея 1 раз в секунду