diff --git a/Cargo.lock b/Cargo.lock index bfa678d..9ce6d5e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -29,6 +29,15 @@ dependencies = [ "generic-array", ] +[[package]] +name = "bme280" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d52d85db2766df0fe57b7b2033c2311cf874b6f40fefa2195a345bbe16c9da5" +dependencies = [ + "embedded-hal", +] + [[package]] name = "buf_redux" version = "0.8.4" @@ -51,6 +60,18 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfb24e866b15a1af2a1b663f10c6b6b8f397a84aadb828f12e5b289ec23a3a3c" +[[package]] +name = "cast" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" + +[[package]] +name = "cc" +version = "1.0.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a20104e2335ce8a659d6dd92a51a767a0c062599c73b343fd152cb401e828c3d" + [[package]] name = "cfg-if" version = "1.0.0" @@ -86,6 +107,15 @@ dependencies = [ "crypto-common", ] +[[package]] +name = "embedded-hal" +version = "1.0.0-alpha.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93cc714edeae73aa1ff259af4498595360b2992e0e9c59801873ed198a7f2216" +dependencies = [ + "nb", +] + [[package]] name = "fastrand" version = "1.8.0" @@ -173,6 +203,17 @@ dependencies = [ "wasi", ] +[[package]] +name = "gpio-cdev" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "409296415b8abc7b47e5b77096faae14595c53724972da227434fc8f4b05ec8b" +dependencies = [ + "bitflags", + "libc", + "nix", +] + [[package]] name = "h2" version = "0.3.15" @@ -281,6 +322,18 @@ dependencies = [ "want", ] +[[package]] +name = "i2cdev" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fe61341e9ce588ede54fd131bf0df63eed3c6e45fcc7fa0e548ea176f39358" +dependencies = [ + "bitflags", + "byteorder", + "libc", + "nix", +] + [[package]] name = "idna" version = "0.3.0" @@ -310,6 +363,15 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "ioctl-rs" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7970510895cee30b3e9128319f2cefd4bde883a39f38baa279567ba3a7eb97d" +dependencies = [ + "libc", +] + [[package]] name = "itoa" version = "1.0.5" @@ -322,6 +384,24 @@ version = "0.2.138" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "db6d7e329c562c5dfab7a46a2afabc8b987ab9a4834c9d1ca04dc54c1546cef8" +[[package]] +name = "linux-embedded-hal" +version = "0.4.0-alpha.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59f67fcef5d29b3ca6328cb283cb7e944e942f54d229709b71bb618f67af55be" +dependencies = [ + "cast", + "embedded-hal", + "gpio-cdev", + "i2cdev", + "nb", + "nix", + "serial-core", + "serial-unix", + "spidev", + "sysfs_gpio", +] + [[package]] name = "log" version = "0.4.17" @@ -337,6 +417,15 @@ version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +[[package]] +name = "memoffset" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +dependencies = [ + "autocfg", +] + [[package]] name = "mime" version = "0.3.16" @@ -383,6 +472,25 @@ dependencies = [ "twoway", ] +[[package]] +name = "nb" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "546c37ac5d9e56f55e73b677106873d9d9f5190605e41a856503623648488cae" + +[[package]] +name = "nix" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f3790c00a0150112de0f4cd161e3d7fc4b2d8a5542ffc35f099a2562aecb35c" +dependencies = [ + "bitflags", + "cc", + "cfg-if", + "libc", + "memoffset", +] + [[package]] name = "once_cell" version = "1.16.0" @@ -561,6 +669,27 @@ dependencies = [ "serde", ] +[[package]] +name = "serial-core" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f46209b345401737ae2125fe5b19a77acce90cd53e1658cda928e4fe9a64581" +dependencies = [ + "libc", +] + +[[package]] +name = "serial-unix" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f03fbca4c9d866e24a459cbca71283f545a37f8e3e002ad8c70593871453cab7" +dependencies = [ + "ioctl-rs", + "libc", + "serial-core", + "termios", +] + [[package]] name = "sha-1" version = "0.10.1" @@ -602,6 +731,17 @@ dependencies = [ "winapi", ] +[[package]] +name = "spidev" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c43e891adf1abc1e09b10f80c8d91959ee20ec28425c6dadac78844ba4c709f" +dependencies = [ + "bitflags", + "libc", + "nix", +] + [[package]] name = "syn" version = "1.0.107" @@ -613,6 +753,15 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "sysfs_gpio" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ef9c9bcbfeb596ce4da59b2c59736235f35dcd516f03958ea10834473224157" +dependencies = [ + "nix", +] + [[package]] name = "tempfile" version = "3.3.0" @@ -627,6 +776,15 @@ dependencies = [ "winapi", ] +[[package]] +name = "termios" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5d9cf598a6d7ce700a4e6a9199da127e6819a61e64b68609683cc9a01b5683a" +dependencies = [ + "libc", +] + [[package]] name = "thiserror" version = "1.0.38" @@ -675,9 +833,21 @@ dependencies = [ "mio", "pin-project-lite", "socket2", + "tokio-macros", "windows-sys", ] +[[package]] +name = "tokio-macros" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "tokio-stream" version = "0.1.11" @@ -886,6 +1056,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" name = "weather_exporter" version = "0.1.0" dependencies = [ + "bme280", + "linux-embedded-hal", + "tokio", "warp", ] diff --git a/Cargo.toml b/Cargo.toml index 3ce76b1..6668e1f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,4 +7,7 @@ description = "A Prometheus exporter for weather data." # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +bme280 = "0.4.4" +linux-embedded-hal = "0.4.0-alpha.2" +tokio = { version = "1.23.0", features = ["macros", "rt"] } warp = "0.3.3" diff --git a/src/main.rs b/src/main.rs index e7a11a9..38464b1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,23 @@ +use bme280; +use linux_embedded_hal::{I2cdev, Delay}; +use std::thread; +use std::time::Duration; + fn main() { - println!("Hello, world!"); + + let loop_time = Duration::from_secs(5); + + let i2c = I2cdev::new("/dev/i2c-1") + .expect("Could not open i2c bus"); + + let mut sensor = bme280::i2c::BME280::new_primary(i2c); + + sensor.init(&mut Delay).expect("Could not initialize BME280 sensor"); + + loop { + let baro = sensor.measure(&mut Delay).expect("Could not perform measurement"); + println!("H {}%, P {} PA, T {}°C", baro.humidity, baro.pressure, baro.temperature); + thread::sleep(loop_time); + } + }