Добрый день, пытливые умы! Коротко: Задался таким вопросом. Реально ли устроить сетку из одной raspberry и десяток arduino. Ардуинки между собой общаются и рулят разными датчиками и реле, а малинка смотрит кто, что, когда сделал и может это дело как фиксировать так и вмешиваться? Подробнее: RaspberryPi3 и десять ардуин uno, почти(!) все спрятаны в одном столе. Есть порядка 20 реле и 10 различных датчиков (метал, щелевой, rfid, герконы). По отдельности каждая ардуина самодостаточно управляется с датчиками и релешками, но задумал я поставить над всей этой паутиной raspberry с apache и wiringPi библиотекой что бы рулить портами GPIO на C++. Мол одна из ардуинок отметила тот факт, что геркон N замкнулся и активирует N реле, а поверх этого поставить бы raspberry что бы если что самому этим реле пощёлкать, да в браузере отобразить всё что происходит. С недельку ползаю по интернетам в поисках ответа, нашёл много действительно любопытных статей, но никак не разберу как можно правильно передать переменную по i2c, буть то int, array из int значений или просто bool. Правильно ли я понял как это должно быть реализовано. Raspberry выступает как master в шине iic и по порядку постоянно опрашивает arduino на наличие поступления данных. Arduino в свою очередь идут как slave слушают свои датчики и посылают в шину что либо если им позволили, если не позволяют - по новой, послушали датчик и опять просятся в шину к мастеру. Код N адруинки: Код (C++): #include <Wire.h> void setup() { Wire.begin(10); // подключение к шине i2c как slave с номером 10 pinMode(7, INPUT); // слушаем геркон } void loop { if(val != true) { Wire.beginTransmission(2); // адрес raspberry Wire.write(val); // передать малине, что геркон замкнулся Wire.endTransmission(); // конец передачи } else { if(digitalRead(7) == HIGH) { val = true; } } }
Если малина мастер, то ардуино надо программировать как слейв. Смотрите wire.onRecieve, и т.д. И не забудьте. что в малине напряжение 3.3В, а в ардуино обычно 5. Подключите прямо - рискуете спалить пин на малине.