Cosa ti serve? Un confronto delle prestazioni dei microcontrollori
Guest post created with ♥ by Josses 🙂|
Chi inizia ad avventurarsi nel meraviglioso mondo della piccola elettronica avrà sicuramente letto delle schede Raspberry Pi o Arduino. È da qui che ho iniziato personalmente a chiedermi, qual è la scheda giusta per ogni progetto?
Introduzione
Ho iniziato a collezionare le mie prime esperienze con questo hobby solo nel 2018. Sono andato in pensione e improvvisamente ho avuto un sacco di tempo. La mia prima azione è stata un libro di 400 pagine sul Raspberry Pi 2. Mi sono ricordato dell’equazione V=i*R a scuola; in Germania, questo è noto come U=R*I, stranamente.
Per capire questa formula, dovrai entrare nell’argomento e sperimentare. Ma il mio obiettivo personale è il principio KISS, Keep It Simple (and) Stupid. Nel frattempo ho terminato progetti più complicati, come un orologio digitale simile al Düsseldorf Rheinturm (https://de.wikipedia.org/wiki/Lichtzeitpegel), il più grande orologio decimale del mondo (secondo la città di Düsseldorf Ho imparato molto leggendo la documentazione di HJBerndt (Homepage von H.-J. Berndt (hjberndt.de) in tedesco) La mia versione finale è un’unità desktop, che passa automaticamente dall’ora legale a quella invernale.
Basato su un ESP8266, che non dispone di un RTC affidabile, recupero l’ora effettiva dal segnale orario NTP tramite WiFi. Questa pagina web è stata di grande aiuto nella definizione dell’ora legale e invernale:
Nel frattempo, ho costruito diverse unità per amici e parenti e possono selezionare la frequenza con cui viene addebitato il budget WiFi. Tipicamente ogni 5 o 10 minuti. L’aggiornamento è indicato da luci rosse in movimento seguite da luci blu. E ogni ora intera, c’è una cascata colorata di tutti i colori, che indica che è trascorsa un’ora. La base è stampata con la mia stampante Ender 3D pro, che si è aggiunta perfettamente al mio nuovo ambiente di ufficio.
Come selezionare una Scheda
Bene, torniamo all’inizio: qual è la tavola giusta? Non esiste una risposta semplice a questa domanda. Troppe opzioni influenzeranno la tua decisione:
- Budget, qual è il prezzo di una scheda?
- Connessioni, quante porte I/O sono necessarie o disponibili?
- Supportato dall’IDE di Arduino o da PlatformIO?
- La scheda ha una funzione dedicata, come ESP32-CAM?
- Il progetto richiede l’accesso a Internet e la funzionalità Wi-Fi?
- e tanti altri …
Anche all’interno della gamma di prodotti, troverai varianti che risponderanno ad alcune o a tutte le tue esigenze. Sorprendentemente l’ESP-01 può fare un ottimo lavoro nel supportare un vecchio Raspberry Pi, a cui mancava la funzione Wifi.
Inoltre, è un ottimo “gate-keeper” per inoltrare messaggi tramite ESP-NOW. Una volta ho costruito un sistema per leggere la temperatura e la densità della luce davanti al garage. La distanza non mi permetteva di ricevere i dati direttamente alla mia scrivania, quindi ho costruito una catena di schede per risolvere questo problema:
- Un ESP8266 è costruito con una luce a energia solare sopra la porta del garage. Raccoglie le informazioni sulla luce e sulla temperatura e invia un messaggio ESP-NOW all’ESP-01 nella mia camera da letto.
- L’ESP-01 ha quindi inviato le informazioni, sempre ESP-NOW, a una scheda combinata ESP32/ePaper
- poi la mia lampada solare si è rotta, quindi non ho la foto. Ma ho colto la soddisfazione di poter fare anche cose meno comuni unendo quello che ho trovato in tante ore di lettura.
- La conoscenza è ciò che rimane dopo che hai dimenticato ciò che hai imparato.
Sì, ho ordinato un buon numero di schede diverse, sia a livello locale che dalla Cina. A volte avrai bisogno di una consegna veloce e affidabile (come per la mia stampante 3D), ma se il tempo non è il problema, puoi tranquillamente ordinare da Banggood o dagli altri. Non ho quasi mai perso una spedizione, ma non ho mai perso i miei soldi. Se ordini spazzatura, riceverai spazzatura. Se pensi di aver ordinato 10 cavi USB, ma ne hai ricevuto solo uno, dovresti incolpare te stesso per non aver letto esattamente ciò che hai ordinato prima di aver pagato il prezzo.
Torniamo all’inizio di questo articolo. La domanda è: cosa vuoi ottenere se inizi il tuo progetto. A volte è bene sapere che puoi anche eseguire l’upgrade o il downgrade.
A volte puoi anche raggiungere risultati notevoli senza l’alimentazione dell’ESPxxxx o Raspberry Pi, come puoi vedere da un simpatico gadget lampeggiante che ho costruito sulla base di un NE555.
Avviamo il confronto delle prestazioni
Come riferimento, ho usato una tabella di confronto, che condividerò volentieri con voi. Naturalmente, può essere migliorato aggiungendo più argomenti, come prezzo, numeri Mhz, ecc.
Schede esp8266 WeMos D1 mini - NodeMCU V2 V2.1 V3 - esp01 - esp01 programmer
Schede esp32 ESP32 Dev Kit v1 - TTGO T-Display 1.14 ESP32 - NodeMCU V3 V2 ESP8266 Lolin32 - NodeMCU ESP-32S - WeMos Lolin32 - WeMos Lolin32 mini - ESP32-CAM programmer - ESP32-CAM bundle - ESP32-WROOM-32 - ESP32-S
Schede Arduino AliExpress
Schede Pico Official Pi Pico - Official Pi Pico W - Waveshare rp2040-zero - WeAct Studio rp2040
Schede stm32 STM32F103C8T6 STM32F401 STM32F411 ST-Link v2 ST-Link v2 official
Ma, come ho detto prima, KISS. Questo grafico mostra non solo la differenza tra le varie varianti di ESP, Raspberry Pi Pico o anche la mia ultima scheda, STM34F401 Black Pill. Inoltre, indica l’affidabilità della CPU e la sorprendente differenza tra le impostazioni del driver del compilatore.
Per ottenere risultati comparabili, il programma di test doveva essere breve, con una sola funzione: visualizzare il numero di iterazioni dopo 10 secondi:
#include "Arduino.h"
unsigned long timeNow, it = 0;
unsigned long timeLast = 0;
boolean running = true;
void setup() {
Serial.begin(115200);
timeNow = millis() / 1000;
timeLast = timeNow;
}
void loop() {
if (!running)
return;
// Time Range of exact 10 seconds
if (timeLast + 10 > timeNow) {
it = it + 1;
} else {
Serial.print("Duration: ");
Serial.print(timeNow);
Serial.print(" seconds, iterations: ");
Serial.println(it);
running = false;
}
timeNow = millis() / 1000;
}
Ecco la tabella comparativa
Variant | Driver | 1st | 2nd | 3rd | 4th | 5th | |
---|---|---|---|---|---|---|---|
ESP8266 | ESP-01 | 1 LED | 764.978 | 778.337 | 778.324 | 778.335 | 778.407 |
2 LED | 778.310 | 778.321 | 778.388 | 778.320 | 778.351 | ||
ESP-12E | Generic ESP8266 Module | 779.078 | 779.067 | 779.185 | 778.984 | 779.149 | |
NodeMCU 1.0 (ESP-12E Module) | 778.877 | 778.816 | 778.687 | 778.857 | 778.835 | ||
ESP8266 D1 Mini | Lolin D1 Mini | 777.557 | 777.515 | 777.511 | 777.594 | 777.405 | |
Generic ESP8266 Module | 778.226 | 778.222 | 778.208 | 778.205 | 778.215 | ||
D1 Minin (Clone) | 777.323 | 777.450 | 777.475 | 777.461 | 777.248 | ||
ESP32 | WROOM-32 | ESP32 Dev Module | 7.253.346 | 7.253.308 | 7.253.367 | 7.253.367 | 7.253.372 |
DOIT ESP32 DEVKIT V1 | 7.252.216 | 7.252.218 | 7.252.215 | 7.252.214 | 7.252.220 | ||
D1 R32 Board | WEMOS D1 Mini ESP | 7.252.325 | 7.252.322 | 7.252.323 | 7.252.324 | 7.252.325 | |
ESP32 Dev Module | 7.253.416 | 7.253.417 | 7.253.416 | 7.253.416 | 7.253.416 | ||
ESP32-S | ESP-CAM | AI Thinker ESP32 CAM | 6.401.079 | 6.401.083 | 6.401.083 | 6.401.083 | 6.401.083 |
ESP32 Dev Module | 7.253.612 | 7.253.612 | 7.253.614 | 7.253.639 | 7.253.609 | ||
Arduino Nano | Arduino Nano | old Bootloader | 243.392 | 243.392 | 243.392 | 243.392 | 243.392 |
Arduino Uno | GEEKCREIT clone | Arduino Uno | 243.392 | 243.392 | 243.392 | 243.392 | 243.392 |
Arduino Mega 2560 | no-name clone | Arduino Mega 2560 | 233.021 | 233.021 | 233.021 | 233.021 | 233.021 |
Raspberry Pi RP2040 | original | Raspberry Pi Pico | 6.484.763 | 6.484.770 | 6.484.773 | 6.484.765 | 6.484.779 |
STM32 | Black Pill STM32F4 | BlackPill F401CC | 10.468.847 | 10.468.847 | 10.468.843 | 10.468.819 | 10.468.842 |
Come puoi vedere dal grafico, i prodotti Arduino originali (Nano, Uno e Mega2560) hanno tutti presentato risultati identici dopo 5 test, anche se alla velocità più bassa di tutte le schede testate.
esp8266 risoluzione dei problemi
Ah sì, in effetti, dovresti considerare anche l’affidabilità. A volte la scheda ESP8266 si rifiuta di fare il suo lavoro. Durante le mie escursioni nel world wide web, ho trovato da qualche parte questo messaggio:
Infine, se sostituisco:
while(!displayAnimate());
con
while(!displayAnimate()) yield();
funziona e ora sembra migliore.
Yielding
Questa è una delle differenze più critiche tra l’ESP8266 e un microcontrollore Arduino più classico. L’ESP8266 esegue molte funzioni di utilità in background: mantenere il WiFi connesso, gestire lo stack TCP/IP ed eseguire altre attività. Il blocco dell’esecuzione di queste funzioni può causare l’arresto anomalo e il ripristino dell’ESP8266. Per evitare questi misteriosi ripristini, evita i loop lunghi e bloccanti nel tuo sketch.
Gli straordinari creatori delle librerie Arduino ESP8266 hanno anche implementato una funzione yield(), che richiama le funzioni in background per consentire loro di fare le loro cose.
Conclusione
Ora spetta al lettore decidere quale scheda può fare al caso suo. Successo!