Вторник, 12.12.2017, 11:25
RC - Мастерская
Главная | Каталог статей | Регистрация | Вход
Меню
Статистика
Главная » Статьи » Чертежи и проекты » Умный дом

Сеть. Протокол обмена данными. Конфигурирование модулей.
Сеть. Протокол обмена данными. Конфигурирование модулей.


С архитектурой сети я уже определился. С компонентами тоже. Пока радиомодули движутся ко мне по почте самое время заняться вопросами функционирования сети.
А вопросы есть следующие:
  1. Протокол обмена данными между микроконтроллерами. Каким-то образом каждый контроллер должен ведь разбирать из потока свалившихся на него байтов, что ему требуется сделать.
  2. Конфигурирование радиомодулей. Очень неудобно адреса закладывать на этапе компиляции кода. Надо бы иметь возможность переназначать адреса микроконтроллеров в процессе функционирования.
  3. Надо бы разработать ПО для решения первых двух пунктов.

Протокол.

Я решил пойти по простому пути. Пусть микроконтроллеры перебрасываются между собой пакетами байтов. Для начала возьмем максимальный размер пакета в 32 байта. Пусть пакет обязательно начинается с байта 0xAA, а заканчивается байтом 0xFA. Это позволит в будущем добавить контроль целостности данных и защитить сеть от сбоев и ошибок. Так, зная размер пакета, его префикс и суффикс, можно будет его вычленить из потока.

Байты 1 и 2 я решил отдать под идентификатор пакета. Этот идентификатор фактически будет определять дальнейший формат данных в пакете и их назначение. В 2 байта можно уложить 65536 идентификаторов - число вроде как более чем достаточное. Поскольку я предполагаю, что контроллеры будут общаться между собой по принципу "вопрос-ответ", то все множество идентификаторов я решил разделить напополам: нечетные номера будут запросами, а четные (+1) - ответами на эти запросы.

Еще 4 байта (3:6) будут заняты адресом отправителя. Если понадобится послать ответ, мы будем знать куда его отправить.

Таблицу идентификаторов решено формировать нарастающим итогом.

Конфигурирование радиомодулей.

Каждому микроконтроллеру в сети должен быть присвоен свой адрес. Как я уже упомянул выше, зашивать в код адрес каждого устройства - не самый лучший путь. Следовательно, сетевой адрес контроллер должен хранить в памяти. А чтобы этот адрес не потерялся при перезагрузках, память должна быть энергонезависимой. На самом деле, каждому оконечного контроллеру надо хранить минимум 3 значения: номер RF-канала(частоту сети внутри диапазона), свой собственный адрес и адрес центрального контроллера. Я решил использовать 4-х байтовые адреса наподобие адресов TCP/IP v4. Выделим под эти нужды первые 9 байт внутренней энергонезависимой памяти меги.

Теперь эти 9 байт в каждый контроллер надо записать. Для настройки можно бы использовать некий отдельный модуль с пользовательским интерфейсом. Подключать его к настраиваемому контроллеру по UART. И при помощи специальных функций записывать в него конфигурацию. Вариант 2 - использовать внутрисхемный программатор и записывать EEPROM как байтовый массив с компа. Вариант 3 - подключать комп через USB-to-TTL к UART настраиваемого контроллера и передавать ему конфигурацию при помощи специально встроенных в контроллер функций и специально разработанного софта на компе.

Все это мне показалось неудобным по следующим причинам:

  1. Создавать еще одно устройство с экраном и клавиатурой - накладно. Писать для него достаточно заумную прошивку работы с GUI - долго. А устройство это использоваться будет достаточно редко.
  2. Прошивать EEPROM через SPI - не наглядно и легко допустить ошибку, которую потом будет трудно найти.
  3. Подключение по UART, равно как и SPI, равно как и любое другое проводное подключение неудобно тем, что контроллер будет встроен в помещение так, чтоб нутро схемы наружу не торчало. Втыкать в него провода будет не самым удобным. А если он еще и в потолок замурован?

С другой стороны, у каждого контроллера уже есть беспроводной модуль, через который можно организовать обмен данными. В прошивке мы дадим ему некоторый базовый адрес. Таким образом, в любой момент времени адрес контроллера нам будет известен.

Я выбрал такой вариант:

  1. Собираем до примитивизма простое устройство(конфигуратор), состоящее из какой-нибудь ардуинки и радиомодуля. Я использовал Arduino Nano + шилд, на котором уже был разъем для nRF24L01. Важно, чтоб у ардуинки был USB. Это позволит без каких-либо дополнений подключить ее к компу.
  2. Под Windows пишем достаточно простую программу, которая должна будет предоставлять удобный интерфейс к настройкам системы и передавать их в com-порт.
  3. В конфигуратор загрузим программу, которая организует трансляцию пакетов между UART и радиомодулем.
  4. В прошивку конечных контроллеров добавим несколько функций записи конфигурации в EEPROM.

Получается быстро и дешево.

Категория: Умный дом | Добавил: Mactep (10.09.2013)
Просмотров: 1365 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск