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

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

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

Микроконтроллер на борту нашего конструктора имеет встроенную Flash память, куда можно загружать различные файлы, в том числе библиотеки.

Сначала загрузи библиотеку для работы с дисплеем к себе на компьютер.

В архиве ты обнаружишь два файла:

  • lcd_api.py
  • esp8266_i2c_lcd.py

Это и есть файлы библиотеки для управления дисплеем LCD 1602. Распакуй их из архива в какую либо папку на компьютере. Эти файлы необходимо загрузить в память микроконтроллера. Для этого нужно открыть файловый менеджер. От крывается с помощью пункта меню Device Filemanager или кнопкой

Откроется окно файловго менеджера:

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

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

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

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

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

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

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

Exp29.py
  1. from machine import I2C, Pin
  2. from esp8266_i2c_lcd import I2cLcd
  3. _init()
  4.  
  5. DEFAULT_I2C_ADDR = 0x3F
  6.  
  7. i2c = I2C(scl=Pin(5), sda=Pin(4), freq=400000)
  8. lcd = I2cLcd(i2c, DEFAULT_I2C_ADDR, 2, 16)
  9. lcd.backlight_on()
  10. lcd.putstr("Hello, World!\nSecond Line")

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

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

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

Настраиваем контроллер шины 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 раз в секунду