
패디 펌웨어
이것은 Power Administration 데몬 인 Paddy의 펌웨어 구성 요소입니다.
Arduino C ++를 사용하며 상태 기계 주변에서 설계되었습니다. 지원 칩에서 직접 번쩍입니다. 이 프로젝트에 사용 된 Arduino 유형은 IoT Nano 33입니다.
이 코드의 작업은 설정 및 오류 처리를 위해 Wi-Fi를 통한 Paddy MQTT 브로커 또는 Bluetooth 저에너지를 통해 Paddy 앱과 인터페이스하는 것입니다. 코드는 또한 수행하는 하드웨어를 제어해야합니다.
- 로드 장치의 켜기/꺼짐
- 주기적 통계 전송과 함께로드 장치의 전력 측정.
상태 기계 다이어그램

개요
이 상태 머신의 코드는 펌웨어에서 한 번 인스턴스화되어 프로그램 라이프 사이클 전체에서 재사용되는 싱글 톤 구성 요소로 구성됩니다. 이 모듈은 다음과 같습니다.
- BLE : 데몬과 중앙 장치 사이의 직접 통신을 처리합니다.
- 제어 : 당시 수신 된 명령에 따라로드 장치를 켜거나 끕니다.
- MQTT : 브로커와의 모든 커뮤니케이션을 처리하고 대표는 메시지 검색에서 다른 구성 요소 또는 상태로 작업합니다.
- 전원 : 전력 측정 전류 변압기를 제어 및 보정합니다. 정기적 인 독서를 만듭니다.
- 스토리지 : 선택한 Arduino IoT Nano 33이 실제 eeprom을 갖지 않아 EEPROM 칩을 에뮬레이트합니다. 필요한 자격 증명을 저장합니다.
- Wi-Fi : Wi-Fi 연결 및 신호 강도 측정을 처리합니다.
각 상태가 사전 정의 된 의무가 있으므로 각 흐름의 흐름이 무엇을하는지 쉽게 이해할 수 있습니다.
- 부팅 상태 : 마이크로 컨트롤러가 부팅하자마자 초기 상태입니다. 하드웨어 점검은 여기에서, 특히 Wi-Fi 모듈 및 Bluetooth 저 에너지 모듈을 수행합니다. 이러한 검사가 성공하고 데몬이 위에서 언급 한 구성 요소를 초기화 할 수 있다면이 상태로 이동합니다. 그렇지 않으면 파손 된 곳으로 이동하여 멈추고 사용자에게 하드웨어 오류를 나타내는 LED를 깜박입니다.
- 초기 상태 : INIT 상태는 데몬이 들어가는 최초의 중간 상태입니다. 그 목적은 장치를 몇 번 사이클링하여 전력 측정 모듈을 교정하여 장치를 적절한 기능을 준비하는 것이 목적입니다. 그 후, 데몬에 모방 된 eeprom에 저장된 자격 증명이 포함되어 있는지 여부가 확인됩니다. 전자가 참이면 데몬은 상기 자격 증명으로 연결 상태로 이동합니다. 그렇지 않으면 설정 단계가 입력됩니다.
- 설정 상태 : 차단 동작으로 인해이 상태는 사용자 작업이 수행 될 때까지 진행되지 않습니다. 데몬에는 여기에 자격 증명이 포함되어 있지 않기 때문에 Wi-Fi 또는 브로커에 연결하는 방법을 모릅니다. 이 단계 에서이 단계에서 데몬은 데이터 전송에 Wi-Fi를 사용할 수 없으며 직접적인 접근이 필요하다는 것을 의미합니다. BLE은 Paddy 앱에서 특성을 통해 쓰기 및 읽기가 쉽게 달성 할 수 있으므로이 시나리오에 적합합니다. 따라서 장치의 BLE 기능은 이러한 특성을 방출하는 데 사용됩니다.
- 직렬 (읽기 전용) : 장치의 일련 번호를 방출하는 특성.
- SSID (쓰기 전용) : Wi-Fi 네트워크의 서비스 세트 식별자.
- 비밀번호 (쓰기 전용) : Wi-Fi 액세스 포인트의 비밀번호.
- 엔터프라이즈 사용자 이름 (쓰기 전용) : Wi-Fi에 EAP 또는 PEAP와 같은 엔터프라이즈 인증 기술이 필요한 경우 사용자의 사용자 이름입니다.
- Enterprise Password (쓰기 전용) : Wi-Fi에 EAP 또는 PEAP와 같은 엔터프라이즈 인증 기술이 필요한 경우 사용자의 비밀번호입니다.
- JWT (쓰기 전용) : 데몬이 브로커에 연결하는 데 사용하는 JSON 웹 토큰
- 재설정 (쓰기 전용) : 이 특성이 기록되면 데몬은 자격 증명을 다시 설정합니다.
진행하려면 JWT 및 자격 증명 특성을 Paddy 앱을 통해 사용자의 모바일 장치에 의해 작성해야합니다. 단순화를 위해 펌웨어는이 단계를 SSID 특성에 대한 쓰기 만 완료 한 것으로 감지한다는 점에 유의해야합니다. 따라서, SSID를 제외하고는 모든 순서로 글을 쓸 수 있으며, 이는 예측 가능한 행동을 달성하기 위해 Last에 기록되어야합니다. 승인 모드를 식별하기 위해 서면 특성의 다른 조합은 Wi-Fi 승인과 관련하여 세 가지 구성을 산출합니다. 불안 (SSID 만), Secure (SSID + Password) 및 Enterprise (SSID + Enterprise Username + Enterprise Password).
- 연결 상태 : 이 상태는 데몬이 백엔드 브로커에 연결하는 동안 만 실행되므로 비교적 간단합니다. 연결 성공시 주를 온라인으로 건네주고 실패에 대한 백 오프를합니다.
- 온라인 상태 : 데몬의 "작동"상태는 완전히 기능적인 패드를 나타냅니다. 여기에서는 MQTT 메시지를 수신하여 보낼 수 있습니다. 데몬은이 상태에있는 동안 몇 가지 의무가 있습니다.
- MQTT 메시지, 즉 ON, OFF, 재설정 및 회전 주제를 듣습니다. 이 메시지 중 하나가 접수되면 올바른 작업을 적절하게 수행합니다.
- 중개인에게 계속 유지하는 메시지를 보냅니다. 이 메시지는 순전히 통계적 목적을위한 것이며 실제로 연결을 유지하기 위해 불필요합니다. 그들은 단지 앱에서 데몬의 상태를 추적하는 데 사용됩니다. 이 메시지의 페이로드에서 Wi-Fi 신호 강도가 전달됩니다.
- 정기적으로 전원 사용 데이터를 브로커에 릴레이합니다.
- 장치가 여전히 브로커에 연결되어 있는지 확인하십시오. 장치가 더 이상 연결되지 않으면 백 오프로 이동하십시오.
- 백 오프 상태 : 이 상태는 데몬이 연결되기 전에 패딩 역할을하지만 사용자가 직접 블랙 연결을 통해 데몬을 재설정 할 수있는 창입니다. 예를 들어, 데몬이 다른 Wi-Fi 연결이있는 장소에서 이동하는 경우 이미 자격 증명이 있지만 부정확합니다. 따라서 데몬이 백 오프 상태에 도달하면 60 초 창을 열어 사용자가 BLE를 직접 재설정 할 수 있습니다. 그러나 60 초 카운터가 소진되면 데몬은 연결 상태로 이동하여 서버에 다시 연결하기 위해 재 시도합니다.
회로도
