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

final

parent f00097ca
No related branches found
No related tags found
No related merge requests found
......@@ -229,6 +229,7 @@ dependencies = [
"cortex-m-rt",
"cortex-m-semihosting",
"heapless",
"nb 1.1.0",
"panic-halt",
"stm32l4xx-hal",
"usb-device",
......
......@@ -9,6 +9,7 @@ version = "0.1.0"
cortex-m = "0.7.7"
cortex-m-rt = "0.7.3"
cortex-m-semihosting = "0.5.0"
nb = "1.1.0"
panic-halt = "0.2.0"
[dependencies.stm32l4xx-hal]
......
......@@ -13,12 +13,10 @@ mod rn_131rg;
use stm32l4xx_hal::{gpio::Speed, prelude::*};
// use stm32l4xx_hal::delay::Delay;
struct Data {
pression: f32,
temperature: f32,
luminosity: u8,
luminosity: i32,
}
#[entry]
......@@ -30,7 +28,6 @@ fn main() -> ! {
// **** Setup Peripherals ****
let periphs = stm32l4xx_hal::stm32::Peripherals::take().unwrap();
// let c_periphs = cortex_m::Peripherals::take().unwrap();
let mut flash = periphs.FLASH.constrain();
let mut rcc = periphs.RCC.constrain();
let mut pwr = periphs.PWR.constrain(&mut rcc.apb1r1);
......@@ -39,8 +36,6 @@ fn main() -> ! {
let mut gpioa = periphs.GPIOA.split(&mut rcc.ahb2);
let clocks = rcc.cfgr.freeze(&mut flash.acr, &mut pwr);
// let mut timer = Delay::new(c_periphs.SYST, clocks);
/*
**** Setup pb200_286 (luminosity) ****
......@@ -148,11 +143,8 @@ fn main() -> ! {
luminosity: 0,
};
const BUFFER_SIZE: usize = 1024;
let mut buffer: [u8; BUFFER_SIZE] = [0; BUFFER_SIZE];
loop {
rn_131rg::wait_http(&mut rn_con, &mut buffer, BUFFER_SIZE);
rn_131rg::wait_http_instant(&mut rn_con);
// Get Data
mpl115_a2::get_data(&mut mp_con, &mut data.pression, &mut data.temperature);
......@@ -161,39 +153,44 @@ fn main() -> ! {
rn_131rg::send_fmt(
&mut rn_con,
format_args!(
"HTTP/1.1 200 OK
Content-Length: 286
r##"HTTP/1.1 200 OK
Content-Length: 5138
Content-Type: text/html
Connection: close
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='UTF-8'>
<meta name='viewport' content='width=device-width, initial-scale=1.0'>
<title>Document</title>
</head>
<body>
<h1>Ayo</h1>
<p>Pression: {:.3}</p>
<p>Température: {:.3}</p>
<p>Luminosité: {:0>3}</p>
</body>
</html>
", data.pression, data.temperature, data.luminosity
<!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 "##
),
);
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 "##
),
);
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 "##
),
);
// Display Data
// hprintln!("{}[2J", 27 as char);
// hprintln!(
// "Pression: {} [kPa]\nTempérature: {} [°C] (±5 °C)\nLuminosité: {} / 125",
// data.pression,
// data.temperature,
// data.luminosity
// );
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>
// Wait
"##,
data.pression, data.temperature, data.luminosity
),
);
}
}
......@@ -59,7 +59,7 @@ pub fn get_data(
),
>,
cs: &mut Pin<Output<PushPull>, L8, 'B', 6>,
luminosity: &mut u8,
luminosity: &mut i32,
) {
// Set Chip Select to low to start data exchange
cs.set_low();
......@@ -76,5 +76,5 @@ pub fn get_data(
lux |= buffer[1] >> 4;
// Store Data in struct
*luminosity = lux;
*luminosity = lux as i32;
}
use core::fmt::Arguments;
use stm32l4xx_hal::gpio::*;
use stm32l4xx_hal::prelude::*;
use stm32l4xx_hal::rcc::*;
use stm32l4xx_hal::serial::*;
use stm32l4xx_hal::stm32::*;
use stm32l4xx_hal::prelude::*;
use core::fmt::Arguments;
// use cortex_m_semihosting::hprint;
// use core::str::from_utf8;
use core::fmt::Write;
......@@ -20,36 +20,40 @@ pub fn get_connexion(
apb1r1: &mut APB1R1,
clocks: Clocks,
) -> RnCon {
// create connexion struct
let (uart_tx, uart_rx) = Serial::uart4(
uart4,
(tx, rx),
57600.bps(),// 9600.bps(),
38400.bps(), // 9600.bps(),
clocks,
apb1r1,
)
.split();
let mut uart = RnCon { tx: uart_tx, rx: uart_rx };
// check communication between microcontroller and wifi module
let mut uart = RnCon {
tx: uart_tx,
rx: uart_rx,
};
const BUFFER_SIZE: usize = 3;
let mut buffer: [u8; BUFFER_SIZE] = [0; BUFFER_SIZE];
send(&mut uart, "$$$");
// check communication between microcontroller and wifi module, and start command mode
wait_serial(&mut uart, &mut buffer, BUFFER_SIZE);
assert_eq!(buffer, "CMD".as_bytes());
send(&mut uart, "set comm remote 0\r\n"); // necessary to avoid "*HELLO*" string at connexion start
asm::delay(1000000);
send(&mut uart, "apmode RustWeatherStation 5\r\n");
asm::delay(1000000);
// necessary to avoid "*HELLO*" string at connexion start
send(&mut uart, "set comm remote 0\r\n");
// create access point
send(&mut uart, "set ip localport 80\r\n");
send(&mut uart, "join RustWeatherStation\r\n");
// stop command mode, making connexion available for data transfer
send(&mut uart, "exit\r\n");
//
return uart;
}
......@@ -59,6 +63,7 @@ pub fn send(con: &mut RnCon, s: &str) {
}
pub fn send_fmt(con: &mut RnCon, args: Arguments<'_>) {
con.tx.write_fmt(args).unwrap();
}
......@@ -66,7 +71,6 @@ pub fn send_fmt(con: &mut RnCon, args: Arguments<'_>) {
// hprint!("{}", from_utf8(buffer).unwrap());
// }
/// read on the uart connexion
///
pub fn wait_serial(con: &mut RnCon, buffer: &mut [u8], buffer_size: usize) {
......@@ -92,21 +96,11 @@ pub fn wait_serial(con: &mut RnCon, buffer: &mut [u8], buffer_size: usize) {
}
}
pub fn wait_http(con: &mut RnCon, buffer: &mut [u8], buffer_size: usize) {
let mut i = 0; // char index
pub fn wait_http_instant(con: &mut RnCon) {
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 {
if x == b'G' {
break;
}
}
......@@ -114,3 +108,26 @@ pub fn wait_http(con: &mut RnCon, buffer: &mut [u8], buffer_size: usize) {
}
}
}
// 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