diff --git a/Cargo.lock b/Cargo.lock index ccba28c..7df6cef 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -275,6 +275,20 @@ dependencies = [ "litrs 0.4.1", ] +[[package]] +name = "ds3231" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06092da010fc293e78440557ff06ec633e06204d93a11e120c69be9a40745931" +dependencies = [ + "bitfield 0.19.1", + "cfg-if", + "chrono", + "embedded-hal 1.0.0", + "maybe-async-cfg", + "paste", +] + [[package]] name = "edge-dhcp" version = "0.6.0" @@ -970,6 +984,7 @@ version = "0.1.0" dependencies = [ "bleps", "critical-section", + "ds3231", "edge-dhcp", "edge-nal", "edge-nal-embassy", @@ -1164,6 +1179,43 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ca88d725a0a943b096803bd34e73a4437208b6077654cc4ecb2947a5f91618d" +[[package]] +name = "manyhow" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b33efb3ca6d3b07393750d4030418d594ab1139cee518f0dc88db70fec873587" +dependencies = [ + "manyhow-macros", + "proc-macro2", + "quote", + "syn 1.0.109", + "syn 2.0.104", +] + +[[package]] +name = "manyhow-macros" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46fce34d199b78b6e6073abf984c9cf5fd3e9330145a93ee0738a7443e371495" +dependencies = [ + "proc-macro-utils", + "proc-macro2", + "quote", +] + +[[package]] +name = "maybe-async-cfg" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8dbfaa67a76e2623580df07d6bb5e7956c0a4bae4b418314083a9c619bd66627" +dependencies = [ + "manyhow", + "proc-macro2", + "pulldown-cmark", + "quote", + "syn 1.0.109", +] + [[package]] name = "md-5" version = "0.10.6" @@ -1362,6 +1414,17 @@ dependencies = [ "version_check", ] +[[package]] +name = "proc-macro-utils" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eeaf08a13de400bc215877b5bdc088f241b12eb42f0a548d3390dc1c56bb7071" +dependencies = [ + "proc-macro2", + "quote", + "smallvec", +] + [[package]] name = "proc-macro2" version = "1.0.95" @@ -1371,6 +1434,17 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "pulldown-cmark" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "679341d22c78c6c649893cbd6c3278dcbe9fc4faa62fea3a9296ae2b50c14625" +dependencies = [ + "bitflags 2.9.1", + "memchr", + "unicase", +] + [[package]] name = "quote" version = "1.0.40" @@ -1513,6 +1587,12 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "smallvec" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" + [[package]] name = "smoltcp" version = "0.12.0" @@ -1648,6 +1728,12 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e87a2ed6b42ec5e28cc3b94c09982969e9227600b2e3dcbc1db927a84c06bd69" +[[package]] +name = "unicase" +version = "2.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" + [[package]] name = "unicode-ident" version = "1.0.18" diff --git a/Cargo.toml b/Cargo.toml index d043a65..bda5443 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -60,6 +60,8 @@ edge-nal-embassy = { version = "0.6.0", features = ["log"] } picoserve = { version = "0.16.0", features = ["embassy", "log"] } embassy-sync = { version = "0.7.0", features = ["log"] } +ds3231 = "0.3.0" + [profile.dev] # Rust debug is too slow. diff --git a/src/bin/init/mod.rs b/src/bin/init/mod.rs index 1f8caf1..8d5ac3f 100644 --- a/src/bin/init/mod.rs +++ b/src/bin/init/mod.rs @@ -1,11 +1,13 @@ use embassy_executor::Spawner; use embassy_net::Stack; -use esp_hal::peripherals::{GPIO1, GPIO2, UART1}; +use esp_hal::peripherals::{self, GPIO0, GPIO1, GPIO3, GPIO4, GPIO5, GPIO6, GPIO7, GPIO22, GPIO23, I2C0, UART1}; +use esp_hal::time::Rate; use esp_hal::{ Async, clock::CpuClock, timer::{systimer::SystemTimer, timg::TimerGroup}, uart::Uart, + i2c::master::I2c }; use esp_println::logger::init_logger; use log::error; @@ -39,23 +41,42 @@ pub async fn hardware_init(spawner: &mut Spawner) -> (Uart<'static, Async>, Stac let interfaces = wifi::setup_wifi(timer1.timer0, rng, peripherals.WIFI, spawner); let stack = network::setup_network(network_seed, interfaces.ap, spawner); - let uart_devie = setup_uart(peripherals.UART1, peripherals.GPIO1, peripherals.GPIO2); + let uart_device = setup_uart(peripherals.UART1, peripherals.GPIO7, peripherals.GPIO6); - (uart_devie, stack) + let i2c_device = setup_i2c(peripherals.I2C0, peripherals.GPIO22, peripherals.GPIO23); + + (uart_device, stack) + } fn setup_uart( uart1: UART1<'static>, - gpio1: GPIO1<'static>, - gpio2: GPIO2<'static>, + uart_rx: GPIO7<'static>, + uart_tx: GPIO6<'static>, ) -> Uart<'static, Async> { let uard_device = Uart::new(uart1, esp_hal::uart::Config::default().with_baudrate(9600)); match uard_device { - Ok(block) => block.with_rx(gpio1).with_tx(gpio2).into_async(), + Ok(block) => block.with_rx(uart_rx).with_tx(uart_tx).into_async(), Err(e) => { error!("Failed to initialize UART: {e}"); panic!(); } } } + +fn setup_i2c( + i2c0: I2C0<'static>, + sda: GPIO22<'static>, + scl: GPIO23<'static>, +) -> I2c<'static, Async> { + let config = esp_hal::i2c::master::Config::default().with_frequency(Rate::from_khz(400)); + let i2c_device = I2c::new(i2c0, config); + match i2c_device { + Ok(block) => block.with_sda(sda).with_scl(scl).into_async(), + Err(e) => { + error!("Failed to initialize I2C: {e}"); + panic!(); + } + } +} diff --git a/src/bin/main.rs b/src/bin/main.rs index 279b719..d2cd773 100644 --- a/src/bin/main.rs +++ b/src/bin/main.rs @@ -73,7 +73,7 @@ async fn rfid_reader_task(mut uart_device: Uart<'static, Async>, chan: TallyPubl debug!("Looking for NFC..."); match uart_device.read_async(&mut uart_buffer).await { Ok(n) => { - let mut hex_str = heapless::String::<128>::new(); + let mut hex_str = heapless::String::<64>::new(); for byte in &uart_buffer[..n] { core::fmt::Write::write_fmt(&mut hex_str, format_args!("{:02X} ", byte)).ok(); }