В данной статье рассматриваются только библиотеки iarduino предназначенные для работы с датчиками и модулями по шине I2C.
Библиотеки iarduino могут использовать как аппаратную, так и программную реализацию шины I2C
При этом выбранный тип реализации шины I2C не влияет на синтаксис функций и методов библиотек iarduino.
При работе с аппаратной шиной I2C, датчики подключаются к заранее указанным на плате (или в документации) выводам, так как прием/передача данных по шине осуществляется на физическом уровне (внутренними блоками микроконтроллера).
При работе с программной шиной I2C, датчики можно подключать к любым выводам, Вы их назначаете сами.
Аппаратная шина I2C:
По умолчанию библиотеки iarduino самостоятельно работают с аппаратной шиной I2C. Датчики подключаются к Arduino используя выводы SDA и SCL (они либо подписаны на плате, либо указаны в документации).
- Пример:
#include <iarduino_AM2320.h> // Подключаем библиотеку iarduino_AM2320. iarduino_AM2320 sensor; // Объявляем объект sensor для работы с датчиком AM2320, используя функции и методы библиотеки iarduino_AM2320. // void setup(){ // sensor.begin(); // Инициируем работу с датчиком AM2320. Serial.begin(9600); // Инициируем передачу данных в монитор последовательного порта на скорости 9600 бод. } // // void loop(){ // sensor.read(); // Читаем показания датчика. Serial.println(sensor.tem); // Выводим температуру. Serial.println(sensor.hum); // Выводим влажность. delay(1000); // Ждём секунду и повторяем вывод. } //
- Преимущества: Не требуется подключение дополнительных библиотек. Скетч занимает меньше памяти.
- Недостатки: Поддерживаются не все платы.
Аппаратная шина I2C с библиотекой Wire:
Если перед подключением библиотек iarduino подключить библиотеку Wire, то библиотеки iarduino будут использовать методы и функции библиотеки Wire для работы с аппаратной шиной I2C. Датчики подключаются к Arduino используя выводы SDA и SCL (они либо подписаны на плате, либо указаны в документации).
- Пример:
#include <Wire.h> // Подключаем библиотеку Wire для работы с шиной I2C. #include <iarduino_AM2320.h> // Подключаем библиотеку iarduino_AM2320. iarduino_AM2320 sensor; // Объявляем объект sensor для работы с датчиком AM2320, используя функции и методы библиотеки iarduino_AM2320. // void setup(){ // sensor.begin(); // Инициируем работу с датчиком AM2320. Serial.begin(9600); // Инициируем передачу данных в монитор последовательного порта на скорости 9600 бод. } // // void loop(){ // sensor.read(); // Читаем показания датчика. Serial.println(sensor.tem); // Выводим температуру. Serial.println(sensor.hum); // Выводим влажность. delay(1000); // Ждём секунду и повторяем вывод. } //
Код данного примера отличается от предыдущего кода только первой строкой, где подключается библиотека Wire.
- Преимущества: Поддерживается множество плат.
- Недостатки: Требуется больше памяти.
Программная реализация шины I2C:
Если перед подключением библиотек iarduino определить выводы pin_SW_SDA и pin_SW_SCL, то библиотеки iarduino реализуют программную шину I2C на назначенных выводах. Датчики подключаются к Arduino используя любые выводы назначенные Вами как SDA и SCL.
- Пример:
#define pin_SW_SDA 3 // Назначаем вывод D3 Arduino для работы в качестве линии SDA программной шины I2C. #define pin_SW_SCL 9 // Назначаем вывод D9 Arduino для работы в качестве линии SCL программной шины I2C. #include <iarduino_AM2320.h> // Подключаем библиотеку iarduino_AM2320. iarduino_AM2320 sensor; // Объявляем объект sensor для работы с датчиком AM2320, используя функции и методы библиотеки iarduino_AM2320. // void setup(){ // sensor.begin(); // Инициируем работу с датчиком AM2320. Serial.begin(9600); // Инициируем передачу данных в монитор последовательного порта на скорости 9600 бод. } // // void loop(){ // sensor.read(); // Читаем показания датчика. Serial.println(sensor.tem); // Выводим температуру. Serial.println(sensor.hum); // Выводим влажность. delay(1000); // Ждём секунду и повторяем вывод. } //
Код данного примера отличается от предыдущих только двумя первыми строками в которых назначены выводы для шины I2C.
Указанные Вами выводы будут использованы в качестве линий SDA и SCL шины I2C.
- Преимущества: Возможна работа с модулями I2C на любых выводах Arduino.
- Недостатки: Поддерживаются не все платы.
- Примечание: Библиотеки iarduino не реализуют программную шину I2C для тех модулей с которыми они не работают.
Особенности:
Если перед подключением библиотек iarduino определить выводы pin_SW_SDA, pin_SW_SCL и подключить библиотеку Wire, то модули работающие с библиотеками iarduino будут использовать программную шину I2C на назначенных выводах.
Если до определения выводов pin_SW_SDA и pin_SW_SCL подключить хотя бы одну библиотеку iarduino, то все библиотеки iarduino будут использовать аппаратную шину I2C.
Обсуждение