
Пэдди прошивки
Это компонент прошивки для рисовых падди, демона администрирования питания.
Он использует Arduino C ++ и разработан вокруг государственной машины. Он вспыхнут прямо на поддерживаемом чипе. Тип Arduino, используемый для этого проекта, представляет собой IoT Nano 33.
Задача этого кода состоит в том, чтобы взаимодействовать с брокером Paddy MQTT через Wi-Fi или приложение Parddy через Bluetooth Low Energy, для обработки настройки и ошибок. Код должен также контролировать аппаратное обеспечение, которое выполняет:
- Включение/выключение устройства загрузки
- Измерение мощности для нагрузочного устройства с периодической посылкой статистики.
Государственная машина с диаграммой

Обзор
Код этой государственной машины организован с помощью компонентов Singleton, которые создаются один раз в прошивке и повторно используются на протяжении всего жизненного цикла программы. Эти модули следующие:
- BLE: обрабатывает прямую связь между демона и центрального устройства.
- Управление: включает или выключает устройство загрузки в зависимости от команды, полученной в то время.
- MQTT: обрабатывает все общение с брокером, а делегаты работают с другими компонентами или штатами по поиску сообщений.
- Мощность: управляет и калибрует трансформатор тока измерения мощности. Делает периодические показания.
- Хранение: эмулирует чип EEPROM из -за выбранного Arduino IOT NANO 33, не имеющего фактического EEPROM. Магазины необходимых полномочий на нем.
- Wi-Fi: обрабатывает соединения Wi-Fi и измерение силы сигнала.
С каждым штатом, выполненным предопределенной обязанностью, легко понять, что делает каждый кусок потока:
- Состояние загрузки: это исходное состояние, в которое входит микроконтроллер, как только он загружается. Здесь выполняются аппаратные проверки, в частности, модуль Wi-Fi и модуль Bluetooth с низкой энергией. Если эти проверки являются успешными, и демон может инициализировать вышеупомянутые компоненты, то он перемещается в состояние init. В противном случае он перемещается на сломан, останавливаясь там и прошивая светодиод, указывающий на аппаратную ошибку пользователю.
- СОСТОЯНИЕ ИТ: СОСТОЯНИЕ ИНИТАНИЯ - это первое промежуточное состояние, в которое входит демон. Его цель состоит в том, чтобы подготовить устройство для правильной функции, сначала калибруя модуль измерения мощности, проводя его ездой на велосипеде, приобретая показания устройства к току линии. После этого подтверждается, содержит ли Daemon какие -либо учетные данные, хранящиеся в его эмулированном eeprom или нет. Демон перемещается в состояние соединительного состояния с указанными учетными данными, если первое верно, в противном случае введен этап настройки.
- Состояние настройки: с помощью его блокировки это состояние не будет развиваться, пока не будет выполнено действие пользователя. Поскольку демон не содержит никаких учетных данных здесь, он понятия не имеет, как подключиться к Wi-Fi или брокеру. Это означает, что на данном этапе демон не может использовать Wi-Fi для передачи данных и нуждается в прямом подходе. BLE идеально подходит для этого сценария, так как написание и чтение через характеристики легко достижимо из приложения Peddy. Следовательно, для излучения этих характеристик используются возможности BLE устройства:
- Serial (только для чтения): характеристика, которая издает серийный номер устройства.
- SSID (только для записи): идентификатор набора услуг для сети Wi-Fi.
- Пароль (только для записи): пароль точки доступа Wi-Fi.
- Имя пользователя Enterprise (только для записи): Если Wi-Fi требуют методов аутентификации предприятия, таких как EAP или PEAP, имя пользователя для пользователя.
- Периновый пароль (только для записи): Если Wi-Fi требуют методов аутентификации корпоративной подлинности, таких как EAP или PEAP, пароль для пользователя.
- JWT (только для записи): веб-токен JSON, используемый Daemon для подключения к брокеру.
- Сброс (только для записи): Когда эта характеристика написана, Демон сбрасывает свои учетные данные.
Чтобы продолжить, JWT и учетные характеристики должны быть записаны мобильным устройством пользователя через приложение Parddy. Следует отметить, что для простоты прошивка обнаруживает этот этап как завершенное только написание для характеристик SSID. Таким образом, записи могут происходить в любом порядке, за исключением SSID, который должен быть написан на последнее время для достижения предсказуемого поведения. Чтобы различить режимы авторизации, различные комбинации письменных характеристик дают три конфигурации, когда речь идет о авторизации Wi-Fi: небезопасно (только SSID), Secure (SSID + пароль) и Enterprise (SSID + Enterprise Username + Password).
- Соединительное состояние: это состояние относительно простое, так как оно работает только в то время как демон подключается к бэкэнд -брокеру. При успешном соединении он передает государство онлайн -онлайн, и чтобы отказаться от неудачи.
- Онлайн -состояние: «рабочее» состояние демона, это полностью функциональная площадка. Здесь он может взаимодействовать с брокером, получая сообщения MQTT и отправив их. Демон имеет несколько обязанностей, пока в этом штате есть:
- Слушайте сообщения MQTT, а именно на ON, OFF, сбросить и вращать темы. Когда одно из этих сообщений получено, оно соответствующим образом выполняет правильное действие.
- Отправьте пинг-сообщения о том, как брокер. Эти сообщения предназначены исключительно для статистических целей и не нужны, чтобы фактически сохранить связь; Они просто используются для отслеживания статуса демона из приложения. В полезной нагрузке этих сообщений прочность сигнала Wi-Fi передается.
- Периодически передаваемость данных об использовании питания брокеру.
- Проверьте, подключено ли устройство к брокеру. Если устройство больше не подключено, перейдите к отбору.
- Состояние отборочного фарма: Хотя это состояние служит прокладкой перед тем, как Daemon Relaves подключает соединения, это также является окном для пользователя, чтобы сбросить демон через прямое подключение. Например, в тех случаях, когда демон перемещается из места с другим соединением Wi-Fi, у него уже есть полномочия, но они неверны. Таким образом, когда демон достигает состояния отступления, он открывает 60-секундное окно, в котором пользователь может сбросить его через BLE. Однако, если нарастает 60-секундный счетчик, демон повторит, чтобы снова подключиться к серверу, перейдя к состоянию соединения.
Схема
