Решил разработать.
Канва байды:
- Центральная станция всё пишет на карточку с привязкой к "реальному времени".
- неограниченное количество remote-сенсоров, которые сами регистрируются в системе.
- протокол связи запрос-ответ и также возможность remote-сенсора инициировать сеанс связи.
- адаптация скорости передачи данных по радиоканалу (5 градаций), а также мощности передатчика (9 градаций) в зависимости от условий связи. Изменение частоты в случае помех на основной рабочей частоте.
-------------------
возможно, когда всё заработает, и если останется свободное место в памяти, прикручу шифрование радиоканала.
-------------
разрабатываю протокол радиообмена:
- размер пакета 200 байт (цифру взял с потолка) , можно менять в любую сторону. Буфер COM-порта 64 байта, неплохо бы уложиться.
- любой разумный пакет начинается на символ '+' , любые другие цифры в эфире - не наши.
- следом идёт контрольная сумма пакета.
- каждое устройство генерит random число из диапазона 10000-60000, которое будет служить идентификатором сессии и временем задержки для ответа на броадкаст пакеты, для устранения коллизий.
- каждое устройство и центральное устройство хранят параметры крайнего удачного сеанса связи (скорость, мощность, частоту).
- при проблемах связи пытаются установить контакт на минимальной скорости-максимальной мощности.
- обязательное подтверждение всех запросов-ответов.
- в пакете от центральной станции передаётся идентификатор адресата или "0" для всех.
---------------------------
пока сложности с float параметрами. Например, -12.625 градуса Цельсия. Для преобразования число->текст->число требуется привести к целому, и передавать отдельно "множитель".
Использую функцию: long data[i] = inputString.substring(pos + 1, semicolon).toInt(); для разборки пришедшей строки данных.
--------------------------
Уже немного "оживил" систему:
Пакеты шлются, подтверждаются. Т.к. UART занят передатчиком, то информацию для отладки пока вывожу на LCD индикатор.
кусочек кода: http://pastebin.com/qruDAXu8
Канва байды:
- Центральная станция всё пишет на карточку с привязкой к "реальному времени".
- неограниченное количество remote-сенсоров, которые сами регистрируются в системе.
- протокол связи запрос-ответ и также возможность remote-сенсора инициировать сеанс связи.
- адаптация скорости передачи данных по радиоканалу (5 градаций), а также мощности передатчика (9 градаций) в зависимости от условий связи. Изменение частоты в случае помех на основной рабочей частоте.
-------------------
возможно, когда всё заработает, и если останется свободное место в памяти, прикручу шифрование радиоканала.
-------------
разрабатываю протокол радиообмена:
- размер пакета 200 байт (цифру взял с потолка) , можно менять в любую сторону. Буфер COM-порта 64 байта, неплохо бы уложиться.
- любой разумный пакет начинается на символ '+' , любые другие цифры в эфире - не наши.
- следом идёт контрольная сумма пакета.
- каждое устройство генерит random число из диапазона 10000-60000, которое будет служить идентификатором сессии и временем задержки для ответа на броадкаст пакеты, для устранения коллизий.
- каждое устройство и центральное устройство хранят параметры крайнего удачного сеанса связи (скорость, мощность, частоту).
- при проблемах связи пытаются установить контакт на минимальной скорости-максимальной мощности.
- обязательное подтверждение всех запросов-ответов.
- в пакете от центральной станции передаётся идентификатор адресата или "0" для всех.
---------------------------
пока сложности с float параметрами. Например, -12.625 градуса Цельсия. Для преобразования число->текст->число требуется привести к целому, и передавать отдельно "множитель".
Использую функцию: long data[i] = inputString.substring(pos + 1, semicolon).toInt(); для разборки пришедшей строки данных.
--------------------------
Уже немного "оживил" систему:
Пакеты шлются, подтверждаются. Т.к. UART занят передатчиком, то информацию для отладки пока вывожу на LCD индикатор.
кусочек кода: http://pastebin.com/qruDAXu8
no subject
Date: 2015-01-04 11:14 pm (UTC)no subject
Date: 2015-01-04 11:34 pm (UTC)Кто знает, для чего я эту систему буду применять.
Может быть это будет следующий диплом для моих студентов.
А может на завод ВПК продам :-)
no subject
Date: 2015-01-04 11:39 pm (UTC)no subject
Date: 2015-01-04 11:48 pm (UTC)У меня есть 6 "сейсмодатчиков" (акселерометр-магнитометр-гироскоп), и каждые 15 минут землетрясение 3-4 балла (живу возле железной дороги). Вот попробую сделать карту распространения ударной волны.
no subject
Date: 2015-01-04 11:52 pm (UTC)no subject
Date: 2015-01-05 12:02 am (UTC)no subject
Date: 2015-01-05 11:15 am (UTC)Например, для случая 8
a + b, a - b, так же.
умножение: (a * b) >> 8
получение из целого : a << 8;
округление: (a + (1 << 7)) >> 8
Деление во всяких рисках может быть в сотню раз медленнее чем арифметика/сдвиги.
no subject
Date: 2015-01-05 11:25 am (UTC)Я даже выкинул его из программы в этом году. Если кому-то понадобится - найдут в интернете.
В данном проекте, самые основные затраты времени будут на передачу данных по радиоканалу.
Так что экономить время на делении, вероятно, придётся в самую последнюю очередь :-)
no subject
Date: 2015-01-05 05:07 pm (UTC)no subject
Date: 2015-01-05 07:58 pm (UTC)В даташите написано, что можно менять, но в реале не работает, в тоже время специализированная программа их меняет.
Можно организовать "аппаратный роутинг" меняя ID "на ходу" и эта фича описана в даташите. Так и не нашёл реализацию :-(
Сейчас ставлю сниффер COM-порта, буду смотреть, что шлёт в порт эта специализированная программа.
-------------
Написано так:
Write command: WR_ Freq_NetID_Address↙
а работает так:
The command of writing parameters: WR_frequency_ RF data rate_output power_UART rate_series_check↙
no subject
Date: 2015-01-06 10:54 am (UTC)А вот тут уже кто написал весь конфигурационный код
no subject
Date: 2015-01-06 11:37 am (UTC)Вот, вчера пытался вытащить из протокола обмена , что она там делает...
----------
немного разные программы , по разному опознают модуль APC220
мне кажется, что нижняя более правильная.
Обе программы непрерывно шлют какой-то мусор в COM-порт, когда нажимаешь "Write" , появляется разумное зерно.
Но вот, как кодируется NET ID и NODE ID , я пока не понял.
Раз они его меняют, значит это можно сделать и посылкой пакета в COM-порт.
no subject
Date: 2015-01-06 11:44 am (UTC)А NODE ID - 6 байт от 00 до FF последовательной записью :-)
Сейчас проверю ....
и точно :-)
осталось теперь впихнуть это в передатчик через канал настройки из Ардуинки.
no subject
Date: 2015-01-05 07:24 am (UTC)Мне кажется, что ты изобретаешь велосипед...
no subject
Date: 2015-01-05 08:09 am (UTC)Но за идею спасибо :-)
c Хабры
Date: 2015-01-05 08:21 am (UTC)Первое и пожалуй самое главное отличие тут — это то, что Z-Wave — протокол беспроводной. То есть, теперь мы абсолютно не привязаны к чему-либо (кроме розеток для некоторых устройств, пожалуй). Почти все девайсы питаются от батареек и по заявлениям, живут на них годы. Некоторые микромодули питаются прямо от сети 220В.
Так же, несомненным плюсом является то, что это mesh-сеть, в которой каждый узел или устройство может принимать и передавать управляющие сигналы другим устройствам сети, используя промежуточные соседние узлы. Mesh — это самоорганизующаяся сеть с маршрутизацией, зависимой от внешних факторов — например, при возникновении преграды между двумя ближайшими узлами сети, сигнал пойдет через другие узлы сети, находящиеся в радиусе действия.
Цены на железо нынче уже не особо кусачие.
Теперь о минусах (куда же без них). Самый главный и злейший минус для меня, как для разработчика своей системы, является закрытый протокол. Желающим получить спецификацию придется отвалить 10 килобаксов. Но, как оказалось, все не так плохо. Народные умельцы отреверсили протокол по самое немогу и написали опенсорсную реализацию под названием open-zwave. На С++. Есть биндинги к питону.
Re: c Хабры
Date: 2015-01-05 08:30 am (UTC)Мне кажется, что вполне подойдёт, как основа для твоих игрушек.
Re: c Хабры
Date: 2015-01-05 11:01 am (UTC)Re: c Хабры
Date: 2015-01-05 11:05 am (UTC)Re: c Хабры
Date: 2015-01-05 11:35 am (UTC)Протокол Z-Wave определяет алгоритм маршрутизации, позволяющий передавать данные между устройствами вне прямой видимости. Все постоянно работающие узлы сети (бывают ещё спящие и «часто слушающие» узлы) могу участвовать в пересылке пакетов между другими участниками сети. Z-Wave использует механизм Source Routing, т.е. маршрут следования определяется отправителем. Broadcast и multicast пакеты не маршрутизируются. При невозможности найти нужный узел по маршрутам, записанным в памяти, существует механизм поиска узла по всей сети путём посылки специального пакета Explorer Frame (см. ниже) всем узлам сети. После успешного нахождения узла новый маршрут записывается отправителем в память для последующего использования.
Re: c Хабры
Date: 2015-01-05 11:43 am (UTC)Re: c Хабры
Date: 2015-01-05 12:27 pm (UTC)•ZigBee — очень популярный промышленный протокол. Используется в некоторых странах как стандарт для сбора данных с счётчиков и доставки до концентратора
•Плюсы — хорошо развит, имеет динамическую маршрутизацию (самоорганизующаяся сеть, где каждый узел хранит лишь таблицу с со списком кластеров и ближайшего соседа, который может доставить туда пакет — почти как в IP сетях), принят на вооружения многими телекомами и управляющими компаниями.
•Минусы — использует более загруженную полосу 2.4 ГГц (есть полоса 868 МГц, но она реже используется), стандартизирован лишь до транспортного уровня, что делает устройства разных производителей несовместимыми на прикладном уровне.
Тем более, на будущее, для Ардуинки есть такие шилды.