Bluetooth LED Button Firmware Development (nRF58240/Zephyr)

Job ID: 37062175

Budget: $25 – $50 USD

Product Overview
---------------------------------
The Corridor Light Button is an nRF52840-based battery-operated LED light source with a large button to be mounted in the corridor outside of a patient's room in a care facility (hospital, nursing home, elderly home). The purpose of this device is to externally indicate statuses inside the patient's room based on a number of alerts that are detected by an in-room monitoring system ("Gateway"). The device is paired via Bluetooth Low Energy (BLE) to the Gateway and acts as a GATT server (custom profile) with the Gateway acting as a GATT client. At a minimum the GATT server receives commands from the GATT client to control its RGBY LEDs, and notifies the GATT client of the status of the button and the level of the device's battery.

Optional auxiliaries on this device are an NFC card reader and an E-Paper display (EPD). When these auxiliaries are in use, the GATT server notifies the client of an NFC ID scanned after the button is pressed, as well as receives bitmap data from the client to update the EPD.

The device must be optimized for maximum battery life (No less than 2200 hours between replacements) and will stand by in a low-power/sleep mode, waking at 1 second intervals to communicate with the GATT client and service any commands/tasks.

Top Level Functionality List
---------------------------------
The corridor light button's functionalities include:
- Monitor status of a button (momentary switch, SPST-NO) via digital input
- Monitor device battery life via ADC input
- Interface with an LED driver (PWM or I2C) to control 4 LEDs (RGBY)
- Interface with an NFC reader to read NFC card ID in device proximity for a defined time interval after a button press event.
- Interface with an E-Paper Display (EPD) to display patient information
- Communicate via BLE as a GATT server (custom profile) with gateway (GATT client) with the following services:
- LED Service - set color/brightness via HTML RGBY code
- Button service - notify client of button press events
- NFC service - notify client of last read NFC ID on a button press event
- EPaper Service - receive bitmap from client and update Epaper display
- Battery service - periodically notify battery level
- Implement power saving/sleep mode, sleeping when all pending wake state tasks are complete. Device will wake up in 1 second intervals to receive commands from gateway (GATT client), notify periodic and requested quantities, and service pending tasks.

Development Environment
---------------------------------
Microcontroller: nRF52840
Toolchain: Zephyr Project
SDK: nRF Connect SDK
Preferred IDE: VSCode with nRFConnect Extension pack and Doxygen documentation generator
Documentation style: Doxygen

Developer Responsibilities
---------------------------------
- Maintain/organize embedded code base for corridor light button
- Initially, analyze and familiarize with current code base as-is and generate suggestions for cleanup/optimization.
- Implement functionality requests and updates by EMC Healthcare
- Provide estimates of time to completion for tasks as received
- Write descriptive code comments that are compatible with Doxygen (make use of VSCode Doxygen documentation generator where appropriate)
- Write descriptive commit messages when committing to git version control
- Optimize firmware for lowest power consumption