Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Migration to Edge-Http #7

Merged
merged 10 commits into from
Feb 3, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 2 additions & 6 deletions .cargo/config.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,12 @@ target = "riscv32imc-esp-espidf"

[target.riscv32imc-esp-espidf]
linker = "ldproxy"
runner = "espflash flash --monitor" # Select this runner for espflash v3.x.x
runner = "espflash flash --monitor"
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="esp32c3"
# Note: this variable is not used by the pio builder (`cargo build --features pio`)
ESP_IDF_VERSION = "v5.2.2"

# Workaround for https://github.com/esp-rs/esp-idf-template/issues/174
CRATE_CC_NO_DEFAULTS = "1"
ESP_IDF_VERSION = "v5.3.2"
50 changes: 15 additions & 35 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ version = "0.1.0"
authors = ["Mawoka <[email protected]>"]
edition = "2021"
resolver = "2"
rust-version = "1.77"
rust-version = "1.84"

[[bin]]
name = "td-free-rs"
Expand All @@ -21,50 +21,30 @@ strip = true
debug = true # Symbols are nice and they don't increase the size on Flash
opt-level = "z"

[features]
ota = ["dep:esp-ota"]
default = ["std", "esp-idf-svc/native"]
#critical-section-impl = ["critical-section/restore-state-none"]

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.49", default-features = false, features= ["experimental"] }
log = "0.4"
esp-idf-svc = { version = "0.51", features= ["experimental", "embassy-time-driver", "critical-section"] }
embedded-hal = "1"
heapless = "0.8"


edge-http = "0.5.1"
edge-captive = "0.5"
edge-nal = "0.5"
edge-ws = "0.4"
edge-nal-std = { version = "0.5", features = ["async-io-mini"] }
embedded-io-async = "0.6"
anyhow = "1"
url = "2.5"
esp-ota = { git= "https://github.com/KevinBeckers/esp-ota.git", rev = "d6b572f1df6b68135666d6802f8c9b273ef03f17", optional = true}


veml7700 = "0.2.0"
ws2812-esp32-rmt-driver = { version = "0.9", features = ["smart-leds-trait"] }
smart-leds = "0.4"
#smol = { version = "2" }
#embedded-svc = "0.28"

#edge-captive = { version = "0.3", features = ["std", "io"] }
#edge-nal-std = "0.3"
#async-io-mini = "0.2"

embassy-time = { version = "0.4", features = ["log", "generic-queue-8"] }
embassy-futures = "0.1"
async-std = {version = "1.13"}
smart-leds = "*"
ws2812-esp32-rmt-driver = { version = "*", features = ["smart-leds-trait"] }

[build-dependencies]
embuild = "0.32.0"
embuild = {version = "0.33", features = ["espidf"]}
vergen-gix = { version = "1", features = ["build", "rustc"] }
anyhow = "1"
cc = "=1.1.20"

# [package.metadata.espflash]
# partition_table = "partitions.csv"
15 changes: 2 additions & 13 deletions sdkconfig.defaults
Original file line number Diff line number Diff line change
@@ -1,13 +1,2 @@
# 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=15000
CONFIG_PTHREAD_TASK_STACK_SIZE_DEFAULT=10000
CONFIG_HTTPD_WS_SUPPORT=y
CONFIG_LWIP_LOCAL_HOSTNAME=tdfree

# Use this to set FreeRTOS kernel tick frequency to 1000 Hz (100 Hz by default).
# This allows to use 1 ms granularity 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
CONFIG_ESP_MAIN_TASK_STACK_SIZE=50000
CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE=4096
155 changes: 79 additions & 76 deletions src/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -35,22 +35,6 @@
margin-bottom: 20px;
}

.message {
background-color: #e0f7fa;
border-left: 4px solid #00796b;
padding: 10px;
margin: 10px 0;
border-radius: 5px;
color: #00796b;
word-wrap: break-word;
}

.timestamp {
font-size: 0.8em;
color: #666;
text-align: right;
}

.status {
text-align: center;
padding: 10px;
Expand All @@ -75,6 +59,17 @@
margin: auto;
font-size: 3rem;
}

.fallback-btn {
display: none;
margin: 10px auto;
padding: 10px 20px;
background-color: #00796b;
color: white;
border: none;
border-radius: 5px;
cursor: pointer;
}
</style>
</head>

Expand All @@ -83,6 +78,7 @@
<h1>Td-Free</h1>
<div id="status" class="status">Connecting...</div>
<p id="content"></p>
<button id="fallback-btn" class="fallback-btn" onclick="enableFallback()">Enable Fallback Mode</button>
<div style="display: flex; flex-direction: column; margin-top: auto;">
<a href="/wifi" class="wifi-link" onclick="wifi_cfg">Wifi Config</a>
<p class="wifi-link" style="color: gray; font-size: smaller;">Version {{VERSION}}</p>
Expand All @@ -91,75 +87,82 @@ <h1>Td-Free</h1>
</div>

<script>
// Replace this URL with your WebSocket server URL
const socket = new WebSocket(`ws://${window.location.hostname}/ws`);

const messagesContainer = document.getElementById("messages");
const statusContainer = document.getElementById("status");

let intervalId

const wifi_cfg = (e) => {
e.preventDefault()
socket.close()
window.location.assign("/wifi")
}
const update_fw = (e) => {
e.preventDefault()
socket.close()
window.location.assign("/update")
let socket;
let intervalId;
let fallbackInterval;
let fallbackEnabled = false;

function connectWebSocket() {
socket = new WebSocket(`ws://${window.location.hostname}/ws`);
const statusContainer = document.getElementById("status");

socket.addEventListener("open", () => {
statusContainer.textContent = "Connected to WebSocket server";
statusContainer.classList.add("connected");
document.getElementById("fallback-btn").style.display = "none";
if (intervalId) clearInterval(intervalId);
intervalId = setInterval(() => {
if (socket.readyState === WebSocket.OPEN) {
socket.send("p");
}
}, 1000);
});

socket.addEventListener("message", (event) => {
if (event.data === 'p') return;
updateContent(event.data);
});

socket.addEventListener("close", () => {
statusContainer.textContent = "Disconnected from WebSocket server";
statusContainer.classList.remove("connected");
clearInterval(intervalId);
document.getElementById("fallback-btn").style.display = "block";
});

socket.addEventListener("error", () => {
statusContainer.textContent = "Error connecting to WebSocket server";
statusContainer.classList.remove("connected");
clearInterval(intervalId);
document.getElementById("fallback-btn").style.display = "block";
});

window.addEventListener("beforeunload", () => {
socket.close();
});
}

// When the connection is open
socket.addEventListener("open", () => {
statusContainer.textContent = "Connected to WebSocket server";
statusContainer.classList.add("connected");

if (intervalId) {
clearInterval(intervalId); // Clear any existing interval
}
intervalId = setInterval(() => {
if (socket.readyState === WebSocket.OPEN) {
socket.send("p");
console.log("Sent: p");
}
}, 1000);

function enableFallback() {
fallbackEnabled = true;
document.getElementById("status").textContent = "Fallback mode enabled";
document.getElementById("fallback-btn").style.display = "none";
fallbackInterval = setInterval(fetchFallbackData, 1000);
}

});
function fetchFallbackData() {
fetch("/fallback")
.then(response => response.text())
.then(data => updateContent(data))
.catch(() => {
document.getElementById("status").textContent = "Error fetching fallback data";
});
}

// When a message is received
socket.addEventListener("message", (event) => {
const el = document.getElementById("content")
if (event.data === "no_filament") {
el.innerText = "No filament inserted! Insert some"
function updateContent(data) {
const el = document.getElementById("content");
if (data === "no_filament") {
el.innerText = "No filament inserted! Insert some";
} else {
const num = parseFloat(event.data)
const num = parseFloat(data);
if (isNaN(num)) {
el.innerText = "An error occured!"
return
el.innerText = "An error occurred!";
return;
}
el.innerText = num.toFixed(2)
el.innerText = num.toFixed(2);
}
});

// When the connection is closed or there's an error
socket.addEventListener("close", () => {
statusContainer.textContent = "Disconnected from WebSocket server";
statusContainer.classList.remove("connected");
clearInterval(intervalId)

});

socket.addEventListener("error", () => {
statusContainer.textContent = "Error connecting to WebSocket server";
statusContainer.classList.remove("connected");
clearInterval(intervalId)
});
}

window.addEventListener("beforeunload", () => {
socket.close()
})
connectWebSocket();
</script>
</body>

Expand Down
Loading