IoT device selection list
This IoT device selection list aims to give partners a starting point with IoT hardware to build prototypes and proof-of-concepts quickly and easily.[^1]
All boards listed support users of all experience levels.
Note
This table is not intended to be an exhaustive list or for bringing solutions to production. [^2] [^3]
Security advisory: Except for the Azure Sphere, it's recommended to keep these devices behind a router and/or firewall.
[^1]: If you're new to hardware programming, for MCU dev work we recommend using VS Code Arduino Extension or VS Code Platform IO Extension. For SBC dev work, you program the device like you would a laptop, that is, on the device itself. The Raspberry Pi supports VS Code development.
[^2]: Devices in the availability of support resources, common boards used for prototyping and PoCs, and boards that support beginner-friendly IDEs like Arduino IDE and VS Code extensions; for example, Arduino Extension and Platform IO extension. For simplicity, we aimed to keep the total device list <6. Other teams and individuals may have chosen to feature different boards based on their interpretation of the criteria.
[^3]: For bringing devices to production, you likely want to test a PoC with a specific chipset, ST's STM32 or Microchip's Pic-IoT breakout board series, design a custom board that can be manufactured for lower cost than the MCUs and SBCs listed here, or even explore FPGA-based dev kits. You may also want to use a development environment for professional electrical engineering like STM32CubeMX or ARM mBed browser-based programmer.
Contents
Section | Description |
---|---|
Start here | A guide to using this selection list. Includes suggested selection criteria. |
Selection diagram | A visual that summarizes common selection criteria with possible hardware choices. |
Terminology and ML requirements | Terminology and acronym definitions and device requirements for edge machine learning (ML). |
MCU device list | A list of recommended MCUs, for example, ESP32, with tech specs and alternatives. |
SBC device list | A list of recommended SBCs, for example, Raspberry Pi, with tech specs and alternatives. |
Start here
How to use this document
Use this document to better understand IoT terminology, device selection considerations, and to choose an IoT device for prototyping or building a proof-of-concept. We recommend the following procedure:
Read through the 'what to consider when choosing a board' section to identify needs and constraints.
Use the Application Selection Visual to identify possible options for your IoT scenario.
Using the MCU or SBC Device Lists, check device specifications and compare against your needs/constraints.
What to consider when choosing a board
To choose a device for your IoT prototype, see the following criteria:
Microcontroller unit (MCU) or single board computer (SBC)
- An MCU is preferred for single tasks, like gathering and uploading sensor data or machine learning at the edge. MCUs also tend to be lower cost.
- An SBC is preferred when you need multiple different tasks, like gathering sensor data and controlling another device. It may also be preferred in the early stages when there are many options for possible solutions - an SBC enables you to try lots of different approaches.
Processing power
Memory: Consider how much memory storage (in bytes), file storage, and memory to run programs your project needs.
Clock speed: Consider how quickly your programs need to run or how quickly you need the device to communicate with the IoT server.
End-of-life: Consider if you need a device with the most up-to-date features and documentation or if you can use a discontinued device as a prototype.
Power consumption
Power: Consider how much voltage and current the board consumes. Determine if wall power is readily available or if you need a battery for your application.
Connection: Consider the physical connection to the power source. If you need battery power, check if there's a battery connection port available on the board. If there's no battery connector, seek another comparable board, or consider other ways to add battery power to your device.
Inputs and outputs
Ports and pins: Consider how many and of what types of ports and I/O pins your project may require. * Other considerations include if your device will be communicating with other sensors or devices. If so, identify how many ports those signals require.
Protocols: If you're working with other sensors or devices, consider what hardware communication protocols are required. * For example, you may need CAN, UART, SPI, I2C, or other communication protocols.
Power: Consider if your device will be powering other components like sensors. If your device is powering other components, identify the voltage, and current output of the device's available power pins and determine what voltage/current your other components need.
Types: Determine if you need to communicate with analog components. If you are in need of analog components, identify how many analog I/O pins your project needs.
Peripherals: Consider if you prefer a device with onboard sensors or other features like a screen, microphone, etc.
Development
Programming language: Consider if your project requires higher-level languages beyond C/C++. If so, identify the common programming languages for the application you need (for example, Machine Learning is often done in Python). Think about what SDKs, APIs, and/or libraries are helpful or necessary for your project. Identify what programming language(s) these are supported in.
IDE: Consider the development environments that the device supports and if this meets the needs, skill set, and/or preferences of your developers.
Community: Consider how much assistance you want/need in building a solution. For example, consider if you prefer to start with sample code, if you want troubleshooting advice or assistance, or if you would benefit from an active community that generates new samples and updates documentation.
Documentation: Take a look at the device documentation. Identify if it's complete and easy to follow. Consider if you need schematics, samples, datasheets, or other types of documentation. If so, do some searching to see if those items are available for your project. Consider the software SDKs/APIs/libraries that are written for the board and if these items would make your prototyping process easier. Identify if this documentation is maintained and who the maintainers are.
Security
Networking: Consider if your device is connected to an external network or if it can be kept behind a router and/or firewall. If your prototype needs to be connected to an externally facing network, we recommend using the Azure Sphere as it is the only reliably secure device.
Peripherals: Consider if any of the peripherals your device connects to have wireless protocols (for example, WiFi, BLE).
Physical location: Consider if your device or any of the peripherals it's connected to will be accessible to the public. If so, we recommend making the device physically inaccessible. For example, in a closed, locked box.
Application selection visual
Note
This list is for educational purposes only, it is not intended to endorse any products.
Terminology and ML requirements
This section provides definitions for embedded terminology and acronyms and hardware specifications for visual, auditory, and sensor machine learning applications.
Terminology
Terminology and acronyms are listed in alphabetical order.
Term | Definition |
---|---|
ADC | Analog to digital converter; converts analog signals from connected components like sensors to digital signals that are readable by the device |
Analog pins | Used for connecting analog components that have continuous signals like photoresistors (light sensors) and microphones |
Clock speed | How quickly the CPU can retrieve and interpret instructions |
Digital pins | Used for connecting digital components that have binary signals like LEDs and switches |
Flash (or ROM) | Memory available for storing programs |
IDE | Integrated development environment; a program for writing software code |
IMU | Inertial measurement unit |
IO (or I/O) pins | Input/Output pins used for communicating with other devices like sensors and other controllers |
MCU | Microcontroller Unit; a small computer on a single chip that includes a CPU, RAM, and IO |
MPU | Microprocessor unit; a computer processor that incorporates the functions of a computer's central processing unit (CPU) on a single integrated circuit (IC), or at most a few integrated circuits. |
ML | Machine learning; special computer programs that do complex pattern recognition |
PWM | Pulse width modulation; a way to modify digital signals to achieve analog-like effects like changing brightness, volume, and speed |
RAM | Random access memory; how much memory is available to run programs |
SBC | Single board computer |
TF | TensorFlow; a machine learning software package designed for edge devices |
TF Lite | TensorFlow Lite; a smaller version of TF for small edge devices |
Machine learning hardware requirements
Vision ML
- Speed: 200 MHz
- Flash: 300 kB
- RAM: 100 kB
Speech ML
- Speed: 60 MHz [^4]
- Flash: 50 kB
- RAM: 8 kB
Sensor ML (for example, motion, distance)
- Speed: 20 MHz
- Flash: 20 kB
- RAM: 2 kB
[^4]: Speed requirement is largely due to the need for processors to be able to sample a minimum of 6 kHz for microphones to be able to process human vocal frequencies.
MCU device list
Following is a comparison table of MCUs in alphabetical order. The list isn't not intended to be exhaustive.
Note
This list is for educational purposes only, it is not intended to endorse any products. Prices shown represent the average across multiple distributors and are for illustrative purposes only.
Board Name | Price Range (USD) | What is it used for? | Software | Speed | Processor | Memory | Onboard Sensors and Other Features | IO Pins | Video | Radio | Battery Connector? | Operating Voltage | Getting Stated Guides | Alternatives |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Azure Sphere MT3620 Dev Kit | ~$40 - $100 | Highly secure applications | C/C++, VS Code, VS | 500 MHz & 200 MHz | MT3620 (tri-core--1 x Cortex A7, 2 x Cortex M4) | 4-MB RAM + 2 x 64-KB RAM | Certifications: CE/FCC/MIC/RoHS | 4 x Digital IO, 1 x I2S, 4 x ADC, 1 x RTC | - | Dual-band 802.11 b/g/n with antenna diversity | - | 5 V | 1. Azure Sphere Samples Gallery, 2. Azure Sphere Weather Station | N/A |
Adafruit HUZZAH32 – ESP32 Feather Board | ~$20 - $25 | Monitoring; Beginner IoT; Home automation | Arduino IDE, VS Code | 240 MHz | 32-Bit ESP32 (dual-core Tensilica LX6) | 4 MB SPI Flash, 520 KB SRAM | Hall sensor, 10x capacitive touch IO pins, 50+ add-on boards | 3 x UARTs, 3 x SPI, 2 x I2C, 12 x ADC inputs, 2 x I2S Audio, 2 x DAC | - | 802.11b/g/n HT40 Wi-Fi transceiver, baseband, stack and LWIP, Bluetooth and BLE | √ | 3.3 V | 1. Scientific freezer monitor, 2. Azure IoT SDK Arduino samples | Arduino Uno WiFi Rev 2 (~$50 - $60) |
Arduino Nano RP2040 Connect | ~$20 - $25 | Remote control; Monitoring | Arduino IDE, VS Code, C/C++, MicroPython | 133 MHz | 32-bit RP2040 (dual-core Cortex M0+) | 16 MB Flash, 264-kB RAM | Microphone, Six-axis IMU with AI capabilities | 22 x Digital IO, 20 x PWM, 8 x ADC | - | WiFi, Bluetooth | - | 3.3 V | - | Adafruit Feather RP2040 (NOTE: also need a FeatherWing for WiFi) |
ESP32-S2 Saola-1 | ~$10 - $15 | Home automation; Beginner IoT; ML; Monitoring; Mesh networking | Arduino IDE, Circuit Python, ESP IDF | 240 MHz | 32-bit ESP32-S2 (single-core Xtensa LX7) | 128 kB Flash, 320 kB SRAM, 16 kB SRAM (RTC) | 14 x capacitive touch IO pins, Temp sensor | 43 x Digital pins, 8 x PWM, 20 x ADC, 2 x DAC | Serial LCD, Parallel PCD | Wi-Fi 802.11 b/g/n (802.11n up to 150 Mbps) | - | 3.3 V | 1. Secure face detection with Azure ML, 2. Azure Cost Monitor | ESP32-DevKitC (~$10 - $15) |
Wio Terminal (Seeed Studio) | ~$40 - $50 | Monitoring; Home Automation; ML | Arduino IDE, VS Code, MicroPython, ArduPy | 120 MHz | 32-bit ATSAMD51 (single-core Cortex-M4F) | 4 MB SPI Flash, 192-kB RAM | On-board screen, Microphone, IMU, buzzer, microSD slot, light sensor, IR emitter, Raspberry Pi GPIO mount (as child device) | 26 x Digital Pins, 5 x PWM, 9 x ADC | 2.4" 320x420 Color LCD | dual-band 2.4Ghz/5Ghz (Realtek RTL8720DN) | - | 3.3 V | Monitor plants with Azure IoT | Adafruit FunHouse (~$30 - $40) |
SBC device list
Following is a comparison table of SBCs in alphabetical order. This list isn't intended to be exhaustive.
Note
This list is for educational purposes only, it is not intended to endorse any products. Prices shown represent the average across multiple distributors and are for illustrative purposes only.
Board Name | Price Range (USD) | What is it used for? | Software | Speed | Processor | Memory | Onboard Sensors and Other Features | IO Pins | Video | Radio | Battery Connector? | Operating Voltage | Getting Started Guides | Alternatives |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Raspberry Pi 4, Model B | ~$30 - $80 | Home automation; Robotics; Autonomous vehicles; Control systems; Field science | Raspberry Pi OS, Raspbian, Ubuntu 20.04/21.04, RISC OS, Windows 10 IoT, more | 1.5 GHz CPU, 500 MHz GPU | 64-bit Broadcom BCM2711 (quad-core Cortex-A72), VideoCore VI GPU | 2GB/4GB/8GB LPDDR4 RAM, SD Card (not included) | 2 x USB 3 ports, 1 x MIPI DSI display port, 1 x MIPI CSI camera port, 4-pole stereo audio and composite video port, Power over Ethernet (requires HAT) | 26 x Digital, 4 x PWM | 2 micro-HDMI composite, MPI DSI | WiFi, Bluetooth | √ | 5 V | 1. Send data to IoT Hub, 2. Monitor plants with Azure IoT | BeagleBone Black Wireless (~$50 - $60) |
NVIDIA Jetson 2 GB Nano Dev Kit | ~$50 - $100 | AI/ML; Autonomous vehicles | Ubuntu-based JetPack | 1.43 GHz CPU, 921 MHz GPU | 64-bit Nvidia CPU (quad-core Cortex-A57), 128-CUDA-core Maxwell GPU coprocessor | 2GB/4GB LPDDR4 RAM | 472 GFLOPS for AI Perf, 1 x MIPI CSI-2 connector | 28 x Digital, 2 x PWM | HDMI, DP (4 GB only) | Gigabit Ethernet, 802.11ac WiFi | √ | 5 V | Deepstream integration with Azure IoT Central | BeagleBone AI (~$110 - $120) |
Raspberry Pi Zero W2 | ~$15 - $20 | Home automation; ML; Vehicle modifications; Field Science | Raspberry Pi OS, Raspbian, Ubuntu 20.04/21.04, RISC OS, Windows 10 IoT, more | 1 GHz CPU, 400 MHz GPU | 64-bit Broadcom BCM2837 (quad-core Cortez-A53), VideoCore IV GPU | 512 MB LPDDR2 RAM, SD Card (not included) | 1 x CSI-2 Camera connector | 26 x Digital, 4 x PWM | Mini-HDMI | WiFi, Bluetooth | - | 5 V | Send and visualize data to Azure IoT Hub | Onion Omega2+ (~$10 - $15) |
DFRobot LattePanda | ~$100 - $160 | Home automation; Hyperscale cloud connectivity; AI/ML | Windows 10, Ubuntu 16.04, OpenSuSE 15 | 1.92 GHz | 64-bit Intel Z8350 (quad-core x86-64), Atmega32u4 coprocessor | 2 GB DDR3L RAM, 32 GB eMMC/4GB DDR3L RAM, 64-GB eMMC | - | 6 x Digital (20 x via Atmega32u4), 6 x PWM, 12 x ADC | HDMI, MIPI DSI | WiFi, Bluetooth | √ | 5 V | 1. Getting started with Microsoft Azure, 2. Home Monitoring System with Azure | Seeed Odyssey X86J4125800 (~$210 - $230) |
Questions? Requests?
Please submit an issue!
See Also
Other helpful resources include: