Почему не определяются устройства на шине i2c
Перейти к содержимому

Почему не определяются устройства на шине i2c

  • автор:

Определение адреса I2C устройства

Шина I2C очень популярна тем, что к ней можно подключить очень много устройств. Тем самым не требуется занимать много выводов контроллера и подключение намного понятнее и нагляднее. Чтобы обратиться к модулю на шине, нужно указать его адрес. Но покупая очередное устройство, не всегда понятно, как же определить, какой именно адрес на шине I2C принадлежит тому или иному устройству.

Простое определение адреса устройства

Шаг 1. Подключите устройство к контроллеру

Подключите Ваше устройство напрямую к контроллеру.

Шаг 2. Загрузите скетч, указанный ниже в контроллер

Скетч для загрузки:

#include //подключение библиотеки void setup() { Wire.begin(); //инициализация шины Serial.begin(9600); //инициализация монитора Serial-порта while (!Serial); //ожидание доступности порта Serial.println("I2C Scanner"); } void loop() { //вспомогательные переменные byte error; //хранение кода ошибки byte address; //хранение адреса устройства int nDevices = 0; //счётчик устройств Serial.println("Scanning. "); //вывод надписи for (address = 1; address  127; address++ ) { /* Для поиска устройств воспользуемся функцией коммуникации и * окончания коммуникации с устройством на адресе от 1 до 127. * При окончании коммуникации возвращается код ошибки. * Если он не равен нулю, то коммуникация прошла успешно, * и устройство на данном адресе найдено. * В противном случае выводится информация об ошибке. */ Wire.beginTransmission(address); error = Wire.endTransmission(); if (error == 0) { //ошибки не обнаружено //вывод адреса найденного устройства Serial.print("I2C device found at address 0x"); if (address  16) { Serial.print("0"); } Serial.print(address, HEX); Serial.println(" !"); nDevices++; //увеличение счётчика найденных устройств } else if (error == 4) { //если код ошибки равен 4 - устройство неопознано //вывод информации об ошибке Serial.print("Unknown error at address 0x"); if (address  16) { Serial.print("0"); } Serial.println(address, HEX); } } //вывод результата по окончании сканирования if (nDevices == 0) { Serial.println("No I2C devices found"); } else { Serial.print("Found "); Serial.print(nDevices); Serial.println(" devices"); } delay(5000); //пауза в 5 секунд между сканированием }
Шаг 3. Откройте монитор порта

В мониторе Serial-порта будет выведен адрес Вашего устройства. В данном примере адресом устройства является «0x51».

Scanning. I2C device found at address 0x51 ! Found 1 devices

Примечание: Для подключения нескольких устройств, посмотрите примеры из статьи Расширитель I2C.

© 2014-2023 УмныеЭлементы — DIY-электроника Arduino, компоненты для робототехники и электронных устройств. «УмныеЭлементы» (SmartElements) является зарегистрированным товарным знаком. Любое воспроизведение товарного знака допускается только с согласия правообладателя.

Arduino: как узнать I2C адрес устройства?

I2C — это такая шина данных, широко используемая в микроэлектронике. С помощью I2C можно подключить к Ардуино много разных полезных модулей, включая датчики, дисплеи, АЦП и даже другие платы Ардуино.

Шина является адресной, так что каждое подключаемое устройство имеет свой адрес в диапазоне от 8 до 127. На одной шине не может быть два устройства с одинаковыми адресами.

В этой короткой статье мы победим одну из частых проблем, которые испытывают самодельщики про покупке неведомого модуля с этим самым I2C интерфейсом. Проблема состоит в том, что производитель может изменить адрес устройства, и стандартные библиотеки перестают работать. Часто с подобной неприятностью можно столкнуться, например, при подключении ЖК дисплея с интерфейсом I2C.

Программа для сканирования I2C шины

Чтобы понять, какой всё-таки адрес у модуля, подключаемого к плате Ардуино, нужно просто «постучаться» по каждому из 119 возможных адресов. Если кто-то ответит, значит адрес рабочий!

#include void setup() < Wire.begin(); Serial.begin(9600); while (!Serial); Serial.println("\nI2C Scanner"); >void loop() < byte error, address; int nDevices; Serial.println("Scanning. "); nDevices = 0; for(address = 8; 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.print(address,HEX); Serial.println(" !"); nDevices++; >else if (error==4) < Serial.print("Unknow error at address 0x"); if (address<16) Serial.print("0"); Serial.println(address,HEX); >> if (nDevices == 0) Serial.println("No I2C devices found\n"); else Serial.println("done\n"); delay(5000); >

Загружаем программу на Ардуино Уно, подключаем тестируемое устройство к I2C шине и открываем монитор последовательного порта. Если все подключено правильно, то появится примерно такой отчет:

Сканер I2C шины на Ардуино

Это значит, что мой дисплей имеет адрес 0x27 в шестнадцатеричной системе счисления. Теперь можно смело подключить библиотеку для работы с такими дисплеями и указать в ней данный адрес.

Изменено: 14 Ноя, 2016 02:25

Arduino: как узнать I2C адрес устройства? : Один комментарий

Роман говорит 14.11.2016 в 15:39 :

Очень интересно, но думаю не помешала бы принципиальная схемка подключения I2C устройства к Ардуино. Ну или ссылка на такую процедуру.

Сканирование устройств на шине I2C с помощью Arduino.

Шина I2C (Inter-Integrated Circuit) — это протокол связи, который позволяет микроконтроллеру взаимодействовать с различными устройствами, подключенными к одной шине. Шина I2C является одной из наиболее распространенных и удобных способов подключения датчиков, дисплеев и других периферийных устройств к Arduino и другим МК.

Устройства на шине I2C имеют уникальные адреса, которые используются для их идентификации и взаимодействия с ними. Важно отметить, что некоторые устройства имеют возможность изменять свои адреса, обычно с помощью перманентных перемычек или специальных команд. Это особенно важно учитывать, когда на шине I2C подключено несколько устройств одного типа.

некоторые устройства имеют возможность изменять свои адреса, обычно с помощью перманентных перемычек или специальных команд.

Цель этого урока — научиться сканировать устройства, подключенные к шине I2C, и определять их адреса с помощью Arduino.

На шине I2C можно подключить широкий спектр устройств, включая:

  • Датчики температуры и влажности, такие как датчик BME280 или BMP180.
  • Датчики освещенности, например BH1750.
  • Акселерометры и гироскопы, например MPU-6050.
  • OLED дисплеи (LCD) с контроллером типа SSD1306.
  • Адаптеры расширения портов, такие как MCP23017.
  • Потенциометры и датчики силы нажатия, например ADS1115.
  • Многоканальные аналогово-цифровые преобразователи (ADC), такие как ADS1015.
  • EEPROM-память для хранения данных.
  • Магнитные компасы, например HMC5883L.
  • И многие другие устройства.

На шине I2C можно подключить широкий спектр устройств

Знание адресов подключенных устройств на шине I2C крайне важно для успешного взаимодействия с ними. Каждое устройство на шине I2C имеет уникальный адрес, который необходимо знать, чтобы отправлять и получать данные от него. Пример сканировании шины I2C с использованием Arduino из данного урока, поможет определить адреса подключенных устройств и использовать их в дальнейшей работе.

Теперь, когда мы понимаем, что мы будем делать и почему это важно, давайте перейдем к написанию кода и выполнению урока!

Шаг 1: Подготовка оборудования

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

  • Arduino (любая модель, совместимая с библиотекой Wire).
  • Компьютер с установленной Arduino IDE.
  • Устройства, у которых вы хотите узнать адресс на шине I2C. Убедитесь, что они поддерживают протокол I2C.

Подготовка оборудования

Подключите ваш Arduino к компьютеру с помощью USB-кабеля. Затем подключите устройства к шине I2C на Arduino. Обычно, пины A4 и A5 используются в качестве пинов SDA и SCL соответственно.

Затем подключите устройства к шине I2C на Arduino. Обычно, пины A4 и A5 используются в качестве пинов SDA и SCL соответственно.

Шаг 2: Загрузка (обновить) библиотеку Wire.

В большинстве случаев, библиотека Wire уже поставляется вместе с платами Arduino AVR и должна быть доступна без необходимости дополнительной установки.

Вы можете убедиться, что у вас установлена последняя версия плат Arduino AVR

Вы можете убедиться, что у вас установлена последняя версия плат Arduino AVR, следуя этим шагам:

  • Откройте Arduino IDE на вашем компьютере.
  • Нажмите на меню «Инструменты» (Tools) в верхней части окна Arduino IDE.
  • Наведите курсор на «Плата» (Board) в выпадающем меню.
  • В появившемся подменю выберите «Плата Arduino AVR» (Arduino AVR Boards).

Пожалуйста, обратите внимание, что указанные инструкции предназначены для Arduino IDE и плат Arduino AVR. Если вы используете другую IDE или другие платы Arduino, процесс установки и наличие библиотек могут незначительно отличаться.

Шаг 3: Написание кода

Теперь давайте напишем программу, которая будет сканировать устройства на шине I2C и выводить результаты на монитор порта.

#include //библиотека Wire. void setup() < Serial.begin(9600); Wire.begin(); Serial.println("I2C Scanner"); >void loop() < byte error, address; int devices = 0; Serial.println("Scanning. "); for (address = 1; address < 127; address++) < Wire.beginTransmission(address); error = Wire.endTransmission(); if (error == 0) < Serial.print("Device found at address 0x"); if (address < 16) < Serial.print("0"); >Serial.print(address, HEX); Serial.println(); devices++; > else if (error == 4) < Serial.print("Unknown error at address 0x"); if (address < 16) < Serial.print("0"); >Serial.print(address, HEX); Serial.println(); > > if (devices == 0) < Serial.println("No I2C devices found"); >else < Serial.println("Scan complete"); >delay(5000); // Пауза в 5 секунд между сканированиями >
Шаг 4: Загрузка и запуск кода
  • Подключите Arduino к компьютеру с помощью USB-кабеля.
  • Откройте Arduino IDE и убедитесь, что выбран правильный тип платы и порта в меню «Инструменты» (Tools).

Откройте Arduino IDE и убедитесь, что выбран правильный тип платы и порта в меню

  • Скопируйте код выше в окно Arduino IDE.
  • Нажмите кнопку «Загрузить» (Upload) для загрузки кода на Arduino.

Нажмите кнопку

  • Откройте монитор порта (Serial Monitor) в Arduino IDE, чтобы просмотреть результаты сканирования.

Откройте монитор порта (Serial Monitor) в Arduino IDE, чтобы просмотреть результаты сканирования.

После загрузки кода, Arduino будет сканировать шину I2C и отображать найденные устройства в мониторе порта. Если устройства обнаружены, их адреса будут выводиться на мониторе порта.

Этот урок позволяет определить, какие устройства подключены к шине I2C и узнать их адреса.

Этот урок позволяет определить, какие устройства подключены к шине I2C и узнать их адреса. Это полезно для последующей работы с устройствами на шине I2C.

Удачи в вашем эксперименте с шиной I2C и Arduino!

Мы рады объявить о нашем присутствии на Boosty! Arduino-Tex приглашает всех наших друзей и последователей поддержать нас на этой замечательной платформе. Здесь вы найдете эксклюзивный контент, уникальные проекты и возможность стать частью нашей творческой команды. Присоединяйтесь к нам на Boosty и вместе мы сделаем мир Arduino еще удивительнее!

Понравился урок. Сканирование устройств на шине I2C с помощью Arduino? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

Устройство HID на шине I2C что это такое?

Устройство HID на шине I2C что это такое

Просматривая устройства в диспетчере, некоторые пользователи могут отметить в нем некое устройство HID на шине I2C, помеченное восклицательным знаком. А это может говорить лишь об одном: с этим устройством есть проблемы. Причем они могут быть как программного характера, так и аппаратного.

В данной статье мы расскажем какое устройство обычно скрывается под данным названием и что можно попробовать сделать самостоятельно для устранения этой проблемы.

Запуск устройства HID на шине I2C невозможен (Код 10)

Для начала разберемся что это за устройство. В 80% случаев им является тачпад. В оставшихся 20% – клавиатура, подключенная по USB мышка или тачскрин (Сенсор экрана, если экран в вашем ноутбуке сенсорный).

что такое Устройство HID на шине I2C

Ошибка запуска устройства с кодом 10

Первым делом нужно проверить работоспособность всех этих устройств: ввести что-либо с клавиатуры, поводить пальцем по тачпаду и т.д.

То, что окажется нерабочим, и будет являться тем самым устройством HID на шине I2C.

Что делать, чтобы устройство заработало?

Самый верный путь – определить модель ноутбука, перейти на официальный сайт, скачать драйвера на все устройства ввода (тачпад, тачскрин, клавиатура) и установить их.

Второй вариант заключается в поиске драйвера для устройства по его идентификатору. Для этого в диспетчере устройств нужно дважды кликнуть мышкой по устройству HID на шине I2C.

что такое Устройство HID на шине I2C

Определение ИД оборудования

В открывшемся окне перейти на вкладку “Сведения” и выбрать свойство “ИД оборудования”.

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

Устройство HID на шине I2C что это такое

Поиск драйвера к устройству по его ИД

В полученных результатах выдачи останется отыскать драйвер под ваше устройство.

Если ничего из вышеописанного не помогло и устройство HID на шине I2C все равно отображается в диспетчере устройств с восклицательным знаком и статусом “Запуск этого устройства невозможен. Код 10”, то это означает, что с этим устройством имеются проблемы на аппаратном уровне.

Например, поврежден или отсоединился шлейф или само устройство повреждено, например падением ноутбука или его залитием жидкостью. В этом случае лучше обратиться в сервис. А если все нормально работает, то и вовсе не обращать на него внимание.

Лучшая благодарность автору — репост к себе на страничку:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *