248   227   72    

Передача данных из одной Arduino в другую

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

Компоненты

Для реализации данного урока нам потребуется набор компонентов. Обратите внимание, что нам понадобится две платы Ардуино:

  • Arduino UNO × 2
  • Светодиод LED (универсальный) × 1
  • Поворотный потенциометр (универсальный) × 1
  • Перемычки (на выбор) × 1

Программное обеспечение

Проект

Цель этого проекта проста - понять, как передавать данные с одной платы Arduino на другую. В этом случае передаваемое значение поступает от потенциометра, подключенного к первой плате Arduino. Если значение пересекает определенный порог, включается светодиод, подключенный ко второй плате Arduino.

Как перенести значения с одной платы Arduino на другую?

Существует много разных протоколов, которые могут быть реализованы для достижения вышеупомянутой цели. Здесь мы собираемся использовать протокол I2C с конфигурацией Master Writer / Slave.

Что такое протокол I2C?

Проще говоря, в протоколе связи I2C у вас есть 2 устройства, главное и подчиненное, которые связаны между собой двумя линиями, линией данных и линией синхронизации. В Arduino Uno линией данных является аналоговый вывод 4 (A4) и для тактового сигнала - аналоговый вывод 5 (A5), что может отличаться для разных плат.

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

Как работает проект и что он делает?

Используется аналоговое считывание на основной (главной) плате Arduino, чтобы получить значение подключенного к нему потенциометра. Затем это значение передается на подчиненную плату Arduino, и если оно превышает пороговое значение, загорается светодиод, подключенный к подчиненному Arduino.

Схема соединения

Схема соединения представлена на рисунке выше. Схемы такого плана очень удобно создавать в программном обеспечении Fritzing. Две платы должны иметь общее заземление, поэтому соедините заземления обеих плат вместе.

Как это получается в реальности можно посмотреть на фотографиях ниже.

Код проекта

Ниже представлены две программы: одна для главной платы и вторая для ведомой. Напоминаем, что директива #include ничего умного не делает, она просто целиком подставляет файл, который передан параметром директиве.

Для работы нам нужно обязательно загрузить библиотеку Wire, которую можно взять здесь.

Мастер код

// Код для Основной платы
#include <Wire.h> // Эта библиотека используется для связи I2C
int x;
void setup() {
  Wire.begin(); 
  Serial.begin(9600);
}
void loop() {
  x = analogRead(A0); // Чтение значения с потенциометра
  x/=4;
  Wire.beginTransmission(9); // Цифра 9 - адрес ведомой платы 
  Wire.write(x); // Передает значение потенциометра на ведомую плату           
  Wire.endTransmission(); 
  Serial.print(x);
  delay(1000);
}

Наследник

// Код для ведомой платы
#include <Wire.h>
int x;
void setup() {
  pinMode (13, OUTPUT); // Светодиод на пин (pin) 13
  Wire.begin(9); // 9 здесь адрес (упоминается также в коде основной платы) 
  Wire.onReceive(receiveEvent);
  Serial.begin(9600);
}
void receiveEvent(int bytes) {
  x = Wire.read(); // Получите значения от основной платы
  Serial.print(x);
}
void loop() {
  if (x > 88) { // Взято пороговое значение 88, вы можете изменить его на своё
    digitalWrite(LED, HIGH);
    delay(200);
  }
  else{
    digitalWrite(LED, LOW);
    delay(400);
  }
}

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

Ардуино+