Хаб — принцип работы

By | Декабрь 26, 2016

Как я писал в предыдущей статье — хаб является основным координатором в сети из исполнительных устройств. Но хабом тоже необходимо как-то управлять. Давайте рассмотрим более подробно что собой представляет Хаб и какие функции он реализует.

Хаб построен на микроконтроллере STM32F103RE. В принципе, хаб не требователен к ресурсам и может быть реализован на любом МК с минимальными требованиями, которые доступны многим МК, а именно:

  • Частота: 8 MHz
  • Память Flash: 32Kb*
  • RAM: 16Kb*
  • Периферия: SPI, USART*

Для вот таких достаточно скромных требований будет доступная почти вся реализованная функциональность. Для подключения дополнительных модулей, таких как запись логов на карту, подключение дисплея или две линии управления необходимы дополнительные ресурсы и периферия. Например для подключения карты используется SDIO интерфейс, а для двух каналов данных используется два USART. Для подключения дисплея желателен дополнительный SPI.

Управление хабом

Хаб сам по себе не может делать ничего. Он может только принимать данные из-вне и отправлять их конкретному устройству или же получать данные от устройства и отправлять их наружу по доступным интерфейсам.

На данный момент хабом можно управлять по USART (Serial). Я выбрал этот интерфейс по несколькми причинам — первое это его простота. Смысла описывать как он работает нет, это, наверное, самый простой интерфейс для передачи данных. Отсюда вытекает вторая причина — это его распространенность — наверное нет такого устройства, где не был бы реализован этот интерфейс. Ну и третье — его легко подключить к ПК и передаваемые по нему данные человекочитаемые и удобные в понимании и мониторинге.

На данный момент хаб может обменивается командами по разработанному протоколу, который, с моей точки зрения, является наиболее удобный для данной системы. На будущее есть планы реализовать протокол MQTT и ModBUS. Если в этом будет необходимость.

Протокол

Сам протокол делится на две части:

  • Сервисные команды;
  • Команды передачи данных.

Оба типа команд могут содержать параметры, а могут вызываться и без них.

Сервисные команды служат для управления самим хабом. Сервисные команды начинаются с префикса «AT+» Вот их список с кратким описанием:

  • AT+PING — пинг хаба, ответ PONG;
  • AT+FIND_NEW_DEVICE (Алиас AT+FIND) — поиск нового устройства. Устройство должно быть подключено и на нем должен быть активирован режим обнаружения. Об этом читайте в следующих статьях;
  • AT+CHECK_TX_STATUS — проверяет статус передатчика;
  • AT+CHECK_RX_STATUS — проверка статуса приемника;
  • AT+HANDLE_TX_STATUS- проверяет статус передатчика. Если в его очереди есть данные на отправку, они будут обработаны (переданы устройству);
  • AT+HANDLE_RX_STATUS — проверка статуса приемника. Если в его очереди есть принятые от устройств данные, они будут обработаны. Эти команды нужны для тестирования и отладки;
  • AT+ADD_DEVICE — добавляет «пустое» устройство во внутренний список присоединенных устройств хаба. Необходимо для тестирования;
  • AT+REGISTER_DEVICE — регистрация нового устройства. Добавляет устройство с заданым адресом, но не отправляет данные самому устройству;
  • AT+LIST_DEVICES — выводит список устройств;
  • AT+SAVE_DEVICES — сохраняет список устройств во внутреннюю память хаба. Если список выведенный через AT+LIST_DEVICES не сохранить, то добавленные и не сохраненные устройства будут потеряны;
  • AT+LOAD_DEVICES — загружает список устройств из флеша в память (RAM) для работы с устройствами;
  • AT+PING_ALL_DEVICES — посылает пинг всем устройствам, которые подключены к хабу. Устройства, ответившие на команду считаются online;

Ответы на каждую из команд зависят от самой команды. Определенного формата нет. Поэтому разбор ответов должен производится разработчиком на его усмотрение.

Команды передачи данных служат для отправки данных устройству:

  • AT+SEND_DATA:device_address:data — отправка данных конкретному устройству.
    Содержит параметры:

    • device_address — адрес устройства которому будут отправлены данные. Должен быть в HEX формате. 4 байта;
    • data — произвольные данные в HEX формате. Длинна и структура данных зависят от конкретного устройства. Разработчик сам определяет что должно быть передано в этом параметре.

Если устройство присылает какие либо данные, они возвращаются хабом. Содержание ответа зависит от отправленной команды и должно быть разобрано в зависимости от типа устройства. Например ответ от датчика температуры может быть такого вида:

  • >DATA:0033:01:0070 — где «>» означает входящую команду (можно отключить в настройках хаба), 0033 — адрес устройства в HEX, 01 — тип устройства (на основании этого типа можно производить разбор данных команды) в HEX, 0070 — данные от устройства. В данном случае это температура с датчика ds18b20 в HEX формате.

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

В следующих статьях я опишу взаимодействие хаба с конкретным устройством и приведу примеры обмена данными на основе устройства управления освещением.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *