rust init
This commit is contained in:
parent
ec67450a0a
commit
ae8ff86c1a
17
plant-ctrl2/.cargo/config.toml
Normal file
17
plant-ctrl2/.cargo/config.toml
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
[build]
|
||||||
|
target = "xtensa-esp32-espidf"
|
||||||
|
|
||||||
|
[target.xtensa-esp32-espidf]
|
||||||
|
linker = "ldproxy"
|
||||||
|
# runner = "espflash --monitor" # Select this runner for espflash v1.x.x
|
||||||
|
runner = "espflash flash --monitor" # Select this runner for espflash v2.x.x
|
||||||
|
rustflags = [ "--cfg", "espidf_time64"] # Extending time_t for ESP IDF 5: https://github.com/esp-rs/rust/issues/110
|
||||||
|
|
||||||
|
[unstable]
|
||||||
|
build-std = ["std", "panic_abort"]
|
||||||
|
|
||||||
|
[env]
|
||||||
|
MCU="esp32"
|
||||||
|
# Note: this variable is not used by the pio builder (`cargo build --features pio`)
|
||||||
|
ESP_IDF_VERSION = "v5.1.1"
|
||||||
|
|
4
plant-ctrl2/.gitignore
vendored
Normal file
4
plant-ctrl2/.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/.vscode
|
||||||
|
/.embuild
|
||||||
|
/target
|
||||||
|
/Cargo.lock
|
8
plant-ctrl2/.idea/.gitignore
vendored
Normal file
8
plant-ctrl2/.idea/.gitignore
vendored
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
|
# Editor-based HTTP Client requests
|
||||||
|
/httpRequests/
|
||||||
|
# Datasource local storage ignored files
|
||||||
|
/dataSources/
|
||||||
|
/dataSources.local.xml
|
6
plant-ctrl2/.idea/inspectionProfiles/Project_Default.xml
Normal file
6
plant-ctrl2/.idea/inspectionProfiles/Project_Default.xml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<component name="InspectionProjectProfileManager">
|
||||||
|
<profile version="1.0">
|
||||||
|
<option name="myName" value="Project Default" />
|
||||||
|
<inspection_tool class="Eslint" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||||
|
</profile>
|
||||||
|
</component>
|
8
plant-ctrl2/.idea/modules.xml
Normal file
8
plant-ctrl2/.idea/modules.xml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/.idea/plant-ctrl2.iml" filepath="$PROJECT_DIR$/.idea/plant-ctrl2.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
11
plant-ctrl2/.idea/plant-ctrl2.iml
Normal file
11
plant-ctrl2/.idea/plant-ctrl2.iml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="EMPTY_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager">
|
||||||
|
<content url="file://$MODULE_DIR$">
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/target" />
|
||||||
|
</content>
|
||||||
|
<orderEntry type="inheritedJdk" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
</module>
|
6
plant-ctrl2/.idea/vcs.xml
Normal file
6
plant-ctrl2/.idea/vcs.xml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
58
plant-ctrl2/Cargo.toml
Normal file
58
plant-ctrl2/Cargo.toml
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
[package]
|
||||||
|
name = "plant-ctrl2"
|
||||||
|
version = "0.1.0"
|
||||||
|
authors = ["Empire Phoenix"]
|
||||||
|
edition = "2021"
|
||||||
|
resolver = "2"
|
||||||
|
rust-version = "1.71"
|
||||||
|
|
||||||
|
[profile.release]
|
||||||
|
opt-level = "s"
|
||||||
|
strip = true
|
||||||
|
lto = "fat"
|
||||||
|
codegen-units = 1
|
||||||
|
|
||||||
|
[profile.dev]
|
||||||
|
debug = true # Symbols are nice and they don't increase the size on Flash
|
||||||
|
opt-level = "s"
|
||||||
|
lto = "fat"
|
||||||
|
codegen-units = 1
|
||||||
|
|
||||||
|
[features]
|
||||||
|
default = ["std", "embassy", "esp-idf-svc/native"]
|
||||||
|
|
||||||
|
pio = ["esp-idf-svc/pio"]
|
||||||
|
std = ["alloc", "esp-idf-svc/binstart", "esp-idf-svc/std"]
|
||||||
|
alloc = ["esp-idf-svc/alloc"]
|
||||||
|
nightly = ["esp-idf-svc/nightly"]
|
||||||
|
experimental = ["esp-idf-svc/experimental"]
|
||||||
|
embassy = ["esp-idf-svc/embassy-sync", "esp-idf-svc/critical-section", "esp-idf-svc/embassy-time-driver"]
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
log = { version = "0.4", default-features = false }
|
||||||
|
esp-idf-svc = { version = "0.47.3", default-features = false }
|
||||||
|
serde = { version = "1.0.192", features = ["derive"] }
|
||||||
|
minimq = "0.8.0"
|
||||||
|
average = { version = "0.14.1" , features = ["std"] }
|
||||||
|
esp32 = "0.27.0"
|
||||||
|
bit_field = "0.10.2"
|
||||||
|
ds18b20 = "0.1.1"
|
||||||
|
embedded-svc = { version = "0.26.4", features = ["experimental"] }
|
||||||
|
esp-idf-hal = "0.42.5"
|
||||||
|
esp-idf-sys = { version = "0.33.7", features = ["binstart", "native"] }
|
||||||
|
esp-ota = "0.2.0"
|
||||||
|
esp_idf_build = "0.1.3"
|
||||||
|
datetime = "0.5.2"
|
||||||
|
build-time = "0.1.2"
|
||||||
|
chrono = { version = "0.4.23", default-features = false , features = ["iana-time-zone"] }
|
||||||
|
chrono-tz = "0.8.0"
|
||||||
|
paste = "1.0.14"
|
||||||
|
embedded-hal = "0.2.7"
|
||||||
|
dummy-pin = "0.1.1"
|
||||||
|
shift-register-driver = "0.1.1"
|
||||||
|
#?bq34z100 required
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[build-dependencies]
|
||||||
|
embuild = "0.31.3"
|
3
plant-ctrl2/build.rs
Normal file
3
plant-ctrl2/build.rs
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
fn main() {
|
||||||
|
embuild::espidf::sysenv::output();
|
||||||
|
}
|
2
plant-ctrl2/rust-toolchain.toml
Normal file
2
plant-ctrl2/rust-toolchain.toml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
[toolchain]
|
||||||
|
channel = "esp"
|
10
plant-ctrl2/sdkconfig.defaults
Normal file
10
plant-ctrl2/sdkconfig.defaults
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
# Rust often needs a bit of an extra main task stack size compared to C (the default is 3K)
|
||||||
|
CONFIG_ESP_MAIN_TASK_STACK_SIZE=8000
|
||||||
|
|
||||||
|
# Use this to set FreeRTOS kernel tick frequency to 1000 Hz (100 Hz by default).
|
||||||
|
# This allows to use 1 ms granuality for thread sleeps (10 ms by default).
|
||||||
|
#CONFIG_FREERTOS_HZ=1000
|
||||||
|
|
||||||
|
# Workaround for https://github.com/espressif/esp-idf/issues/7631
|
||||||
|
#CONFIG_MBEDTLS_CERTIFICATE_BUNDLE=n
|
||||||
|
#CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_FULL=n
|
12
plant-ctrl2/setup.txt
Normal file
12
plant-ctrl2/setup.txt
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
cargo install cargo-generate
|
||||||
|
cargo install ldproxy
|
||||||
|
cargo install espup
|
||||||
|
cargo install espflash
|
||||||
|
cargo install cargo-espflash
|
||||||
|
|
||||||
|
cargo generate esp-rs/esp-idf-template cargo
|
||||||
|
export PATH="$PATH:$HOME/.cargo/bin"
|
||||||
|
|
||||||
|
espup install
|
||||||
|
rustup toolchain link esp ~/.rustup/toolchains/esp/
|
||||||
|
cargo install ldproxy
|
79
plant-ctrl2/src/main.rs
Normal file
79
plant-ctrl2/src/main.rs
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
use embedded_hal::digital::v1_compat::OldOutputPin;
|
||||||
|
use shift_register_driver::sipo::{ShiftRegister24, ShiftRegisterPin};
|
||||||
|
use esp_idf_hal::gpio::{PinDriver};
|
||||||
|
use esp_idf_hal::prelude::Peripherals;
|
||||||
|
use dummy_pin::DummyPin;
|
||||||
|
use embedded_hal::digital::v2::OutputPin;
|
||||||
|
|
||||||
|
#[macro_use]
|
||||||
|
extern crate shift_register_driver;
|
||||||
|
|
||||||
|
trait PlantCtrlBoardInteraction{
|
||||||
|
fn measure_moisture() -> i16;
|
||||||
|
fn default() -> Self;
|
||||||
|
}
|
||||||
|
|
||||||
|
trait Plant{
|
||||||
|
fn setPump(pump:bool);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
struct PlantHal<'d>{
|
||||||
|
pump:ShiftRegisterPin<'d>
|
||||||
|
}
|
||||||
|
|
||||||
|
struct PlantCtrlBoard{
|
||||||
|
dummy:i32
|
||||||
|
}
|
||||||
|
|
||||||
|
impl PlantCtrlBoardInteraction for PlantCtrlBoard {
|
||||||
|
fn measure_moisture() -> i16 {
|
||||||
|
//pcnr here
|
||||||
|
return 1_i16;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fn default() -> Self {
|
||||||
|
let peripherals = Peripherals::take().unwrap();
|
||||||
|
|
||||||
|
let clock = OldOutputPin::from(PinDriver::output(peripherals.pins.gpio21).unwrap());
|
||||||
|
let latch = OldOutputPin::from(PinDriver::output(peripherals.pins.gpio22).unwrap());
|
||||||
|
let data = OldOutputPin::from(PinDriver::output(peripherals.pins.gpio19).unwrap());
|
||||||
|
|
||||||
|
|
||||||
|
let shift_register = ShiftRegister24::new(clock, latch, data);
|
||||||
|
let registerOutput = shift_register.decompose();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Self { dummy: 12 }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const PLANT_COUNT:usize = 8;
|
||||||
|
#[link_section = ".rtc.data"]
|
||||||
|
static mut LAST_WATERING_TIMESTAMP: [u64; PLANT_COUNT] = [0; PLANT_COUNT];
|
||||||
|
#[link_section = ".rtc.data"]
|
||||||
|
static mut CONSECUTIVE_WATERING_PLANT: [u64; PLANT_COUNT] = [0; PLANT_COUNT];
|
||||||
|
#[link_section = ".rtc.data"]
|
||||||
|
static mut LOW_VOLTAGE_DETECTED:bool = false;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
|
||||||
|
// It is necessary to call this function once. Otherwise some patches to the runtime
|
||||||
|
// implemented by esp-idf-sys might not link properly. See https://github.com/esp-rs/esp-idf-template/issues/71
|
||||||
|
esp_idf_svc::sys::link_patches();
|
||||||
|
|
||||||
|
// Bind the log crate to the ESP Logging facilities
|
||||||
|
esp_idf_svc::log::EspLogger::initialize_default();
|
||||||
|
|
||||||
|
log::info!("Hello, world!");
|
||||||
|
|
||||||
|
|
||||||
|
let board = PlantCtrlBoard::default();
|
||||||
|
|
||||||
|
}
|
BIN
sheets/2105281436_Gainsil-GS331-TR_C2835231.pdf
Normal file
BIN
sheets/2105281436_Gainsil-GS331-TR_C2835231.pdf
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user