add emc2101 driver (blocking i2c for now)

This commit is contained in:
Georges PALAUQUI 2023-05-05 15:48:28 +02:00
parent e1aed90572
commit 1963616140
3 changed files with 67 additions and 20 deletions

43
Cargo.lock generated
View File

@ -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"

View File

@ -1,5 +1,5 @@
[package]
name = "esp_miner"
name = "esp-miner"
version = "0.1.0"
authors = ["Georges PALAUQUI <g.palauqui@gptechinno.com>"]
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

View File

@ -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