Ардуино для начинающих. Урок 11. Интерфейс I2C.

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

В этом уроке используется:

Отличный набор для начинающих:Купить
Arduino Uno:Купить
I2C датчик температуры, влажности и атмосферного давления:Купить

Подключение датчика температуры по шине I2C

Давайте рассмотрим схему подключения модуля Bme280 к ардуино. У этого модуля всего 4 контакта: Питание (VIN), земля (GND), линия тактирования (SCL) и линия данных (SDA). Линии I2C мы соединим с аналоговыми пинами А5 и А4 соответственно и подтянем сигнал к линии 5 В через резисторы на 10 КОм. Схема очень простая:

Подключение bme280 к ардуино
Подключение bme280 к ардуино

Теперь рассмотрим код. Мы будем получать данные с датчика, переводить градусы по Цельсию в градусы по фаренгейту и выводить все на экран компьютера:

 // Подключаем библиотеку для связи по I2C
#include <Wire.h>

// Адрес датчика температуры
int temp_address = 72;

void setup() {
	// Открываем моединение с компьютером
	Serial.begin(9600);

	// Открываем соединение по I2C
	Wire.begin();
}

void loop() {
	// Отправляем запрос
	// Начинаем общение с датчиком
	Wire.beginTransmition(temp_address);
	// Запрашиваем нулевой регистр
	Wire.send(0);
	// Выполняем передачу
	Wire.endTransmition
	// Запрашиваем 1 байт
	Wire.requestFrom(temp_address, 1);
	// Ждем ответа
	while(Wire.avalible() == 0);
	// Получаем температуру с датчика
	int c = Wire.receive();

	// Переводим температуру в фаренгейт
	int f = round(c*9.0/5.0 + 32.0);

	// Выводим данные на экран
	Serial.print(c);
	Serial.print("C, ");
	Serial.print(f);
	Serial.println("F");

	//Небольшая задержка, что бы данные обновлялись не слишком часто
	delay(500); 
}

Вам не нужно скачивать библиотеку Wire, так как она скачана по умолчанию в Arduino IDE. Адрес датчика температуры вы можете узнать на сайте производителя. Так же существуют модули с назначаемым адресом. В этом случае вам придется самостоятельно назначить адрес. Как это сделать должно быть описано на сайте производителя или в datasheet модуля.

9 комментариев

  1. Антон

    Добрый день.

    Спасибо за урок. Очень полезно.
    Я сейчас применяю плату STM32F103C8.
    В ее составе 2 аппаратных IIC (1й — B6, B7(выводы) и 2й — B10, B11(выводы)).
    Сейчас я работаю с 1м. Также как у Вас в уроке. Все работает.
    Возникла необходимость использовать 2й IIC. Каким образом я могу это сделать?
    Добавление цифр 1 или 2 (как для Serial) не работает.
    Заранее спасибо.

    Антон.

    • ``

      Антон, это сайт про Ардуино, какой ещё СТМ32..

  2. Константин

    Здравствуйте.
    Цвет проводников соответствует стандартам?
    SDA — желтый, SCL — зеленый, питание VDD — красный, земля WP — cиний.
    Дело в том, что ищу схему соединения, именно, по цветам.
    В штекере отвалились провода начисто. Не знаю, что-куда припаять.
    Прибор для измерения толщины слоя краски на металле: elcometer 456
    Платка, где все поотлетало: 24LC32AI

    • Антон

      землю и питание паяйте, затем случайным образом sda и scl. Не стартанет- меняйте местами.

  3. MixFax

    Thank you very much for the invitation :). Best wishes.
    PS: How are you? I am from France 🙂

  4. Олег

    откуда взялось beginTransmition ? Transmission наверное ? Этот сайт и не про Ардуино по моему

  5. Александр

    На сколько я знаю, не Transmition, а Transmission

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

Ардуино