Свързване на множество 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 мига точно толкова често, колкото е голяма променливата x. Отново само примерно.
Функцията requestEvent се изпълнява, когато главният изиска данни. Той записва две данни в масив: свой собствен адрес и текущата стойност на аналогов щифт 0. Тъй като тази стойност е в диапазона от 0 до 1023, тя се разделя на четири, за да бъде прехвърлена в целевия диапазон от 0 до 255 (BYTE).
Важно е всяка подчинена Arduino дъска да има свой собствен адрес. Свързах тук четири роби Arduinos и ги номерирах от 2 до 5.
Между другото, 112 Arduino платки трябва да могат да бъдат свързани и адресирани с лекота.
И сега бих се интересувал много от това, което правите с него. Чувствайте се свободни да напишете това в коментарите:-)
В заключение, всъщност има много вълнуваща дискусия за това дали термините главен и роб все още са подходящи. Лично аз дори намирам за разбираемо и много забавно да чета понякога много поляризиращите коментари.