33 lines
1.9 KiB
Markdown
33 lines
1.9 KiB
Markdown
# Pico Environment Sensor
|
|
|
|
This firmware, written in Rust using [embassy-rs](https://github.com/embassy-rs/embassy), is designed for the [Raspberry Pi Pico 2 W](https://www.raspberrypi.com/documentation/microcontrollers/pico-series.html#pico2w-technical-specification) platform using the RP2350 microcontroller. Its application is an environment-sensing device which can measure CO2 concentration in the atmosphere, ambient temperature and humidity.
|
|
|
|
The effects of increased CO2 concentration on cognitive function become increasingly pronounced at CO2 concentrations exceeding 1000 ppm. There's a fantastic [YouTube video](https://www.youtube.com/watch?v=1Nh_vxpycEA) by Kurtis Baute and Tom Scott which you can watch for a short summary. Open your window right now!
|
|
|
|
## Building
|
|
|
|
### Prerequisites
|
|
|
|
- Rust compiler & cargo package manager: https://www.rust-lang.org/
|
|
- RPi Pico SDK: https://github.com/raspberrypi/pico-sdk
|
|
- RPi picotool: https://github.com/raspberrypi/picotool
|
|
- ARM bare metal compiler toolchain
|
|
- `arm-none-eabi-gcc` (& `arm-none-eabi-newlib`) on Arch Linux, your system may have different package names
|
|
- The ARMv8 or RISC-V Rust toolchain:
|
|
- ARMv8: `rustup target add thumbv8m.main-none-eabihf`
|
|
- RISC-V: `rustup target add riscv32imac-unknown-none-elf`
|
|
|
|
### Environment configuration
|
|
|
|
This build system assumes the environment variables: `PICO_BOARD`, `PICO_PLATFORM` & `PICO_SDK_PATH` are set. `picotool` should also be available in the `PATH`.
|
|
|
|
The [env-vars.sh](./scripts/env-vars.sh) script sets these values to `pico2_w`, `rp2350-arm-s` and my personal Pico SDK path, respectively. The environment variable definitions in this file can be set with `source ./scripts/env-vars.sh`.
|
|
|
|
### Compiling & running
|
|
|
|
- `cargo build` (or `cargo build --release`)
|
|
|
|
If you wish to run the binary on your Pico (connected in BOOTSEL mode):
|
|
|
|
- `cargo run` (or `cargo run --release`)
|