commit
7c3d307d0a
@ -0,0 +1,21 @@
|
||||
[target.riscv32imc-unknown-none-elf]
|
||||
runner = "espflash flash --monitor"
|
||||
|
||||
|
||||
[env]
|
||||
ESP_LOGLEVEL="INFO"
|
||||
[build]
|
||||
rustflags = [
|
||||
"-C", "link-arg=-Tlinkall.x",
|
||||
|
||||
"-C", "link-arg=-Trom_functions.x",
|
||||
|
||||
# Required to obtain backtraces (e.g. when using the "esp-backtrace" crate.)
|
||||
# NOTE: May negatively impact performance of produced code
|
||||
"-C", "force-frame-pointers",
|
||||
]
|
||||
|
||||
target = "riscv32imc-unknown-none-elf"
|
||||
|
||||
[unstable]
|
||||
build-std = ["core"]
|
||||
@ -0,0 +1,10 @@
|
||||
# Generated by Cargo
|
||||
# will have compiled files and executables
|
||||
debug/
|
||||
target/
|
||||
|
||||
# These are backup files generated by rustfmt
|
||||
**/*.rs.bk
|
||||
|
||||
# MSVC Windows builds of rustc generate these, which store debugging information
|
||||
*.pdb
|
||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,54 @@
|
||||
[package]
|
||||
name = "esp-spot"
|
||||
version = "0.1.0"
|
||||
authors = ["Miroito <alban.vachette@gmail.com>"]
|
||||
edition = "2021"
|
||||
license = "MIT OR Apache-2.0"
|
||||
|
||||
[dependencies]
|
||||
esp-backtrace = { version = "0.11.0", features = [
|
||||
"esp32c3",
|
||||
"exception-handler",
|
||||
"panic-handler",
|
||||
"println",
|
||||
] }
|
||||
esp-hal = { version = "0.16.0", features = [ "esp32c3" ] }
|
||||
esp-println = { version = "0.9.0", features = ["esp32c3", "log"] }
|
||||
log = { version = "0.4.20" }
|
||||
embedded-svc = { version = "0.26.1", default-features = false, features = [] }
|
||||
embedded-io = "0.6.1"
|
||||
esp-wifi = { version = "0.4.0", features = [
|
||||
"esp32c3",
|
||||
"phy-enable-usb",
|
||||
"utils",
|
||||
"wifi-default",
|
||||
"ble",
|
||||
"coex",
|
||||
] }
|
||||
heapless = { version = "0.8.0", default-features = false }
|
||||
smoltcp = { version = "0.10.0", default-features = false, features = [
|
||||
"medium-ethernet",
|
||||
"proto-dhcpv4",
|
||||
"proto-igmp",
|
||||
"proto-ipv4",
|
||||
"socket-dhcpv4",
|
||||
"socket-icmp",
|
||||
"socket-raw",
|
||||
"socket-tcp",
|
||||
"socket-udp",
|
||||
] }
|
||||
esp-hal-smartled = { version = "0.9.0", features = ["esp32c3"] }
|
||||
smart-leds = "0.4.0"
|
||||
[profile.dev]
|
||||
# Rust debug is too slow.
|
||||
# For debug builds always builds with some optimization
|
||||
opt-level = "s"
|
||||
|
||||
[profile.release]
|
||||
codegen-units = 1 # LLVM can perform better optimizations using a single thread
|
||||
debug = 2
|
||||
debug-assertions = false
|
||||
incremental = false
|
||||
lto = 'fat'
|
||||
opt-level = 's'
|
||||
overflow-checks = false
|
||||
@ -0,0 +1,25 @@
|
||||
Copyright [year] [fullname]
|
||||
|
||||
Permission is hereby granted, free of charge, to any
|
||||
person obtaining a copy of this software and associated
|
||||
documentation files (the "Software"), to deal in the
|
||||
Software without restriction, including without
|
||||
limitation the rights to use, copy, modify, merge,
|
||||
publish, distribute, sublicense, and/or sell copies of
|
||||
the Software, and to permit persons to whom the Software
|
||||
is furnished to do so, subject to the following
|
||||
conditions:
|
||||
|
||||
The above copyright notice and this permission notice
|
||||
shall be included in all copies or substantial portions
|
||||
of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
|
||||
ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
|
||||
TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
||||
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
|
||||
SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
|
||||
IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
DEALINGS IN THE SOFTWARE.
|
||||
@ -0,0 +1,5 @@
|
||||
[toolchain]
|
||||
channel = "nightly"
|
||||
components = ["rust-src"]
|
||||
targets = ["riscv32imc-unknown-none-elf"]
|
||||
|
||||
@ -0,0 +1,82 @@
|
||||
#![no_std]
|
||||
#![no_main]
|
||||
|
||||
use esp_backtrace as _;
|
||||
use esp_hal::{
|
||||
clock::ClockControl, delay::Delay, gpio::IO, peripherals::Peripherals, prelude::*, rmt::Rmt,
|
||||
};
|
||||
use esp_println::println;
|
||||
|
||||
use esp_hal_smartled::{smartLedBuffer, SmartLedsAdapter};
|
||||
use smart_leds::{
|
||||
brightness, gamma,
|
||||
hsv::{hsv2rgb, Hsv},
|
||||
SmartLedsWrite,
|
||||
};
|
||||
|
||||
use esp_wifi::{initialize, EspWifiInitFor};
|
||||
|
||||
use esp_hal::{systimer::SystemTimer, Rng};
|
||||
#[entry]
|
||||
fn main() -> ! {
|
||||
let peripherals = Peripherals::take();
|
||||
let system = peripherals.SYSTEM.split();
|
||||
|
||||
let clocks = ClockControl::max(system.clock_control).freeze();
|
||||
let mut delay = Delay::new(&clocks);
|
||||
|
||||
let io = IO::new(peripherals.GPIO, peripherals.IO_MUX);
|
||||
let led_pin = io.pins.gpio8;
|
||||
|
||||
// We use one of the RMT channels to instantiate a `SmartLedsAdapter` which can
|
||||
// be used directly with all `smart_led` implementations
|
||||
let rmt_buffer = smartLedBuffer!(1);
|
||||
|
||||
let rmt = Rmt::new(peripherals.RMT, 80u32.MHz(), &clocks).unwrap();
|
||||
let mut led = SmartLedsAdapter::new(rmt.channel0, led_pin, rmt_buffer, &clocks);
|
||||
|
||||
// Initialize the Delay peripheral, and use it to toggle the LED state in a
|
||||
// loop.
|
||||
let mut delay = Delay::new(&clocks);
|
||||
|
||||
let mut color = Hsv {
|
||||
hue: 0,
|
||||
sat: 255,
|
||||
val: 255,
|
||||
};
|
||||
let mut data;
|
||||
|
||||
// setup logger
|
||||
// To change the log_level change the env section in .cargo/config.toml
|
||||
// or remove it and set ESP_LOGLEVEL manually before running cargo run
|
||||
// this requires a clean rebuild because of https://github.com/rust-lang/cargo/issues/10358
|
||||
esp_println::logger::init_logger_from_env();
|
||||
log::info!("Logger is setup");
|
||||
println!("Hello world!");
|
||||
let timer = SystemTimer::new(peripherals.SYSTIMER).alarm0;
|
||||
let _init = initialize(
|
||||
EspWifiInitFor::WifiBle,
|
||||
timer,
|
||||
Rng::new(peripherals.RNG),
|
||||
system.radio_clock_control,
|
||||
&clocks,
|
||||
)
|
||||
.unwrap();
|
||||
loop {
|
||||
println!("Loop...");
|
||||
delay.delay_ms(500u32);
|
||||
|
||||
for hue in 0..=255 {
|
||||
color.hue = hue;
|
||||
// Convert from the HSV color space (where we can easily transition from one
|
||||
// color to the other) to the RGB color space that we can then send to the LED
|
||||
data = [hsv2rgb(color)];
|
||||
// When sending to the LED, we do a gamma correction first (see smart_leds
|
||||
// documentation for details) and then limit the brightness to 10 out of 255 so
|
||||
// that the output it's not too bright.
|
||||
led.write(brightness(gamma(data.iter().cloned()), 10))
|
||||
.unwrap();
|
||||
delay.delay_ms(20u32);
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in new issue