Підключення декількох Arduinos - Як передати дані
Може трапитися так, що ви захочете підключити кілька Arduinos. Для цього існує кілька можливостей. Підключення через інтерфейс I2C дуже зручне. Ви можете дізнатись, як це зробити тут.

I2C означає Inter-Integrated Circuit і вимовляється як I-Square-C або I-To-C. Це стандарт, розроблений Philips для зв'язку між різними мікросхемами (інтегральними схемами). Один ІС, ведучий, повинен взяти на себе управління різними периферійними ІС. Ця процедура відома як ведуча-підлегла шина.
I2C потребує лише двох ліній даних: SCL, послідовного годинника (послідовна лінія годинника) та SDA, послідовного рядка даних (послідовна лінія даних). На щастя, плата Arduino вже оснащена нею. Штифт SDA є аналоговим входом 4, штир SCL - аналоговим входом 5. Крім того, штифти на Arduino UNO R3 також виведені з лівого боку цифрових штифтів. Однак це ті самі з'єднання, що і A4 та A5.
Як уже згадувалося, I2C - це система ведучий-підлеглий. Це означає, що одна з плат Arduino повинна стати майстром. Усі інші плати Arduino отримують власну адресу.
Підключіть кілька Arduinos: принципова схема
В основному всі плати Arduion з'єднують штирі A4 і A5, а також GND. Крім того, два резистори слід підключити як підтягування для ліній SDA та SCL.
Всі Arduinos можуть бути забезпечені як окремими джерелами живлення, так і через USB, або через потужний зовнішній блок живлення. Я не раджу використовувати гніздо живлення Arduino, оскільки тут діод обмежує максимальний струм струму до одного ампера. З багатьма Arduinos ви можете швидко це подолати. Однак важливо забезпечити правильну полярність при цьому типі операцій!
Підключіть кілька Arduinos: Master Code
Для того, щоб мати можливість використовувати інтерфейс I2C, бібліотека Wire повинна бути інтегрована: включити Wire був попередником Arduino, і функціональність I2C міститься в цій бібліотеці. Код в основному складається з двох основних функцій: надсилання даних та отримання даних.
У циклі є цикл for. З кожним запуском передається інша підключена плата Arduino. У циклі for спочатку викликається функція sendData. Він отримує як параметри цільову адресу, дошку одержувача та значення від 0 до 255. Це зразки даних, які одержувач може оцінити.
Потім викликається функція отриманихДата. Цільова адреса передається знову. У самій функції запит спочатку надсилається на приймальну дошку. (Майстер повинен надіслати ці запити підключеному Arduinos, щоб дані могли бути відправлені назад.) Тепер потрібно два пакети даних. Кожен повинен знаходитися в діапазоні значень від 0 до 255 (тобто байт). Вони переносяться в багатовимірний масив, який можна використовувати пізніше в програмі. Тут це слід розуміти лише як приклад. Обидва пакети даних все ще передаються на послідовний інтерфейс і їх можна перевірити на послідовному моніторі.
А тепер давайте розглянемо, як це виглядає з іншого боку: у ведених модулях.
Підключіть кілька Arduinos: ведений код
Як і слід було очікувати, цей код досить пасивний і чекає повідомлення від майстра. У налаштуваннях пов’язані дві події:
Функція receiveEvent викликається при отриманні даних. У ньому отримані дані просто записуються у змінну x. Потім світлодіод на виводі 13 блимає точно так само часто, наскільки величина змінної х велика. Знову лише зразково.
Функція requestEvent виконується, коли майстер запитує дані. Він записує два дані в масив: власну адресу та поточне значення на аналоговому виводі 0. Оскільки це значення знаходиться в діапазоні від 0 до 1023, воно ділиться на чотири для того, щоб перенести його в цільовий діапазон від 0 до 255 (байт).
Важливо, щоб кожна плата підпорядкованого Arduino мала свою адресу. Я підключив сюди чотирьох рабів Ардуіно і пронумерував їх від 2 до 5.
До речі, 112 плат Arduino повинні мати можливість легко підключатись і вирішувати їх.
І зараз мені було б дуже цікаво, що ви з цим будете робити. Не соромтеся писати це в коментарях:-)
Підсумовуючи, насправді ведеться дуже захоплююча дискусія про те, чи все-таки доречні терміни господар та раб. Мені особисто зрозуміло і дуже цікаво читати іноді сильно поляризуючі коментарі.