Как найти адрес дисплея i2c на arduino
Обновлено: 21.11.2024
Самый простой способ
Конечно, поиск в Google может быть хорошей отправной точкой, поскольку может уже существовать много других проектов, в которых упоминается адрес I2C, или вы также можете найти различные сообщения на форуме, где другие ранее сталкивались с той же проблемой, что и у вас. . Возможно, вы сможете быстро найти ответ.
Возможно, вам также повезет, если вы найдёте техническое описание вашего модуля или чипа модуля, который специально использует I2C, и посмотрите, даст ли техническое описание какие-либо быстрые ответы.
Часто модуль будет иметь диапазон адресов I2C, которые можно выбрать, переставив перемычки, поэтому вам, возможно, придется попробовать несколько адресов I2C из известного диапазона, чтобы увидеть, для какого из них настроено ваше устройство.
Если модуль или компонент имеет существующую библиотеку Arduino, написанную для него, вы можете установить библиотеку и посмотреть, есть ли примеры эскизов, которые уже настроены с наиболее вероятным адресом I2C по умолчанию, который использует ваше устройство. Внутри скетча могут быть информативные комментарии, описывающие все возможные адреса I2C для данного конкретного устройства. Затем вы можете попробовать их все, пока один из них не сработает для вас.
Использование эскиза сканера I2C
Если вы знакомы с использованием эскизов Arduino и просто хотите настроить и запустить свой новый модуль, не углубляясь в Интернет в поисках справочной информации, вы можете использовать этот эскиз, предназначенный для сканирования шины I2C Arduino и создания отчета. адреса любых обнаруженных устройств на шине. Копия скетча также есть на GitHub.
При подключении только одного устройства обнаруженный адрес будет принадлежать этому устройству. Если у вас есть несколько устройств на шине I2C, все их адреса будут обнаружены и сообщены, но вы не сможете узнать, какой адрес принадлежит какому устройству, если вы не знакомы с имеющимися у вас устройствами.
Как работает сканер I2C
Протокол I2C использует ACK, что позволяет мастеру, по сути, пропинговать адрес, посмотреть, есть ли ACK, и если да, то есть ли устройство по этому адресу. Таким образом, перебирая все допустимые адреса и пытаясь связаться с устройством по этому адресу, можно составить список всех устройств, присутствующих на шине.
При использовании Arduino процесс выглядит следующим образом:
- Начать передачу по определенному адресу
- Wire.beginTransmission(i2c_addr);
- errorResult = Wire.endTransmission();
Некоторые хитрости
Например, у меня есть OLED-дисплей, на задней панели которого написано «78», обозначающее адрес I2C, но фактический адрес, который мне нужно использовать в Arduino, — «3C». Легче понять почему, когда шестнадцатеричные адреса преобразуются в двоичные.
0x3C в двоичном формате — это 011 1100 (дополненный начальным «0», чтобы сделать адрес 7-битным)
0111 1000 (0x3C, за которым следует бит записи)
0111 1000 в шестнадцатеричном формате — это 0x78, это то, что производитель моего OLED-дисплея напечатал на нем в качестве адреса. Зная это, если у меня возникнут проблемы со связью с устройством по адресу 0x78, я могу преобразовать его в двоичный формат, отбросить «0» справа (наименее значащий бит), преобразовать обратно в шестнадцатеричный формат и получить 0x3C.
После входа в систему вы будете перенаправлены обратно к этому руководству и сможете подписаться на него.
Вот слегка измененная версия, позволяющая легко указать альтернативную шину I2C. Подробнее см. ниже. Мы надеемся, что провод по умолчанию должен работать на большинстве плат.
Загрузите и запустите этот скетч, как и любой другой скетч, на плату Arduino.
В приведенном выше примере эскиза используется шина Wire по умолчанию. Чтобы запустить сканирование I2C на другой шине, измените эту строку кода:
чтобы указать используемую шину. Например, чтобы использовать Wire1 , измените строку на следующую:
Если все пойдет хорошо, вы должны получить список адресов для каждого найденного устройства. В приведенном ниже примере к плате Arduino UNO подключен переходник Adafruit BMP280.
Адрес I2C BMP280 0x77 отображается, как и ожидалось.
Если устройство отключено и/или отсутствуют подтягивающие резисторы, результаты будут выглядеть следующим образом:
Обратите внимание, что скетч работает нормально, но не сообщает адресов.
Впервые это руководство было опубликовано 16 сентября 2021 г. Последний раз оно обновлялось 16 сентября 2021 г.
Эта страница (Arduino) последний раз обновлялась 24 марта 2022 г.
Текстовый редактор на базе tinymce.
УВЕДОМЛЕНИЕ О НАЛИЧИИ
Вы успешно подписались на список уведомлений для этого продукта и поэтому получите от нас электронное письмо, когда он появится в наличии!
В целях безопасности вам было отправлено электронное письмо с подтверждением вашей подписки. Помните, что эта подписка не приведет к тому, что вы будете получать от нас электронные письма о чем-либо, кроме пополнения запасов этого товара.
Если по какой-либо причине вы хотите отказаться от подписки на список уведомлений для этого продукта, вы найдете подробную информацию о том, как это сделать, в электронном письме, которое только что было отправлено вам!
Если вы когда-либо пытались подключить ЖК-дисплей к Arduino, вы могли заметить, что он потребляет много контактов на Arduino. Даже в 4-битном режиме Arduino по-прежнему требует в общей сложности семи подключений, что составляет половину доступных контактов цифрового ввода-вывода Arduino.
Решением является использование ЖК-дисплея I2C. Он использует только два контакта ввода-вывода, которые даже не являются частью набора цифровых контактов ввода-вывода, а также могут использоваться совместно с другими устройствами I2C.
Обзор ЖК-оборудования I2C
Типичный ЖК-дисплей I2C состоит из символьного ЖК-дисплея на базе HD44780 и адаптера ЖК-дисплея I2C. Давайте познакомимся с ними один за другим.
Символьный ЖК-дисплей
Соответствуя своему названию, эти ЖК-дисплеи идеально подходят для отображения только текста/символов. Например, ЖК-дисплей размером 16 × 2 символа имеет светодиодную подсветку и может отображать 32 символа ASCII в двух рядах по 16 символов в каждом ряду.
Если присмотреться, то можно увидеть маленькие прямоугольники для каждого символа на дисплее и пиксели, из которых состоит символ. Каждый из этих прямоугольников представляет собой сетку размером 5 × 8 пикселей.
Для получения дополнительной информации о символьном ЖК-дисплее ознакомьтесь с нашим подробным руководством.
ЖК-адаптер I2C
Плата также поставляется с небольшим регулятором для точной настройки контрастности дисплея.
Кроме того, на плате есть перемычка, подающая питание на подсветку. Чтобы контролировать интенсивность подсветки, вы можете снять перемычку и подать внешнее напряжение на штырь, помеченный как «LED».
Адрес I2C ЖК-дисплея
Если вы используете несколько устройств на одной шине I2C, вам может потребоваться установить другой адрес I2C для платы, чтобы она не конфликтовала с другим устройством I2C.
Для этого на плате есть три перемычки (A0, A1 и A2) или контактные площадки для пайки.
Каждый из них используется для жесткого кодирования адреса. Если перемычка закорочена каплей припоя, она устанавливает адрес.
Важным моментом здесь является то, что многие компании производят один и тот же чип PCF8574: Texas Instruments и NXP Semiconductors и другие. И адрес I2C вашего ЖК-дисплея зависит от производителя чипа.
Если в вашем ЖК-дисплее установлен чип PCF8574 от Texas Instruments:
Согласно техническому описанию Texas Instruments, три бита выбора адреса (A0, A1 и A2) размещаются в конце 7-битного адресного регистра I2C.
Поскольку есть 3 адресных входа, которые могут принимать 2 состояния, ВЫСОКИЙ/НИЗКИЙ, мы можем создать 8 (2 3) различных комбинаций (адресов).
По умолчанию все 3 входных адреса переводятся в ВЫСОКОЕ состояние с помощью встроенных подтягивающих устройств, что дает PCF8574 адрес I2C по умолчанию 0100111Binary или 0x27Hex.
При замыкании перемычек для пайки на адресные входы подается НИЗКИЙ уровень. Если бы вы замкнули все три перемычки, адрес был бы 0x20. Диапазон всех возможных адресов простирается от 0x20 до 0x27. См. иллюстрацию ниже.
Если в вашем ЖК-дисплее установлен чип PCF8574 от NXP Semiconductors:
Согласно техническому описанию NXP Semiconductors, три бита выбора адреса (A0, A1 и A2) также размещаются в конце 7-битного адресного регистра I2C. Но другие биты в адресном регистре отличаются.
Опять! 3-адресный вход может иметь 2 состояния: ВЫСОКИЙ/НИЗКИЙ, что дает нам 8 (2 3 ) различных комбинаций.
По умолчанию все 3 входных адреса переводятся в ВЫСОКОЕ состояние с помощью встроенных подтягивающих устройств, что дает PCF8574 адрес I2C по умолчанию 0111111Binary или 0x3FHex.
При замыкании перемычек для пайки на адресные входы подается НИЗКИЙ уровень. Если бы вы замкнули все три перемычки, адрес был бы 0x38. Диапазон всех возможных адресов простирается от 0x38 до 0x3F. См. иллюстрацию ниже.
Распиновка ЖК-дисплея I2C
ЖК-дисплей I2C имеет только 4 контакта, которые соединяют его с внешним миром. Соединения следующие:
GND — это контакт заземления, который должен быть подключен к земле Arduino.
VCC подает питание на модуль и ЖК-дисплей. Подключите его к выходу 5V Arduino или к отдельному источнику питания.
SDA — это контакт для передачи последовательных данных. Эта линия используется как для передачи, так и для приема. Подключитесь к контакту SDA на Arduino.
SCL – это вывод последовательного тактового сигнала. Это синхронизирующий сигнал, подаваемый устройством Bus Master. Подключитесь к контакту SCL на Arduino.
Подключение Arduino Uno к ЖК-дисплею I2C
Подключить ЖК-дисплей I2C намного проще, чем стандартный ЖК-дисплей. Вам нужно всего лишь подключить 4 контакта вместо 12. Начните с подключения контакта VIN к выходу 5 В на Arduino и соедините GND с землей.
Теперь мы остаемся с контактами, которые используются для связи I2C. Обратите внимание, что каждая плата Arduino имеет разные контакты I2C, которые следует подключать соответствующим образом. На платах Arduino с компоновкой R3 SDA (линия данных) и SCL (линия синхронизации) находятся на контактных разъемах рядом с контактом AREF. Они также известны как A5 (SCL) и A4 (SDA).
Если вы используете другую плату Arduino, см. таблицу ниже.
SCL SDA Arduino Uno A5 < td>A4Arduino Nano A5 A4 Arduino Мега 21 20 Леонардо/Микро 3 2 На следующей схеме показано, как все подключить.
Настройка контрастности ЖК-дисплея
После подключения ЖК-дисплея необходимо отрегулировать контрастность дисплея. На модуле I2C вы найдете потенциометр, который можно поворачивать с помощью небольшой отвертки.
Подключите USB-разъем Arduino для питания ЖК-дисплея. Вы должны увидеть, как загорается подсветка. Теперь вращайте потенциометр, пока не появится первая линия прямоугольника.
Как только это будет сделано, мы можем приступить к программированию ЖК-дисплея.
Установка библиотеки
Чтобы запустить последующие скетчи, вам потребуется установить библиотеку LiquidCrystal_I2C. Эта библиотека представляет собой улучшенную версию библиотеки LiquidCrystal, которая поставляется вместе с Arduino IDE.
Чтобы установить библиотеку, перейдите в Sketch > Include Library > Manage Libraries… Подождите, пока Менеджер библиотек загрузит индекс библиотек и обновит список установленных библиотек.
Отфильтруйте результаты поиска, введя «жидкокристаллический». Должна быть пара записей. Ищите библиотеку LiquidCrystal I2C от Frank de Brabander. Нажмите на эту запись и выберите «Установить».
Определение адреса I2C
Как упоминалось ранее, адрес I2C вашего ЖК-дисплея зависит от производителя. Если ваш ЖК-дисплей имеет микросхему PCF8574 от Texas Instruments, его адрес I2C по умолчанию — 0x27Hex. Если ваш ЖК-дисплей оснащен чипом PCF8574 от NXP semiconductors, его адрес I2C по умолчанию — 0x3FHex.
Таким образом, ваш ЖК-дисплей, вероятно, имеет адрес I2C 0x27Hex или 0x3FHex. Тем не менее, перед использованием рекомендуется выяснить фактический I2C ЖК-дисплея. К счастью, благодаря замечательной работе Ника Гэммона это можно сделать простым способом.
Ник написал простой скетч сканера I2C, который сканирует вашу шину I2C и возвращает вам адрес каждого найденного устройства I2C.
Загрузите этот скетч в Arduino, затем откройте последовательный монитор. Вы увидите адрес I2C вашего ЖК-дисплея I2C.
Запишите этот адрес. Он понадобится вам в последующих набросках.
Базовый скетч Arduino — Hello World
В следующем тестовом скетче в первой строке ЖК-дисплея будет напечатано «Hello World!», а во второй строке — «Учебное пособие по ЖК-дисплею».
Но прежде чем приступить к загрузке эскиза, вам нужно внести некоторые изменения, чтобы он работал на вас. Вам необходимо ввести адрес I2C вашего ЖК-дисплея и размеры дисплея (столбцы и строки дисплея). Если вы используете ЖК-дисплей с разрешением 16×2 символа, передайте параметры 16 и 2; Если вы используете ЖК-экран 20×4, передайте параметры 20 и 4.
После того, как вы закончите, попробуйте набросок.
Если все пойдет правильно, вы должны увидеть следующий вывод на дисплее.
Пояснение кода:
Скетч начинается с включения библиотеки LiquidCrystal_I2C.
Далее создается объект класса LiquidCrystal_I2C. Этот объект использует 3 параметра LiquidCrystal_I2C (адрес, столбцы, строки). Здесь вам нужно будет изменить адрес по умолчанию на адрес, который вы нашли ранее, если он отличается, и размеры дисплея.
После объявления объекта LiquidCrystal_I2C вы можете получить доступ к специальным методам, специфичным для ЖК-дисплея.
В функции setup: вызывается функция init() для инициализации ЖК-объекта. Далее вызывается функция clear(). Эта функция очищает ЖК-экран и перемещает курсор в верхний левый угол. Функция backlight() используется для включения подсветки ЖК-дисплея.
Затем позиция курсора устанавливается в третий столбец и первую строку ЖК-дисплея с помощью вызова функции lcd.setCursor(2,0) . Позиция курсора указывает место, где вам нужно, чтобы новый текст отображался на ЖК-дисплее. Верхний левый угол считается col=0, row=0.
Затем строка «Hello World!» печатается с помощью вызова функции print().
Аналогично следующие две строки задают положение курсора в третьем столбце и второй строке, а на ЖК-дисплее печатается «Учебное пособие по ЖК-дисплею».
Другие полезные функции библиотеки
Есть несколько полезных функций, которые можно использовать с объектом LiquidCrystal_I2C. Некоторые из них перечислены ниже:
- home() — помещает курсор в верхний левый угол ЖК-дисплея, не очищая дисплей.
- cursor() — отображает ЖК-курсор, подчеркивание (строку) в позиции следующего печатаемого символа.
- noCursor() — скрывает ЖК-курсор.
- blink() — создает ЖК-курсор в виде мигающего блока: мигающий прямоугольник размером 5×8 пикселей в позиции следующего печатаемого символа.
- noBlink() — отключает мигающий ЖК-курсор в виде блока.
- display() — включает ЖК-экран и отображает символы, которые ранее были напечатаны на дисплее.
- noDisplay() — отключает ЖК-экран. Простое выключение ЖК-экрана не удаляет данные из памяти ЖК-дисплея. Это означает, что он будет отображаться снова при вызове функции display().
- scrollDisplayLeft() — прокручивает содержимое дисплея на одну позицию влево. Если вы хотите непрерывно прокручивать текст, вам нужно использовать эту функцию внутри цикла.
- scrollDisplayRight() — прокручивает содержимое дисплея на одну позицию вправо.
- autoscroll() — включает автоматическую прокрутку ЖК-дисплея. Если текущим направлением текста является слева направо (по умолчанию), дисплей прокручивается влево, если текущим направлением является справа налево, дисплей прокручивается вправо.
- noAutoscroll() — отключает автоматическую прокрутку.
Создание и отображение пользовательских символов
Если вы находите символы на дисплее скучными и неинтересными, вы можете создать свои собственные символы (глифы) и символы для ЖК-дисплея. Они чрезвычайно полезны, когда вы хотите отобразить символ, который не является частью стандартного набора символов ASCII.
CGROM и CGRAM
Все ЖК-дисплеи на базе контроллера Hitachi HD44780 имеют два типа памяти, в которых хранятся определенные символы: CGROM и CGRAM (ПЗУ и ОЗУ генератора символов). Память CGROM энергонезависима и не может быть изменена; Память CGRAM энергозависима и может быть изменена в любое время.
CGROM используется для хранения всех постоянных шрифтов, которые могут отображаться с использованием их кода ASCII. Например, если мы напишем 0x41, то на ЖК-дисплее появится символ «А». CGRAM — это еще одна память, которую можно использовать для хранения пользовательских символов.
Эта оперативная память ограничена 64 байтами. Значение для ЖК-дисплея с разрешением 5 × 8 пикселей; в CGRAM можно сохранить до 8 определяемых пользователем символов. А для ЖК-дисплея с разрешением 5×10 пикселей можно сохранить только 4 определяемых пользователем символа.
Для определения пользовательского символа используется функция createChar(). Эта функция принимает массив из 8 байт. Каждый байт (учитываются только 5 бит) в массиве определяет одну строку символа в матрице 5×8. Принимая во внимание, что 0 и 1 в байте указывают, какие пиксели в строке должны быть отключены, а какие должны быть включены.
Генератор пользовательских символов
Создать собственного персонажа до сих пор было непросто! Мы создали небольшое приложение, которое поможет вам создавать своих персонажей. Вы можете щелкнуть любой из пикселей 5 × 8 ниже, чтобы установить / очистить определенный пиксель. Когда вы нажимаете на пиксели, рядом с сеткой генерируется код символа. Этот код можно использовать непосредственно в скетче Arduino.
Эта статья содержит все, что вам нужно знать об использовании символьного ЖК-дисплея I2C с Arduino. Я включил схему подключения и множество примеров кодов, чтобы помочь вам начать работу.
В первой части этой статьи рассматриваются основы отображения текста и чисел.
Во второй половине я более подробно расскажу о том, как отображать пользовательские символы и как вы можете использовать другие функции библиотеки LiquidCrystal_I2C.
Как только вы научитесь отображать текст и числа на ЖК-дисплее, я предлагаю вам ознакомиться со статьями ниже. Из этих руководств вы узнаете, как измерять и отображать данные датчика на ЖК-дисплее.
Рекомендуемые статьи
Если у вас есть какие-либо вопросы, оставьте комментарий ниже.
Принадлежности
Компоненты оборудования
Инструменты
Программное обеспечение
Основы ЖК-дисплея I2C
ЖК-дисплей такого типа идеально подходит для отображения текста и чисел, отсюда и название «символьный ЖК-дисплей».
ЖК-дисплей I2C, который мы используем в этом руководстве, поставляется с небольшой дополнительной схемой, установленной на задней панели модуля.
Этот модуль оснащен чипом PCF8574 (для связи I2C) и потенциометром для регулировки светодиодной подсветки.
Преимущество ЖК-дисплея I2C заключается в простоте подключения. Вам нужно всего два вывода данных для управления ЖК-дисплеем.
Стандартные ЖК-дисплеи обычно требуют около 12 подключений, что может быть проблемой, если у вас не так много доступных контактов GPIO.
К счастью, вы также можете купить дополнительную схему I2C отдельно на Amazon, так что вы также можете легко обновить стандартный ЖК-дисплей.
Обучающее руководство и схему подключения стандартных символьных ЖК-дисплеев см. в следующей статье:
Если вы внимательно посмотрите на ЖК-дисплей, вы увидите маленькие прямоугольники, которые образуют отдельные символы на ЖК-дисплее.
Каждый прямоугольник состоит из сетки размером 5×8 пикселей. Позже в этом руководстве я покажу вам, как можно управлять отдельными пикселями для отображения пользовательских символов на ЖК-дисплее.
Технические характеристики
Характеристики ЖК-дисплеев 16 x 2, 20 x 4 и других размеров в основном одинаковы.
Все они используют один и тот же ЖК-контроллер Hitachi HD44780, поэтому их можно легко поменять местами. Вам нужно будет только изменить спецификации размера в коде Arduino.
Технические характеристики типичного I2C-дисплея 16 x 2 приведены в таблице ниже.
Технические характеристики ЖК-дисплея 16×2 I2C
Рабочее напряжение 5 В Контроллер Контроллер Hitachi HD44780 LCD< /td> Адрес по умолчанию 0x27 Разрешение экрана 2 строки × 16 символов Разрешение символов 5 × 8 пикселей Размеры модуля < td>80 × 36 × 12 ммРазмеры области просмотра 64,5 × 16,4 мм Стоимость Проверить цену Дополнительную информацию можно найти в таблицах ниже.
В спецификациях 16 x 2 и 20 x 4 указаны размеры ЖК-дисплея. Дополнительную информацию о драйвере ЖК-дисплея Hitachi можно найти в техпаспорте HD44780.
Чип PCF8574 используется в модуле I2C на задней панели ЖК-дисплея.
Как подключить ЖК-дисплей I2C к Arduino UNO
Приведенная ниже схема подключения показывает, как подключить ЖК-дисплей I2C к Arduino.
Подключение ЖК-дисплея I2C намного проще, чем подключение стандартного ЖК-дисплея. Вам нужно всего лишь подключить 4 контакта вместо 12.
ЖК-дисплей I2C со схемой подключения Arduino
Подключения также приведены в таблице ниже.
Подключение ЖК-дисплея I2C
Если вы не используете Arduino Uno, контакты SDA и SCL могут находиться в другом месте.
Обратите внимание, что Arduino Uno с компоновкой R3 (распиновка 1.0) также имеет разъемы контактов SDA (линия данных) и SCL (линия синхронизации), близкие к контакту AREF. Подробнее см. в таблице ниже.
Расположение контактов SDA и SCL на разных Arduino доски.Плата SDA SCL Arduino Uno< /td> A4 A5 Arduino Nano A4 A5 Arduino Micro 2 3 Arduino Mega 2560 20 21 Ардуино Леонардо 2 3 tr>Arduino Due 20 21 Регулировка контрастности ЖК-дисплея
После того, как вы подключили ЖК-дисплей, вам нужно будет отрегулировать контрастность дисплея. На модуле I2C вы найдете потенциометр, который можно поворачивать с помощью небольшой отвертки.
Подключите USB-разъем Arduino для питания ЖК-дисплея. Вы должны увидеть, как загорается подсветка.
Теперь вращайте потенциометр, пока не появится один (ЖК-экран 16 × 2) или 2 ряда (ЖК-экран 20 × 4) прямоугольников.
При необходимости контрастность можно настроить позже.
Как только это будет сделано, мы можем приступить к программированию ЖК-дисплея.
Установка библиотеки LiquidCrystal_I2C Arduino
В этом руководстве я буду использовать библиотеку LiquidCrystal_I2C. Эта библиотека имеет множество встроенных функций, упрощающих программирование ЖК-дисплея.
Последнюю версию этой библиотеки можно найти здесь, на GitHub, или нажмите кнопку загрузки ниже.
Убедитесь, что у вас установлена именно эта библиотека, и удалите все другие библиотеки с таким же именем (LiquidCrystal_I2C).
Другие библиотеки, вероятно, будут работать так же, но могут использовать немного другие имена для разных функций.
Библиотека LiquidCrystal_I2C работает в сочетании с библиотекой Wire.h, которая позволяет взаимодействовать с устройствами I2C. Эта библиотека предустановлена вместе с Arduino IDE.
Чтобы установить эту библиотеку, выберите Инструменты > Управление библиотеками (Ctrl + Shift + I в Windows) в Arduino IDE. Менеджер библиотек откроет и обновит список установленных библиотек.
Теперь найдите «liquidcrystal_i2c» и найдите библиотеку Франка де Брабандера. Выберите последнюю версию и нажмите «Установить».
Установка библиотеки LiquidCrystal_I2C Arduino
В библиотеке есть несколько примеров, которые вы можете использовать, но вам придется изменить их в соответствии с настройкой вашего оборудования.
Ниже я включил много примеров кодов, которые вы можете использовать с проводкой, показанной ранее.
Сначала я покажу вам базовый пример кода, а затем более подробно объясню функции.
Как найти I2C-адрес моего ЖК-дисплея?
Большинство ЖК-дисплеев I2C поставляются с адресом по умолчанию «0x27», но он может отличаться в зависимости от партии/производителя.
В этом случае вам нужно будет найти фактический адрес ЖК-дисплея, прежде чем вы сможете начать его использовать.
На веб-сайте Arduino вы можете найти простой пример скетча, который сканирует шину I2C на наличие устройств.
Если устройство найдено, оно отобразит адрес в последовательном мониторе.
Вы можете скопировать код, нажав кнопку в правом верхнем углу поля кода.
Если вы загрузите этот скетч в Arduino и запустите его, вы должны увидеть следующий вывод в Serial Monitor (Ctrl + Shift + M).
Вывод последовательного монитора сканера адресов I2C
Запишите найденный адрес, он понадобится вам позже при программировании ЖК-дисплея.
Пример базового кода Arduino для I2C LCD
Вы можете загрузить следующий пример кода в Arduino с помощью Arduino IDE.
В этом руководстве я использовал символьный ЖК-дисплей I2C 16×2, но вы также можете использовать другие ЖК-дисплеи I2C разных размеров.
В этом примерном скетче классическая надпись «Hello World!» отображается в первой строке ЖК-дисплея, а «Учебник по ЖК-дисплею» — во второй.
Далее я объясню, как работает этот код.
Вы должны увидеть следующий вывод на ЖК-дисплее:
Как работает код
Во-первых, включены необходимые библиотеки. Как упоминалось ранее, нам нужны и wire.h*, и библиотека LiquidCrystal_I2C.
В оставшейся части этого руководства я расскажу больше о встроенных функциях этой библиотеки.
*При использовании последней версии библиотеки LiquidCrystal_I2C больше не требуется включать в эскиз библиотеку wire.h. Другая библиотека автоматически импортирует wire.h.
Следующий шаг — создать ЖК-объект с классом LiquidCrystal_I2C и указать адрес и размеры.
Для этого мы используем функцию LiquidCrystal_I2C(адрес, столбцы, строки).
Здесь вам нужно будет изменить адрес по умолчанию на адрес, который вы нашли ранее, если он отличается.
При использовании ЖК-дисплея 20 × 4 измените эту строку на LiquidCrystal_I2C(0x27,20,4);
Обратите внимание, что мы назвали дисплей «ЖК». Вы можете дать ему другое имя, например, «menu_display».
Вам нужно будет изменить «lcd» на новое имя в остальной части скетча.
В настройках ЖК-дисплей запускается с помощью lcd.init(), а подсветка включается с помощью lcd.backlight().
В циклической части кода курсор устанавливается в третий столбец и первую строку ЖК-дисплея с помощью lcd.setCursor(2,0) .
Обратите внимание, что отсчет начинается с 0, а первый аргумент определяет столбец. Таким образом, lcd.setCursor(2,1) устанавливает курсор в третьем столбце и во второй строке.
Далее строка «Hello World!» печатается с помощью lcd.print("Hello World!") . Обратите внимание, что вам нужно поместить текст в кавычки (" "), так как мы печатаем текстовую строку.
Если вы хотите напечатать числа, кавычки не нужны. Например, lcd.print(12345) .
Если вы хотите увидеть пример отображения (изменения) переменных на ЖК-дисплее, ознакомьтесь с моим руководством по ультразвуковому датчику расстояния HC-SR04:
Другие полезные функции библиотеки LiquidCrystal_I2C
В приведенном выше примере показаны основы отображения текста на ЖК-дисплее. Теперь мы рассмотрим другие функции библиотеки LiquidCrystal_I2C.
очистить()
Очищает ЖК-экран и помещает курсор в верхний левый угол (первая строка и первый столбец) дисплея.
Эту функцию можно использовать для отображения разных слов в цикле.
Помещает курсор в верхний левый угол ЖК-дисплея. Используйте clear(), если вы также хотите очистить дисплей.
курсор()
Отображает ЖК-курсор: подчеркивание (строку) в позиции следующего печатаемого символа.
нетКурсор()
Скрывает ЖК-курсор. В следующем примере создается мигающий курсор в конце «Hello World!».
мигать()
Создает ЖК-курсор в виде мигающего блока: мигающий прямоугольник в позиции следующего печатаемого символа.
не мигать()
Отключает блочный ЖК-курсор. В следующем примере курсор отображается мигающим в течение 5 секунд, а затем отключается на 2 секунды.
отображение()
Эта функция включает ЖК-экран и отображает любой текст или курсоры, которые были напечатаны на дисплее.
нет отображения()
Эта функция отключает любой текст или курсоры, выводимые на ЖК-дисплей. Текст/данные не удаляются из памяти ЖК-дисплея.
Это означает, что он будет отображаться снова при вызове функции display().
В следующем примере создается эффект мерцания текста.
написать()
Эту функцию можно использовать для записи символа на ЖК-дисплей. Дополнительные сведения см. в разделе о создании и отображении пользовательских символов ниже.
scrollDisplayLeft()
Прокручивает содержимое дисплея (текст и курсор) на одну позицию влево.
Эту функцию можно использовать в циклической части кода в сочетании с delay(500) для создания анимации прокрутки текста.
scrollDisplayRight()
Прокручивает содержимое дисплея (текст и курсор) на одну позицию вправо.
автопрокрутка()
Эта функция включает автоматическую прокрутку ЖК-дисплея. Это приводит к тому, что каждый символ, выводимый на дисплей, смещает предыдущие символы на один пробел.
Если текущим направлением текста является слева направо (по умолчанию), дисплей прокручивается влево, если текущим направлением является справа налево, дисплей прокручивается вправо.
Это приводит к выводу каждого нового символа в одно и то же место на ЖК-дисплее.
Следующий пример эскиза включает автоматическую прокрутку и печатает символы от 0 до 9 в позиции (16,0) ЖК-дисплея.
Измените это значение на (20,0) для ЖК-дисплея 20 × 4.
нет автопрокрутки()
Отключает автоматическую прокрутку ЖК-дисплея.
слева направо()
Эта функция заставляет текст перемещаться вправо от курсора, как если бы дисплей был выровнен по левому краю (по умолчанию).
справа налево()
Эта функция заставляет текст перемещаться влево от курсора, как если бы дисплей был выровнен по правому краю.
Как создавать и отображать собственные символы?
С помощью функции createChar() можно создавать и отображать пользовательские символы на ЖК-дисплее.
Это особенно полезно, если вы хотите отобразить символ, который не является частью стандартного набора символов ASCII.
CGROM и CGRAM
ЖК-дисплеи на основе ЖК-контроллера Hitachi HD44780 имеют два типа памяти: CGROM и CGRAM (ПЗУ и ОЗУ генератора символов).
Для дисплеев 5 x 8 точек CGRAM может записывать до 8 пользовательских символов, а для дисплеев 5 x 10 точек — 4. Дополнительные сведения см. в техническом описании.
Пример кода пользовательского символа
Следующий пример эскиза создает и отображает восемь пользовательских символов (пронумерованных от 0 до 7).
Вы можете скопировать код, нажав кнопку в правом верхнем углу поля кода.
Вы должны увидеть следующий вывод на ЖК-дисплее:
Как работает код
После включения библиотеки и создания ЖК-объекта определяются массивы пользовательских символов.
Каждый массив состоит из 8 байтов (учитываются только 5 бит).
На каждую строку матрицы 5 x 8 светодиодов приходится 1 байт. В этом примере создается 8 пользовательских символов.
При внимательном рассмотрении массива вы увидите следующее. Каждая строка состоит из 5 чисел, соответствующих 5 пикселям символа 5 x 8 точек.
0 означает, что пиксель выключен, а 1 – включен. Префикс «B» — это специальный форматировщик двоичных файлов Arduino.
Каждую строку можно редактировать вручную, но я рекомендую использовать этот визуальный инструмент на GitHub.
Это приложение автоматически создает массив символов, и вы можете щелкнуть по пикселям, чтобы включить или выключить их.
В настройках пользовательские символы создаются с помощью lcd.createChar(num, data) .
Первый аргумент этой функции — это номер пользовательского символа (0–7), а второй аргумент — созданный нами массив символов.
В цикле все символы отображаются с помощью lcd.write(). В качестве аргумента мы используем номер пользовательского символа, который мы хотим отобразить.
Заключение
В этой статье я показал вам, как использовать символьный ЖК-дисплей I2C с Arduino.
Надеюсь, вы нашли его полезным и информативным.Если да, поделитесь ей с другом, который тоже любит электронику и мастерить разные вещи!
Мне бы хотелось узнать, какие проекты вы планируете реализовать (или уже построили) с этими ЖК-дисплеями. Если у вас есть какие-либо вопросы, предложения или вы считаете, что чего-то не хватает в этом руководстве, оставьте комментарий ниже.
Читайте также: