• Skip to primary navigation
  • Skip to main content
  • Skip to primary sidebar
  • Skip to secondary sidebar
  • Skip to footer

У Павла!

  • Контроллеры
    • Arduino
      • Приборы
      • Музыка
      • Проекты Arduino
      • Уроки Arduino
      • Игры на Arduino
      • Роботы на Ардуино
      • FLProg
    • Одноплатные ПК
      • Orange pi
      • Raspberry pi
        • Raspberry pi pico
        • Raspberry pi server
        • Проекты Raspberry pi
    • ESP
      • ESP8266
        • NodeMCU
      • ESP32
      • M5stack
    • Другие контроллеры
      • STM32
  • Умный дом
    • Home Assistant
      • Автоматизации
    • Tuya
    • Bluetooth
    • ESPHome
    • Frigate
    • Telegram
    • Яндекс
  • ЧПУ
  • 3d печать
  • Об авторе

Сканирование шины i2c на arduino и raspberry pi

17 августа, 2019

Начнем пожалуй немного с теории.

I2C — это протокол, который позволяет различным устройствам взаимодействовать друг с другом используя одну шину данных SDA и SCL (всего два проводника), так же, для каждого устройства присваивается свой уникальный адрес. Максимально на одной шине может находиться 127 устройств. Как правило адрес i2c в устройстве вшит в микросхему с завода и его изменить нельзя, кроме тех случаев, когда это предусмотренно изготовителем и то обычно возможно поменять адрес только в небольшом диапазоне.
Иногда либо лень искать документацию на устройство или же ее не получается найти или вообще в документации один адрес указан, а у нас модуль с браком и адрес у него другой, для этого и пишу эту коротенькую статью.

Прежде чем приступить к материалу, я Вас попрошу, если нравится то, что я делаю и хотите следить за моей деятельностью, то рекомендую подписаться на мой телеграмм канал: https://t.me/ypavla
Там я публикую новости о вышедших видео, статьях и разные устройства для умного дома и не только показываю.
Спасибо за внимание, теперь продолжим.

 

Статья будет своего рода шпаргалкой, для того чтоб быстро узнать I2c адрес устройства. Я приведу два примера, один для того чтоб узнать адрес при помощи arduino, а второй способ будет, чтоб найти адрес устройства через raspberry pi.

Итак чтоб узнать i2c адрес на arduino нужно подключить устройство к пинам SDA и SCL они у arduino находятся A4(SDA) и A5(SCL).

Скетч выглядит следующим образом:

 
 
#include <Wire.h>
  
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);
}

Скачать скетч можно по ссылке: https://yadi.sk/d/i5UeLsXiKsLRUA

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

Со сканером i2c на ардуино мы я думаю разобрались, теперь давайте бегло разберемся как отсканировать шину на raspberry pi.

i2c у raspberry pi находится на пинах PIN3 и PIN5

Все будет показано на примере работы в OC Rasbian. Для начала необходимо убрать модуль I2C из блэклиста и добавить его в автозагрузку. Для этого делаем в консоли следующее, открываем файл raspi-blacklist.conf и видим в нем следующее:

sudo nano /etc/modprobe.d/raspi-blacklist.conf
blacklist spi-bcm2708
blacklist i2c-bcm2708

Закоментируем две строчки и сохраним файл:

# blacklist spi-bcm2708
# blacklist i2c-bcm2708

Далее добавляем модуль I2C в автозагрузку, открываем файл /etc/modules
sudo nano /etc/modules
 и добавляем в конец строку i2c-dev, должно получиться так:
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
# Parameters can be specified after the module name.
snd-bcm2835
i2c-dev

Перезагружаемся
sudo reboot Теперь необходимо поставить некоторые дополнительные пакеты:
sudo apt-get update
sudo apt-get install i2c-tools
sudo apt-get install python-smbus
Теперь, при подключении любого i2c устройства, выполним команду:
sudo i2cdetect -y 0

 

 И увидим вывод с адресом устройства:  из вывода мы видим что устройство имеет адрес 0x68. На этом все, надеюсь пригодится.

Primary Sidebar

Поиск

Новые записи

  • Автоматизация перезагрузки устройства по команде Ping.
  • Разблокирование и добавление шлюза Xiaomi gateway 3 в Home Assistant для управления Bluetooth устройствами из экосистемы Xiaomi Home (mihome)
  • Интеграция для локального управления (без интернета) ик пультом Tuya работающим по wifi из Home Assistant
  • Транслируем показания с Уличного Bluetooth Датчика температуры по BTHome на дисплей датчика температуры XIaomi LYWSD03MMC
  • Заставляем Bluetooth датчики температуры tuya и xiaomi отправлять данные по Zigbee в Home Assistant.

Официальный YouTube Канал M5Stack:

Подписывайтесь на Телеграм канал

https://t.me/ypavla

Подписаться на YouTube!

Secondary Sidebar




Подписывайтесь на Telegram Канал!

У Павла!

Footer

Copyright_У Павла! © 2025 ·