Python

В этой инструкции для управления дисплеем используем интерпретатор CircuitPython, который позволяет писать программы на упрощённом python.

Для работы с ЖК дисплеем нам поможет библиотека robotclass_character_lcd, которая имеется в наборе библиотек от RobotClass. Всё, что нам нужно сделать для её установки — это скопировать всю папку robotclass_character_lcd в папку lib на накопителе CIRCUITPY.

Также понадобится библиотека adafruit_character_lcd из стандартного набора CircuitPython:

Более подробно о работе с библиотеками CircuitPython мы писали в одной из наших инструкций:

Программа

Для составления программы используем среду разработки Mu.

Пусть, самая первая наша программа будет выводить текст «Hello, world!» в первой строек дисплея. Начнём с подключения всех необходимых библиотек. Помним, что в python это делается с помощью команды import.

Кроме robotclass_character_lcd и adafruit_character_lcd нам будут нужны еще три базовые библиотеки:

  • time — предоставляет функцию sleep для организации паузы;
  • board — хранит названия всех контактов платы контроллера и их синонимы;
  • digitalio — в управляет контактами GPIO.

Подключаем все библиотеки при помощи команды import:

import time
import board
import digitalio
from robotclass_character_lcd.character_lcd import Character_LCD_Mono

Затем настраиваем все задействованные контакты.

lcd_rs = digitalio.DigitalInOut(board.D7)
lcd_en = digitalio.DigitalInOut(board.D8)
lcd_d7 = digitalio.DigitalInOut(board.D12)
lcd_d6 = digitalio.DigitalInOut(board.D11)
lcd_d5 = digitalio.DigitalInOut(board.D10)
lcd_d4 = digitalio.DigitalInOut(board.D9)
lcd_backlight = digitalio.DigitalInOut(board.D13)

Потом инициализируем дисплей.

lcd = characterlcd.Character_LCD_Mono(
    lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7, lcd_columns, lcd_rows, lcd_backlight
)

Вывод текста на дисплей осуществляется простым присваиванием:

lcd.message = "Hello\nRobotClass"

При этом, символ перевода строки \n будет интерпретироваться именно как перевод строки и часть фразы будет выведена во второй строке дисплея.

Вся программа целиком.

import time
import board
import digitalio
from robotclass_character_lcd.character_lcd import Character_LCD_Mono

lcd_columns = 16
lcd_rows = 2

lcd_rs = digitalio.DigitalInOut(board.D7)
lcd_en = digitalio.DigitalInOut(board.D8)
lcd_d7 = digitalio.DigitalInOut(board.D12)
lcd_d6 = digitalio.DigitalInOut(board.D11)
lcd_d5 = digitalio.DigitalInOut(board.D10)
lcd_d4 = digitalio.DigitalInOut(board.D9)
lcd_backlight = digitalio.DigitalInOut(board.D13)

# инициализация
lcd = Character_LCD_Mono(
    lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7, lcd_columns, lcd_rows, lcd_backlight
)

# включение подсветки
lcd.backlight = True
# вывод текста
lcd.message = "Hello\nRobotClass"

Загружаем программу на Графит=S3 и смотрим результат. Может быть три распространённые ситуации.

1) На дисплее отобразится надпись «Hello, world!». Значит мы все правильно подключили, и контраст каким-то чудесным образом оказался изначально правильно настроен. Радуемся, и переходим к следующей главе.

2) На дисплее отобразится целый ряд черных прямоугольников — требуется настройка контраста! Именно для этого мы добавили в цепь потенциометр с ручкой. Крутим его от одного края, до другого, до момента пока на дисплее не появится четкая надпись.

3) Два ряда черных прямоугольников. Скорее всего, вы что-то напутали при подключении. Проверьте трижды все провода. Если не найдете ошибку — попросите кота проверить! 

Примечание. В данном примере строка lcd.backlight = True отвечает за включение подсветки. Если анод подсветки (контакт дисплея №15) подключён сразу к питанию, то эта функция, разумеется, работать не будет.

Бегущая строка

Теперь когда дисплей точно работает, попробуем более сложную программу. Сделаем бегущую строку.

Для сдвига текста влево или вправо воспользуемся функциями move_left и move_right. Пусть сначала текст бежит влево, пока его последняя буква не скроется за границей дисплея. Затем текст бежит вправо, также, пока не скроется. Наконец, текст бежит влево в исходную позицию.

import time
import board
import digitalio
from robotclass_character_lcd.character_lcd import Character_LCD_Mono

lcd_columns = 16
lcd_rows = 2

lcd_rs = digitalio.DigitalInOut(board.D7)
lcd_en = digitalio.DigitalInOut(board.D8)
lcd_d7 = digitalio.DigitalInOut(board.D12)
lcd_d6 = digitalio.DigitalInOut(board.D11)
lcd_d5 = digitalio.DigitalInOut(board.D10)
lcd_d4 = digitalio.DigitalInOut(board.D9)
lcd_backlight = digitalio.DigitalInOut(board.D13)

# инициализация
lcd = Character_LCD_Mono(
    lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7, lcd_columns, lcd_rows, lcd_backlight
)

# включение подсветки
lcd.backlight = True

#вывод текста
lcd.message = "Hello!"

while True:
    i = 0
    while i < len(lcd.message):
        lcd.move_left()
        time.sleep(0.2)
        i+=1

    i = 0
    while i < (len(lcd.message) + lcd_columns):
        lcd.move_right()
        time.sleep(0.2)
        i+=1

    i = 0
    while i < lcd_columns:
        lcd.move_left()
        time.sleep(0.2)
        i+=1
        
    time.sleep(1)

Загружаем программу на Графит-S3 и наблюдаем бегущую строку!


Изменено: