Что такое I2C интерфейс Arduino. Как подключить устройства по I2C к Arduino. Какие преимущества дает использование I2C в проектах. Как настроить обмен данными между устройствами по I2C шине.
Что такое I2C интерфейс и как он работает
I2C (Inter-Integrated Circuit) — это последовательный протокол связи, разработанный компанией Philips для соединения различных электронных компонентов на короткие расстояния. Это двунаправленная шина, использующая всего два провода:
- SDA (Serial Data) — линия для передачи данных
- SCL (Serial Clock) — линия тактового сигнала
Как работает I2C интерфейс на Arduino?
- Ведущее устройство (обычно Arduino) инициирует связь и генерирует тактовый сигнал на линии SCL.
- Каждое ведомое устройство на шине имеет уникальный 7-битный адрес.
- Ведущий отправляет адрес нужного ведомого и бит чтения/записи.
- Адресованное устройство отвечает и начинается обмен данными.
- Передача завершается специальным стоп-сигналом от ведущего.
Такой подход позволяет подключить до 128 устройств на одну шину I2C, что делает его очень удобным для сложных проектов.

Преимущества использования I2C в проектах Arduino
Почему стоит использовать I2C интерфейс в проектах на Arduino? Вот основные преимущества:
- Простота подключения — требуется всего 2 провода для соединения множества устройств
- Возможность подключения до 128 устройств на одну шину
- Встроенная поддержка в Arduino — есть готовая библиотека Wire
- Низкое энергопотребление по сравнению с параллельными интерфейсами
- Надежность передачи данных благодаря подтверждениям
- Гибкость — поддерживает разные скорости передачи
Эти особенности делают I2C отличным выбором для проектов, где нужно соединить несколько датчиков, дисплеев или других периферийных устройств с Arduino.
Как подключить I2C устройства к Arduino
Подключение устройств по I2C интерфейсу к Arduino очень простое:- Соедините линию SDA устройства с пином A4 (SDA) Arduino
- Соедините линию SCL устройства с пином A5 (SCL) Arduino
- Подключите питание и землю устройства к соответствующим пинам Arduino
- Добавьте подтягивающие резисторы 4.7 кОм между SDA/SCL и VCC, если их нет в устройстве
Важно помнить, что все устройства на шине I2C должны иметь общую землю. Также убедитесь, что напряжение логических уровней устройств совместимо с Arduino (обычно 5В или 3.3В).

Типичная схема подключения I2C устройств к Arduino:
- Arduino A4 (SDA) → SDA устройства
- Arduino A5 (SCL) → SCL устройства
- Arduino 5V → VCC устройства
- Arduino GND → GND устройства
Такая простая схема позволяет подключить практически любое I2C-совместимое устройство к Arduino.
Программирование обмена данными по I2C на Arduino
Как настроить обмен данными между Arduino и I2C устройствами? Для этого используется встроенная библиотека Wire. Вот основные шаги:
- Подключите библиотеку Wire в скетче: #include <Wire.h>
- В setup() инициализируйте I2C: Wire.begin()
- Для отправки данных используйте Wire.beginTransmission(), Wire.write() и Wire.endTransmission()
- Для чтения данных — Wire.requestFrom() и Wire.read()
Пример простого скетча для отправки данных по I2C:
#include <Wire.h>
void setup() {
Wire.begin(); // Инициализация I2C
}
void loop() {
Wire.beginTransmission(0x68); // Начало передачи на адрес 0x68
Wire.write(0x00); // Отправка байта данных
Wire.endTransmission(); // Завершение передачи
delay(100);
}
Этот код отправляет один байт данных на устройство с адресом 0x68 каждые 100 мс.

Популярные I2C устройства для Arduino
Какие устройства можно подключить к Arduino по I2C интерфейсу? Вот список наиболее популярных:
- OLED дисплеи (SSD1306, SH1106)
- LCD дисплеи с I2C модулем
- Датчики температуры и влажности (BME280, SHT31)
- Акселерометры и гироскопы (MPU-6050, LSM9DS1)
- Часы реального времени (DS3231, PCF8523)
- Расширители портов ввода-вывода (PCF8574, MCP23017)
- АЦП и ЦАП (ADS1115, MCP4725)
Все эти устройства легко интегрируются в проекты на Arduino благодаря I2C интерфейсу. Для большинства из них есть готовые библиотеки, упрощающие работу.
Отладка I2C соединений в Arduino проектах
Как проверить правильность работы I2C устройств в вашем проекте? Вот несколько полезных советов:
- Используйте I2C сканер для определения адресов подключенных устройств
- Проверьте правильность подключения SDA и SCL линий
- Убедитесь в наличии подтягивающих резисторов на шине
- Используйте осциллограф для анализа сигналов на шине
- Добавьте отладочный вывод в Serial Monitor
Пример скетча I2C сканера:

#include <Wire.h>
void setup() {
Wire.begin();
Serial.begin(9600);
Serial.println("I2C Scanner");
}
void loop() {
byte error, address;
int nDevices = 0;
for(address = 1; address < 127; address++ ) {
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0) {
Serial.print("I2C device found at address 0x");
if (address < 16)
Serial.print("0");
Serial.println(address, HEX);
nDevices++;
}
}
if (nDevices == 0)
Serial.println("No I2C devices found\n");
else
Serial.println("done\n");
delay(5000);
}
Этот код сканирует все возможные I2C адреса и выводит найденные устройства в Serial Monitor.
Расширение возможностей I2C в Arduino проектах
Как можно расширить функциональность I2C интерфейса в проектах Arduino? Вот несколько продвинутых техник:
- Использование Arduino в качестве I2C ведомого устройства
- Реализация нескольких I2C шин на одной плате
- Применение I2C мультиплексоров для увеличения числа устройств
- Использование прерываний для асинхронного обмена данными
- Реализация собственных I2C протоколов для специфических задач
Пример настройки Arduino как I2C ведомого:

#include <Wire.h> #define SLAVE_ADDRESS 0x08 void setup() { Wire.begin(SLAVE_ADDRESS); Wire.onReceive(receiveEvent); Wire.onRequest(requestEvent); Serial.begin(9600); } void loop() { delay(100); } void receiveEvent(int howMany) { while (Wire.available()) { char c = Wire.read(); Serial.print(c); } Serial.println(); } void requestEvent() { Wire.write("Hello from Arduino!"); }
Этот код настраивает Arduino как I2C ведомое устройство с адресом 0x08, способное принимать и отправлять данные.
Заключение: эффективное использование I2C в Arduino проектах
I2C интерфейс предоставляет огромные возможности для создания сложных и функциональных проектов на базе Arduino. Его простота, гибкость и широкая поддержка различными устройствами делают его незаменимым инструментом для любого Arduino разработчика.
Ключевые моменты для эффективного использования I2C:
- Правильно выбирайте устройства с учетом их I2C адресов
- Соблюдайте правила подключения и используйте качественные провода
- Изучите документацию к используемым устройствам
- Используйте готовые библиотеки, но не бойтесь писать свой код
- Применяйте отладочные инструменты для диагностики проблем
Освоив I2C интерфейс, вы сможете создавать более сложные и интересные проекты на Arduino, комбинируя различные датчики, дисплеи и другие устройства в единую систему.

Проекты с использованием протокола i2c (TWI)
На главную
Обзор программ
Обзор плат
Проекты на базе:
Arduino Nano
Arduino Uno
Arduino Pro Micro
Arduino Mega
Digispark
Проекты с использованием:
Потенциометр
Джойстик
Кнопка
Реле
RGB
Дисплей
SD карта
Электрон.

Энкодер
Сдвиг. регистор
Д. температуры
Д. влажности
Д. растояния
Д. газа
Батарея
Средства связи:
Bluetooth
Android
GSM
USB
I2C (TWI)
SPI ICSP
UART
One Wire
Парал.

Двигатели:
Шаговый мотор
Постоянного тока
Servo
Еще:
О нас
Oбъявление
Обратная связь
YouTube канал
Проекты с использованием протокола i2c (TWI)
Автоматическая фокусировка на Arduino и Digispark с датчиком расстояния VL53L0X и драйвером DRW8825.
Статья, содержащая материалы для изучения и сборки двух вариантов привода, для автоматической фокусировки микроскопа, на Arduino UNO и Digispark
Как объединить две платы Arduino и Digispark, для совместной работы над общей задачей.
Как подключить биполярный шаговый двигатель к Arduino Uno и к Digispark...
Открыть полностью
Лучший эмулятор Arduino UnoArduSim V2.6. Вторая серия.
Набор из 8 простых скетчей, которые использовались в этой серии.
В этой серии рассмотрены принципы работы таких модулей как: I2C LCD дисплей, SPI LCD дисплей, LCD дисплей с 4-битовым параллельным интерфейсом и SPI TFT дисплей. Имеется шпаргалка с координатами, для SPI TFT дисплея 128 на 160 пикселей.
Открыть полностью
Лучший эмулятор Arduino UnoArduSim V2.

Набор из 5 простых скетчей, которые использовались в этой серии.
В этой серии рассматриваются модули: SPI, I2C, One Wire (датчика температуры DS18b20), функция осциллограф, и модуль UNO который вы не найдете не в одном другом эмуляторе.
Открыть полностью
Меню для дисплея LCD 1602 на базе Arduino Nano. Контроль и управление нагрузками.
Пример меню для LCD дисплея 1602, с возможностью управления нагрузками, и отображением состояния программ на главной странице.
В качестве нагрузок используются светодиоды.
Открыть полностью
Крутой менеджер паролей своими руками на Arduino Pro Micro Atmega32u4 с защитой от кражи.

Эта статья является инструкцией, для изготовления самодельного менеджера паролей. В который можно загружать до 25 аккаунтов. Для безопасности данных пришлось добавить четырехзначный пароль, для доступа к списку аккаунтов, а также двухступенчатый таймер, на тот случай если будет введен неверный пароль.
Открыть полностью
Лучший эмулятор Arduino UnoArduSim V2.7. Пятая серия.
Набор из трех простых скетчей, которые использовались в пятой серии.
В этой серии рассматриваются модули: 7 и 14 сегментные индикаторы с интерфейсом SPI и I2C, на четыре символа и на восемь символов.
Открыть полностью
Лучший симулятор Arduino UnoArduSim V2.

Примеры скетчей, для работы с одноцветной и двухцветной матрицей 8 на 8 пикселей. Которые симулируют работу модуля HOLTEK16K33 он же HT16K33, и модуля на микросхеме MUX7219, с называнием Bicolor LED.
Также есть пример программного кода, для работы с модулем Adafruit LED 24 Bargraph, который является одно строчным индикатором на 24 пикселя.
Открыть полностью
Плавный пуск и остановка биполярного шагового двигателя. Спец драйвер на Digispark Attiny85.
Статья о том, как организовать плавный пуск биполярного шагового двигателя, путём совмещения драйвера шагового двигателя с платой Didispark Attiny85, которая выступает в роли посредника между платой Arduino и драйвером шагового двигателя A4988 или DRW8825
Открыть полностью
ЧПУ станок для намотки трансформаторов на Arduino и Digispark.

