Несколько беспроводных датчиков к Arduino

Я ищу идеи, как подключить 12 датчиков к Arduino по беспроводной сети. Датчики будут находиться примерно в 10 футах от Arduino. Им необходимо организованно отправлять один байт данных каждые 100–250 мс на Arduino.

  • Я исследовал MQTT и pubsubclient, но не нашел способа сделать Arduino брокером, и мне сказали, что это очень неэффективно для моего приложения.
  • Я рассмотрел NRF24L01, но, похоже, он ограничен всего 6 каналами для организованного получения данных.
  • Я исследовал Xbee, но мне сказали, что он не поддерживает скорость передачи данных.

Другие предложения приветствуются... Спасибо.

, 👍1

Обсуждение

Вы можете сделать это с помощью NRF24L01, используя всего одну трубку. Простейшим, вероятно, было бы активно запрашивать данные у каждого узла, включая номер узла в пакет запроса, но вы также можете заставить их идентифицировать себя по номеру узла, передавать через слегка меняющиеся или случайные интервалы и, возможно, помещать номер чтения в каждый пакет также, чтобы они могли передавать каждое чтение более одного раза, чтобы обычно учитывать любые коллизии в тех случаях, когда передачи от двух перекрываются., @Chris Stratton

У тебя все заработало? Я ищу - как получать беспроводные данные от четырех датчиков со скоростью передачи данных 512 Гц (для каждого датчика и одновременно)? Спасибо., @AbhIoT

Может ли кто-нибудь помочь мне получить код Arduino, показывающий, как я могу получать данные от 6 датчиков одновременно на одном ведущем устройстве nrf24lo1...... Заранее спасибо, @Wajhee uddin


3 ответа


1

Возможно, проще всего будет отправить пакет UDP через WiFi. Для этого протокола «без установления соединения» нет дополнительных накладных расходов на пакеты: нет OPEN, нет ACK/NAK, нет CLOSE и т. д. Инкрементная стоимость дополнительных байтов очень мала, поэтому если вы решите, что вам нужно отправить 2 байта или даже 100 байтов, это не сильно повлияет на пропускную способность.

Если вы можете «пакетировать» байты, это будет еще лучше. Например, можете ли вы отправлять 8 байт на узел каждые 800–2000 мс? Если нет, то скорости WiFi должны позволять однобайтовому пакету UDP проходить без большой задержки. Знаете ли вы, какую задержку может выдержать приемник? Вы можете получить меньшую среднюю задержку с пакетированными пакетами, в зависимости от времени доступа к сети (т. е. сколько времени требуется, чтобы выйти в эфир).

Собственный подход — использовать необработанный радиочастотный передатчик/приемник с чем-то вроде VirtualWire. При правильной синхронизации от «ведущего» ведомые устройства могут иметь свой собственный временной интервал, избегая коллизий (что позволяет сократить время доступа к сети)

,

WIFI добавит много настроек типа «регистрация с точкой доступа», которые вы услышите, прежде чем сможете это сделать. Вероятно, причина для рассмотрения этого не в каких-либо неотъемлемых преимуществах (это довольно невыгодно по сравнению с альтернативами), а в готовой, недорогой доступности плат ESP8266 в качестве сенсорных узлов, на которых постер может запустить прошивку в стиле Arduino. Он также может функционировать как сенсорный концентратор и, при необходимости, AP — либо совместно с существующим Arduino, либо потенциально заменяя его., @Chris Stratton


2

Я бы рекомендовал nRF24L01.

Вам не нужна одна труба на узел — достаточно одной трубы.

Каждый канал фактически является адресом, на который отвечает узел. Наличие нескольких каналов означает, что на одном узле может быть несколько адресов (например, псевдонимов). Но, конечно, вам нужен только один адрес на узел и, следовательно, один канал на узел.

Дальность действия более чем достаточная (с антенной версией мне удалось без проблем достичь сотен метров), а цена настолько низкая, что ею можно пренебречь.

,

1

Используйте nRF24L01. Чтобы избежать столкновений, вы можете опросить датчики (как Крис предложил в комментарии). Настройка будет следующей: Каждый датчик будет иметь уникальный адрес. Центральный блок будет передавать запрос, а узел датчика будет отвечать на него. Центральный блок будет иметь другой адрес, и все датчики будут передавать на этот адрес. Вы также можете использовать данные в ack для упаковки ответа.

  • Центральный узел (Addr0) -> Датчик 1 (Addr1): Запрос
  • Датчик 1 (Addr1) -> Центральный узел (Addr0): Ответ, данные датчика
  • Центральный узел (Addr0) -> Датчик 2 (Addr2): Запрос
  • Датчик 2 (Addr2) -> Центральный узел (Addr0): Ответ, данные датчика
  • Центральный узел (Addr0) -> Датчик 3 (Addr3): Запрос
  • Датчик 3 (Addr3) -> Центральный узел (Addr0): Ответ, данные датчика
  • ...
,

По сути, все, что здесь происходит, это общение один на один, просто хаб имеет такой обмен с каждым узлом по очереди. Одна вещь, о которой вам нужно будет подумать, это как долго ждать ответа, прежде чем переходить к следующему узлу., @Chris Stratton

Времени будет предостаточно, вопрос скорее в том, как лучше всего его использовать., @Chris Stratton

Так как же подключить датчик? напрямую через I2C к трансиверу nRF24L01, с другим трансивером на конце микроконтроллера? Разве вам не понадобится микроконтроллер на каждом конце?, @brianlmerritt