# no_std training update ## Approach - One person working on the write up at one time - We decided doing this in parallel will create more work than it saves - Guidelines for writing (things to have in your head whilst writing): - Emphasis on why where possible - This doesn't mean explain why we're doing every step, but if there is an important time thing we can explain why we're doing it, e.g initializing esp-rtos might not seem obvious that esp-radio needs it - Keep in mind the prerequisites of the user and content we already cover in the book - Don't dupicate work we've already done, and don't explain things we've listed as prerequisite knowledge - Consistent voice - We must appear as a unified voice in our writing - We should pick a style (1st person, 3rd etc) and be consistent accross all chapters. - SM: I suggest using the same style as the book ## Chapter Outlines ### Introduction - Pretty much what we have in the current version with some minor adjustments: - Remove std references ### Prerequisites - [Rust Knowledge](https://docs.espressif.com/projects/rust/no_std-training/01_intro.html#rust-knowledge) - [Required Hardware](https://docs.espressif.com/projects/rust/no_std-training/02_0_preparations.html#required-hardware) - The [checking the hardware](https://docs.espressif.com/projects/rust/no_std-training/02_1_hardware.html) might be useful to keep it - [Software](https://docs.espressif.com/projects/rust/no_std-training/02_2_software.html) - [Workshop repository](https://docs.espressif.com/projects/rust/no_std-training/02_3_repository.html) - [Hello World](https://docs.espressif.com/projects/rust/no_std-training/02_4_hello_world.html) ### Building a Data Logger Application #### Project Overview - What will the app do? - Briefly summarize the chapters #### Project Setup - Mention esp-generate again? - Explain the differnt files: - rust-toolchain.toml - .cargo/config.toml - Explain linker flags? - Explain custom runner - Explain log level env - Explain target - Cargo.toml? Should we explain some of our deps and what they do? - Explain that some parts consist of multiple modules - Explain some boilerplate code: - https://github.com/esp-rs/no_std-training/blob/feat/overhaul/project/part1/src/main.rs#L4-L11 - App descriptor - `#[esp_rtos::main]` #### (part1) Reading Sensor Data - Explain initialization - `esp_hal::init` - `esp_rtos::start` - Drivers - `with_<>` - `Into_async` - How to read data from the sensor? - Link to the datasheet #### (part2) Wi-Fi Connectivity - Why do we need `esp-alloc` - How to initalize network stack - Why static? - Embassy config - Explain that we moved part of part1 code to the sensor module - Go through the modules - Why do we use tasks? - Environment variables to set SSID, password #### (part3) Publishing Data to an MQTT Broker - Explain that we reverted the Wifi-Provisioning part - Maybe this should be reworked so the project grows organically and the flow of explanation is weird but not sure how to do it - MQTT initialization - MQTT task #### (part4) Wi-Fi Provisioning & Integrating Wi-Fi Provisioning - Explain Wi-FI provisioning - Mention that usually is done via AP or BLE - Explain STA/AP config - Explain different task and why we need - Note about the assets/templates #### (part5) Over-the-Air Updates - How to create the partition table - How to create the app bin - Providing the bin via HTTP #### Wrapping Up ### Bonus Chapters - Using SNTP to get network time and setting the RTC - Configuring watchdog timers - Connecting a SPI display (as suggested by @bjoernQ) - NVS/Config handling.