raspberyPi3 и arduino

Тема в разделе "Arduino & Shields", создана пользователем helpkey, 25 дек 2016.

  1. helpkey

    helpkey Нуб

    Добрый день, пытливые умы!

    Коротко:
    Задался таким вопросом. Реально ли устроить сетку из одной 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;
        }
      }
    }
     
     
  2. rkit

    rkit Гуру

    Если малина мастер, то ардуино надо программировать как слейв. Смотрите wire.onRecieve, и т.д. И не забудьте. что в малине напряжение 3.3В, а в ардуино обычно 5. Подключите прямо - рискуете спалить пин на малине.
     
    helpkey нравится это.