This master
branch of pinetime-rust-mynewt
contains the firmware source code for PineTime Smart Watch with...
pinetime-rust-mynewt
is an Educational Embedded OS that supports...
-
Wireless Firmware Updates over Bluetooth LE, based on MCU Manager's Simple Management Protocol
-
LVGL UI Library Version 7, based on
pinetime_lvgl_mynewt
-
Time Sync with Bluetooth LE Current Time Service
-
Rust Watch Faces from crates.io
This branch no longer supports druid
, embedded-graphics
and Visual Rust. Check out the older version in the pre-lvgl
branch.
Refer to the articles...
-
Draw your own PineTime Watch Face... From WebAssembly to Embedded Rust
-
Create Your Own PineTime Watch Face in Rust... And Publish on crates.io
-
Firmware Update over Bluetooth Low Energy on PineTime Smart Watch
-
Configure Mynewt for SPI Flash on PineTime Smart Watch (nRF52)
-
Wireless Firmware Update In Action on PineTime Smart Watch (nRF52)
-
Flutter State Management with Bloc for PineTime Companion App
The following articles were written for the older version of this firmware. Refer to the pre-lvgl
branch for the source code...
-
Build and Flash Rust+Mynewt Firmware for PineTime Smart Watch
-
Sneak Peek of PineTime Smart Watch… And why it's perfect for teaching IoT
-
Porting MicroPython and wasp-os to Mynewt on PineTime Smart Watch (nRF52)
The firmware design is similar to this earlier article on nRF52...
Coding nRF52 with Rust and Apache Mynewt on Visual Studio Code
The MCUBoot Bootloader and Rust + Mynewt Firmware are built automatically in the GitHub Cloud.
Just fork this repo, update the source code and the built firmware will be available for download under "Actions".
The Automated Build is performed according to the following GitHub Actions Workflow...
The Worklow is similar to the one described in this article...
Build PineTime Firmware in the Cloud with GitHub Actions
The MCUBoot Bootloader and Rust + Mynewt Firmware are also built automatically with GitLab CI.
This repo is mirrored to GitLab as...
gitlab.com/lupyuen/pinetime-rust-mynewt
The GitLab CI Workflow is at .gitlab-ci.yml
If you are building from this repository from scratch instead of the Released Packages, here are the steps for Linux (x64, Arm32 and Arm64, including Raspberry Pi), macOS and Windows (no need for WSL, MinGW and Docker)...
-
Download and extract xPack OpenOCD. Other versions of OpenOCD are known to have problems flashing with ST-Link.
For Linux with ST-Link (not Raspberry Pi): Download and extract xPack OpenOCD from above. Then install the ST-Link driver as follows...
# For Linux Only: Install UDEV Rules according to https://xpack.github.io/openocd/install/#udev if [ -d /etc/udev/rules.d ]; then sudo cp xpack-openocd/contrib/60-openocd.rules /etc/udev/rules.d/ sudo udevadm control --reload-rules fi
For Windows: Download and extract xPack OpenOCD from above. Then install the ST-Link v2 Driver for Windows...
-
Download the ST-Link USB driver from ST-Link Driver Website (email registration required)
-
Click
Get Software
-
Unzip the downloaded file. Double-click the driver installer:
dpinst_amd64.exe
For Raspberry Pi: Install
openocd-spi
according to the instructions here... -
Download the Arm Embedded Toolchain 9-2020-q2-update. Other versions of the toolchain are known to have problems building the firmware.
-
Embedded Toolchain for Linux Arm32 (install via
apt
)
For Linux and macOS: Unzip the toolchain and add it to your PATH
For Windows: Run the installer and check the option for
Add to PATH
-
Install
rustup
with support for nightly targetthumbv7em-none-eabihf
.Follow the instructions at https://rustup.rs/
Press Enter to select
1) Proceed with installation (default)
For Linux and macOS: Open a command prompt and enter...
source $HOME/.cargo/env rustup update rustup default nightly rustup target add thumbv7em-none-eabihf
For Windows: Enter the above commands in a Windows Command Prompt (not WSL Terminal). Omit the
source
line. -
For Linux and macOS: Install the
newt
build tool for Mynewt. Refer to these scripts...-
scripts/install-version.sh
: To set the version numbers -
scripts/install-pi.sh
: To build and installnewt
, look under the section"Build newt"
For Windows: The
newt
tool has been prebuilt atpinetime-rust-mynewt/newt/newt.exe
-
-
Download the source files to
~/pinetime
...For Linux and macOS:
mkdir ~/pinetime cd ~/pinetime git clone --recursive https://github.com/lupyuen/pinetime-rust-mynewt
For Windows:
cd \ mkdir pinetime cd pinetime git clone --recursive https://github.com/lupyuen/pinetime-rust-mynewt
-
Update the MCUBoot version number to 1.3.1. Edit
pinetime/pinetime-rust-mynewt/project.yml
Change...
repository.mcuboot: type: github vers: 1.5.0
to...
repository.mcuboot: type: github vers: 1.3.1
-
Download the source code for Mynewt, NimBLE and MCUBoot...
For Linux and macOS:
cd ~/pinetime/pinetime-rust-mynewt mkdir repos cp -r patch/repos-windows/.configs repos cd repos git clone --recursive --branch mynewt_1_7_0_tag https://github.com/apache/mynewt-core.git apache-mynewt-core git clone --recursive --branch nimble_1_2_0_tag https://github.com/apache/mynewt-nimble.git apache-mynewt-nimble
For Windows:
cd \pinetime\pinetime-rust-mynewt mkdir repos xcopy /s patch\repos-windows repos cd repos git clone --recursive --branch mynewt_1_7_0_tag https://github.com/apache/mynewt-core.git apache-mynewt-core git clone --recursive --branch nimble_1_2_0_tag https://github.com/apache/mynewt-nimble.git apache-mynewt-nimble
-
Restore the MCUBoot version number to 1.5.0. Edit
pinetime/pinetime-rust-mynewt/project.yml
Change...
repository.mcuboot: type: github vers: 1.3.1
to...
repository.mcuboot: type: github vers: 1.5.0
-
Download version 1.5.0 of MCUBoot to
repos/mcuboot
For Linux and macOS:
cd ~/pinetime/pinetime-rust-mynewt/repos git clone --recursive --branch v1.5.0 https://github.com/JuulLabs-OSS/mcuboot
For Windows:
cd \pinetime\pinetime-rust-mynewt\repos git clone --recursive --branch v1.5.0 https://github.com/JuulLabs-OSS/mcuboot
Why are we doing this? Because we are using a more recent version of MCUBoot (1.5.0), but that's not in sync with the older Mynewt version (1.7.0). This will cause
newt install
to fail. Hence we do this workaround to force Mynewt to build with the newer MCUBoot. -
Copy the unzipped OpenOCD from xPack OpenOCD or
openocd-spi
to the folder...pinetime/pinetime-rust-mynewt/openocd
The
openocd
executable should be located atpinetime/pinetime-rust-mynewt/openocd/bin/openocd
Build the MCUBoot Bootloader...
For Linux and macOS:
cd ~/pinetime/pinetime-rust-mynewt
scripts/nrf52/build-boot.sh
For Windows:
cd \pinetime\pinetime-rust-mynewt
scripts\nrf52\build-boot.cmd
We should see...
Linking pinetime/pinetime-rust-mynewt/pinetime-rust-mynewt/bin/targets/nrf52_boot/app/boot/mynewt/mynewt.elf
Target successfully built: targets/nrf52_boot
+ newt size -v nrf52_boot
Size of Application Image: app
Mem FLASH: 0x0-0x7000
Mem RAM: 0x20000000-0x20010000
FLASH RAM
97 230 *fill*
756 0 libgcc.a
6959 5996 boot_bootutil.a
124 0 boot_mynewt.a
18 0 boot_mynewt_flash_map_backend.a
1182 0 crypto_mbedtls.a
392 444 hw_bsp_nrf52.a
52 0 hw_cmsis-core.a
1280 80 hw_drivers_flash_spiflash.a
654 1 hw_hal.a
4236 72 hw_mcu_nordic_nrf52xxx.a
1570 18772 kernel_os.a
2138 12 libc_baselibc.a
2049 260 libs_pinetime_boot.a
297 39 libs_semihosting_console.a
796 128 sys_flash_map.a
2 0 sys_log_modlog.a
632 29 sys_mfg.a
30 5 sys_sysinit.a
48 0 util_mem.a
100 0 nrf52_boot-sysinit-app.a
Loading compiler pinetime/pinetime-rust-mynewt/pinetime-rust-mynewt/repos/apache-mynewt-core/compiler/arm-none-eabi-m4, buildProfile debug
objsize
text data bss dec hex filename
23220 136 25500 48856 bed8 pinetime/pinetime-rust-mynewt/pinetime-rust-mynewt/bin/targets/nrf52_boot/app/boot/mynewt/mynewt.elf
This produces the MCUBoot Bootloader that we will flash to PineTime later...
pinetime/pinetime-rust-mynewt/bin/targets/nrf52_boot/app/boot/mynewt/mynewt.elf.bin
-
Build the Application Firmware...
For Linux and macOS:
cd ~/pinetime/pinetime-rust-mynewt scripts/build-app.sh
For Windows:
cd \pinetime\pinetime-rust-mynewt scripts\build-app.cmd
If we see the error...
pinetime/pinetime-rust-mynewt/repos/apache-mynewt-core/libc/baselibc/src/start.c:39: undefined reference to `main'
Run
build-app
again. It should fix the error.When the Application Firmware build succeds, we should see...
Linking pinetime/pinetime-rust-mynewt/pinetime-rust-mynewt/bin/targets/nrf52_my_sensor/app/apps/my_sensor_app/my_sensor_app.elf Target successfully built: targets/nrf52_my_sensor + newt size -v nrf52_my_sensor Warning: 6 02:26:22.562 [WARNING] Transient package @apache-mynewt-core/mgmt/newtmgr/transport/ble used, update configuration to use linked package instead (@apache-mynewt-core/mgmt/smp/transport/ble) Warning: 6 02:26:22.562 [WARNING] Transient package @apache-mynewt-core/mgmt/newtmgr used, update configuration to use linked package instead (@apache-mynewt-core/mgmt/smp) Size of Application Image: app Mem FLASH: 0x8000-0x7bc00 Mem RAM: 0x20000000-0x20010000 FLASH RAM 655 368 *fill* 4829 2414 apps_my_sensor_app.a 962 4 boot_bootutil.a 181 38 boot_split.a 1814 0 cborattr.a 2371 72 cmd_img_mgmt.a 1113 0 cmd_img_mgmt_port_mynewt.a 723 12 cmd_os_mgmt.a 222 32 cmd_os_mgmt_port_mynewt.a 2408 0 crypto_tinycrypt.a 619 0 encoding_base64.a 3162 0 encoding_tinycbor.a 452 444 hw_bsp_nrf52.a 52 0 hw_cmsis-core.a 1530 92 hw_drivers_flash_spiflash.a 706 1 hw_hal.a 5992 89 hw_mcu_nordic_nrf52xxx.a 2 0 hw_sensor_creator.a 1266 256 hw_sensor.a 9098 27505 kernel_os.a 3302 50 libc_baselibc.a 16 0 libs_mynewt_rust.a 161547 9868 libs_pinetime_lvgl_mynewt.a 33248 105 libs_rust_app.a 405 39 libs_semihosting_console.a 737 212 libs_temp_stub.a 376 12 mgmt_imgmgr.a 413 12 mgmt.a 490 4 mgmt_smp.a 486 126 mgmt_smp_transport_ble.a 35492 2152 nimble_controller.a 4150 1203 nimble_drivers_nrf52.a 44674 2713 nimble_host.a 874 218 nimble_host_services_ans.a 277 112 nimble_host_services_dis.a 468 118 nimble_host_services_gap.a 252 62 nimble_host_services_gatt.a 1818 652 nimble_host_store_config.a 108 0 nimble_host_util.a 788 1096 nimble_transport_ram.a 776 0 smp.a 1357 42 sys_config.a 794 128 sys_flash_map.a 2 0 sys_log_modlog.a 668 29 sys_mfg.a 1395 67 sys_reboot.a 30 5 sys_sysinit.a 1200 0 time_datetime.a 120 0 util_mem.a 500 0 util_scfg.a 124 0 util.a 180 0 nrf52_my_sensor-sysinit-app.a Loading compiler pinetime/pinetime-rust-mynewt/pinetime-rust-mynewt/repos/apache-mynewt-core/compiler/arm-none-eabi-m4, buildProfile debug objsize text data bss dec hex filename 335072 1132 48820 385024 5e000 pinetime/pinetime-rust-mynewt/pinetime-rust-mynewt/bin/targets/nrf52_my_sensor/app/apps/my_sensor_app/my_sensor_app.elf
-
Create the application firmware image...
For Linux and macOS:
cd ~/pinetime/pinetime-rust-mynewt scripts/nrf52/image-app.sh
For Windows:
cd \pinetime\pinetime-rust-mynewt scripts\nrf52\image-app.cmd
We should see...
App image successfully generated: pinetime/pinetime-rust-mynewt/bin/targets/nrf52_my_sensor/app/apps/my_sensor_app/my_sensor_app.img
-
This produces the application firmware image that we will flash to PineTime later...
pinetime/pinetime-rust-mynewt/bin/targets/nrf52_my_sensor/app/apps/my_sensor_app/my_sensor_app.img
Edit pinetime/pinetime-rust-mynewt/scripts/config.sh
If we're using ST-Link v2 for flashing PineTime, set swd_device
as follows...
# Select ST-Link v2 as SWD Programmer
swd_device=scripts/nrf52/swd-stlink.ocd
If we're using Raspberry Pi SPI for flashing PineTime, set swd_device
as follows...
# Select Raspberry Pi as SWD Programmer
swd_device=scripts/nrf52-pi/swd-pi.ocd
For Windows: We don't need to edit config.sh
-
For Linux and macOS: Edit
pinetime/pinetime-rust-mynewt/scripts/nrf52/flash-boot.sh
For Windows: Edit
pinetime/pinetime-rust-mynewt/scripts/nrf52/flash-boot.cmd
-
Change
openocd/bin/openocd
to the path of our installedopenocd
(for ST-Link) oropenocd-spi
(for Raspberry Pi)...# Flash the device openocd/bin/openocd \ -f $swd_device \ -f scripts/nrf52/flash-boot.ocd
-
The path of the built firmware file is defined in
pinetime/pinetime-rust-mynewt/scripts/nrf52/flash-boot.ocd
. We shouldn't need to change this.# For MCUBoot (debugging not supported): program bin/targets/nrf52_boot/app/boot/mynewt/mynewt.elf.bin verify 0x00000000
TODO: The bootloader has moved to a new location with the latest version of
newt
...bin/targets/nrf52_boot/app/@mcuboot/boot/mynewt/mynewt.elf
-
Flash the bootloader...
For Linux and macOS:
cd ~/pinetime/pinetime-rust-mynewt scripts/nrf52/flash-boot.sh
For Windows:
cd \pinetime\pinetime-rust-mynewt scripts\nrf52\flash-boot.cmd
-
We should see...
> Executing task in folder pinetime-rust-mynewt: bash -c -l ' scripts/nrf52/flash-boot.sh && echo ✅ ◾ ️Done! ' < + source scripts/config.sh ++ swd_device=scripts/nrf52/swd-stlink.ocd + openocd/bin/openocd -f scripts/nrf52/swd-stlink.ocd -f scripts/nrf52/flash-boot.ocd GNU MCU Eclipse 64-bit Open On-Chip Debugger 0.10.0+dev-00462-gdd1d90111 (2019-01-15-13:49) Licensed under GNU GPL v2 For bug reports, read http://openocd.org/doc/doxygen/bugs.html debug_level: 0 adapter speed: 1000 kHz force hard breakpoints Stopping... target halted due to breakpoint, current mode: Thread xPSR: 0x21000000 pc: 0x000023a4 msp: 0x2000ff9c Flashing Bootloader... target halted due to debug-request, current mode: Thread xPSR: 0x01000000 pc: 0x000000d8 msp: 0x20010000 Enabled ARM Semihosting to show debug output semihosting is enabled ** Programming Started ** auto erase enabled target halted due to breakpoint, current mode: Thread xPSR: 0x61000000 pc: 0x2000001e msp: 0x20010000, semihosting wrote 24576 bytes from file bin/targets/nrf52_boot/app/boot/mynewt/mynewt.elf.bin in 0.729124s (32.916 KiB/s) ** Programming Finished ** ** Verify Started ** target halted due to breakpoint, current mode: Thread xPSR: 0x61000000 pc: 0x2000002e msp: 0x20010000, semihosting verified 22876 bytes in 0.114145s (195.715 KiB/s) ** Verified OK ** Restarting... target halted due to debug-request, current mode: Thread xPSR: 0x01000000 pc: 0x000000d8 msp: 0x20010000, semihosting **** Done!
-
For ST-Link, check that the Adapter Speed is set to 1000 kHz. OpenOCD won't work at higher speeds.
adapter speed: 1000 kHz
-
If the flashing fails, check whether any
openocd
processes are running in the background, and kill them.
-
For Linux and macOS: Edit
pinetime/pinetime-rust-mynewt/scripts/nrf52/flash-app.sh
For Windows: Edit
pinetime/pinetime-rust-mynewt/scripts/nrf52/flash-app.cmd
-
Change
openocd/bin/openocd
to the path of our installedopenocd
(for ST-Link) oropenocd-spi
(for Raspberry Pi)...# Flash the device openocd/bin/openocd \ -f $swd_device \ -f scripts/nrf52/flash-app.ocd
-
The path of the built firmware file is defined in
pinetime/pinetime-rust-mynewt/scripts/nrf52/flash-app.ocd
. We shouldn't need to change this.program bin/targets/nrf52_my_sensor/app/apps/my_sensor_app/my_sensor_app.img verify 0x00008000
-
Flash the application...
For Linux and macOS:
cd ~/pinetime/pinetime-rust-mynewt scripts/nrf52/flash-app.sh
For Windows:
cd \pinetime\pinetime-rust-mynewt scripts\nrf52\flash-app.cmd
-
We should see...
> Executing task in folder pinetime-rust-mynewt: bash -c -l ' scripts/nrf52/flash-app.sh && echo ✅ ◾ ️Done! ' < + source scripts/config.sh ++ swd_device=scripts/nrf52/swd-stlink.ocd + openocd/bin/openocd -f scripts/nrf52/swd-stlink.ocd -f scripts/nrf52/flash-app.ocd GNU MCU Eclipse 64-bit Open On-Chip Debugger 0.10.0+dev-00462-gdd1d90111 (2019-01-15-13:49) Licensed under GNU GPL v2 For bug reports, read http://openocd.org/doc/doxygen/bugs.html debug_level: 0 adapter speed: 1000 kHz force hard breakpoints Stopping... target halted due to debug-request, current mode: Thread xPSR: 0x61000000 pc: 0x000001ca msp: 0x2000ffd8 Flashing Application... target halted due to debug-request, current mode: Thread xPSR: 0x01000000 pc: 0x000000d8 msp: 0x20010000 Enabled ARM Semihosting to show debug output semihosting is enabled ** Programming Started ** auto erase enabled target halted due to breakpoint, current mode: Thread xPSR: 0x61000000 pc: 0x2000001e msp: 0x20010000, semihosting wrote 143360 bytes from file bin/targets/nrf52_my_sensor/app/apps/my_sensor_app/my_sensor_app.img in 3.606276s (38.821 KiB/s) ** Programming Finished ** ** Verify Started ** target halted due to breakpoint, current mode: Thread xPSR: 0x61000000 pc: 0x2000002e msp: 0x20010000, semihosting verified 139268 bytes in 0.363909s (373.731 KiB/s) ** Verified OK **
-
For ST-Link, check that the Adapter Speed is set to 1000 kHz. OpenOCD won't work at higher speeds.
adapter speed: 1000 kHz
-
If the flashing fails, check whether any
openocd
processes are running in the background, and kill them. -
PineTime reboots (with the
reset init
OpenOCD Command)...Restarting... target halted due to debug-request, current mode: Thread xPSR: 0x01000000 pc: 0x000000d8 msp: 0x20010000, semihosting Enabled ARM Semihosting to show debug output semihosting is enabled
-
PineTime starts MCUBoot Bootloader...
**** Done! Press Ctrl-C to exit... Starting Bootloader... Displaying image... Image displayed Check button: 0 [INF] Primary image: magic=good, swap_type=0x4, copy_done=0x1, image_ok=0x1 [INF] Scratch: magic=bad, swap_type=0x1, copy_done=0x2, image_ok=0x2 [INF] Boot source: none [INF] Swap type: none Waiting 5 seconds for button... Waited for button: 0 Bootloader done
-
Finally PineTime starts the Application Firmware...
TMP create temp_stub_0 NET hwid 4a f8 cf 95 6a be c1 f6 89 ba 12 1a NET standalone node
Logging of debug messages is disabled by default. To enable debug logging, see the section "Semihosting Logging" below.
Alternatively (for Linux and macOS only), flash the following two files to PineTime with PineTime Updater...
-
MCUBoot Bootloader
File:
bin/targets/nrf52_boot/app/boot/mynewt/mynewt.elf
Address:
0x0
-
Rust + Mynewt Firmware
File:
bin/targets/nrf52_my_sensor/app/apps/my_sensor_app/my_sensor_app.elf
Address:
0x8000
If you don't have a PineTime, try flashing and testing on Remote PineTime instead. Remote PineTime is a real PineTime watch that's connected 24x7 to the internet... For anyone to flash and test firmware from anywhere in the world.
Upload the built firmware file my_sensor_app.img
as a GitHub Release and flash to Remote PineTime...
-
In you GitHub repo, click
Releases
-
Click
Draft A New Release
-
Fill in the
Tag Version
andRelease Title
-
Attach the firmware file
my_sensor_app.img
-
Click
Publish Release
-
Under
Assets
, copy the URL of the firmware filemy_sensor_app.img
-
Follow the steps here to flash the MCUBoot Bootloader and our firmware URL to Remote PineTime...
Sample logs for Linux, macOS and Windows may be found in the logs folder
Also check the GitHub Actions build logs
Logging of debug messages is disabled by default. To enable Semihosting Logging, comment out this line (by inserting #
at the start of the line)...
- -DDISABLE_SEMIHOSTING # Uncomment to disable Arm Semihosting. Must be uncommented for production.
For Bootloader: targets/nrf52_boot/pkg.yml
For Application Firmware: targets/nrf52_my_sensor/pkg.yml
Rebuild the Bootloader and Application Firmware and flash to PineTime. Debug messages will now appear in the OpenOCD log.
Open the workspace file workspace.code-workspace
in VSCode.
The VSCode Workspace contains VSCode Tasks for building and flashing the Bootloader and Application Firmware.
The Cortex-Debug Debugger in VSCode has also been configured for debugging PineTime with GDB and OpenOCD.
This repository contains...
-
rust
: Mynewt Application in Rust -
Cargo.toml
: Rust Build Settings -
.cargo
: Rust Target Settings -
apps/my_sensor_app
: Mynewt Application in C -
apps/boot_stub
: Mynewt Bootloader Stub. For development use only. -
targets/nrf52_boot
: Mynewt Application Firmware Configuration -
targets/nrf52_my_sensor
: MCUBoot Bootloader Configuration -
hw/bsp/nrf52
: Mynewt Board Support Package for PineTime -
scripts
: Build and flash scripts -
workspace.code-workspace
: VSCode Workspace -
.vscode
: VSCode Tasks for build and flash, and debugger configuration
Library modules for Mynewt...
-
libs/mynewt_rust
: Helper functions for hosting Rust on Mynewt -
libs/pinetime_boot
: PineTime Bootloader Extensions for MCUBoot Bootloader -
libs/pinetime_lvgl_mynewt
: LVGL UI Library for Mynewt. Links to thepinetime_lvgl_mynewt
repo. -
libs/rust_app
: Stub library that will be replaced by the compiled Rust application and Rust crates -
libs/rust_libcore
: (Not Used) Stub library that will be replaced by the Rust Core Library -
libs/semihosting_console
: Mynewt Console for Arm Semihosting
Legacy modules for Mynewt that are not used...
-
libs/adc_stm32f1
: Mynewt Driver for ADC on STM32 F103 (Blue Pill). Used bytemp_stm32
internal temperature sensor. -
libs/adc_stm32l4
: Mynewt Driver for ADC on STM32 L476. Used bytemp_stm32
internal temperature sensor. -
libs/bc95g
: Mynewt Driver for Quectel BC95 NB-IoT module -
libs/buffered_serial
: Buffered Serial Library used bybc95g
NB-IoT driver andgps_l70r
GPS driver -
libs/custom_sensor
: Custom Sensor Definitions for Raw Temperature and Geolocation -
libs/esp8266
: Mynewt Driver for ESP8266 WiFi module -
libs/gps_l70r
: Mynewt Driver for Quectel L70-R GPS module -
libs/hmac_prng
: HMAC pseudorandom number generator with entropy based on internal temperature sensor -
libs/low_power
: Low Power functions for STM32 F103 (Blue Pill) -
libs/nrf24l01
: Mynewt Driver for nRF24L01 -
libs/remote_sensor
: Mynewt Driver for Remote Sensor -
libs/sensor_coap
: Sensor CoAP Library -
libs/sensor_network
: Sensor Network Library -
libs/temp_stm32
: Mynewt Driver for Internal Temperature Sensor on STM32 -
libs/temp_stub
: Mynewt Driver for Stub Temperature Sensor that returns a fixed value -
libs/tiny_gps_plus
: TinyGPS++ Library ported from Arduino. Used bygps_l70r
GPS driver.