A SCD40 (or 41) CO2 PPM Monitor with Web Interface for Raspberry Pi Pico W
Find a file
2025-03-18 15:00:24 +00:00
.cargo forgot the .cargo/config.toml file 2025-03-13 13:50:24 +00:00
cyw43-firmware Checking in initial baseline for project based on a combo 2025-03-13 13:28:48 +00:00
images Add some notes and images to the README 2025-03-18 15:00:24 +00:00
src Add a comment to explain this is amateur code and remove super secret secrets from code. 2025-03-18 14:22:10 +00:00
.gitignore remove .gitignore line as that doesn't work properly, the README gives a better alternative. 2025-03-17 17:38:37 +00:00
build.rs Checking in initial baseline for project based on a combo 2025-03-13 13:28:48 +00:00
Cargo.lock IT WORKS! OK, for small values of works, and the code is a mess. 2025-03-16 23:02:06 +00:00
Cargo.toml Update to explain what I needed to go to make this compile due to conflict in crates.io versions of embassy and picoserve 2025-03-17 13:51:36 +00:00
LICENSE-APACHE Checking in initial baseline for project based on a combo 2025-03-13 13:28:48 +00:00
LICENSE-MIT Checking in initial baseline for project based on a combo 2025-03-13 13:28:48 +00:00
memory.x The Pico W now serves a basic HTML page. 2025-03-14 17:42:07 +00:00
NOTICE.md Checking in initial baseline for project based on a combo 2025-03-13 13:28:48 +00:00
README.md Add some notes and images to the README 2025-03-18 15:00:24 +00:00
rust-toolchain.toml The Pico W now serves a basic HTML page. 2025-03-14 17:42:07 +00:00

scd40-rusty-pi

Animation of a web page with CO2PPM, temperature, and humidity values and the CO2PPM value updates every few seconds

A Raspberry Pi Pico W implementation of a SCD40 based CO2 PPM monitor, it has a web interface where the current values can be viewed. This is designed to work with an I2C SCD40 module.

Please note that I am on about day 5 of learning Rust, so this code is not provided with the intention of it being a correct example to follow. Comments and feedback are welcomed! This is part of my own learning process.

This is a work in progress.

A Pico W next to a SCD40 module on a breadboard connected with some wires

Compiling - picoserve mod

I struggled to get embassy + picoserve to compile together using crates.io sources. Despite the version number of embassy being the same it seems that using the git sources fixes the problem (the issue is with embassy-time-driver). But to achieve this I had to also edit the picoserve/Cargo.toml in the picoserve project, which I have checked out and sat alongside this project tree and referenced directly in this project's Cargo.toml. Hopefully in time the issue with the crates.io compatibility will be resolved.

diff --git a/picoserve/Cargo.toml b/picoserve/Cargo.toml
index 5bb0084..c9ad350 100644
--- a/picoserve/Cargo.toml
+++ b/picoserve/Cargo.toml
@@ -20,2 +20,2 @@ defmt = { version = "0.3.6", optional = true }
-embassy-net = { version = ">=0.6.0", optional = true, features = ["tcp", "proto-ipv4", "medium-ethernet"] }
-embassy-time = { version = ">=0.4.0", optional = true }
+embassy-net = { version = "0.7.0", git = "https://github.com/embassy-rs/embassy.git", optional = true, features = ["tcp", "proto-ipv4", "medium-ethernet"] }
+embassy-time = { version = "0.4.0", git = "https://github.com/embassy-rs/embassy.git", optional = true }

License

scd40-rusty-pi is licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.