esp motor control
This commit is contained in:
parent
78a43fd82f
commit
9e596814ee
4 changed files with 58 additions and 4 deletions
8
inside/Cargo.lock
generated
8
inside/Cargo.lock
generated
|
@ -526,6 +526,12 @@ version = "0.5.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
|
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "hex"
|
||||||
|
version = "0.4.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ident_case"
|
name = "ident_case"
|
||||||
version = "1.0.1"
|
version = "1.0.1"
|
||||||
|
@ -547,6 +553,7 @@ name = "inside"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"blocking-network-stack",
|
"blocking-network-stack",
|
||||||
|
"embedded-hal 1.0.0",
|
||||||
"embedded-io",
|
"embedded-io",
|
||||||
"esp-alloc",
|
"esp-alloc",
|
||||||
"esp-backtrace",
|
"esp-backtrace",
|
||||||
|
@ -554,6 +561,7 @@ dependencies = [
|
||||||
"esp-println",
|
"esp-println",
|
||||||
"esp-wifi",
|
"esp-wifi",
|
||||||
"heapless",
|
"heapless",
|
||||||
|
"hex",
|
||||||
"log",
|
"log",
|
||||||
"smoltcp",
|
"smoltcp",
|
||||||
]
|
]
|
||||||
|
|
|
@ -16,6 +16,7 @@ esp-println = { version = "0.12.0", features = ["esp32", "log"] }
|
||||||
log = { version = "0.4.22" }
|
log = { version = "0.4.22" }
|
||||||
esp-alloc = { version = "0.5.0" }
|
esp-alloc = { version = "0.5.0" }
|
||||||
embedded-io = "0.6.1"
|
embedded-io = "0.6.1"
|
||||||
|
embedded-hal = "1"
|
||||||
esp-wifi = { version = "0.10.1", features = [
|
esp-wifi = { version = "0.10.1", features = [
|
||||||
"esp32",
|
"esp32",
|
||||||
"phy-enable-usb",
|
"phy-enable-usb",
|
||||||
|
@ -34,6 +35,7 @@ smoltcp = { version = "0.11.0", default-features = false, features = [
|
||||||
"socket-tcp",
|
"socket-tcp",
|
||||||
"socket-udp",
|
"socket-udp",
|
||||||
] }
|
] }
|
||||||
|
hex = { version = "0.4.3", default-features=false}
|
||||||
|
|
||||||
[profile.dev]
|
[profile.dev]
|
||||||
# Rust debug is too slow.
|
# Rust debug is too slow.
|
||||||
|
|
2
inside/rust-toolchain.toml
Normal file
2
inside/rust-toolchain.toml
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
[toolchain]
|
||||||
|
channel = "esp"
|
|
@ -1,13 +1,16 @@
|
||||||
#![no_std]
|
#![no_std]
|
||||||
#![no_main]
|
#![no_main]
|
||||||
|
#![feature(const_trait_impl)]
|
||||||
|
|
||||||
use embedded_io::{Read, ReadReady, Write};
|
use embedded_io::{Read, ReadReady, Write};
|
||||||
|
use embedded_hal::pwm::SetDutyCycle;
|
||||||
use esp_backtrace as _;
|
use esp_backtrace as _;
|
||||||
use esp_hal::{delay::Delay, prelude::*, rng::Rng, time::{self, Duration}};
|
use esp_hal::{gpio::Io, ledc::{channel, timer, LSGlobalClkSource, Ledc, LowSpeed}, prelude::*, rng::Rng, time::{self, Duration}};
|
||||||
use esp_println::{print, println};
|
use esp_println::{print, println};
|
||||||
use esp_wifi::wifi::{utils::create_network_interface, AccessPointInfo, ClientConfiguration, Configuration, WifiError, WifiStaDevice};
|
use esp_wifi::wifi::{utils::create_network_interface, AccessPointInfo, ClientConfiguration, Configuration, WifiError, WifiStaDevice};
|
||||||
use smoltcp::iface::{SocketSet, SocketStorage};
|
use smoltcp::iface::SocketStorage;
|
||||||
use blocking_network_stack::{ipv4, Stack};
|
use blocking_network_stack::{ipv4, Stack};
|
||||||
|
use inside::handle;
|
||||||
|
|
||||||
extern crate alloc;
|
extern crate alloc;
|
||||||
|
|
||||||
|
@ -18,8 +21,34 @@ fn main() -> ! {
|
||||||
let mut config = esp_hal::Config::default();
|
let mut config = esp_hal::Config::default();
|
||||||
config.cpu_clock = CpuClock::max();
|
config.cpu_clock = CpuClock::max();
|
||||||
let peripherals = esp_hal::init(config);
|
let peripherals = esp_hal::init(config);
|
||||||
|
let io = Io::new(peripherals.GPIO, peripherals.IO_MUX);
|
||||||
|
let pin = io.pins.gpio15;
|
||||||
|
|
||||||
|
let mut ledc = Ledc::new(peripherals.LEDC);
|
||||||
|
ledc.set_global_slow_clock(LSGlobalClkSource::APBClk);
|
||||||
|
let mut lstimer0 = ledc.get_timer::<LowSpeed>(timer::Number::Timer0);
|
||||||
|
lstimer0
|
||||||
|
.configure(timer::config::Config {
|
||||||
|
duty: timer::config::Duty::Duty14Bit,
|
||||||
|
clock_source: timer::LSClockSource::APBClk,
|
||||||
|
frequency: 50.Hz(),
|
||||||
|
})
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
|
||||||
|
let mut motor = ledc.get_channel(channel::Number::Channel0, pin);
|
||||||
|
|
||||||
|
motor
|
||||||
|
.configure(channel::config::Config {
|
||||||
|
timer: &lstimer0,
|
||||||
|
duty_pct: 0,
|
||||||
|
pin_config: channel::config::PinConfig::PushPull,
|
||||||
|
})
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
println!("max duty {}", motor.max_duty_cycle());
|
||||||
|
motor.set_duty_cycle(1229).unwrap();
|
||||||
|
|
||||||
let delay = Delay::new();
|
|
||||||
esp_alloc::heap_allocator!(72 * 1024);
|
esp_alloc::heap_allocator!(72 * 1024);
|
||||||
|
|
||||||
esp_println::logger::init_logger_from_env();
|
esp_println::logger::init_logger_from_env();
|
||||||
|
@ -36,7 +65,7 @@ fn main() -> ! {
|
||||||
|
|
||||||
let mut wifi = peripherals.WIFI;
|
let mut wifi = peripherals.WIFI;
|
||||||
let mut socket_set_entries: [SocketStorage; 3] = Default::default();
|
let mut socket_set_entries: [SocketStorage; 3] = Default::default();
|
||||||
let (iface, device, mut controller, mut socket_set) =
|
let (iface, device, mut controller, socket_set) =
|
||||||
create_network_interface(&init, &mut wifi, WifiStaDevice, &mut socket_set_entries).unwrap();
|
create_network_interface(&init, &mut wifi, WifiStaDevice, &mut socket_set_entries).unwrap();
|
||||||
|
|
||||||
let now = || time::now().duration_since_epoch().to_millis();
|
let now = || time::now().duration_since_epoch().to_millis();
|
||||||
|
@ -122,6 +151,7 @@ fn main() -> ! {
|
||||||
if to_print.contains("\r\n") {
|
if to_print.contains("\r\n") {
|
||||||
print!("{}", to_print);
|
print!("{}", to_print);
|
||||||
println!();
|
println!();
|
||||||
|
pos += len;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -137,6 +167,14 @@ fn main() -> ! {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let mut command = buffer[..pos].trim_ascii().split(|c| *c == b' ');
|
||||||
|
let buf: [u8;2] = hex::FromHex::from_hex(command.next().unwrap()).unwrap();
|
||||||
|
let card: u16 = u16::from_be_bytes(buf);
|
||||||
|
println!("{card}");
|
||||||
|
motor.set_duty_cycle(card).unwrap();
|
||||||
|
|
||||||
|
|
||||||
|
handle(&buffer[..pos], &mut motor);
|
||||||
|
|
||||||
if !time_out {
|
if !time_out {
|
||||||
let _ = socket.write_all(
|
let _ = socket.write_all(
|
||||||
|
@ -145,8 +183,12 @@ fn main() -> ! {
|
||||||
|
|
||||||
socket.flush().unwrap();
|
socket.flush().unwrap();
|
||||||
}
|
}
|
||||||
|
while time::now() < deadline && socket.is_connected() {}
|
||||||
socket.close();
|
socket.close();
|
||||||
log::info!("ending transaction");
|
log::info!("ending transaction");
|
||||||
|
// open: 0x0533
|
||||||
|
// close: 0x04c8
|
||||||
|
motor.set_duty_cycle(1229).unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
//let deadline = time::now() + Duration::secs(5);
|
//let deadline = time::now() + Duration::secs(5);
|
||||||
|
|
Loading…
Reference in a new issue