feat: initial commit

This commit is contained in:
Kat Inskip 2025-10-17 05:55:27 -07:00
commit 7888da2541
Signed by: kat
GPG key ID: 465E64DECEA8CF0F
10 changed files with 1515 additions and 0 deletions

15
.cargo/config.toml Normal file
View file

@ -0,0 +1,15 @@
[target.riscv32imc-unknown-none-elf]
runner = "espflash flash --monitor"
[build]
rustflags = [
"-C", "link-arg=-Tlinkall.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"]

1
.gitignore vendored Normal file
View file

@ -0,0 +1 @@
target/

1203
Cargo.lock generated Normal file

File diff suppressed because it is too large Load diff

19
Cargo.toml Normal file
View file

@ -0,0 +1,19 @@
[package]
name = "blinky"
version = "0.1.0"
authors = ["Sergio Gasquez <sergio.gasquez@gmail.com>"]
edition = "2021"
license = "MIT OR Apache-2.0"
[dependencies]
esp-backtrace = { version = "0.18.0", features = [
"esp32c3",
"panic-handler",
"println",
]}
esp-bootloader-esp-idf = { version = "0.3.0", features = ["esp32c3"]}
esp-hal = { version = "1.0.0-rc.1",features = [
"esp32c3",
"unstable",
] }
esp-println = { version = "0.16.0", features = ["esp32c3", "log-04"] }

33
diagram.json Normal file
View file

@ -0,0 +1,33 @@
{
"version": 1,
"author": "Sergio Gasquez Arcos",
"editor": "wokwi",
"parts": [
{
"type": "board-esp32-c3-rust-1",
"id": "esp",
"top": -126.57,
"left": 46.35,
"attrs": {
"builder": "rust-nostd-esp"
}
}
],
"connections": [
[
"esp:21",
"$serialMonitor:RX",
"",
[]
],
[
"esp:20",
"$serialMonitor:TX",
"",
[]
]
],
"serialMonitor": {
"display": "auto"
}
}

130
flake.lock generated Normal file
View file

@ -0,0 +1,130 @@
{
"nodes": {
"esp-rs-nix": {
"inputs": {
"flake-parts": "flake-parts",
"nixpkgs": "nixpkgs"
},
"locked": {
"lastModified": 1760265400,
"narHash": "sha256-6Vr5tspB7c7U/pxWNPikc+XvFnq0PnD1pPtQMkhaXzA=",
"owner": "leighleighleigh",
"repo": "esp-rs-nix",
"rev": "d82a564a65cf91f8018bfc18a55d5cc23be4f86c",
"type": "github"
},
"original": {
"owner": "leighleighleigh",
"repo": "esp-rs-nix",
"type": "github"
}
},
"flake-parts": {
"inputs": {
"nixpkgs-lib": "nixpkgs-lib"
},
"locked": {
"lastModified": 1759362264,
"narHash": "sha256-wfG0S7pltlYyZTM+qqlhJ7GMw2fTF4mLKCIVhLii/4M=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "758cf7296bee11f1706a574c77d072b8a7baa881",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"flake-utils": {
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1760038930,
"narHash": "sha256-Oncbh0UmHjSlxO7ErQDM3KM0A5/Znfofj2BSzlHLeVw=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "0b4defa2584313f3b781240b29d61f6f9f7e0df3",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-lib": {
"locked": {
"lastModified": 1754788789,
"narHash": "sha256-x2rJ+Ovzq0sCMpgfgGaaqgBSwY+LST+WbZ6TytnT9Rk=",
"owner": "nix-community",
"repo": "nixpkgs.lib",
"rev": "a73b9c743612e4244d865a2fdee11865283c04e6",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nixpkgs.lib",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1760596604,
"narHash": "sha256-J/i5K6AAz/y5dBePHQOuzC7MbhyTOKsd/GLezSbEFiM=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "3cbe716e2346710d6e1f7c559363d14e11c32a43",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"esp-rs-nix": "esp-rs-nix",
"flake-utils": "flake-utils",
"nixpkgs": "nixpkgs_2"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
}
},
"root": "root",
"version": 7
}

68
flake.nix Normal file
View file

@ -0,0 +1,68 @@
{
inputs = {
esp-rs-nix = {
url = "github:leighleighleigh/esp-rs-nix";
};
flake-utils.url = "github:numtide/flake-utils";
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
};
outputs = { nixpkgs, flake-utils, esp-rs-nix, ... }@inputs: let
mkPkgs = system: (import nixpkgs) {
inherit system;
};
eachSystemOutputs = flake-utils.lib.eachDefaultSystem (system: let
pkgs = mkPkgs system;
inherit (esp-rs-nix.packages.${system}) esp-rs;
esp-shell = pkgs.mkShell rec {
name = "esp-shell";
buildInputs = [
esp-rs
pkgs.rustup
pkgs.espflash
#pkgs.rust-analyzer
pkgs.pkg-config
pkgs.stdenv.cc
#pkgs.bacon
#pkgs.systemdMinimal
#pkgs.lunarvim
#pkgs.inotify-tools
#pkgs.picocom
#pkgs.vscode-fhs
pkgs.libusb1
pkgs.python3
# Workspace command runners
pkgs.just
pkgs.mprocs
# This is for parameterising the justfile
pkgs.toml-cli
pkgs.moreutils
pkgs.gdb
];
LD_LIBRARY_PATH = "${pkgs.lib.makeLibraryPath buildInputs}";
shellHook = ''
# custom bashrc stuff
export PS1_PREFIX="(esp-rs)"
. ~/.bashrc
export LD_LIBRARY_PATH="''${LD_LIBRARY_PATH}:${LD_LIBRARY_PATH}"
# this is important - it tells rustup where to find the esp toolchain,
# without needing to copy it into your local ~/.rustup/ folder.
export RUSTUP_TOOLCHAIN=${esp-rs}
# Load shell completions for espflash
if (which espflash >/dev/null 2>&1); then
. <(espflash completions $(basename $SHELL))
fi
'';
};
in {
devShells = {
inherit esp-shell;
default = esp-shell;
};
});
in eachSystemOutputs;
}

4
rust-toolchain.toml Normal file
View file

@ -0,0 +1,4 @@
[toolchain]
channel = "stable"
components = ["rust-src"]
targets = ["riscv32imc-unknown-none-elf"]

33
src/main.rs Normal file
View file

@ -0,0 +1,33 @@
#![no_std]
#![no_main]
use esp_backtrace as _;
use esp_hal::{
delay::Delay,
gpio::{Level, Output, OutputConfig},
main,
};
use esp_println::println;
esp_bootloader_esp_idf::esp_app_desc!();
#[main]
fn main() -> ! {
let peripherals = esp_hal::init(esp_hal::Config::default());
println!("Hello world!");
// Set GPIO7 as an output, and set its state high initially.
let mut led = Output::new(peripherals.GPIO8, Level::Low, OutputConfig::default());
led.set_high();
// Initialize the Delay peripheral, and use it to toggle the LED state in a
// loop.
let delay = Delay::new();
loop {
led.toggle();
delay.delay_millis(500);
}
}

9
wokwi.toml Normal file
View file

@ -0,0 +1,9 @@
[wokwi]
version = 1
# Exercise
# firmware = "target/riscv32imc-unknown-none-elf/release/blinky"
# elf = "target/riscv32imc-unknown-none-elf/release/blinky"
# Solution
firmware = 'target/riscv32imc-unknown-none-elf/release/examples/blinky'
elf = 'target/riscv32imc-unknown-none-elf/release/examples/blinky'