НАЗАД

Взаимодействии двух Arduino в режиме Master/Slave

Режим взаимодействия «Master» читает «Slave» отправляет. В некоторых ситуациях требуется настройка режима взаимодействия двух устройств Arduino для того, чтобы обмениваться данными. В этом разделе рассматривается взаимодействие Arduino через I2C синхронный последовательный протокол. Для этого используются некоторые функции библиотеки Wire.h. Первое устройство Arduino в режиме «Master» запрограммированно создавать запросы и затем читать ответ, который представляет из себя 6 байтов, отправленных с Arduino в режиме «Slave», имеющего уникальный адрес. Все полученные сообщения, в данном примере, могут быть просмотрены в окне последовательного порта.
Протокол I2C включает два провода для отправки и получения данных:

Когда происходит изменение импульса с низкого на высокий уровень ( край возрастание тактового синхронизирующего сигнала), один бит информации содержит определенный адрес устройства и запрашивает данные, которые передаются от Ardiono к I2C устройствам через линию SDA. Когда происходит изменение импульса тактового синхронизирующего сигнала с высокого на низкий (край падения синхронизирующего тактового сигнала), вызывается передача данных с устройства назад к Arduino по тойже самой линии.
Потому что протокол I2C позволяет для каждого включенного устройства иметь свой собственный уникальный адрес, и как устройство в режиме «Master», так и устройство в режиме «Slave» обмениваются данными по одной линии. Этот протокол позволяет для Arduino обмениваться данными со многими устройствами и устройствам Arduino, используя для этого два контакта микроконтроллера.
Подсоедините контакт 4 (тактовый синхросигнал, SCL) и контакт 5 (линия передачи данных, SDA) на устройстве в режиме «Master» к соответствующим контактам на устройстве в режиме «Slave». Оба устройства должны иметь общий выход на землю (GND).
Для того, что подключить последовательный порт, необходимо устройство в режиме «Master» подключить к вашему компьютеру через USB.
Если питание устройств независимое, то можно подключить выход в 5V устройства в режиме «Master» к контакту входа электропитания VIN устройства в режиме «Slave».
На рисунке ниже приведена схема подключения двух Arduino.

Пример кода для устройства в режиме «Master» в листинге ниже.

#include
void setup()
{
Wire.begin(); // подсоединение к шине I2C
//адрес для устройства в режиме «Master» опционально
Serial.begin(9600);
// включаем и настраиваем скорость передачи данных последовательного
//порта
}
void loop()
{
Wire.requestFrom(2, 6);
//запросить 6 байтов с устройства в режиме «slave», адрес - #2
while(Wire.available())
// устройство в режиме «slave» может отправить меньше чем запрошено
{
char c = Wire.read(); // вернуть байт как символ
Serial.print(c); // передать в последовательный порт символ
}
delay(500);
}

Пример кода для устройства в режиме «Slave» в листинге ниже.

#include
void setup()
{
Wire.begin(2); // подсоединение к шине I2C с адресом #2
Wire.onRequest(requestEvent); // регистрация события
}
void loop()
{
delay(100);
}
// функция, которая выполняется всякий раз, когда данные запрашивает устройство
//в режиме «Master»
// эта функция зарегистрирована как событие, см. setup()
void requestEvent()
{
Wire.write("hello "); // ответ с сообщением в 6 байт
// как ожидает устройство в режиме «Master»
}