Skip to content

mikeroyal/Arduino-Guide

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

14 Commits

Repository files navigation


Arduino Guide

A guide covering Arduino devices such as the Arduino Uno and Arduino Nano. Along with the tools, applications and libraries that will make you a better and more efficient developer with Arduino devices. Also, learn about cool projects that you can build with your Arduino device.

Note: You can easily convert this markdown file to a PDF inVSCodeusing this handy extensionMarkdown PDF.

Table of Contents

  1. Models of Arduino boards

  2. Arduino Learning Resources

  3. Arduino Tools

  4. Operating Systems for Arduino

  5. C/C++ Development

  6. Rust Development


Arduino Board Components

Models of Arduino boards

Back to the Top

Checkout the Arduino Starter Kit

Checkout the Arduino Uno

Arduino Uno Hardware Specs

  • Microcontroller ATmega328P
  • Operating Voltage 5V
  • Input Voltage (recommended) 7-12V
  • Input Voltage (limit) 6-20V
  • Digital I/O Pins 14 (of which 6 provide PWM output)
  • Flash Memory 32 KB (ATmega328P) of which 0.5 KB used by bootloader
  • SRAM 2 KB (ATmega328P)
  • EEPROM 1 KB (ATmega328P)
  • Clock Speed 16 MHz

Checkout the Arduino Nano

Arduino Nano Hardware Specs

  • Microcontroller ATmega328
  • Architecture AVR
  • Operating Voltage 5 V
  • Flash Memory 32 KB of which 2 KB used by bootloader
  • SRAM 2 KB
  • Clock Speed 16 MHz
  • Input Voltage 7-12 V
  • Digital I/O Pins 22 (6 of which are PWM)

Arduino Learning Resources

Back to the Top

Arduinois an open source electronic prototyping platform enabling users to create interactive electronic objects.

Arduino Reference Manual

Getting Started with Arduino

Arduino Education

Arduino Store

Arduino Forum

Arduino Courses on Udemy

Arduino Courses on Coursera

Online Arduino Classes on Skillshare

Introduction to Arduino course on Pluralsight

Arduino Training Courses on NobleProg

Arduino with Python course from Real Python

200+ Arduino Projects on Instructables

Arduino Tools

Back to the Top

Arduino CLIis an all-in-one solution that provides builder, Boards/Library Manager, uploader, discovery and many other tools needed to use any Arduino compatible board and platforms.

Arduino IDEis an open source integrated development environment(IDE) for the Arduino computing platforms based on easy-to-use hardware and software.

Arduino Pro IDEis a professional version of the Arduino IDE that brings more features for advanced users and developers. The project is currently in the experimently version.

VSCode Arduinois a VSCode extension for Arduino. The Arduino extension makes it easy to develop, build, deploy and debug your Arduino sketches in Visual Studio Code, with a rich set of functionalities.

Gobotis a framework using theGolangprogramming language for robotics, physical computing, and the Internet of Things(IoT).

Tasmotais an alternative firmware forESP8266based devices with easy configuration using webUI, OTA updates, automation using timers or rules, expandability and entirely local control over MQTT, HTTP, Serial or KNX.

Blynkis a C++ library for embedded hardware. It works with over 400 hardware models such as Arduino, ESP8266, Raspberry Pi, Intel Edison/Galileo, LinkIt ONE, Particle Core/Photon, ARM mbed, etc.

Arduino Threadis a library tha makes it simple to run Threads on Arduino.

PlatformIOis a professional collaborative platform for embedded development with no vendor lock-in. It provides support for multiplatforms and frameworks such as IoT, Arduino, CMSIS, ESP-IDF, FreeRTOS, libOpenCM3, mbed OS, Pulp OS, SPL, STM32Cube, Zephyr RTOS, ARM, AVR, Espressif (ESP8266/ESP32), FPGA, MCS-51 (8051), MSP430, Nordic (nRF51/nRF52), NXP i.MX RT, PIC32, RISC-V.

PlatformIO for VSCodeis a plugin that provides support for the PlatformIO IDE on VSCode.

Tockis an embedded operating system designed for running multiple concurrent, mutually distrustful applications on Cortex-M and RISC-V based embedded platforms. Tock's design centers around protection, both from potentially malicious applications and from device drivers.

TinyGois a Go compiler(based on LLVM) intended for use in small places such as microcontrollers, WebAssembly (Wasm), and command-line tools.

