CHESTER started as a platform for data gathering in the forest, connected with NB-IoT (LTE). It’s a configurable endpoint with a Zephyr-based SDK. HardwareIO designs custom extension boards for customers. Many of them available. The software stack is based on Zephyr.
It has a dynamic antenna system (internal/external and cellular/LoRaWAN). It has a number of connectors for external sensors (thermometer probe, I2C master, 1-wire master, and general pins connected to the extension board). It has GPS as well. It has NB-IoT, LTE-M, LoRaWAN, BLE and Astrocast (satellite, on an extension module).
It has low power flexibility. Mainly powered through 3.6V fixed cells, with supercaps for high current peaks. The batteries can be replaced with rechargeable ones on an extension board. These can be combined with photovoltaic panels. With the fixed cells, the lifetime with NB-IoT connectivity is 3 years. Multiple cells can be added to extend the lifetime or increase the frequency.
Next to monitoring trees, other applications are monitoringthe inclination of bridges, smart shelves in retail, corrosion monitoring of gas pipes.
They have a number of ready-to-go systems for different applications, combining several of the extension boards and an enclosure. All of these are open so you can design your own based on one of the existing ones.
Chester SDK is based on Nordic’s, and that is based on Zephyr. When Nordic switched to Zephyr, Pavel quickly saw the advantages. There’s a steep learning curve though. Device trees in Zephyr really help for hardware abstraction: for the extension boards, if you change e.g. a LED to a different GPIO, it’s just a matter of changing the name in the device tree overlay.
Zephyr offers better coherence, keeping related functions together and avoiding cross-dependencies. E.g. you can define an init function and use the SYS_INIT macro to specify when in the boot process it should be executed – no need to call different init functions in an overall main() function, where you may forget to initialize some modules. Decoupling can be improved even more using zbus.
Zephyr also has a shell and you can add commands to it. Again, the code for this can be kept within a module.
Currently updates are only done over bluetooth. OTA should be added in the future, they have a prototype. However, to migrate to this it will need to be reflashed over J-Link.
hardwareio has a python supertool to do various function on the chester and other boards, e.g. flashing. It also has a cloud server where you can download standard firmware (directly from the commandline tool). It has a tool that shows the logs and the shell in two side-by-side terminal windows. The cloud interface also shows all the active devices. Data is pushed in CBOR and on the server translated to JSON.