- Arduino Uno (ATmega328P, 8 bits, 16 MHz)
- Blue Pill (STM32F103, 32 bits, 72 MHz)
- Wemos D1 R1 (ESP8266, 32 bits, 80 MHz)
- ESP32 (32 bits, 240 MHz)
Un aspect intéressant, c'est que nous obtenons une comparaison des performances lorsque les 4 cartes sont programmées de la même manière, au moyen de l'IDE Arduino. La simplicité du "langage" Arduino se fait souvent au détriment de la performance, mais cette contrainte ne devrait pas désavantager une carte par rapport aux autres.
De plus, aucune des 4 cartes ne coûte significativement plus cher que les autres: il s'agit strictement de cartes offertes à très bas prix, et faciles à trouver.
Le tableau ci-dessous présente la durée de chaque test, pour chacune des 4 cartes analysées. Plus le temps mesuré est court, plus la carte est rapide.
Signification des couleurs:
Le plus rapide | Le deuxième | Le troisième | Le plus lent |
Tous les temps sont en microsecondes:
Test | Uno | Blue Pill | ESP8266 | ESP32 |
1/F_CPU | 0,0625 | 0,0139 | 0,0125 | 0,0042 |
nop (overload) | 0,26 | 0,07 | 0,05 | 0,021 |
digitalRead | 4,842 | 0,604 | 0,54 | 0,141 |
digitalWrite | 4,184 | 0,626 | 1,045 | 0,106 |
pinMode | 4,467 | 2,211 | 1,475 | 2,744 |
multiply byte | 0,632 | 0,11 | 0,1 | 0,037 |
divide byte | 5,412 | 0,114 | 0,403 | 0,049 |
add byte | 0,568 | 0,098 | 0,1 | 0,032 |
multiply int | 1,386 | 0,082 | 0,148 | 0,053 |
divide integer | 14,272 | 0,096 | 0,437 | 0,054 |
add integer | 0,883 | 0,082 | 0,135 | 0,053 |
multiply long | 6,102 | 0,084 | 0,148 | 0,051 |
divide long | 38,662 | 0,096 | 0,422 | 0,049 |
add long | 1,764 | 0,083 | 0,135 | 0,053 |
multiply float | 7,49 | 0,989 | 0,738 | 0,051 |
divide float | 80,187 | 6,971 | 3,772 | 0,224 |
add float | 9,417 | 1,236 | 0,683 | 0,049 |
itoa() | 12,957 | NA | 2,582 | 0,699 |
ltoa() | 12,987 | NA | 9,297 | 0,699 |
dtostrf() | 80,687 | 93,321 | NA | 11,149 |
random() | 92,612 | 1,571 | 0,998 | 0,699 |
y |= (1<<x) | 0,568 | 0,069 | 0,11 | 0,045 |
bitSet() | 0,568 | 0,069 | 0,11 | 0,045 |
Les résultats sont conformes à ce que la vitesse d'horloge de chaque microcontrôleur nous permettait de prévoir: l'Arduino Uno est le plus lent, et de loin, pour la grande majorité des tests. La STM32 Blue Pill et l'ESP8266 offrent souvent des performances assez comparables, et l'ESP32 est beaucoup plus rapide que tous les autres.
La fréquence d'horloge de l'ESP32 est 15 fois plus rapide que celle de l'Arduino Uno, mais quand vient le temps de diviser deux entiers de type "long", l'ESP32 effectue l'opération...789 fois plus rapidement que le Uno!
Contrairement à ce qu'on pourrait croire à prime abord, l'utilisation d'un ESP32 n'est pas uniquement pertinente dans les applications qui nécessitent du WiFi: on peut très bien choisir de l'utiliser purement à cause de sa vitesse.
Bien sûr, ce n'est pas une raison pour jeter votre Arduino Uno à la poubelle: pour la plupart des applications, sa "faible" vitesse d'exécution est amplement suffisante.
Yves Pelletier (Twitter, Facebook)
Merci beaucoup pour ce test! Les microcontrôleurs Atmel ont encore de l'avenir, notamment avec les 32u4 et leur HID USB programmable, ou les ATtiny avec leur petite taille et leur facilité d'intégration sur un circuit maison.
RépondreSupprimerMerci bcp
RépondreSupprimer