Cntrlr is an all-in-one embedded platform for writing simple asynchronous applications on top of common hobbyist development boards.
#![no_std]
#![no_main]
use cntrlr::prelude::*;
use core::future::pending;
#[entry]
async fn main() -> ! {
serial_1().enable(9600).unwrap();
writeln!(serial_1(), \"Hello, World\").await.unwrap();
// Hang forever once we've sent our message
pending().await
}
The primary goal of Cntrlr is to provide a prototyping environment for hobbyists. This generally means that functionality should be simple and automatic, but provide escape hatches to directly access hardware for more complex uses.
A secondary goal is to explore the API space afforded by Rust's type system. This also ties into the first goal, since high-level APIs must be designed in a way that allows for low-level access to the hardware by user applications.
It is explicitly a non-goal to move away from nightly Rust. Cntrlr's goals mean it needs the flexibility to bring in new nightly features when it makes sense for the API.
Cntrlr currently requires a recent nightly Rust compiler. The best way
to install nightly Rust is via rustup
To simplify building and flashing your application, cargo-cntrlr
is
recommended.
cargo +nightly install cargo-cntrlr
cargo +nightly cntrlr new myapp
cd myapp
cargo +nightly cntrlr flash --board=<board>
For the list of supported boards, run cargo cntrlr flash --board=help
Cntrlr uses a number of rust nightly features. Some of these are required for the functionality the crate provides, while others are used to create a more ergonomic API.
- PJRC Teensy 3.x family, based on NXP/Freescale Kinetis microcontrollers
- Teensy 3.0
- Teensy 3.1
- Teensy 3.2
- Teensy 3.5
- Teensy 3.6
- Possibly Teensy LC. The bringup code looks good compared to the Teensyduino core, but I don't own an LC to test with at the moment. It may not work.
- Sparkfun Red V, based on the SiFive Freedom E310 microcontroller
- The SiFive HiFive1 Rev B (which the Red V is based on) should also work, but is untested.
- The original HiFive1 will mostly likely not work without being added as a dedicated board.
- UART-based serial ports
- Simple digital GPIOs
Cntrlr will continue to be updated to add additional board support, as well as expanding functionality for existing boards.
Currently, support is planned for the following boards
- Teensy 4.0/4.1
Note that support for AVR-based boards is currently blocked on a number of Rust compiler issues.
- SPI and I2C serial
- Analog read & write
- PWM
- SD Cards
- USB