Инструкция по управлению ЧПУ станком для намотки трансформаторов на Arduino.
А также материалы, для самостоятельной сборки ЧПУ станка, для намотки трансформаторов на Arduino.
Открыть полностью
ЧПУ станок для намотки трансформаторов с укладчиком провода, и автоматическим натяжением провода на Arduino и Digispark.
Материалы, для самостоятельной сборки ЧПУ станка для намотки трансформаторов на Arduino, с укладчиком провода, и с автоматическим натяжением провода.
А также инструкция, по управлению ЧПУ станком, для намотки трансформаторов на Arduino и Digispark.
Открыть полностью
I2C — Отправка данных в Arduino UNO — Решения Realtek IoT/Wi-Fi MCU
Пример
Введение
В работе I2C есть две роли: одна — «ведущая», другая — «подчиненная». Допускается только один мастер, и он может быть подключен ко многим ведомым устройствам. Каждое ведомое устройство имеет свой уникальный адрес, который используется при общении между ведущим и ведомым. I2C использует два вывода, один для передачи данных (SDA), другой для часов (SCL). Мастер использует SCL для информирования ведомого о предстоящей передаче данных, и данные передаются через SDA. Пример I2C был назван «Wire» в примере с Arduino.
Процедура
В этом примере мы используем Ameba в качестве ведущего устройства записи I2C, а Arduino — в качестве подчиненного приемника I2C.
Когда подчиненное устройство I2C получает строку, отправленную ведущим устройством I2C, оно печатает полученную строку.
- Настройка Arduino Uno в качестве ведомого устройства I2C
Сначала выберите Arduino в Arduino IDE в «Инструменты» -> «Плата» -> «Arduino Uno». > «Провод» -> «ведомый_приемник»:
Затем нажмите «Скетч» -> «Загрузить», чтобы скомпилировать и загрузить пример в Arduino Uno.
- Настройка Ameba в качестве I2C Master
Затем откройте другое окно Arduino IDE, убедившись, что в среде IDE выбрана плата разработки Ameba: «Инструменты» -> «Плата»
Затем откройте «Мастер Writer» в «Файл» -> «Примеры» -> «AmebaWire» -> «MasterWriter»
- Wiring
Пример Arduino использует A4 в качестве I2C SDA и A5 в качестве I2C SCL.
Еще одна важная вещь, которую следует отметить, это то, что контакты GND Arduino и Ameba должны быть соединены друг с другом.
AMB21 / AMB22 Диаграмма подключения:
AMB23 Диаграмма подключения:
BW16 Diagram Diagram:
BW16 Type Cyring Diagram:
BW16 Type CIRING Diagram:
BW16 Type CIRINGIN Схема подключения AMB25:
Откройте Arduino IDE Arduino Uno и откройте последовательный монитор («Инструменты» -> «Последовательный монитор»).
В последовательном мониторе вы можете увидеть сообщения, напечатанные с Arduino Uno.
Затем нажмите кнопку сброса на Arduino Uno. Теперь Arduino Uno ожидает подключения от I2C Master.
Нажимаем кнопку сброса на Амебе, чтобы начать отправлять сообщения. Затем наблюдайте за последовательным монитором, вы можете видеть, что сообщения появляются каждые полсекунды.
Ссылка на код
Подробную информацию об этом примере можно найти в документации Arduino:
https://www.arduino.cc/en/Tutorial/MasterWriter
Сначала используйте Wire.begin()/Wire.begin(address) для подключения к шине I2C в качестве ведущего или ведомого, в случае ведущего адрес не требуется.
https://www.arduino.cc/en/Reference/WireBegin
Затем мастер использует Wire.beginTransmission(адрес), чтобы начать передачу на ведомое устройство I2C с заданным адресом:
https://www.arduino .cc/en/Reference/WireBeginTransmission
Использует Wire.write() для отправки данных и, наконец, использует Wire. endTransmission() для завершения передачи ведомому устройству и передачи байтов, поставленных в очередь:
https://www.arduino.cc/en/Reference/WireEndTransmission
I2C Shield для Arduino UNO
Сэкономьте $0,00
Национальные устройства управленияSKU: RB-Ncd-10
№ производителя:
ПР14-3
Поделитесь этим продуктом
- Расширение I2C +5 В для USB-микроконтроллера Arduino Uno R3
- Встроенные подтягивающие резисторы I2C 4,7 кОм
- Совместимость с подключаемыми модулями устройств I2C
- Сквозная неинвазивная конструкция
Щит I2C для Arduino UNO действует как порт I2C общего назначения, предоставляя безграничные возможности расширения. Этот шилд совместим с устройствами I2C и идеально подходит для управления реле, контроля тока и т. д.
Ваша платежная информация надежно обрабатывается. Мы не храним данные кредитной карты и не имеем доступа к информации о вашей кредитной карте.
Country
United StatesAustraliaFranceMexico---AfghanistanÅland IslandsAlbaniaAlgeriaAndorraAngolaAnguillaAntigua & BarbudaArgentinaArmeniaArubaAustraliaAustriaAzerbaijanBahamasBahrainBangladeshBarbadosBelarusBelgiumBelizeBeninBermudaBhutanBoliviaBosnia & HerzegovinaBotswanaBrazilBritish Indian Ocean TerritoryBritish Virgin IslandsBruneiBulgariaBurkina FasoBurundiCambodiaCameroonCape VerdeCaribbean NetherlandsCayman IslandsCentral African RepublicChadChileChinaChristmas IslandCocos (Keeling) IslandsColombiaComorosCongo - BrazzavilleCongo - KinshasaCook IslandsCosta RicaCroatiaCuraçaoCyprusCzechiaCôte d'IvoireDenmarkDjiboutiDominicaDominican RepublicEcuadorEgyptEl SalvadorEquatorial GuineaEritreaEstoniaEswatiniEthiopiaFalkland IslandsFaroe IslandsFijiFinlandFranceFrench GuianaFrench PolynesiaFrench Southern TerritoriesGabonGambiaGeorgiaGermanyGhanaGibraltarGreeceGreenlandGrenadaGuadeloupeGuatemalaGuernseyGuineaGuinea -БисауГайанаГаитиГондурасГонконг САРВенгрияIc elandIndiaIndonesiaIraqIrelandIsle of ManIsraelItalyJamaicaJapanJerseyJordanKazakhstanKenyaKiribatiKosovoKuwaitKyrgyzstanLaosLatviaLebanonLesothoLiberiaLiechtensteinLithuaniaLuxembourgMacao SARMadagascarMalawiMalaysiaMaldivesMaliMaltaMartiniqueMauritaniaMauritiusMayotteMexicoMoldovaMonacoMongoliaMontenegroMontserratMoroccoMozambiqueMyanmar (Burma)NamibiaNauruNepalNetherlandsNew CaledoniaNew ZealandNicaraguaNigerNigeriaNiueNorfolk IslandNorth MacedoniaNorwayOmanPakistanPalestinian TerritoriesPanamaPapua New GuineaParaguayPeruPhilippinesPitcairn IslandsPolandPortugalQatarRéunionRomaniaRussiaRwandaSamoaSan MarinoSão Tomé & PríncipeSaudi ArabiaSenegalSerbiaSeychellesSierra LeoneSingaporeSint MaartenSlovakiaSloveniaSolomon IslandsSomaliaSouth AfricaSouth Georgia & South Sandwich IslandsSouth KoreaSpainSri LankaSt.