Reading from the sensor
This commit is contained in:
parent
0afda7192c
commit
a93730a61d
@ -15,8 +15,6 @@ rustflags = [
|
|||||||
"link-arg=--nmagic",
|
"link-arg=--nmagic",
|
||||||
"-C",
|
"-C",
|
||||||
"link-arg=-Tlink.x",
|
"link-arg=-Tlink.x",
|
||||||
# "-C",
|
|
||||||
# "link-arg=-Tdefmt.x",
|
|
||||||
"-C",
|
"-C",
|
||||||
"target-cpu=cortex-m33",
|
"target-cpu=cortex-m33",
|
||||||
]
|
]
|
||||||
@ -24,13 +22,6 @@ rustflags = [
|
|||||||
runner = "picotool load -u -v -x -t elf"
|
runner = "picotool load -u -v -x -t elf"
|
||||||
|
|
||||||
[target.riscv32imac-unknown-none-elf]
|
[target.riscv32imac-unknown-none-elf]
|
||||||
rustflags = [
|
rustflags = ["-C", "link-arg=--nmagic", "-C", "link-arg=-Trp235x_riscv.x"]
|
||||||
"-C",
|
|
||||||
"link-arg=--nmagic",
|
|
||||||
"-C",
|
|
||||||
"link-arg=-Trp235x_riscv.x",
|
|
||||||
# "-C",
|
|
||||||
# "link-arg=-Tdefmt.x",
|
|
||||||
]
|
|
||||||
|
|
||||||
runner = "picotool load -u -v -x -t elf"
|
runner = "picotool load -u -v -x -t elf"
|
||||||
|
3
.gitignore
vendored
3
.gitignore
vendored
@ -1,2 +1,5 @@
|
|||||||
# Cargo
|
# Cargo
|
||||||
target/
|
target/
|
||||||
|
|
||||||
|
# VSCode
|
||||||
|
.vscode
|
||||||
|
52
Cargo.lock
generated
52
Cargo.lock
generated
@ -211,6 +211,12 @@ dependencies = [
|
|||||||
"either",
|
"either",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "log"
|
||||||
|
version = "0.4.25"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nb"
|
name = "nb"
|
||||||
version = "0.1.3"
|
version = "0.1.3"
|
||||||
@ -246,12 +252,6 @@ dependencies = [
|
|||||||
"syn 1.0.109",
|
"syn 1.0.109",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "panic-halt"
|
|
||||||
version = "1.0.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "a513e167849a384b7f9b746e517604398518590a9142f4846a32e3c2a4de7b11"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "paste"
|
name = "paste"
|
||||||
version = "1.0.15"
|
version = "1.0.15"
|
||||||
@ -262,10 +262,12 @@ checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
|
|||||||
name = "pico-enviro-sensor"
|
name = "pico-enviro-sensor"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"critical-section",
|
||||||
"embedded-hal 1.0.0",
|
"embedded-hal 1.0.0",
|
||||||
"fugit",
|
"fugit",
|
||||||
"panic-halt",
|
|
||||||
"rp235x-hal",
|
"rp235x-hal",
|
||||||
|
"rtt-target",
|
||||||
|
"scd4x",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -414,6 +416,17 @@ dependencies = [
|
|||||||
"vcell",
|
"vcell",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rtt-target"
|
||||||
|
version = "0.6.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "4235cd78091930e907d2a510adb0db1369e82668eafa338f109742fa0c83059d"
|
||||||
|
dependencies = [
|
||||||
|
"critical-section",
|
||||||
|
"portable-atomic",
|
||||||
|
"ufmt-write",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rustc_version"
|
name = "rustc_version"
|
||||||
version = "0.2.3"
|
version = "0.2.3"
|
||||||
@ -423,6 +436,16 @@ dependencies = [
|
|||||||
"semver",
|
"semver",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "scd4x"
|
||||||
|
version = "0.4.0"
|
||||||
|
source = "git+https://github.com/twokilohertz/scd4x-rs.git?branch=conversion-fixes#07730523c51d6909530c000de271832125760385"
|
||||||
|
dependencies = [
|
||||||
|
"embedded-hal 1.0.0",
|
||||||
|
"log",
|
||||||
|
"sensirion-i2c",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "semver"
|
name = "semver"
|
||||||
version = "0.9.0"
|
version = "0.9.0"
|
||||||
@ -438,6 +461,15 @@ version = "0.7.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
|
checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "sensirion-i2c"
|
||||||
|
version = "0.4.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "640a03c95c176226cf159ae2727f7fe3245546022639d61459af46d2878aec06"
|
||||||
|
dependencies = [
|
||||||
|
"embedded-hal 1.0.0",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "sha2-const-stable"
|
name = "sha2-const-stable"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
@ -472,6 +504,12 @@ dependencies = [
|
|||||||
"unicode-ident",
|
"unicode-ident",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ufmt-write"
|
||||||
|
version = "0.1.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e87a2ed6b42ec5e28cc3b94c09982969e9227600b2e3dcbc1db927a84c06bd69"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "unicode-ident"
|
name = "unicode-ident"
|
||||||
version = "1.0.17"
|
version = "1.0.17"
|
||||||
|
10
Cargo.toml
10
Cargo.toml
@ -8,13 +8,17 @@ version = "0.1.0"
|
|||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
embedded-hal = "1.0.0"
|
|
||||||
fugit = "0.3.7"
|
|
||||||
panic-halt = "1.0.0"
|
|
||||||
rp235x-hal = { version = "0.2.0", features = [
|
rp235x-hal = { version = "0.2.0", features = [
|
||||||
"critical-section-impl",
|
"critical-section-impl",
|
||||||
"binary-info",
|
"binary-info",
|
||||||
] }
|
] }
|
||||||
|
critical-section = "1.2.0"
|
||||||
|
embedded-hal = "1.0.0"
|
||||||
|
fugit = "0.3.7"
|
||||||
|
scd4x = { git = "https://github.com/twokilohertz/scd4x-rs.git", branch = "conversion-fixes", features = [
|
||||||
|
"scd41",
|
||||||
|
] }
|
||||||
|
rtt-target = "0.6.1"
|
||||||
|
|
||||||
# Super-optimised release build, maximum performance, minimal debuggability
|
# Super-optimised release build, maximum performance, minimal debuggability
|
||||||
# Build with cargo build --profile dist
|
# Build with cargo build --profile dist
|
||||||
|
90
src/main.rs
90
src/main.rs
@ -3,17 +3,13 @@
|
|||||||
|
|
||||||
use embedded_hal::delay::DelayNs;
|
use embedded_hal::delay::DelayNs;
|
||||||
use fugit::RateExtU32;
|
use fugit::RateExtU32;
|
||||||
use panic_halt as _; // Needed so its built & linked correctly
|
use rtt_target::{rprintln, rtt_init_print};
|
||||||
|
|
||||||
// Alias for our HAL crate
|
|
||||||
use rp235x_hal as hal;
|
|
||||||
|
|
||||||
// RP235x HAL
|
// RP235x HAL
|
||||||
use hal::uart::DataBits;
|
use rp235x_hal as hal;
|
||||||
use hal::uart::StopBits;
|
|
||||||
use hal::uart::UartConfig;
|
// Sensor
|
||||||
use hal::uart::UartPeripheral;
|
use scd4x::Scd4x;
|
||||||
use hal::Clock;
|
|
||||||
|
|
||||||
mod constants;
|
mod constants;
|
||||||
|
|
||||||
@ -23,6 +19,9 @@ pub static IMAGE_DEF: hal::block::ImageDef = hal::block::ImageDef::secure_exe();
|
|||||||
|
|
||||||
#[hal::entry]
|
#[hal::entry]
|
||||||
fn main() -> ! {
|
fn main() -> ! {
|
||||||
|
rtt_init_print!();
|
||||||
|
rprintln!("Logging over RTT initialised");
|
||||||
|
|
||||||
let mut peripherals = hal::pac::Peripherals::take().unwrap();
|
let mut peripherals = hal::pac::Peripherals::take().unwrap();
|
||||||
|
|
||||||
let mut watchdog = hal::Watchdog::new(peripherals.WATCHDOG);
|
let mut watchdog = hal::Watchdog::new(peripherals.WATCHDOG);
|
||||||
@ -49,18 +48,73 @@ fn main() -> ! {
|
|||||||
&mut peripherals.RESETS,
|
&mut peripherals.RESETS,
|
||||||
);
|
);
|
||||||
|
|
||||||
let uart0_pins = (pins.gpio0.into_function(), pins.gpio1.into_function());
|
rprintln!("Core RP2350 hardware initialisation successful");
|
||||||
|
|
||||||
let uart = UartPeripheral::new(peripherals.UART0, uart0_pins, &mut peripherals.RESETS)
|
// Initialise SCD41 sensor
|
||||||
.enable(
|
let i2c0 = hal::I2C::i2c0(
|
||||||
UartConfig::new(9600_u32.Hz(), DataBits::Eight, None, StopBits::One),
|
peripherals.I2C0,
|
||||||
clocks.peripheral_clock.freq(),
|
pins.gpio4.reconfigure(), // Pin 6 on Pico 2 (SDA)
|
||||||
)
|
pins.gpio5.reconfigure(), // Pin 7 on Pico 2 (SCL)
|
||||||
.unwrap();
|
400.kHz(),
|
||||||
|
&mut peripherals.RESETS,
|
||||||
|
&clocks.peripheral_clock,
|
||||||
|
);
|
||||||
|
|
||||||
|
timer.delay_ms(30); // Power-up delay
|
||||||
|
let mut scd41 = Scd4x::new(i2c0, timer);
|
||||||
|
scd41.wake_up();
|
||||||
|
|
||||||
|
match scd41.reinit() {
|
||||||
|
Ok(_) => rprintln!("Initialised SCD41"),
|
||||||
|
Err(error) => rprintln!("Failed to initialise SCD41: {:?}", error),
|
||||||
|
}
|
||||||
|
timer.delay_ms(30); // Soft reset delay
|
||||||
|
|
||||||
|
match scd41.serial_number() {
|
||||||
|
Ok(serial) => rprintln!("SCD41 serial number: {}", serial),
|
||||||
|
Err(error) => rprintln!("SCD41 did not respond to get_serial_number: {:?}", error),
|
||||||
|
}
|
||||||
|
|
||||||
|
match scd41.self_test_is_ok() {
|
||||||
|
Ok(ok) => {
|
||||||
|
if ok {
|
||||||
|
rprintln!("SCD41 reported successful self-test")
|
||||||
|
} else {
|
||||||
|
rprintln!("SCD41 reported unsuccessful self-test!")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Err(_) => rprintln!("SCD41 failed to perform self-test"),
|
||||||
|
}
|
||||||
|
|
||||||
|
match scd41.start_periodic_measurement() {
|
||||||
|
Ok(_) => rprintln!("Configured sensor to measure every 5 seconds"),
|
||||||
|
Err(error) => rprintln!("SCD41 start_periodic_measurement() failed: {:?}", error),
|
||||||
|
}
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
uart.write_full_blocking(b"hello, world!\r\n");
|
timer.delay_ms(5010);
|
||||||
timer.delay_ms(500);
|
match scd41.measurement() {
|
||||||
|
Ok(data) => rprintln!(
|
||||||
|
"CO2: {}, temperature: {}, humidity: {}",
|
||||||
|
data.co2,
|
||||||
|
data.temperature,
|
||||||
|
data.humidity
|
||||||
|
),
|
||||||
|
Err(error) => rprintln!("SCD41 get_measurement() failed: {:?}", error),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// loop {
|
||||||
|
// hal::arch::wfi();
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
|
#[inline(never)]
|
||||||
|
#[panic_handler]
|
||||||
|
fn panic(info: &core::panic::PanicInfo) -> ! {
|
||||||
|
rprintln!("Panicked! {}", info);
|
||||||
|
loop {
|
||||||
|
hal::arch::nop()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user