В этом уроке мы познакомимся с шиной I2C. I2C это шина связи, использующая всего две линии. С помощью этого интерфейса Arduino может всего по двум проводам обмениваться данными со множеством устройств. Сегодня мы разберемся как подключить датчики и сенсоры к Ардуино по шине I2C, как обращаться к конкретному устройству и как получать данные с этих устройств. Для примера мы будем использовать термодатчик.
В этом уроке используется:
Отличный набор для начинающих: | Купить |
Arduino Uno: | Купить |
I2C датчик температуры, влажности и атмосферного давления: | Купить |
Подключение датчика температуры по шине I2C
Давайте рассмотрим схему подключения модуля Bme280 к ардуино. У этого модуля всего 4 контакта: Питание (VIN), земля (GND), линия тактирования (SCL) и линия данных (SDA). Линии I2C мы соединим с аналоговыми пинами А5 и А4 соответственно и подтянем сигнал к линии 5 В через резисторы на 10 КОм. Схема очень простая:
Теперь рассмотрим код. Мы будем получать данные с датчика, переводить градусы по Цельсию в градусы по фаренгейту и выводить все на экран компьютера:
// Подключаем библиотеку для связи по 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 модуля.