A guide to the adventurer
This is a guide to learn embedded systems, with updated resources that I think are relevant and modern.
In this repository there are resources for 3 areas:
- Embedded microcontroller programming
- Embedded FPGA programming
- Embedded Linux drivers and systems programming
This example is beautifully explained in 15 minutes with clarity and simplicity. With access to all the files (Open Hardware). A really good and simple project of IoT to learn from. Study it and see also the other videos from the same Youtuber, because Sayanee Basu is a really good educator in embedded development. A nice video to start this guide.
- Initial idea
- Market study. Search for other products in the market and open projects.
- Concept development
- Circuit design
- Procurement of components
- PCB design with a microcontroller
- Logistics to send the board to factory
- Construction, soldering the components on the board
- Boot loader flashing
- Firmware development in Arduino-CLI
- PC Web development configuration control over USB.
- Publishing of all files of the project on the Web
- Demo of the project and the project development steps on a Youtube video
- How I built a simple IR blaster to replace my aircon remote - Arduino, sensors, infrared, WebUSB - Sayanee Basu
https://www.youtube.com/watch?v=QuI-2VGGcEQ
-
Simple notes on the C Programming Language
https://github.com/joaocarvalhoopen/Simple_notes_on_the_C_Programming_Language -
C Programming - A Modern Approach 2nd Ed (C99)
by K. N. King
Pag 832 -
C in a Nutshell: The definitive reference (C11)
by Peter Prinz, Tony Crowford
Pag 803 -
Effective C: An Introduction to Professional C Programming
by Robert C. Seacord
Pag 272
-
A Tour of C++ 2nd Ed
by Bjarne Stroustrup
Pag 256 -
Programming: Principles and Practice Using C++ 2nd Ed
by Bjarne Stroustrup
Pag 1312 -
C++ Crash Course: A Fast-Paced Introduction
by Josh Lospinoso
Pag 792 -
How to learn modern C++
https://github.com/joaocarvalhoopen/How_to_learn_modern_C_Plus_Plus
-
Programação em Python: Fundamentos e resolução de problemas (In Portuguese)
by Ernesto Costa (FCA) -
Python Crash Course, 2nd Edition: A Hands-On, Project-Based Introduction to Programming
by Eric Matthes
Pag 544 -
How to learn modern Python
https://github.com/joaocarvalhoopen/How_to_learn_modern_Python
-
How to learn modern Rust
https://github.com/joaocarvalhoopen/How_to_learn_modern_Rust -
The Rust Programming Language Book
by Steve Klabnik and Carol Nichols, with contributions from the Rust Community
https://doc.rust-lang.org/stable/book/ -
Programming Rust: Fast, Safe Systems Development 2th Ed
by Jim Blandy, Jason Orendorff
Pag 736 -
Rust for Rustaceans: Idiomatic Programming for Experienced Developers
by Jon Gjengset
-
Video - An Overview of the Embedded Rust Ecosystem
https://www.youtube.com/watch?v=vLYit_HHPaY -
Awesome embedded rust - Github
https://github.com/rust-embedded/awesome-embedded-rust -
The Embedded Working Group Newsletter or Blog
https://rust-embedded.github.io/blog/ -
Discovery Book
https://docs.rust-embedded.org/discovery/ -
The Embedded Rust Book
https://docs.rust-embedded.org/book/ -
Workbook for Embedded Workshops - Book
https://embedded-trainings.ferrous-systems.com/ -
The Embedonomicon Book
https://docs.rust-embedded.org/embedonomicon/ -
Video - RTIC: Real Time Interrupt driven Concurrency
RTIC is a RTOS - Real Time Operating System.
https://www.youtube.com/watch?v=saNdh0m_qHc -
Github - rtic-rs - cortex-m-rtic
See RTIC book documentation.
https://github.com/rtic-rs/cortex-m-rtic -
Video - Grepit about the Rust RTIC framework
https://www.youtube.com/watch?v=sSJ-Md8nwIM -
Video - Bare Metal Audio Programming With Rust - Antoine van Gelder - ADC20
https://www.youtube.com/watch?v=udlK1LQ3f3g
Slides
https://flowdsp.io/talks/talk-adc20/#1 -
Video - Building a simple logic analyser in Rust
Rust Linz, September 2020 - Roland Ruckerbauer - Embedded Rust
https://www.youtube.com/watch?v=xY342ACNXFg
Slides
https://github.com/ruabmbua/rlogic/blob/master/presentation.pdf
Github - ruabmbua / rlogic
https://github.com/ruabmbua/rlogic
- STM32 BluePill in Rust - Project template and lot's of info
This is the project template I use in my BluePill projects.
https://github.com/joaocarvalhoopen/stm32_bluepill_in_rust__Template
- All relevant Info and a starting project Template.
Where I have put all the info that I consider to be relevant for Pico development in Rust.
Raspberry Pi Pico in Rust Proj Template with RTIC USB-Serial and UF2
https://github.com/joaocarvalhoopen/Raspberry_Pi_Pico_in_Rust__Proj_Template_with_RTIC_USB-Serial_UF2
There are two modes of using Rust with the Raspberry Pi.
The first one is installing Rust development tools on the Raspberry Pi itself, and the second one is installing on the PC and making cross-compilation to generate a executable that runs on the Raspberry Pi.
- How to Get Started With Rust on Raspberry Pi
https://www.muo.com/tag/getting-started-rust-raspberry-pi/
-
Cross Compiling Rust for the Raspberry Pi
It also explains a method to automatically coping the file to the Raspberry Pi after compilation.
https://chacin.dev/blog/cross-compiling-rust-for-the-raspberry-pi/ -
Cross compiling Rust for Raspberry Pi
https://dev.to/h_ajsf/cross-compiling-rust-for-raspberry-pi-4iai
-
Grokking Algorithms: An Illustrated Guide for Programmers and Other Curious People
by Aditya Bhargava
Pag 256 -
Guide to Competitive Programming: Learning and Improving Algorithms Through Contests 2th Ed
by Antti Laaksonen
Pag 324 -
How to become dangerous in Algorithms
https://github.com/joaocarvalhoopen/How_to_become_dangerous_in_algorithms
- Bruce Land microcontrollers classes
Cornell University ECE 4760 Designing with Microcontrollers
http://people.ece.cornell.edu/land/courses/ece4760/
-
Programming Arduino: Getting Started with Sketches, 2nd Ed
by Simon Monk
Pag 208 -
Programming Arduino Next Steps: Going Further with Sketches, 2nd Ed
by Simon Monk
Pag 320 -
Exploring Arduino: Tools and Techniques for Engineering Wizardry 2nd Ed
by Jeremy Blum
Pag 512 -
Embedded Controllers using C and Arduino 2nd Ed
By James Fiore
Pag 166 Price Free Creative commons, but small symbolic price if bought on paper on Amazon. book
Book and videos - http://www.dissidents.com/books.htm -
Laboratory Manual for Embedded Controllers using C and Arduino 2nd Ed
By James Fiore
Pag 100 Price Free Creative commons, but small symbolic price if bought on paper on Amazon. book
Book and videos - http://www.dissidents.com/books.htm
This is the best way and the more professional way of working with Arduino. With your own editor, with your own make file, with all your tools in place, really the best way. All this is beautifully explained in simple terms and in a show how to do it way in the following video play list from Sayanee Basu.
-
Arduino CLI and the art of command line - Sayanee Basu
https://www.youtube.com/watch?v=cVod8k713_8&list=PL9wSRifxQqRrJh3Qr_TgqeCODG0z20UDo&index=6 -
Makefiles for using with Arduino - UNO, WeMos D1 Mini ESP8266, Adafruit nRF52 - Sayanee Basu
https://www.youtube.com/watch?v=Os5sGlw3PV0&list=PL9wSRifxQqRrJh3Qr_TgqeCODG0z20UDo&index=3 -
Embedded - Sayanee Basu
https://www.youtube.com/playlist?list=PL9wSRifxQqRrJh3Qr_TgqeCODG0z20UDo -
Arduino-Cli – Github
https://github.com/arduino/arduino-cli
- AVR Programming: Learning to Write Software for Hardware
by Elliot Williams
Pag 474
-
Beginning STM32: Developing with FreeRTOS, libopencm3 and GCC
by Warren Gay
Pag 430 -
STM32 ARM Programming for Embedded Systems
by Mazidi, Chen, Ghaemi
Pag 378 -
STM32 MOOC Courses on STM32CubeMX HAL and LL and others
Official free MOOC's -
STM32 Online Training
Free online training -
STM32 HAL e LL manual for the STM32 family.
-
The ST docs that you will need: Microcontroller Datasheet, Reference Manual and Dev Board Starter Manual.
-
Learn ESP32 with Arduino IDE
I took this course and I recommend it, because it is a good course. It's an extensive course, good for the beginner and not so beginners. It covers in many, many projects all the micro-controller programming and the IoT - Internet Of Things stuff with the Arduino IDE. The author is constantly adding material to the course. I have experience with several different micro-controllers and in my opinion, the ESP32 and the future ESP32-S02 are good safe bet's to learn micro-controllers in general and IoT in particular. Also they are low cost and have large range of advanced features.
https://randomnerdtutorials.com/learn-esp32-with-arduino-ide/ -
Learn ESP32 The ESP-IDF
I took this course and I recommend it highly, this is an excellent course. This is a course for a more professional or more in depth persons, for the ones that really need to know what's under the hood and want to make use of every feature, capacity and possibility that the incredible ESP32 provides. The other kind of person that I can imagine doing this course is if you are already a developer for example in PC or web context, you will rapidly understand all the details and understand all the micro-controller power that the author explains to you. The framework used (ESP-IDF) is the one made by ExpressIF, the enterprise that makes the ESP32. The knowledge that you will obtain from this course is really profound, although the author goes to extensive length to explain the foundations that you need even in more advanced C programming, it is for people that already used a micro-controller before, be it a simple Arduino Uno board, or a more professional one. But I would like to say clearly that, the knowledge that you obtain from this course is profound. In my opinion it gives you the tools, it enables you to work professional on this field developing embedded systems software with the ESP32 including IoT. The course already as 12 hours, with all the code accessible in GitHub, but it's author is currently still adding content. It also includes advanced sections on freeRTOS. It uses in a very intelligent and useful way the free Visual Studio Code Editor in Windows and Linux, even allowing debugging in ESP32 inside Visual Studio Code with a cheap 10 dollars JTAG addon board.
https://www.learnesp32.com/
-
FreeRTOS Getting Started, Guide and reference manual on freeRTOS site.
FreeRTOS Documentation -
FreeRTOS for ESP32-Arduino
by Warren Gay -
Hands-On RTOS with Microcontrollers: Building real-time embedded systems using FreeRTOS, STM32 MCUs...
by Brian Amos
Pag 496
-
Introduction to Fixed Point Math for Embedded Systems - Part 1 of 3
https://www.youtube.com/watch?v=bbFBgXndmP0 -
Introduction to Fixed Point Math for Embedded Systems - Part 2 of 3
https://www.youtube.com/watch?v=7pkXlcapNB4 -
Introduction to Fixed Point Math for Embedded Systems - Part 3 of 3
https://www.youtube.com/watch?v=SrELHqRqKjo
- The amazing $1 microcontroller (Jay Carlson)
A new series that explores 21 different microcontrollers — all less than $1 — to help familiarize you with all the major ecosystems out there.
https://jaycarlson.net/microcontrollers/
-
So you want to build an embedded Linux System? (Jay Carlson)
A primer on how embedded Linux systems are developed, plus an exploration of the hardware and software ecosystems of ten different commonly-available CPUs.
https://jaycarlson.net/embedded-linux/ -
How to learn modern Linux
https://github.com/joaocarvalhoopen/How_to_learn_modern_Linux
- The Linux Command Line: A Complete Introduction 2nd Ed
by William Shotts
Pag 480
-
Computer Systems: A Programmer's Perspective, 3rd Ed
by Randal E. Bryant, David R. O'Hallaron
Pag 1120 -
How Linux Works: What every super user should know
by Brian Ward
Pag 392 -
The Linux Programming Interface: A Linux and UNIX System Programming Handbook 1st Ed
by Michael Kerrisk
Pag 1552 -
Linux Device Drivers, 3rd Ed
by Jonathan Corbet, Alessandro Rubini
Pag 640
Note: Not up to date, but free online and a good book.
https://lwn.net/Kernel/LDD3/ -
Linux Driver Development for Embedded Processors 2th Ed: Learn to develop Linux embedded drivers with kernel 4.9 LTS
by Alberto Liberal de los Ríos
Pag 680
-
The Official Raspberry Pi Beginner's Guide
by Gareth Halfacree
Pag 248 -
Raspberry Pi - Exploring Raspberry Pi: Interfacing to the Real World with Embedded Linux
by Derek Molloy
Pag 720 -
Learning Computer Architecture with Raspberry Pi
by Eben Upton, Jeffrey Duntemann, Ralph Roberts, Tim Mamtora, Ben Everard
Pag 528
- Bruce Land FPGA's classes
ECE 5760 Advanced Microcontroller Design and system-on-chip
https://people.ece.cornell.edu/land/courses/ece5760/
-
Verilog by Example: A Concise Introduction for FPGA Design
by Blaine Readler
Pag 124 -
Programming FPGAs: Getting Started with Verilog
by Simon Monk
Pag 192
- VHDL By Example: A Concise Introduction for FPGA Design
by Blaine Readler
Pag 120
-
Open-Source FPGA tools, how and why
https://www.youtube.com/watch?v=sZBfEgnTc1A -
Project IceStorm for Latice ICE40
http://www.clifford.at/icestorm/ -
Digital Design for FPGAs, with free tools
https://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Home_EN
-
Getting Started in Electronics
by Forrest M. Mims III
Pag 128 -
Practical Electronics for Inventors, 4th Ed
by Paul Scherz and Simon Monk
Pag 1056 -
How to learn modern electronics
https://github.com/joaocarvalhoopen/How_to_learn_modern_electronics -
Most common components in electronics
https://github.com/joaocarvalhoopen/Most_common_components_in_electronics
-
Kicad Like a Pro, 2nd edition
by Dr. Peter Dalmaris
Pag 459 (A4)
https://techexplorations.com/st/klp_2e/ -
PCB design course KiCAD like a Pro I took this course and reed the book and I recommend it highly, this is an excellent course. There comes a time that every person that enter this field of electronics or embedded systems, will feel the need to make a professional looking board for the system that you design. When breadboard, soldering wires or simples pre-fabricated modules connected by wires, are not enough. That is the time to start learning about how to design a PCB's. Starting by drawing the schematic, to the design of the effective PCB, reaching out to a fabric to make you PCB and then assemble in your home or in the fabric with an assembly service. This course cover it all. KiCAD is a free open source tool that is of professional grade.
https://techexplorations.com/so/kicada/ -
KiCad - Sayanee Basu
https://www.youtube.com/playlist?list=PL9wSRifxQqRqdhVqZtdHnlwophrsjL9ic
-
Understanding Digital Signal Processing 3th Ed
by Richard G. Lyons
Pag 954 -
Digital Signal Processing in Modern Communication Systems
by Andreas Schwarzinger
Pag 398 -
The Scientist & Engineer's Guide to Digital Signal Processing
by Steven W. Smith
Pag 626 Free on the net
http://www.dspguide.com/
-
An Introduction to GCC
by Brian J Gough, Richard M Stallman
Pag 144 -
GDB Pocket Reference
by Arnold Robbins
Pag 78
-
Ry’s Git Tutorial
https://johnmathews.eu/rys-git-tutorial.html -
Version control for hardware developers - Git, GitHub, KiCad - Sayanee Basu
https://www.youtube.com/watch?v=V8yYrUN0q-0&list=PL9wSRifxQqRrJh3Qr_TgqeCODG0z20UDo&index=10
-
Visual Studio Code
https://code.visualstudio.com/ -
Sublime Text
https://www.sublimetext.com/
- The links to all my guides are in:
Guides on Linux - Programming - Embedded - Electronics - Aeronautics
https://github.com/joaocarvalhoopen/Guides_Linux-Programming-Electronics-Aeronautics
Best regards,
Joao Nuno Carvalho