diff --git a/Cargo.lock b/Cargo.lock index a1ad07bf..8c2aeee0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -457,6 +457,14 @@ dependencies = [ "serde", ] +[[package]] +name = "emc2101-driver" +version = "0.1.0" +source = "git+https://github.com/Georges760/emc2101-rs?rev=94cea2a7f2ec8732c06839631ec12def9e8d0847#94cea2a7f2ec8732c06839631ec12def9e8d0847" +dependencies = [ + "embedded-hal 0.2.7", +] + [[package]] name = "enum-as-inner" version = "0.4.0" @@ -547,6 +555,24 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "esp-miner" +version = "0.1.0" +dependencies = [ + "embassy-executor", + "embassy-net", + "embassy-time 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "embedded-io 0.4.0", + "embedded-svc", + "emc2101-driver", + "esp-backtrace", + "esp-println", + "esp-wifi", + "esp32s3-hal", + "fugit", + "static_cell", +] + [[package]] name = "esp-println" version = "0.5.0" @@ -627,23 +653,6 @@ dependencies = [ "esp-hal-common", ] -[[package]] -name = "esp_miner" -version = "0.1.0" -dependencies = [ - "embassy-executor", - "embassy-net", - "embassy-time 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "embedded-io 0.4.0", - "embedded-svc", - "esp-backtrace", - "esp-println", - "esp-wifi", - "esp32s3-hal", - "fugit", - "static_cell", -] - [[package]] name = "fnv" version = "1.0.7" diff --git a/Cargo.toml b/Cargo.toml index 270f6b09..42347349 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "esp_miner" +name = "esp-miner" version = "0.1.0" authors = ["Georges PALAUQUI "] edition = "2021" @@ -31,6 +31,8 @@ embassy-time = { version = "0.1.1", package = "embassy-time", features = [ ] } embedded-io = "0.4.0" embedded-svc = { version = "0.24.0", default-features = false, features = [] } +# emc2101-driver = { version = "0.1.0", path = "../emc2101-driver" } +emc2101-driver = { version = "0.1.0", git = "https://github.com/Georges760/emc2101-rs", rev = "94cea2a7f2ec8732c06839631ec12def9e8d0847" } esp-backtrace = { version = "0.7.0", features = [ "esp32s3", "panic-handler", @@ -54,7 +56,10 @@ fugit = "0.3.6" static_cell = "1.0.0" [features] +default = ["emc2101-tach"] generate-clki = [] +emc2101-tach = [] +emc2101-alert = [] [profile.release] # Explicitly disable LTO which the Xtensa codegen backend has issues diff --git a/src/main.rs b/src/main.rs index 1e22e38c..e4a75987 100644 --- a/src/main.rs +++ b/src/main.rs @@ -6,6 +6,7 @@ use embassy_executor::{Executor, _export::StaticCell}; use embassy_net::{tcp::TcpSocket, Config, Ipv4Address, Stack, StackResources}; use embassy_time::{Duration, Timer}; use embedded_svc::wifi::{ClientConfiguration, Configuration, Wifi}; +use emc2101_driver::{Level, EMC2101}; #[cfg(feature = "generate-clki")] use esp32s3_hal::ledc::{ channel::{self, ChannelIFace}, @@ -149,7 +150,7 @@ fn main() -> ! { /* embedded-hal-async is on its way : https://github.com/esp-rs/esp-hal/pull/510 */ // will be used to control emc2101/ina260/ds44232u - let _i2c = I2C::new( + let i2c = I2C::new( peripherals.I2C0, io.pins.gpio46, io.pins.gpio45, @@ -157,12 +158,44 @@ fn main() -> ! { &mut system.peripheral_clock_control, &clocks, ); - /* As of today embedded-hal-async traits are not yet available for I2C */ /* see https://github.com/esp-rs/esp-hal/issues/70 */ /* So cannot drive I2C slaves asynchronously for now... */ /* This give me time to implement async in emc2101 driver too */ + let mut emc2101 = EMC2101::new(i2c, emc2101_driver::SENSOR_ADDRESS).unwrap(); + /* Noctua PWM fan have a PWM target frequency of 25kHz, acceptable range 21kHz to 28kHz */ + /* The signal is not inverted, 100% PWM duty cycle (= 5V DC) results in maximum fan speed. */ + /* See https://noctua.at/pub/media/wysiwyg/Noctua_PWM_specifications_white_paper.pdf */ + emc2101.set_fan_pwm(25_000, false).unwrap(); + #[cfg(feature = "emc2101-tach")] + emc2101.enable_tach_input().unwrap(); + #[cfg(feature = "emc2101-alert")] + emc2101.enable_alert_output().unwrap(); + let lvl1 = Level { + temp: 50, + percent: 20, + }; + let lvl2 = Level { + temp: 70, + percent: 50, + }; + let lvl3 = Level { + temp: 80, + percent: 70, + }; + let lvl4 = Level { + temp: 90, + percent: 85, + }; + let lvl5 = Level { + temp: 100, + percent: 100, + }; + emc2101 + .set_fan_lut(&[lvl1, lvl2, lvl3, lvl4, lvl5], 3) + .unwrap(); + let wifi_config = Config::Dhcp(Default::default()); let wifi_seed = 1234; // very random, very secure seed