LLVMis a library that has collection of modular/reusable compiler and toolchain components (assemblers, compilers, debuggers, etc.). With these components LLVM can be used as a compiler framework, providing a front-end(parser and lexer) and a back-end (code that converts LLVM's representation to actual machine code).

Chipyardis an open source framework for agile development of Chisel-based systems-on-chip. It will allow you to leverage the Chisel HDL, Rocket Chip SoC generator, and otherBerkeleyprojects to produce a RISC-V SoC with everything from MMIO-mapped peripherals to custom accelerators.

The Eclipse Embedded CDTis a collection of plug-ins for Arm & RISC-V C/C++ developers. Unicornis a lightweight, multi-platform, multi-architecture CPU emulator framework(ARM, AArch64, M68K, Mips, Sparc, X86) based onQEMU.

Keystoneis a lightweight multi-platform, multi-architecture(Arm, Arm64, Hexagon, Mips, PowerPC, Sparc, SystemZ & X86) assembler framework.

Operating Systems for Arduino

Back to the Top

HeliOSis an embedded operating system that is free for anyone to use. While called an operating system for simplicity, HeliOS is better described as a multitasking kernel for embedded systems.

FreeRTOSis a market-leading real-time operating system (RTOS) for microcontrollers and small microprocessors.

Simbais a small OS for an Embedded Programming Platform like Arduino. It aims to make embedded programming easy and portable.

Trampolineis a static RTOS for small embedded systems.

DuinOSis Framework (a wrapper) for use the FreeRTOSwith Arduino.

VxWorksis an industry-leading real-time operating systems (RTOS) for building embedded devices and systems for more than 30 years.

LynxOSis a native POSIX, hard real-time partitioning operating system developed by Lynx Software Technologies.

C/C++ Development

Back to the Top


C/C++ Learning Resources

C++is a cross-platform language that can be used to build high-performance applications developed by Bjarne Stroustrup, as an extension to the C language.

Cis a general-purpose, high-level language that was originally developed by Dennis M. Ritchie to develop the UNIX operating system at Bell Labs. It supports structured programming, lexical variable scope, and recursion, with a static type system. C also provides constructs that map efficiently to typical machine instructions, which makes it one was of the most widely used programming languages today.

Embedded Cis a set of language extensions for the C programming language by theC Standards Committeeto address issues that exist between C extensions for differentembedded systems.The extensions hep enhance microprocessor features such as fixed-point arithmetic, multiple distinct memory banks, and basic I/O operations. This makes Embedded C the most popular embedded software language in the world.

C & C++ Developer Tools from JetBrains

Open source C++ libraries on cppreference

C++ Graphics libraries

C++ Libraries in MATLAB

C++ Tools and Libraries Articles

Google C++ Style Guide

Introduction C++ Education course on Google Developers

C++ style guide for Fuchsia

C and C++ Coding Style Guide by OpenTitan

Chromium C++ Style Guide

C++ Core Guidelines

C++ Style Guide for ROS

Learn C++

Learn C: An Interactive C Tutorial

C++ Institute

C++ Online Training Courses on LinkedIn Learning

C++ Tutorials on W3Schools

Learn C Programming Online Courses on edX

Learn C++ with Online Courses on edX

Learn C++ on Codecademy

Coding for Everyone: C and C++ course on Coursera

C++ For C Programmers on Coursera

Top C Courses on Coursera

C++ Online Courses on Udemy

Top C Courses on Udemy

C++ For Programmers Course on Udacity

C++ Fundamentals Course on Pluralsight

Introduction to C++ on MIT Free Online Course Materials

Introduction to C++ for Programmers | Harvard

Online C Courses | Harvard University

C/C++ Tools

Visual Studiois an integrated development environment (IDE) from Microsoft; which is a feature-rich application that can be used for many aspects of software development. Visual Studio makes it easy to edit, debug, build, and publish your app. By using Microsoft software development platforms such as Windows API, Windows Forms, Windows Presentation Foundation, and Windows Store.

Visual Studio Codeis a code editor redefined and optimized for building and debugging modern web and cloud applications.

Vcpkgis a C++ Library Manager for Windows, Linux, and MacOS.

ReSharper C++is a Visual Studio Extension for C++ developers developed by JetBrains.

AppCodeis constantly monitoring the quality of your code. It warns you of errors and smells and suggests quick-fixes to resolve them automatically. AppCode provides lots of code inspections for Objective-C, Swift, C/C++, and a number of code inspections for other supported languages. All code inspections are run on the fly.

CLionis a cross-platform IDE for C and C++ developers developed by JetBrains.

Code::Blocksis a free C/C++ and Fortran IDE built to meet the most demanding needs of its users. It is designed to be very extensible and fully configurable. Built around a plugin framework, Code::Blocks can be extended with plugins.

CppSharpis a tool and set of libraries which facilitates the usage of native C/C++ code with the.NET ecosystem. It consumes C/C++ header and library files and generates the necessary glue code to surface the native API as a managed API. Such an API can be used to consume an existing native library in your managed code or add managed scripting support to a native codebase.

Conanis an Open Source Package Manager for C++ development and dependency management into the 21st century and on par with the other development ecosystems.

High Performance Computing (HPC) SDKis a comprehensive toolbox for GPU accelerating HPC modeling and simulation applications. It includes the C, C++, and Fortran compilers, libraries, and analysis tools necessary for developing HPC applications on the NVIDIA platform.

Thrustis a C++ parallel programming library which resembles the C++ Standard Library. Thrust's high-level interface greatly enhances programmer productivity while enabling performance portability between GPUs and multicore CPUs. Interoperability with established technologies such as CUDA, TBB, and OpenMP integrates with existing software.

Boostis an educational opportunity focused on cutting-edge C++. Boost has been a participant in the annual Google Summer of Code since 2007, in which students develop their skills by working on Boost Library development.

Automakeis a tool for automatically generating Makefile.in files compliant with the GNU Coding Standards. Automake requires the use of GNU Autoconf.

Cmakeis an open-source, cross-platform family of tools designed to build, test and package software. CMake is used to control the software compilation process using simple platform and compiler independent configuration files, and generate native makefiles and workspaces that can be used in the compiler environment of your choice.

GDBis a debugger, that allows you to see what is going on `inside' another program while it executes or what another program was doing at the moment it crashed.

GCCis a compiler Collection that includes front ends for C, C++, Objective-C, Fortran, Ada, Go, and D, as well as libraries for these languages.

GSLis a numerical library for C and C++ programmers. It is free software under the GNU General Public License. The library provides a wide range of mathematical routines such as random number generators, special functions and least-squares fitting. There are over 1000 functions in total with an extensive test suite.

OpenGL Extension Wrangler Library (GLEW)is a cross-platform open-source C/C++ extension loading library. GLEW provides efficient run-time mechanisms for determining which OpenGL extensions are supported on the target platform.

Libtoolis a generic library support script that hides the complexity of using shared libraries behind a consistent, portable interface. To use Libtool, add the new generic library building commands to your Makefile, Makefile.in, or Makefile.am.

Mavenis a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information.

TAU (Tuning And Analysis Utilities)is capable of gathering performance information through instrumentation of functions, methods, basic blocks, and statements as well as event-based sampling. All C++ language features are supported including templates and namespaces.

Clangis a production quality C, Objective-C, C++ and Objective-C++ compiler when targeting X86-32, X86-64, and ARM (other targets may have caveats, but are usually easy to fix). Clang is used in production to build performance-critical software like Google Chrome or Firefox.

OpenCVis a highly optimized library with focus on real-time applications. Cross-Platform C++, Python and Java interfaces support Linux, MacOS, Windows, iOS, and Android.

Libcu++is the NVIDIA C++ Standard Library for your entire system. It provides a heterogeneous implementation of the C++ Standard Library that can be used in and between CPU and GPU code.

ANTLR (ANother Tool for Language Recognition)is a powerful parser generator for reading, processing, executing, or translating structured text or binary files. It's widely used to build languages, tools, and frameworks. From a grammar, ANTLR generates a parser that can build parse trees and also generates a listener interface that makes it easy to respond to the recognition of phrases of interest.

Oat++is a light and powerful C++ web framework for highly scalable and resource-efficient web application. It's zero-dependency and easy-portable.

JavaCPPis a program that provides efficient access to native C++ inside Java, not unlike the way some C/C++ compilers interact with assembly language.

Cythonis a language that makes writing C extensions for Python as easy as Python itself. Cython is based on Pyrex, but supports more cutting edge functionality and optimizations such as calling C functions and declaring C types on variables and class attributes.

Spdlogis a very fast, header-only/compiled, C++ logging library.

Inferis a static analysis tool for Java, C++, Objective-C, and C. Infer is written inOCaml.

Rust Development

Back to the Top


Rust Learning Resources

Rustis a multi-paradigm programming language focused on performance and safety. Rust has a comparable amount of runtime to C and C++, and has set up its standard library to be amenable towards OS development. Specifically, the standard library is split into two parts: core and std. Core is the lowest-level aspects only, and doesn't include things like allocation, threading, and other higher-level features.

The Rust Language Reference

The Rust Programming Language Book

Learning Rust

Why AWS loves Rust

Rust Programming courses on Udemy

Safety in Systems Programming with Rust at Standford by Ryan Eberhardt

WebAssembly meets Kubernetes with Krustlet using Rust

Microsoft's Project Verona

Rust Tools

Cargois a package manager that downloads your Rust project’s dependencies and compiles your project.

Crateris a tool to run experiments across parts of the Rust ecosystem. Its primary purpose is to detect regressions in the Rust compiler, and it does this by building a large number of crates, running their test suites and comparing the results between two versions of the Rust compiler. It can operate locally (with Docker as the only dependency) or distributed on the cloud. It can operate locally (with Docker as the only dependency) or distributed on the cloud.

VSCode-Rustis plugin that adds language support for Rust to Visual Studio Code. Rust support is powered by a separate language server - either by the official Rust Language Server (RLS) or rust-analyzer, depending on the user's preference. If you don't have it installed, the extension will install it for you (with permission). This extension is built and maintained by the Rust IDEs and editors team with the focus on providing a stable, high quality extension that makes the best use of the respective language server.

Apache Arrowis a development platform for in-memory analytics. It contains a set of technologies that enable big data systems to process and move data fast. Arrow's libraries are available for C, C++, C#, Go, Java, JavaScript, MATLAB, Python, R, Ruby, and Rust.

Wasmerenables super lightweight containers based onWebAssemblythat can run anywhere such as the Desktop to the Cloud and IoT devices, and also embedded inany programming language.

Firecrackeris an open source virtualization technology that is purpose-built for creating and managing secure, multi-tenant container and function-based services that provide serverless operational models. Firecracker runs workloads in lightweight virtual machines, called microVMs, which combine the security and isolation properties provided by hardware virtualization technology with the speed and flexibility of containers. Firecracker has also been integrated in container runtimes, for exampleKata ContainersandWeaveworks Ignite.

Tokiois an event-driven, non-blocking I/O platform for writing asynchronous applications with the Rust programming language.

TiKVis an open-source distributed transactional key-value database that also provides classical key-vlue APIs, but also transactional APIs with ACID compliance.

Sonicis a fast, lightweight and schema-less search backend similar to Elasticsearch in some use-cases.

Hyperis a fast and correct HTTP library for Rust.

Rocketis an async web framework for Rust with a focus on usability, security, extensibility, and speed.

Clippyis a collection of lints to catch common mistakes and improve your Rust code.

Servois a prototype web browser engine written in the Rust language.

Vectoris a high-performance, end-to-end (agent & aggregator) observability data platform that puts the user in control of their observability data.

RustPythonis a Python Interpreter written in Rust.

Miriis an interpreter for Rust's mid-level intermediate representation. It can run binaries and test suites of cargo projects and detect certain classes of undefined behavior. Miri will alsowill also tell you about memory leaks: when there is memory still allocated at the end of the execution, and that memory is not reachable from a global static, Miri will raise an error.

Chalkis an implementation and definition of the Rust trait system using a PROLOG-like logic solver.

stdarchis Rust's standard library vendor-specific APIs and run-time feature detection.

Simpleinfrais rep that contains the tools and automation written by the Rust infrastructure team to manage our services. Using some of the tools in this repo require privileges only infra team members have.

Rustlingsis a small set of exercises to get you used to reading and writing Rust code.

Krustletacts as a Kubernetes Kubelet(written in Rust) by listening on the event stream for new pods that the scheduler assigns to it based on specific Kubernetestolerations.The project is currently experimental.

Operating System

Redoxis a Unix-like Operating System written in Rust, aiming to bring the innovations of Rust to a modern microkernel and full set of applications. Acitvely being developed byJeremy Soeller.

Bottlerocket OSis an open-source Linux-based operating system meant for hosting containers. Bottlerocket focuses on security and maintainability, providing a reliable, consistent, and safe platform for container-based workloads.

Tockis an embedded operating system designed for running multiple concurrent, mutually distrustful applications on Cortex-M and RISC-V based embedded platforms. Tock's design centers around protection, both from potentially malicious applications and from device drivers. Tock uses two mechanisms to protect different components of the operating system. First, the kernel and device drivers are written in Rust, a systems programming language that provides compile-time memory safety, type safety and strict aliasing. Tock uses Rust to protect the kernel (the scheduler and hardware abstraction layer) from platform specific device drivers as well as isolate device drivers from each other. Second, Tock uses memory protection units to isolate applications from each other and the kernel.

Rust on Chrome OSis a document that provides information on creating Rust projects for installation within Chrome OS and Chrome OS SDK.

Writing an OS in Rustis a blog series creates a small operating system in the Rust programming language byPhilipp Oppermann.

Contribute

  • If would you like to contribute to this guide simply make aPull Request.

License

Back to the Top

Distributed under theCreative Commons Attribution 4.0 International (CC BY 4.0) Public License.