Интерактивный рабочий стол windows 7. Интерактивный рабочий стол для WinXP. Новый необычный концепт рабочего стола - Apple iDesk
LCD I2C модуль позволить подключить символьный дисплей к плате Arduino всего по двум сигнальным проводам.
Используемые компоненты (купить в Китае):
. Соединительные провода
Основные технические характеристики:
Дисплей: Символьный 16х02 либо 20x04
. Подсветка: Синяя c белыми символами
. Контраст: Настраивается потенциометром
. Напряжение питания: 5В
. Интерфейс: I2C
. I2C адрес: 0x27
. Размеры: 82мм x 35мм x 18мм
Подключение к Arduino
Модуль оборудован четырех-пиновым разъемом стандарта 2.54мм
SCL : последовательная линия тактирования (Serial CLock)
SDA : последовательная линия данных (Serial DAta)
VCC : "+" питания
GND : "-" питания
Выводы отвечающие за интерфейс I2C на платах Arduino на базе различных контроллеров разнятся
Для работы с данным модулем необходимо установить библиотеку LiquidCrystal_I2C1602V1
Скачиваем, распаковываем и закидываем в папку libraries в папке Arduino. В случае, если на момент добавления библиотеки, Arduino IDE была открытой, перезагружаем среду.
Переходим непосредственно к скетчу. В данном примере выведем стандартный "Hello, world!" и для адрес нашего сообщества.
пример программного кода:
#includeСоздание собственных символов
С выводом текста разобрались, буквы английского алфавита зашиты в память контроллера внутри дисплея и с ними проблем нет. А вот что делать если нужного символа в памяти контроллера нет?
Не беда, требуемый символ можно сделать вручную. Данный способ частично, ограничение в 7 символов, поможет решить проблему вывода.
Ячейка, в рассматриваемых нами дисплеях, имеет разрешение 5х8 точек. Все, к чему сводится задача создания символа, это написать битовую маску и расставить в ней единички в местах где должны гореть точки и нолики где нет.
В ниже приведенном примере нарисуем смайлик.
пример программного кода:
//Тестировалось на Arduino IDE 1.0.5 // Добавляем необходимые библиотеки #includeПрограммка для легкого создания символов
В комментариях участник сообщества скинул ссылку на генератор символов
Arduino поддерживает много интерфейсов передачи данных, одним из которых является достаточно популярный на сегодняшний день I2C. Когда-то давно этот протокол связи придумала компания Philips и зарегистрировала под запатентованным названием “I2C”, вы также можете встретить его под названиями TWI, 2 line interface, но все они работают по единому принципу.
Весь смысл I2С шины состоит в том, что на 2 провода можно повесить большое (128) количество различных устройств, от датчиков температуры, до микроконтроллеров.
Но в тоже время по скорости I2C уступает UART и SPI , из-за основных принципов работы, т.к. две линии всегда подтянуты к резисторам(Vcc), а значит на графике мы получаем не прямоугольные импульсы, а трапециевидные, в отличие от вышеупомянутых.
SDA - отвечает за передачу информации(начало передачи, адрес, данные)
SCL - тактирование шины
В I2C устройства могут быть двух типов Master и Slave
Теперь разберём основные принципы программирования с помощью стандартной библиотеки Wire.h:
Wire.begin(uint8_t address) - используется для инициализации устройства, в режиме слейва нужно ввести адрес, в режиме мастера Wire.begin() . Вместо Wire можно использовать любое другое слово.
Wire.requestFrom(uint8_t address, uint8_t quantity) – запрос на получения какого-то количества байт от определенного устройства(7 бит адрес). Возвращает число считанных байт.
Wire.beginTransmission(uint8_t address)- начало передачи
Wire.endTransmission()- конец передачи,возвращает номер ошибки или успех(0)
Wire.write(uint8_t data) –может принимать значение одиночного байта(value), нескольких байт(string), массива, определенной длинны (data, lenght). Располагается между: beginTransmission и endTransmission. Возращает число записанных байт.
Wire.available() – возвращает количество байт доступных для обработки. Вызывается мастером после requestFrom.
Wire.read() – считывает байт от ведомого устройства. Пишется после requestFrom.
Подключение библиотек к Ардуино IDE не представляет сложности, так как поставляется в комплекте со стандартным редактором.
Есть еще несколько функций, но думаю для начала этой основы вполне достаточно, к тому же почти на любую периферию можно найти библиотеку.
Для примера рассмотрим подключение и работу акселерометра и гироскопа Gy-521.
Подключаем согласно схеме (подтягивающие резисторы встроены в модуль):
Модуль может работать как от 3.3 вольт, так и от 5.
#include
LCD дисплей Arduino позволяет визуально отображать данные с датчиков. Расскажем, как правильно подключить LCD монитор к Arduino по I2C и рассмотрим основные команды инициализации и управления LCD 1602. Также рассмотрим различные функции в языке программирования C++, для вывода текстовой информации на дисплее, который часто требуется использовать в проектах на Ардуино.
Видео. Arduino LCD Display I2C 1602
LCD 1602 I2C подключение к Arduino
I2C - последовательная двухпроводная шина для связи интегральных схем внутри электронных приборов, известна, как I²C или IIC (англ. Inter-Integrated Circuit). I²C была разработана фирмой Philips в начале 1980-х годов, как простая 8-битная шина для внутренней связи между схемами в управляющей электронике (например, в компьютерах на материнских платах, в мобильных телефонах и т.д.).
В простой системе I²C может быть несколько ведомых устройств и одно ведущее устройство, которое инициирует передачу данных и синхронизирует сигнал. К линиям SDA (линия данных) и SCL (линия синхронизации) можно подключить несколько ведомых устройств. Часто ведущим устройством является контроллер Ардуино, а ведомыми устройствами: часы реального времени или LCD Display.
Как подключить LCD 1602 к Ардуино по I2C
Жидкокристаллический дисплей 1602 с I2C модулем подключается к плате Ардуино всего 4 проводами — 2 провода данных и 2 провода питания. Подключение дисплея 1602 проводится стандартно для шины I2C: вывод SDA подключается к порту A4, вывод SCL – к порту A5. Питание LCD дисплея осуществляется от порта +5V на Arduino. Смотрите подробнее схему подключения жк монитора 1602 на фото ниже.
Для занятия нам понадобятся следующие детали:
- плата Arduino Uno / Arduino Nano / Arduino Mega;
- LCD монитор 1602;
- 4 провода «папа-мама».
![](https://i2.wp.com/xn--18-6kcdusowgbt1a4b.xn--p1ai/wp-content/uploads/2017/01/podkluchenie-lcd-i2c.jpg)
После подключения LCD монитора к Ардуино через I2C вам потребуется установить библиотеку LiquidCrystal_I2C.h для работы с LCD дисплеем по интерфейсу I2C и библиотека Wire.h (имеется в стандартной программе Arduino IDE). Скачать рабочую библиотеку LiquidCrystal_I2C.h для LCD 1602 с модулем I2C можно на странице Библиотеки для Ардуино на нашем сайте по прямой ссылке с Google Drive.
Скетч для дисплея 1602 с I2C
#includeПояснения к коду:
- библиотека LiquidCrystal_I2C.h содержит множество команд для управления LCD дисплея по шине I²C и позволяет значительно упростить скетч;
- скетч содержит многострочный комментарий /* ... */ , который позволяет закомментировать сразу несколько строк в программе.
- перед выводом информации на дисплей, необходимо задать положение курсора командой setCursor(0,1) , где 0 — номер символа в строке, 1 — номер строки.
Протокол обмена данными I2C в свое время был разработан компанией Philips. Название I2C произошло от английского Iner-IC управления или по другому межмикросхемного управления, Inter-IC,IIC (I2C) -название одного и того же протокола.
Данный протокол или интерфейс обеспечивате качественный прием и передачу информации (данных) от нескольких различных устройств, к примеру можно измерять температуру и одновременно управлять цифровым потенциометром. Общение происходит програмно, алгоритм общения с датчиком по протоколу I2С записывается в программу Arduino (скетч).
Существуют специальные переходники которые позволяют подключать другие устройства, к примеру имея переходник можно по двум проводом подключить arduino дисплей 1602 (16x2) LCD по протоколу i2c. По запросу LCD i2c на просторах интернета куча информации, вот пример того как должен выглядить переходник под дисплей http://www.ebay.com/itm/310565362720
При работе по этому интерфейсу, одно устройство является ведущим а другое ведомым. Ведущее устройство инициализирует передачу и генерирует сигналы необходимые для синхронизации.
Вемое в свою очередь зависит от ведущего, и начинает передачу данных только после получения команды от ведущего устройства.
Устройство подключенное к шине I2C имеет свой уникальный адрес. Именно по этому адресу осуществляется обращения ведущего устройства.
Пример подключения датчиков по протоколу I2C
Подключение осуществляется по двум проводам: SCL- сигнала тактирования или тактового сигнала и SDA - сигнала данных. При этом к шине I2C можно подключать любое количество различных датчиков (ведомых устройств), имеющие свои уникальные id.
Знакомство начинается со специально написанной для этих целей библиотеки, имя которой Wire. Перед началом работы ее необходимо импортировать в проект,она имеет специальные команды или методы для "общения" с устройствами.
Для обмена данными с устройствами нужно знать их id. Различные устройства могут иметь разную длину адреса (id) 8 или 7 бит.В библиотеке Wire используется 7-ми битная адресация.
Подключение ведомых устройств осуществляется к выводам на плате Arduino. Каждая версия Arduino имеет свои выводы I2C
- UNO - A4(SDA), A5(SCL);
- Mega - 20(SDA), 21(SCL);
- Leonardo- 2(SDA), 3(SCL);
- Due - 20(SDA), 21(SCL),SDA1,SCL1;
Пример код программы для управления цифровым потенциометром при помощи библиотеки Wire
Данный пример показывает как устанавливать определенное значение сопротивление в цифровом потенциометре при помощи библиотеки Wire. Установка определенного значения осуществляется при помощи переменной val.
#include
Видео работы I2C и Arduino. Часть 1
Описание библиотеки Wire
Данная библиотека позволяет вам взаимодействовать с I2C / TWI устройствами. На платах Arduino с компоновкой R3 (распиновка 1.0) SDA (линия данных) и SCL (линия тактового сигнала) находятся на выводах около вывода AREF. Arduino Due имеет два I2C / TWI интерфейса: SDA1 и SCL1 находятся около вывода AREF, а дополнительные линии находятся на выводах 20 и 21.
В таблице ниже показано, где расположены TWI выводы на разных платах Arduino.
Начиная с Arduino 1.0, данная библиотека наследует функции Stream , что делает ее совместимой с другими библиотеками чтения/записи. Из-за этого send() и receive() были заменены на read() и write() .
Примечание
Существуют 7- и 8-битные версии адресов I2C. 7 битов идентифицируют устройство, а восьмой бит определяет, идет запись или чтение. Библиотека Wire использует 7 битные адреса. Если у вас есть техническое описание или пример кода, где используется 8-битный адрес, вам нужно откинуть младший бит (т.е. сдвинуть значение на один бит вправо), получив адрес от 0 до 127. Однако адреса от 0 до 7 не используются, так как зарезервированы, поэтому первым адресом, который может быть использован, является 8. Обратите внимание, что при подключении выводов SDA/SCL необходимы подтягивающие резисторы. Для более подробной информации смотрите примеры. На плате MEGA 2560 есть подтягивающие резисторы на выводах 20 и 21.
Описание методов
Wire.begin()
ОписаниеИнициализирует библиотеку Wire и подключается к шине I2C как ведущий (мастер) или ведомый. Как правило, должен вызываться только один раз.
Синтаксис
Wire.begin(address)
Параметры
address: 7-битный адрес ведомого устройства (необязательно); если не задан, плата подключается к шине как мастер.
Возвращаемое значение
Пример
Примеры для ведомого устройства смотрите в примерах к методам onReceive() и onRequest() . Примеры для ведущего устройства смотрите в примерах к остальным методам. .
Wire.requestFrom()
ОписаниеИспользуется мастером для запроса байтов от ведомого устройства. Эти байты могут быть получены с помощью методов available() и read() .
Если этот аргумент равен true , то requestFrom() после запроса посылает сообщение STOP, освобождая шину I2C.
Если этот аргумент равен false , то requestFrom() после запроса посылает сообщение RESTART. Шина не освобождается, что мешает другому устройству-мастеру влезть между сообщениями. Это позволяет одному ведущему устройству посылать несколько запросов, пока оно контролирует шину.
Синтаксис
Wire.requestFrom(address, quantity)
Wire.requestFrom(address, quantity, stop)
Параметры
- address: 7-битный адрес устройства, у которого запрашиваются байты;
- quantity: количество запрашиваемых байтов;
- stop: boolean . true посылает сообщение STOP после запроса. false посылает сообщение RESTART после запроса, сохраняя соединение активным.
byte: количество байтов, возвращенных от ведомого устройства.
Пример
Wire.beginTransmission()
ОписаниеНачинает передачу на ведомое I2C устройство с заданным адресом. После него последовательность байтов для передачи ставится в очередь с помощью функции write() , и их передача с помощью вызова endTransmission() .
Синтаксис
Wire.beginTransmission(address)
Параметры
address: 7-битный адрес устройства, на которое необходимо передать данные.
Возвращаемое значение
Пример
Wire.endTransmission()
ОписаниеЗавершает передачу на ведомое устройство, которая была начата методом beginTransmission() и передает байты, которые были поставлены в очередь методом write() .
Для совместимости с определенными I2C устройствами, начиная с Arduino 1.0.1, requestFrom() принимает аргумент логического типа данных, меняющий его поведение.
Если этот аргумент равен true , то requestFrom() после передачи посылает сообщение STOP, освобождая шину I2C.
Если этот аргумент равен false , то requestFrom() после передачи посылает сообщение RESTART. Шина не освобождается, что мешает другому устройству-мастеру влезть между сообщениями. Это позволяет одному ведущему устройству посылать несколько передач, пока оно контролирует шину.
По умолчанию этот аргумент равен true .
Синтаксис
Wire.endTransmission()
Wire.endTransmission(stop)
Параметры
stop: boolean . true посылает сообщение STOP после передачи. false посылает сообщение RESTART после передачи, сохраняя соединение активным.
Возвращаемое значение
byte , который указывает на состояние передачи:
- 0: успех;
- 1: данные слишком длинны для заполнения буфера передачи;
- 2: принят NACK при передаче адреса;
- 3: принят NACK при передаче данных;
- 4: остальные ошибки.
Смотрите пример к методу write() .
Wire.write()
ОписаниеЗаписывает данные от ведомого устройства в отклик на запрос от ведущего устройства, или ставит в очередь байты для передачи от мастера к ведомому устройству (между вызовами beginTransmission() и endTransmission()).
Синтаксис
Wire.write(value)
Wire.write(string)
Wire.write(data, length)
Параметры
- value: значение для передачи, один байт.
- string: строка для передачи, последовательность байтов.
- data: массив данных для передачи, байты.
- length: количество байтов для передачи.
byte: write() возвращает количество записанных байтов, хотя чтение этого количества не обязательно.
Пример #include
Wire.available()
ОписаниеВозвращает количество байтов, доступных для получения с помощью read() . Этот метод должен вызываться на ведущем устройстве после вызова requestFrom() или на ведомом устройстве внутри обработчика onReceive() .
Синтаксис
Wire.available()
Параметры
Возвращаемое значение
Количество байтов, доступных для чтения.
Пример
Смотрите пример к методу read() .
Wire.read()
ОписаниеСчитывает байт, который был передан от ведомого устройства к ведущему после вызова requestFrom() , или который был передан от ведущего устройства к ведомому.
Синтаксис
Параметры
Возвращаемое значение
byte: очередной принятый байт.
Пример #include
Wire.setClock()
ОписаниеИзменяет тактовую частоту для связи по шине I2C. У ведомых I2C устройств нет минимальной рабочей тактовой частоты, однако обычно используется 100 кГц.
Синтаксис
Wire.setClock(clockFrequency)
Параметры
clockFrequency: значение частоты (в герцах) тактового сигнала. Принимаются значения 100000 (стандартный режим) и 400000 (быстрый режим). Некоторые процессоры также поддерживают 10000 (низкоскоростной режим), 1000000 (быстрый режим плюс) и 3400000 (высокоскоростной режим). Чтобы убедиться, что необходимый режим поддерживается, обращайтесь к технической документации на конкретный процессор.
Возвращаемое значение
Wire.onReceive()
ОписаниеРегистрирует функцию, которая будет вызываться, когда ведомое устройство принимает передачу от мастера.
Синтаксис
Wire.onReceive(handler)
Параметры
handler: функция, которая должна будет вызываться, когда ведомое устройство принимает данные; она должна принимать один параметр int (количество байтов, прочитанных от мастера) и ничего не возвращать, т.е.:
void myHandler(int numBytes)
Возвращаемое значение
Пример
#include
Wire.onRequest()
ОписаниеРегистрирует функцию, которая будет вызываться, когда мастер запрашивает данные от ведомого устройства.
Синтаксис
Wire.onRequest(handler)
Параметры
handler: функция, которая должна будет вызываться, она не принимает параметров и ничего не возвращает, т.е.:
void myHandler()
Возвращаемое значение
Пример
Код для платы Arduino, работающей в качестве ведомого устройства:
#include