В теоретической части (перед экспериментом) мы познакомились с интерфейсами, в частности с шиной I2C. Кроме того, мы изучили способ подключения дисплея в нашем конструкторе. Разберемся с библиотекой для работы с дисплеем.
Ранее мы использовали системные библиотеки, такие как time
или machine
.
Теперь мы впервые столкнемся с пользовательской библиотекой. Это библиотека функций, которую написал кто-то другой или, даже ты сам, и теперь желаешь использовать для своего эксперимента. Отличие заключается в том, что системные библиотеки являются частью языка программирования, а пользовательские библиотеки перед использованием нужно загрузить.
Микроконтроллер на борту нашего конструктора имеет встроенную Flash память, куда можно загружать различные файлы, в том числе библиотеки.
Сначала загрузи библиотеку для работы с дисплеем к себе на компьютер.
В архиве ты обнаружишь два файла:
Это и есть файлы библиотеки для управления дисплеем LCD 1602. Распакуй их из архива в какую либо папку на компьютере. Эти файлы необходимо загрузить в память микроконтроллера. Для этого нужно открыть файловый менеджер. Открывается с помощью пункта меню
или кнопкойОткроется окно файлового менеджера:
Здесь можно увидеть какие файлы уже загружены. Файл boot.py
— это системный файл, его код исполняется сразу после загрузки микроконтроллера. Файл init.py
— содержит код функции _init()
, которую мы вызываем в каждом эксперименте.
Сюда же нужно загрузить файлы библиотеки. Для этого служит кнопка Upload…
. После ее нажатия открывается стандартное диалоговое окно выбора файла. После выбора файла он загружается. Так выглядит файловый менеджер после загрузки файлов библиотеки:
Когда файлы загружены, можно приступить к сборке схемы и написанию программы.
Вся сборка заключается в подключении двух проводов:
Рисунок 1. Монтажная схема эксперимента
Внимание! В зависимости от модели микросхемы I2C, установленной в Лаборатории IoT, адрес на шине может быть 0x3F или 0x27. Запусти данный пример с указанием адреса 0x3F или 0x27, чтобы узнать какой вариант актуален для твоей платы.
from machine import I2C, Pin from esp8266_i2c_lcd import I2cLcd _init() DEFAULT_I2C_ADDR = 0x3F # Или 0x27 в зависимости от твоей платы IoT i2c = I2C(scl=Pin(5), sda=Pin(4), freq=400000) lcd = I2cLcd(i2c, DEFAULT_I2C_ADDR, 2, 16) lcd.backlight_on() lcd.putstr("Hello, World!\nSecond Line")
Сначала мы подключаем библиотеки, которые необходимы для работы программы.
from machine import I2C, Pin from esp8266_i2c_lcd import I2cLcd
На шине I2C каждое ведомое устройство имеет адрес. Чтобы обратиться к устройству, необходимо знать его адрес. Наша микросхема, которая управляет дисплеем, имеет адрес 0x3F
или 0x27
. Попробуй оба варианта, чтобы понять на каком адресе находится именно твоя микросхема I2C.
Настраиваем контроллер шины I2C:
i2c = I2C(scl=Pin(5), sda=Pin(4), freq=400000)
Здесь мы сообщили контроллеру, что для сигнала SCL нужно использовать вывод 5, а для SDA — 4. Задали частоту шины 400 кГц. Настроенный объект контроллера записали в переменную i2c
.
Теперь настраиваем дисплей.
lcd = I2cLcd(i2c, DEFAULT_I2C_ADDR, 2, 16)
Создаем объект дисплея и в качестве параметров передаем объект контроллера I2C, адрес устройства, количество строк дисплея и количество символов в строке, соответственно.
Теперь мы имеем объект дисплея, с которым можно работать. Начнем с включения подсветки. Для этого используем функцию backlight_on()
:
lcd.backlight_on()
Выведем текст на дисплей с помощью функции putstr()
lcd.putstr("Hello, World!\nSecond Line")
В качестве параметра в функцию putstr()
передается текст для вывода на дисплей. Можно заметить, что мы передаем одну строку, но на дисплее текст отображается в две строки. Дело в том, что переданная строка содержит специальный символ новой строки \n
. Этот символ сообщает дисплею, что необходимо перейти на новую строку.