Skip to content
Snippets Groups Projects
Commit f5c27c67 authored by david's avatar david
Browse files

final final

parent c1c9b6b5
No related branches found
No related tags found
No related merge requests found
......@@ -22,6 +22,7 @@ struct Data {
#[entry]
fn main() -> ! {
// Clean terminal and acknowledge the boot
hprint! {"{}[2J", 27 as char};
hprintln! {"Nucleo-l476RG is alive !"};
......@@ -144,53 +145,46 @@ fn main() -> ! {
};
loop {
rn_131rg::wait_http_instant(&mut rn_con);
// wait on a request, and return the first letter,
// usefull to know if it is POST or GET
let c = rn_131rg::wait_http(&mut rn_con);
// Get Data
// get data from sensors
mpl115_a2::get_data(&mut mp_con, &mut data.pression, &mut data.temperature);
pb200_286::get_data(&mut pb200_286_conn, &mut pb_cs, &mut data.luminosity);
if c == b'P' {
// if POST, send only the sensor
rn_131rg::send_fmt(
&mut rn_con,
format_args!(
r##"HTTP/1.1 200 OK
Content-Length: 5138
"HTTP/1.1 200 OK
Content-Length: 17
Content-Type: text/html
Connection: close
<!DOCTYPE html><html><head> <meta charset='UTF-8'> <link rel='icon' href="data:image/svg+xml,%3Csvg version='1.1' viewBox='0 0 512 512' xmlns='http://www.w3.org/2000/svg'%3E%3Cg%3E%3Cpath d='m148.3 484.5c-29.29-5.395-53.49-24.09-65.85-50.87-19.85-43-1.512-95.05 41.01-116.4 12.68-6.37 21.61-8.488 38.01-9.006l15.01-0.4743 3.401-4.934c12.22-17.73 33.87-33.98 55.22-41.46 9.268-3.244 25.23-6.38 32.47-6.38 5.418 0 5.69-0.1398 12.81-6.592 20.26-18.35 42.9-29.81 69.31-35.09 13.25-2.647 38.47-2.374 52.23 0.5663 54.37 11.62 95.49 52.74 107.2 107.2 3.206 14.95 3.206 39.97 0 54.91-11.61 54.11-52.07 94.78-106.6 107.2l-10 2.271-118.5 0.2286c-94.57 0.1824-119.9-0.0377-125.7-1.09z' fill='%23fff'/%3E%3Cg fill='%23fdff09'%3E%3Cpath d='m213.1 104.2c-1.886-0.9616-4.361-3.018-5.5-4.57-1.969-2.682-2.085-4.29-2.348-32.5-0.3134-33.61-0.1357-34.55 7.381-38.97 6.756-3.973 14.51-1.95 19.83 5.174 1.953 2.614 2.077 4.277 2.354 31.45 0.2887 28.35 0.2644 28.74-2.025 33.07-3.943 7.457-12.26 10.13-19.7 6.341z'/%3E%3Cpath d='m321.3 "##
),
);
{:02.3}|{:02.3}|{:03}
rn_131rg::send_fmt(
&mut rn_con,
format_args!(
r##"149c-5.59-3.409-8.064-9.127-6.835-15.8 0.5846-3.175 3.828-6.899 21.36-24.53 21.91-22.03 24.23-23.68 31.47-22.32 9.303 1.745 14.71 13.02 10.27 21.4-1.719 3.239-39.13 40.51-42.25 42.09-3.439 1.742-10.46 1.317-14.01-0.8495z'/%3E%3Cpath d='m101.4 148.1c-2.145-1.587-11.84-10.92-21.55-20.75-19.72-19.95-21.31-22.52-18.93-30.49 1.567-5.232 4.728-8.392 9.959-9.959 7.963-2.386 10.53-0.7899 30.49 18.93 22.15 21.89 23.64 23.81 23.63 30.55-0.0116 8.947-5.646 14.58-14.59 14.59-4.06 5e-3 -5.895-0.5818-9-2.878z'/%3E%3Cpath d='m9.45 259.6c-8.845-3.853-11.96-14.86-6.404-22.66 3.984-5.595 6.105-5.934 37.1-5.933 25.01 1e-3 28.75 0.2073 31.78 1.75 4.777 2.436 7.278 6.273 7.772 11.92 0.5571 6.371-2 11.03-7.714 14.05-4.181 2.211-5.08 2.274-31.89 2.236-20.67-0.0293-28.36-0.3723-30.64-1.367z'/%3E%3Cpath d='m112.2 281.8c-5.438-16.58-7.153-38.4-4.305-54.8 6.166-35.49 29.23-66.43 61.78-82.86 25.26-12.75 58.85-14.97 86.15-5.681 16.85 5.731 31.76 15.03 44.12 27.53 6.903 6.977 18 21.61 18 23.74 0 0.4964-2.588 1.957-5.75 3.245-15.24 "##
),
);
rn_131rg::send_fmt(
&mut rn_con,
format_args!(
r##"6.209-32.68 16.61-44.86 26.77-6.046 5.041-6.224 5.111-18.33 7.167-30.49 5.179-56.95 19.01-79.06 41.34-9.394 9.485-9.779 9.75-14.2 9.75-9.371 0-27.6 4.308-39.9 9.43-1.26 0.5246-2.027-0.6569-3.659-5.633z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E%0A""> <title>Rust Weather Station</title></head><style>body{{background: radial-gradient(100% 200% at 50% 150%, rgb(255, 255, 255) 0%, rgb(0, 212, 255) 100%); height: 100vh; display: flex; flex-flow: column; justify-content: center; align-items: center; font-family: monospace; font-size: 1rem; margin: 0;}}div{{background: white; max-width: 400px; width: 100%; padding: 1rem; border-radius: 0.3rem; box-shadow: 10px 10px 0 black; border: 1px solid black;}}svg{{width: 200px; filter: drop-shadow(10px 10px 0);}}</style><body> <svg version=" 1.1" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"> <g> <path d="m148.3 484.5c-29.29-5.395-53.49-24.09-65.85-50.87-19.85-43-1.512-95.05 41.01-116.4 12.68-6.37 21.61-8.488 38.01-9.006l15.01-0.4743 3.401-4.934c12.22-17.73 33.87-33.98 "##
", data.pression, data.temperature, data.luminosity
),
);
)
} else {
// if GET, we send full html page
rn_131rg::send_fmt(
&mut rn_con,
format_args!(
r##"55.22-41.46 9.268-3.244 25.23-6.38 32.47-6.38 5.418 0 5.69-0.1398 12.81-6.592 20.26-18.35 42.9-29.81 69.31-35.09 13.25-2.647 38.47-2.374 52.23 0.5663 54.37 11.62 95.49 52.74 107.2 107.2 3.206 14.95 3.206 39.97 0 54.91-11.61 54.11-52.07 94.78-106.6 107.2l-10 2.271-118.5 0.2286c-94.57 0.1824-119.9-0.0377-125.7-1.09z" fill="#fff"/> <g fill="#fdff09"> <path d="m213.1 104.2c-1.886-0.9616-4.361-3.018-5.5-4.57-1.969-2.682-2.085-4.29-2.348-32.5-0.3134-33.61-0.1357-34.55 7.381-38.97 6.756-3.973 14.51-1.95 19.83 5.174 1.953 2.614 2.077 4.277 2.354 31.45 0.2887 28.35 0.2644 28.74-2.025 33.07-3.943 7.457-12.26 10.13-19.7 6.341z"/> <path d="m321.3 149c-5.59-3.409-8.064-9.127-6.835-15.8 0.5846-3.175 3.828-6.899 21.36-24.53 21.91-22.03 24.23-23.68 31.47-22.32 9.303 1.745 14.71 13.02 10.27 21.4-1.719 3.239-39.13 40.51-42.25 42.09-3.439 1.742-10.46 1.317-14.01-0.8495z"/> <path d="m101.4 148.1c-2.145-1.587-11.84-10.92-21.55-20.75-19.72-19.95-21.31-22.52-18.93-30.49 1.567-5.232 4.728-8.392 9.959-9.959 7.963-2.386 10.53-0.7899 "##
),
);
r##"HTTP/1.1 200 OK
Content-Length: 5406
Content-Type: text/html
Connection: close
rn_131rg::send_fmt(
&mut rn_con,
format_args!(
r##"30.49 18.93 22.15 21.89 23.64 23.81 23.63 30.55-0.0116 8.947-5.646 14.58-14.59 14.59-4.06 5e-3 -5.895-0.5818-9-2.878z"/> <path d="m9.45 259.6c-8.845-3.853-11.96-14.86-6.404-22.66 3.984-5.595 6.105-5.934 37.1-5.933 25.01 1e-3 28.75 0.2073 31.78 1.75 4.777 2.436 7.278 6.273 7.772 11.92 0.5571 6.371-2 11.03-7.714 14.05-4.181 2.211-5.08 2.274-31.89 2.236-20.67-0.0293-28.36-0.3723-30.64-1.367z"/> <path d="m112.2 281.8c-5.438-16.58-7.153-38.4-4.305-54.8 6.166-35.49 29.23-66.43 61.78-82.86 25.26-12.75 58.85-14.97 86.15-5.681 16.85 5.731 31.76 15.03 44.12 27.53 6.903 6.977 18 21.61 18 23.74 0 0.4964-2.588 1.957-5.75 3.245-15.24 6.209-32.68 16.61-44.86 26.77-6.046 5.041-6.224 5.111-18.33 7.167-30.49 5.179-56.95 19.01-79.06 41.34-9.394 9.485-9.779 9.75-14.2 9.75-9.371 0-27.6 4.308-39.9 9.43-1.26 0.5246-2.027-0.6569-3.659-5.633z"/> </g> </g> </svg> <h1>Rust Weather Station</h1> <div> <p>Pression: {:.3} [kPa]</p><p>Température: {:.3} [°C] (±5 °C)</p><p>Luminosité: {:0>3}/125 %</p></div></body> <script>setTimeout(()=>{{location.reload()}}, 10000); </script></html>
<!DOCTYPE html><html><head><meta charset='UTF-8'><link rel='icon' href="data:image/svg+xml,%3Csvg version='1.1' viewBox='0 0 512 512' xmlns='http://www.w3.org/2000/svg'%3E%3Cg%3E%3Cpath d='m148.3 484.5c-29.29-5.395-53.49-24.09-65.85-50.87-19.85-43-1.512-95.05 41.01-116.4 12.68-6.37 21.61-8.488 38.01-9.006l15.01-0.4743 3.401-4.934c12.22-17.73 33.87-33.98 55.22-41.46 9.268-3.244 25.23-6.38 32.47-6.38 5.418 0 5.69-0.1398 12.81-6.592 20.26-18.35 42.9-29.81 69.31-35.09 13.25-2.647 38.47-2.374 52.23 0.5663 54.37 11.62 95.49 52.74 107.2 107.2 3.206 14.95 3.206 39.97 0 54.91-11.61 54.11-52.07 94.78-106.6 107.2l-10 2.271-118.5 0.2286c-94.57 0.1824-119.9-0.0377-125.7-1.09z' fill='%23fff'/%3E%3Cg fill='%23fdff09'%3E%3Cpath d='m213.1 104.2c-1.886-0.9616-4.361-3.018-5.5-4.57-1.969-2.682-2.085-4.29-2.348-32.5-0.3134-33.61-0.1357-34.55 7.381-38.97 6.756-3.973 14.51-1.95 19.83 5.174 1.953 2.614 2.077 4.277 2.354 31.45 0.2887 28.35 0.2644 28.74-2.025 33.07-3.943 7.457-12.26 10.13-19.7 6.341z'/%3E%3Cpath d='m321.3 149c-5.59-3.409-8.064-9.127-6.835-15.8 0.5846-3.175 3.828-6.899 21.36-24.53 21.91-22.03 24.23-23.68 31.47-22.32 9.303 1.745 14.71 13.02 10.27 21.4-1.719 3.239-39.13 40.51-42.25 42.09-3.439 1.742-10.46 1.317-14.01-0.8495z'/%3E%3Cpath d='m101.4 148.1c-2.145-1.587-11.84-10.92-21.55-20.75-19.72-19.95-21.31-22.52-18.93-30.49 1.567-5.232 4.728-8.392 9.959-9.959 7.963-2.386 10.53-0.7899 30.49 18.93 22.15 21.89 23.64 23.81 23.63 30.55-0.0116 8.947-5.646 14.58-14.59 14.59-4.06 5e-3 -5.895-0.5818-9-2.878z'/%3E%3Cpath d='m9.45 259.6c-8.845-3.853-11.96-14.86-6.404-22.66 3.984-5.595 6.105-5.934 37.1-5.933 25.01 1e-3 28.75 0.2073 31.78 1.75 4.777 2.436 7.278 6.273 7.772 11.92 0.5571 6.371-2 11.03-7.714 14.05-4.181 2.211-5.08 2.274-31.89 2.236-20.67-0.0293-28.36-0.3723-30.64-1.367z'/%3E%3Cpath d='m112.2 281.8c-5.438-16.58-7.153-38.4-4.305-54.8 6.166-35.49 29.23-66.43 61.78-82.86 25.26-12.75 58.85-14.97 86.15-5.681 16.85 5.731 31.76 15.03 44.12 27.53 6.903 6.977 18 21.61 18 23.74 0 0.4964-2.588 1.957-5.75 3.245-15.24 6.209-32.68 16.61-44.86 26.77-6.046 5.041-6.224 5.111-18.33 7.167-30.49 5.179-56.95 19.01-79.06 41.34-9.394 9.485-9.779 9.75-14.2 9.75-9.371 0-27.6 4.308-39.9 9.43-1.26 0.5246-2.027-0.6569-3.659-5.633z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E%0A""> <title>Rust Weather Station</title></head><style>body{{background: radial-gradient(100% 200% at 50% 150%, rgb(255, 255, 255) 0%, rgb(0, 212, 255) 100%); height: 100vh; display: flex; flex-flow: column; justify-content: center; align-items: center; font-family: monospace; font-size: 1rem; margin: 0;}}div{{background: white; max-width: 400px; width: 100%; padding: 1rem; border-radius: 0.3rem; box-shadow: 10px 10px 0 black; border: 1px solid black;}}svg{{width: 200px; filter: drop-shadow(10px 10px 0);}}</style><body> <svg version="1.1" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><g><path d="m148.3 484.5c-29.29-5.395-53.49-24.09-65.85-50.87-19.85-43-1.512-95.05 41.01-116.4 12.68-6.37 21.61-8.488 38.01-9.006l15.01-0.4743 3.401-4.934c12.22-17.73 33.87-33.98 55.22-41.46 9.268-3.244 25.23-6.38 32.47-6.38 5.418 0 5.69-0.1398 12.81-6.592 20.26-18.35 42.9-29.81 69.31-35.09 13.25-2.647 38.47-2.374 52.23 0.5663 54.37 11.62 95.49 52.74 107.2 107.2 3.206 14.95 3.206 39.97 0 54.91-11.61 54.11-52.07 94.78-106.6 107.2l-10 2.271-118.5 0.2286c-94.57 0.1824-119.9-0.0377-125.7-1.09z" fill="#fff" /><g fill="#fdff09"><path d="m213.1 104.2c-1.886-0.9616-4.361-3.018-5.5-4.57-1.969-2.682-2.085-4.29-2.348-32.5-0.3134-33.61-0.1357-34.55 7.381-38.97 6.756-3.973 14.51-1.95 19.83 5.174 1.953 2.614 2.077 4.277 2.354 31.45 0.2887 28.35 0.2644 28.74-2.025 33.07-3.943 7.457-12.26 10.13-19.7 6.341z" /><path d="m321.3 149c-5.59-3.409-8.064-9.127-6.835-15.8 0.5846-3.175 3.828-6.899 21.36-24.53 21.91-22.03 24.23-23.68 31.47-22.32 9.303 1.745 14.71 13.02 10.27 21.4-1.719 3.239-39.13 40.51-42.25 42.09-3.439 1.742-10.46 1.317-14.01-0.8495z" /><path d="m101.4 148.1c-2.145-1.587-11.84-10.92-21.55-20.75-19.72-19.95-21.31-22.52-18.93-30.49 1.567-5.232 4.728-8.392 9.959-9.959 7.963-2.386 10.53-0.7899 30.49 18.93 22.15 21.89 23.64 23.81 23.63 30.55-0.0116 8.947-5.646 14.58-14.59 14.59-4.06 5e-3 -5.895-0.5818-9-2.878z" /><path d="m9.45 259.6c-8.845-3.853-11.96-14.86-6.404-22.66 3.984-5.595 6.105-5.934 37.1-5.933 25.01 1e-3 28.75 0.2073 31.78 1.75 4.777 2.436 7.278 6.273 7.772 11.92 0.5571 6.371-2 11.03-7.714 14.05-4.181 2.211-5.08 2.274-31.89 2.236-20.67-0.0293-28.36-0.3723-30.64-1.367z" /><path d="m112.2 281.8c-5.438-16.58-7.153-38.4-4.305-54.8 6.166-35.49 29.23-66.43 61.78-82.86 25.26-12.75 58.85-14.97 86.15-5.681 16.85 5.731 31.76 15.03 44.12 27.53 6.903 6.977 18 21.61 18 23.74 0 0.4964-2.588 1.957-5.75 3.245-15.24 6.209-32.68 16.61-44.86 26.77-6.046 5.041-6.224 5.111-18.33 7.167-30.49 5.179-56.95 19.01-79.06 41.34-9.394 9.485-9.779 9.75-14.2 9.75-9.371 0-27.6 4.308-39.9 9.43-1.26 0.5246-2.027-0.6569-3.659-5.633z" /></g></g></svg><h1>Rust Weather Station</h1><div><p>Pression: <span id="p">...</span> [kPa]</p><p>Température: <span id="t">...</span> [°C] (±5 °C)</p><p>Luminosité: <span id="l">...</span>/125</p></div></body><script>setInterval(async () => {{let r = await fetch( "192.168.120.103" ,{{method: "POST"}});let d = (await r.text()).split("|");document.querySelector("#p").textContent = d[0];document.querySelector("#t").textContent = d[1];document.querySelector("#l").textContent = d[2];}},3000);</script></html>
"##,
data.pression, data.temperature, data.luminosity
"##
),
);
}
}
}
......@@ -67,7 +67,7 @@ pub fn get_data(
.unwrap();
let coeffs = coeff(buffer_8);
asm::delay(1_000_000);
// asm::delay(1_000);
// Start Pressure and Temperature Conversion
i2c.write(MPL115A2_ADDR, &[0x12, 0x00]).unwrap();
......@@ -78,7 +78,6 @@ pub fn get_data(
i2c.write_read(MPL115A2_ADDR, &[0x00], &mut buffer_4)
.unwrap();
asm::delay(1_000_000);
// Calculate Pressure Compensation
let pcomp = pcomp(buffer_4, coeffs);
......
......@@ -4,15 +4,17 @@ use stm32l4xx_hal::prelude::*;
use stm32l4xx_hal::rcc::*;
use stm32l4xx_hal::serial::*;
use stm32l4xx_hal::stm32::*;
// use cortex_m_semihosting::hprint;
// use core::str::from_utf8;
use core::fmt::Write;
use cortex_m::asm;
pub struct RnCon {
pub tx: Tx<stm32l4xx_hal::pac::UART4>,
pub rx: Rx<stm32l4xx_hal::pac::UART4>,
}
/// Helper function to get a struct used by other function
/// to communicate over UART with the wifi (RN-131g)
pub fn get_connexion(
tx: Pin<Alternate<PushPull, 8>, L8, 'A', 0>,
rx: Pin<Alternate<PushPull, 8>, L8, 'A', 1>,
......@@ -20,8 +22,8 @@ pub fn get_connexion(
apb1r1: &mut APB1R1,
clocks: Clocks,
) -> RnCon {
// create connexion struct
// create connexion struct
let (uart_tx, uart_rx) = Serial::uart4(
uart4,
(tx, rx),
......@@ -39,17 +41,26 @@ pub fn get_connexion(
const BUFFER_SIZE: usize = 3;
let mut buffer: [u8; BUFFER_SIZE] = [0; BUFFER_SIZE];
// start command mode
send(&mut uart, "$$$");
// check communication between microcontroller and wifi module, and start command mode
// check communication between microcontroller and wifi module
// (should receive <CMD> and only that)
wait_serial(&mut uart, &mut buffer, BUFFER_SIZE);
assert_eq!(buffer, "CMD".as_bytes());
// necessary to avoid "*HELLO*" string at connexion start
// necessary to avoid "*HELLO*" and "*OPEN*" string at connexion start
send(&mut uart, "set comm open 0\r\n");
send(&mut uart, "set comm remote 0\r\n");
send(&mut uart, "set comm match 1\r\n");
// create access point
// in case of probleme auto kill tcp connexion to avoid to stay stuck
send(&mut uart, "set comm idle 2\r\n");
// set port to avoid having to set it manually in the browser
send(&mut uart, "set ip localport 80\r\n");
// join wifi
send(&mut uart, "join RustWeatherStation\r\n");
// stop command mode, making connexion available for data transfer
......@@ -58,21 +69,27 @@ pub fn get_connexion(
return uart;
}
/// Send plain str over the uart connexion to wifi module
pub fn send(con: &mut RnCon, s: &str) {
con.tx.write_str(s).unwrap();
}
/// Send str over the uart connexion to wifi module
/// This version allow for formatting through format_args! macro
/// # Examples
/// ```
/// format_args!(
/// "My name is {}", "David"
/// ),
/// ```
pub fn send_fmt(con: &mut RnCon, args: Arguments<'_>) {
con.tx.write_fmt(args).unwrap();
}
// pub fn print(buffer: &[u8]) {
// hprint!("{}", from_utf8(buffer).unwrap());
// }
/// read on the uart connexion
///
/// Read on the uart connexion continuously,
/// stopping on CRLF or buffer filed
pub fn wait_serial(con: &mut RnCon, buffer: &mut [u8], buffer_size: usize) {
let mut i = 0; // char index
......@@ -96,38 +113,27 @@ pub fn wait_serial(con: &mut RnCon, buffer: &mut [u8], buffer_size: usize) {
}
}
pub fn wait_http_instant(con: &mut RnCon) {
/// Read the uart and wait until 'G' or 'P' is received
/// then return if it's 'G' or 'P' that was received
/// Knowing that will allow us to send only the data or
/// the full page based on browser request
pub fn wait_http(con: &mut RnCon) -> u8{
let c;
loop {
match con.rx.read() {
Ok(x) => {
if x == b'G'{
c = b'G';
break;
}
if x == b'P' {
c = b'P';
break;
}
}
Err(_x) => {}
}
}
return c;
}
\ No newline at end of file
// pub fn wait_http(con: &mut RnCon, buffer: &mut [u8], buffer_size: usize) {
// let mut i = 0; // char index
// loop {
// match con.rx.read() {
// Ok(x) => {
// buffer[i] = x;
// if i > 3 && buffer[i - 3] == 13 && buffer[i] == 10 {
// // end of message, we flush
// break;
// }
// i += 1;
// if i >= buffer_size {
// break;
// }
// }
// Err(_x) => {}
// }
// }
// }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment