Arduino UNO R4

Cet article avait déjà été publié en octobre 2023 dans la BibliothÚque Numérique des éditions ENI.

Un petit aperçu de l'article publié dans la BibliothÚque Numérique des éditions ENI.

Mais il Ă©tait rĂ©servĂ© aux abonĂ©s. Alors, aprĂšs avoir laissĂ© l’exclusivitĂ© aux Editions ENI pendant 2 mois, je peux dĂ©sormais le republier sur mon blog (disons donc que c’est votre cadeau de NoĂ«l).

Le cadeau de noel d'Ardui, la mascotte du blog

Uno R3, l’actuel roi Arduino

Depuis sa sortie en 2011, l’Arduino Uno (R3) est devenu la rĂ©fĂ©rence dans le monde des cartes de dĂ©veloppement. Non seulement la fondation Arduino a rĂ©ussi Ă  en vendre 10 millions d’exemplaire, mais si l’on ajoute les innombrables clones et contrefaçons (vendus parfois Ă  des prix trĂšs attractifs), il faut certainement multiplier ce chiffre par 3, 4 (ou mĂȘme peut ĂȘtre beaucoup plus
).

Arduino Uno R3

Une telle longĂ©vitĂ© est extrĂȘmement rare dans le milieu de la tech oĂč d’habitude les objets sont rapidement obsolĂštes. Mais, aprĂšs 13 ans l’Arduino se vend encore trĂšs bien. Pourtant la fondation Arduino ne cesse pas d’innover :

  • L’Arduino Leonardo possĂšde le mĂȘme format. Il est commercialisĂ© (Ă  peu prĂšs au mĂȘme prix) depuis 2012 et en plus il peut ĂȘtre reconnu par l’ordinateur comme un pĂ©riphĂ©rique USB (ce qui permet par exemple imiter un clavier et/ou une souris).
  • D’autres dĂ©clinaisons de l’Arduino Uno (Ă©galement au mĂȘme format) se sont succĂ©dĂ© avec de nouvelles fonctions (WiFi, Ethernet) ou des microcontrĂŽleurs plus puissants.
  • L’Arduino Mega surpasse l’Arduino Uno (R3) dans tout les domaines (microcontrĂŽleurs plus puissants, plus de connecteurs), tout en restant assez compact et en conservant une compatibilitĂ© avec les cartes d’extensions (shield) de son petit frĂšre.
  • Il existe Ă©galement des cartes plus compactes (Arduino Mini, Nano, Micro, MKR
), parfois plus puissantes et offrant de nouvelles fonctions (Wifi, GSM
).
  • Et de nombreuses cartes rĂ©pondant Ă  des besoins plus spĂ©cifiques (Arduino Robot, Esplora, LilyPad
). Je n’en parlerai pas cette fois-ci mais elles mĂ©riteraient certainement un jour que je leur consacre un article

Différentes cartes Arduino

Alors comment expliquer qu’en 2023, l’Arduino Uno (R3) reste toujours (et de trĂšs loin) le modĂšle le plus utilisĂ© ?

  • Il est fiable et robuste (en cas d’utilisation « normale », il est trĂšs rare qu’un Arduino tombe en panne).
  • Bien sĂ»r, il existe des modĂšles mieux Ă©quipĂ©s ou plus puissant, mais il reste suffisant pour rĂ©aliser de nombreux projet.
  • Il est modulable, en cas de besoin, il est trĂšs facile d’ajouter de nouvelle fonctions (LED, Buzzer, moteurs, WiFi…).
  • Son prix est raisonnable (pour un produit fabriquĂ© en Europe). Une vingtaine d’Euros, c’est le prix d’un repas dans une pizzeria.
  • Avec plusieurs dizaines de millions d’utilisateurs, sa communautĂ© a atteint un masse critique, l’immense majoritĂ© de la documentation disponible lui est consacrĂ©e. Les dĂ©butants n’osent pas s’aventurer en terrain inconnu et ceux qui l’utilisent dĂ©jĂ  n’Ă©prouvent pas le besoin de le remplacer puisqu’il en sont satisfait.

Mais depuis quelques annĂ©es, les concurrents ne se contentent plus de fabriquer de simples clones de l’Arduino. Ils innovent en proposant des cartes de dĂ©veloppement plus performantes et beaucoup moins chĂšres (notamment avec les microcontrĂŽleurs ESP8266, ESP32 ou RP2040).

Arduino Uno R4 Minima et Arduino Uno R4 Wifi

Arduino Uno R4 Minima

Le modĂšle de base semble plutĂŽt proche de l’Arduino Uno R3. Tout a Ă©tĂ© fait pour que la transition entre l’ancien et le nouveau modĂšle soit la plus douce possible. L’Arduino Uno R4 Minima possĂšde la mĂȘme taille, les mĂȘmes connecteurs (situĂ©s exactement au mĂȘme endroit).

Arduino Uno R4 Minima

Il fonctionne mĂȘme sous 5V, alors que la plupart des microcontrĂŽleurs rĂ©cent sont passĂ©s au 3,3V. Vous ne devriez donc rencontrer pas rencontrer de problĂšmes (au niveau matĂ©riel) en insĂ©rant une carte d’extension (shield) conçue Ă  la base pour l’Arduino Uno R3.

Arduino Uno R4 Minima et la carte Ethernet Shield (V1)

Niveau logiciel, ça dĂ©pend. Les bibliothĂšques officielles de la fondation Arduino sont dĂ©jĂ  compatible et les plus courantes devrait l’ĂȘtre rapidement. Mais si vous utilisez une bibliothĂšque propriĂ©taire ou qui n’est pas souvent mise Ă  jour, il est possible qu’elle ne fonctionne plus avec l’Arduino Uno R4. Vous trouverez Ă  l’adresse suivante la liste (non exhaustive) des cartes shields compatible : https://docs.arduino.cc/tutorials/uno-r4-minima/shield-compatibility

Prix et disponibilités

Depuis le 26 juin 2023, vous pouvez commander les versions Minima et WiFi sur le site officiel de la fondation. Les autres boutiques ont Ă©tĂ© approvisionnĂ©es plus tard (J’ai dĂ» attendre un mois de plus pour recevoir mes cartes prĂ©commandĂ©es chez MC Hobby).

Comme vous pouvez le constater, l’Arduino Uno R4 Minima coĂ»te beaucoup moins cher que l’Arduino Un R3.

L'Arduino Uno R3 et l'Arduino Uno R4 Minima en vente sur la boutique de la fondation Arduino (été 2023)

PremiĂšres constatations

En comparant visuellement les 2 cartes, nous remarquons déjà quelques différences.

L'Arduino Uno R3 et l'Arduino Uno R4 Minima

Contrairement Ă  l’Arduino Uno R3 qui laisse encore le choix entre la version DIP (microcontrĂŽleur grand format et amovible) et la version SMD (microcontrĂŽleur plus petit et soudĂ© Ă  la surface de la carte), l’Arduino Uno R4 existe seulement en version SMD. Cela explique peut ĂȘtre la diffĂ©rence de prix entre les 2 versions (puisque cela coĂ»te moins cher Ă  fabriquer).

Apparemment, le microcontrĂŽleur RA4M1 n’existe pas en version DIP. Ce qui est bien dommage pour les plus bricoleurs. Dans certains cas, il peut ĂȘtre intĂ©ressant d’enlever le microcontrĂŽleur pour le reprogrammer ou construire un clone d’Arduino Uno en utilisant un autre Arduino (sans microcontrĂŽleur) comme contrĂŽleur USB.

Bonne nouvelle, le vieillissant port USB (de type B) a enfin été remplacé par un port USB C. Une prise plus compacte, plus pratique à utiliser et maintenant beaucoup plus courante.

Il y a encore beaucoup de surface disponible sur le dessus de l’Arduino Uno R4 Minima. Le quadrillage dessinĂ© permet de l’habiller en Ă©voquant subtilement le milieu scolaire (qui sera certainement l’un des principaux dĂ©bouchĂ© de cette carte). Bien sĂ»r, j’aurais prĂ©fĂ©rĂ© un peu plus de fantaisie, mais la sobriĂ©tĂ© Ă  aussi son charme et elle est quand mĂȘme trĂšs belle.

Par contre je suis un peu déçu par le retour au bleu cobalt (une couleur un peu trop classique). La fondation Arduino nous avait habitué à sa couleur, le bleu canard (ou bleu Arduino) qui permettait de distinguer facilement les cartes officielles des clones. Alors pourquoi changer ce qui faisait pourtant sa spécificité ?

Caractéristiques techniques

Comme vous pouvez le voir sur ce tableau comparatif, le nouveau microcontrĂŽleur de l’Arduino est beaucoup plus performant. Il fonctionnement plus rapidement et dispose de plus de mĂ©moire. La gestion Ă©lectrique de la carte a Ă©galement Ă©tĂ© amĂ©liorĂ©e puisqu’elle accepte dĂ©sormais une alimentation pouvant aller jusqu’Ă  24 V.

Cependant, le microcontrĂŽleur Renesas RA4M1 semble un peu moins robuste que l’ATmega328P puisque le courant maximum utilisable sur une des sorties baisse de 20 mA Ă  seulement 8 mA.

Arduino

Uno R3Uno R4 Minima
MicrocontrĂŽleur ATmega328PRenesas RA4M1
Connecteur USBUSB-BUSB-C
Tension d’entrĂ©e (alimentation)7 V Ă  12 V6 V Ă  24 V
Tension de fonctionnement5 V5 V
Fréquence16 MHz48 MHz
Entrées analogiques66
Sorties analogiques virtuelles (PWM)66
Sortie analogique (DAC)01
Entrées/sorties numériques1414
Courant maximum d’une sortie20 mA8 mA
EEPROM ou Data Flash1 Ko8 Ko
SRAM2 Ko32 Ko
FLASH32 Ko256 Ko
Horloge RTCnonoui

Blink, le premier programme

Rien de tel qu’un programme aussi simple pour vĂ©rifier que la communication entre l’IDE et l’Arduino se dĂ©roule parfaitement (vous trouverez plus de dĂ©tails sur le programme Blink dans mon livre).

La LED interne (L) clignote sur l'Arduino R4 Minima

Le sketch Blink se contente de faire clignoter la LED interne de l’Arduino. Pour l’ouvrir, allez dans Fichier – Exemples – 01.Basics – Blink

Ouverture du sketch Blink

Avec l’IDE Arduino 1.8

Avant d’utiliser votre Arduino Uno R4 (Minima ou WiFi), vous devez ajouter ses paramĂštres dans l’IDE. Pour cela, allez dans Outils – Type de carte – Gestionnaire de carte, tapez simplement « r4 » dans le champ de recherche, sĂ©lectionnez Arduino UNO R4 Boards et cliquez sur le bouton Installer.

Installation des cartes Arduino Uno R4 dans l'IDE Arduino 1.8

Allez ensuite dans Outils – Type de Carte – Arduino Renesas UNO R4 Boards et sĂ©lectionner la carte Arduino UNO R4 Minima.

Sélection de la carte Arduino Uno R4 Minima

Puis, reliez l’Arduino Ă  l’ordinateur et sĂ©lectionnez le bon port COM (COM46 dans cet exemple).

Sélection du port COM

Maintenant, vous pouvez lancer le tĂ©lĂ©versement, n’hĂ©sitez pas Ă  modifier la valeur de la fonction delay pour faire clignoter plus ou moins vite la LED.

Avec l’IDE Arduino 2.1

Pour ajouter les paramĂštres de l’Arduino Uno R4 Minima ou WiFi, allez dans Outils -Carte – Gestionnaire de carte, (ou cliquez simplement sur l’icĂŽne correspondante dans la barre latĂ©rale), tapez « r4 » dans le champ de recherche, sĂ©lectionnez Arduino UNO R4 Boards et cliquez sur le bouton Installer.

Installation des cartes Arduino Uno R4 dans l'IDE Arduino 2.1

Reliez l’Arduino Ă  l’ordinateur, cliquez sur Selectionner une carte, le modĂšle d’Arduino (avec son port COM) est automatiquement reconnu, il suffit simplement de le sĂ©lectionner.

Sélection de la carte Arduino Uno R4 Minima et du port COM

Modifiez éventuellement la valeur de la fonction delay (pour faire clignoter plus ou moins vite la LED) et lancer le téléversement.

Le téléversement s'est déroulé sans erreur

La résolution des entrées analogiques

Par dĂ©faut, les entrĂ©es analogiques de l’Arduino Uno R4 renvoient une valeur comprise entre 0 et 1023 (dĂ©finie sur 10 bits). Mais il est possible d’augmenter la rĂ©solution pour passer Ă  12 ou 14 bits. Pour tester cette possibilitĂ©, je vous propose de reproduire le branchement suivant (ou d’utiliser un module Grove) pour relier le potentiomĂštre Ă  l’entrĂ©e A0 de l’Arduino.

TĂ©lĂ©verser le code suivant dans l’Arduino et ouvrez le moniteur sĂ©rie.

// R4_entree_analogique_10_bits
const int POTENTIOMETRE = A0;
void setup() {
  // Déclaration des entrées et des sorties
  pinMode(POTENTIOMETRE, INPUT);
  // Moniteur série
  Serial.begin(9600);
}
void loop() {
  // Affichage de la valeur mesurée
  Serial.println(analogRead(POTENTIOMETRE));
  // Pause d'une seconde
  delay(1000);
}

Lorsque vous manipulez le potentiomĂštre la valeur change de 0 et 1023 (10 bits).

Pour augmenter la rĂ©solution, ajoutez simplement l’instruction :

analogReadResolution(12); // Résolution à 12 Bits (0-4096)

ou

analogReadResolution(14); // Résolution à 14 Bits (0-16383)

dans la fonction setup(). Voilà par exemple le code complet pour obtenir une résolution de 14 bits :

// R4_entree_analogique_14_bits
const int POTENTIOMETRE = A0;
void setup() {
// Déclaration des entrées et des sorties
pinMode(POTENTIOMETRE, INPUT);
// Résolution à 14 Bits (0-16383)
analogReadResolution(14);
// Moniteur série
Serial.begin(9600);
}
void loop() {
// Affichage de la valeur mesurée
Serial.println(analogRead(POTENTIOMETRE));
// Pause d'une seconde
delay(1000);
}

Maintenant, la valeur est comprise entre 0 et 16383 (14 bits).

Affichage des valeurs sur le moniteur série (14 bits)

Si vous le souhaitez, vous pouvez aussi essayer avec une résolution de 12 bits (entre 0 et 4096). Et bien sûr, cela fonctionne également avec les autres entrées analogiques.

Convertisseur numérique-analogique (DAC)

Les pseudo sorties analogiques de l’Arduino Uno R3 (PWM) sont en fait des sorties numĂ©riques qui passent trĂšs rapidement de l’Ă©tat haut (5V) Ă  l’Ă©tat bas. Ce qui fait qu’en moyenne la tension de sortie varie entre 0 et 5V (je rĂ©sume rapidement, mais ce principe est expliquĂ© beaucoup plus en dĂ©tail dans mon livre).

Les sorties PWM (Pulse Width Modulation) sont identifiĂ©es par ce symbole ~. Elles sont aussi disponibles sur l’Arduino Uno R4, cependant il possĂšde Ă©galement sur le port A0, un vĂ©ritable convertisseur numĂ©rique-analogique (Digital-to-Analog Converter ou DAC) qui gĂ©nĂšre une onde sinusoĂŻdale.

Pour modifier l’intensitĂ© lumineuse d’une LED ou la vitesse d’un moteur, les sorties PWM fonctionnent trĂšs bien, mais lorsqu’il s’agit de jouer de la musique l’utilisation du DAC devrait ĂȘtre une meilleure solution.

Bien sĂ»r, tout cela c’est plutĂŽt thĂ©orique, alors tentons l’expĂ©rience pour voir comment ça se passe dans la rĂ©alitĂ©. Dans sa documentation officielle (disponible Ă  l’adresse https://docs.arduino.cc/tutorials/uno-r4-minima/dac ) la fondation Arduino utilise un buzzer, alors nous allons faire de mĂȘme.

Au clair de la lune avec la sortie PWM

Reproduisez ce schéma (bien sûr, vous pouvez utiliser une autre sortie PWM, mais il faudra en tenir compte dans le programme) :

Branchement du buzzer sur une sortie PWM (6)

Et tĂ©lĂ©versez le code suivant dans l’Arduino :

// R4_Buzzer_PWM
// Au clair de la lune (début)
const int BUZZER = 6;
const int TEMPS = 200;
const int SOL3 = 392;
const int LA3 = 440;
const int SI3 = 494;
void setup(){
  pinMode(BUZZER, OUTPUT);  
}
void loop() {
  tone(BUZZER, SOL3, TEMPS); // Noire
  delay(TEMPS*2); // Durée de la note + Durée du silence
  tone(BUZZER, SOL3, TEMPS); // Noire
  delay(TEMPS*2);
  tone(BUZZER, SOL3, TEMPS); // Noire
  delay(TEMPS*2);
  tone(BUZZER, LA3, TEMPS); // Noire
  delay(TEMPS*2);
  tone(BUZZER, SI3, TEMPS*2); // Blanche
  delay(TEMPS*4);
  tone(BUZZER, LA3, TEMPS*2); // Blanche
  delay(TEMPS*4);
  tone(BUZZER, SOL3, TEMPS); // Noire
  delay(TEMPS*2);
  tone(BUZZER, SI3, TEMPS); // Noire
  delay(TEMPS*2);
  tone(BUZZER, LA3, TEMPS); // Noire
  delay(TEMPS*2);
  tone(BUZZER, LA3, TEMPS); // Noire
  delay(TEMPS*2);
  tone(BUZZER, SOL3, TEMPS*4); // Ronde
  delay(TEMPS*8);
}

L’Arduino joue le dĂ©but de la chanson « Au clair de la lune ». Ecoutez plusieurs fois cette musique pour mĂ©moriser le son.

Au clair de la lune avec la sortie DAC

Maintenant, branchez le buzzer sur la fameuse sortie DAC (port A0).

Branchement du buzzer sur la sortie DAC (A0)

Et bien sĂ»r, tĂ©lĂ©versez le programme correspondant dans l’Arduino :

// R4_Buzzer_DAC
// Au clair de la lune (début)
// Appel de la bibliothĂšque
#include "analogWave.h"
// Création de l'objet "wave"
analogWave wave(DAC);
const int TEMPS = 200;
const int SOL3 = 392;
const int LA3 = 440;
const int SI3 = 494;
void setup(){
  // démarrage du générateur d'onde sinusoïdale
  wave.sine(10);
}
void loop() {
  joueNote(SOL3, TEMPS); // Noire
  delay(TEMPS); // Durée du silence
  joueNote(SOL3, TEMPS); // Noire
  delay(TEMPS);
  joueNote(SOL3, TEMPS); // Noire
  delay(TEMPS);
  joueNote(LA3, TEMPS); // Noire
  delay(TEMPS);
  joueNote(SI3, TEMPS*2); // Blanche
  delay(TEMPS*2);
  joueNote(LA3, TEMPS*2); // Blanche
  delay(TEMPS*2);
  joueNote(SOL3, TEMPS); // Noire
  delay(TEMPS);
  joueNote(SI3, TEMPS); // Noire
  delay(TEMPS);
  joueNote(LA3, TEMPS); // Noire
  delay(TEMPS);
  joueNote(LA3, TEMPS); // Noire
  delay(TEMPS);
  joueNote(SOL3, TEMPS*4); // Ronde
  delay(TEMPS*4);
}

// Fonction personnalisée
void joueNote(int note, int duree) {
  wave.freq(note);
  delay(duree);
  wave.stop();  
}

Il faut rapprocher l’oreille parce que sans amplificateur, la musique est beaucoup moins forte et avec le son mĂ©diocre du buzzer, il est vraiment difficile de remarquer une quelconque amĂ©lioration de la qualitĂ© sonore. Je vous conseille donc d’utiliser plutĂŽt un haut parleur (avec un systĂšme d’amplification), comme par exemple ce module Grove.

Utilisation du module haut parleur Grove sur la sortie DAC (A0)

Il serait intĂ©ressant de brancher un oscilloscope pour voir la diffĂ©rence entre les sorties PWM et DAC (mais je n’en possĂšde pas) ou d’utiliser un amplificateur plus puissant. Alors si cela vous amuse, Ă  vous de jouer…

Horloge (RTC)

L’Arduino Uno R4 intĂšgre une horloge en temps rĂ©el ou RTC (Real-Time Clock). Il faut simplement indiquer la date et l’heure dans le programme et ensuite, il est capable de dĂ©compter le temps qui passe.

Je vous propose de tester la fonction RTC en fabriquant une pendule qui indique la date et l’heure sur un afficheur Grove LCD.

Affichage de la date et de l'heure sur le module Grove LCD

Installez la bibliothĂšque Grove – LCD RGB Backlight et branchez simplement l’afficheur sur l’un des bus I2C de la carte Shield Grove. TĂ©lĂ©versez ensuite le programme suivant dans l’Arduino.

// R4_Horloge_temps_reel
// Appel des bibliothĂšques
#include <Wire.h>
#include "rgb_lcd.h"
#include "RTC.h"

rgb_lcd lcd;

void setup() {
  // Configuration de l'afficheur LCD
  lcd.begin(16, 2);
  lcd.setRGB(25, 25, 10);
  // Démarrage de l'horloge
  RTC.begin();
  // Indiquez la date et l'heure
  RTCTime startTime(31, Month::JULY, 2023, 21, 52, 00, DayOfWeek::MONDAY, SaveLight::SAVING_TIME_ACTIVE);
  RTC.setTime(startTime);
}
void loop() {
  RTCTime currentTime;
  // Récupération de la date et de l'heure
  RTC.getTime(currentTime);
  lcd.clear();
  // Affichage de la date (DD/MM//YYYY)
  lcd.setCursor(0, 0);
  lcd.print(currentTime.getDayOfMonth());
  lcd.print("/");
  lcd.print(Month2int(currentTime.getMonth()));
  lcd.print("/");
  lcd.print(currentTime.getYear());
  // Affichage de l'heure (HH/MM/SS)
  lcd.setCursor(0, 1);
  lcd.print(currentTime.getHour());
  lcd.print(":");
  lcd.print(currentTime.getMinutes());
  lcd.print(":");
  lcd.print(currentTime.getSeconds());
  delay(1000);
}

Si vous ne possĂ©dez pas ce type d’afficheur LCD, vous pouvez adapter le code Ă  votre matĂ©riel (ou utiliser simplement le moniteur sĂ©rie avec le programme disponible Ă  l’adresse suivante : https://docs.arduino.cc/tutorials/uno-r4-minima/rtc )

Émulation Clavier/Souris (HID)

Comme l’Arduino Leonardo et quelques autres (Zero, Due, MKR…), l’Arduino Uno R4 peut ĂȘtre reconnu par l’ordinateur comme un pĂ©riphĂ©rique USB. Vous pouvez donc l’utiliser pour fabriquer un clavier, une manette de jeu, une souris, un dispositif de pointage, etc…

Vous trouverez de nombreux exemples d’utilisation dans mon livre sur l’Arduino, mais pour cet article, je vous en propose un nouveau, il s’agit d’un programme qui empĂȘche l’ordinateur de se mettre en veille en bougeant automatiquement la souris toutes les 5 minutes. Vous pouvez Ă©galement l’utiliser pour faire une petite blague Ă  un ami, puisqu’Ă  intervalle rĂ©gulier, la souris deviendra « folle ».

TĂ©lĂ©versez le code suivant dans l’Arduino et laissez-le branchĂ© Ă  l’ordinateur (n’hĂ©sitez pas Ă  adapter Ă  vos besoins, le dĂ©lai entre les mouvements de la souris).

// R4_Souris
// Appel de la bibliothĂšque "Mouse"
#include <Mouse.h>

void setup() {
  Mouse.begin();
  // Délai de 10 secondes (par sécurité)
  delay(10000);
}

void loop() {
  for (int i=0; i <= 1; i++){
    int axeX = random(-10, 10);
    int axeY = random(-10, 10);
    for (int j=0; j <= 10; j++){
      Mouse.move(axeX,axeY);
      delay(30);
    }
    delay(200);
  }
// Délai entre les mouvements de souris (5 min)
  delay(300000); 
}

Arduino Uno R4 WiFi

Puisqu’il possĂšde le mĂȘme microcontrĂŽleur (Renesas RA4M1), l’Arduino Uno R4 WiFi peut faire la mĂȘme chose que l’Arduino Uno R4 Minima (rĂ©solution analogiques, DAC, horloge, Ă©mulation de pĂ©riphĂ©rique USB…).

Mais cette fois-ci, il n’y a plus tellement de place disponible Ă  la surface de la carte. Le quadrillage a disparu et le nom de la carte est Ă©crit plus petit. Comme son nom l’indique, ce nouvel Arduino intĂšgre une puce WiFi (ESP32-S3-MINI-1-N8) mais Ă©galement une matrice de 12 x 8 = 96 LED et un connecteur QWIIC.

Les 2 cartes Arduino Uno R4 (Minima et Wifi)

Prix et disponibilités

Actuellement, l’Arduino Uno R4 WiFi ne coĂ»te qu’un euro de plus que l’Arduino Uno R3.

L'Arduino Uno R3 et l'Arduino Uno R4 WiFi en vente sur la boutique de la fondation Arduino (été 2023)

Matrice de LED

La matrice est constituĂ©e de 12 X 8 LED rouges. Elle fonctionne parfaitement Ă  l’intĂ©rieur, mais dehors (en plein jour), les LED sont trĂšs peu visibles.

Afficher un symbole

A vous de Laisser libre cours Ă  votre crĂ©ativitĂ© pour inventer les symboles qui montrent qu’il fait chaud, froid, qu’il est heure de manger, de partir Ă  l’Ă©cole, d’aller se coucher, etc…

Il existe plusieurs méthodes pour afficher une image mais la plus simple est de la définir pixel par pixel dans un tableau de ce type (1 le pixel est allumé, 0 le pixel est éteint).

byte coeur[8][12] = {
  { 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0 },
  { 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0 },
  { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0 },
  { 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0 },
  { 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
};

VoilĂ  un petit exemple d’animation (constituĂ©e de 2 images).

// R4_Coeur
// Appel de la bibliothĂšque
#include "Arduino_LED_Matrix.h"
// Création de l'objet "matrix"
ArduinoLEDMatrix matrix;

void setup() {
  // Démarrage de la matrice
  matrix.begin();
}

// Définition de l'image n°1
byte coeur1[8][12] = {
  { 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0 },
  { 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0 },
  { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0 },
  { 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0 },
  { 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
};

// Définition de l'image n°2
byte coeur2[8][12] = {
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0 },
  { 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0 },
  { 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 },
  { 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0 },
  { 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 }  
};

void loop(){
  // Affichage de l'image "coeur1"
  matrix.renderBitmap(coeur1, 8, 12);
  delay(500);
  // Affichage de l'image "coeur2"
  matrix.renderBitmap(coeur2, 8, 12);
  delay(1000);
}
Affichage d'une image sur la matrice de l'Arduino Uno R4 WiFi

Afficher du texte

Il est Ă©galement possible d’afficher un texte (fixe ou dĂ©filant), mais vous devez installer la bibliothĂšque correspondante. Pour cela, allez dans Croquis – Importer une bibliothĂšque – GĂ©rer les bibliothĂšques, (avec l’IDE Arduino 2.1, cliquez simplement sur l’icĂŽne correspondante dans la barre latĂ©rale). Tapez « ArduinoGraphics » dans la barre de recherche, sĂ©lectionnez la bibliothĂšque et cliquez sur Installer

Installation de la bibliothĂšque ArduinoGraphics

VoilĂ  un petit exemple de texte qui dĂ©file avec une variable. Ici c’est un simple compteur, mais je compte sur vous pour trouver d’autres utilisations (date, heure, tempĂ©rature, taux de CO2, adresse IP, etc…)

// R4_Texte_defilant
// Appel des bibliothĂšques
#include "ArduinoGraphics.h"
#include "Arduino_LED_Matrix.h"

// Déclaration des variables
int compteur = 0;
String texteMatrice;

// Création de l'objet "matrix"
ArduinoLEDMatrix matrix;

void setup() {
  // Démarrage de la matrice
  matrix.begin();
  // Taille des caractĂšres
  matrix.textFont(Font_5x7);
  // Vitesse de défilement
  matrix.textScrollSpeed(70);
  // Emplacement de départ (et couleur par défaut)
  matrix.beginText(0, 1, 0xFFFFFF);
}

void loop() {
  // Texte Ă  afficher
  texteMatrice = "    Arduiblog " + String(compteur) + "    ";
  matrix.println(texteMatrice);
  // Sens de défilement
  matrix.endText(SCROLL_LEFT);
  // Pause d'une seconde
  delay(1000);
  compteur = compteur + 1;
}

Il est Ă©galement possible d’utiliser des caractĂšres un peu plus petit :

matrix.textFont(Font_4x6);

De faire dĂ©filer le texte dans l’autre sens :

matrix.endText(SCROLL_RIGHT);

Ou d’afficher un texte court sans dĂ©filement :

matrix.endText();

Si cela vous intéresse, vous trouverez un tuto plus détaillé à cette adresse : https://docs.arduino.cc/tutorials/uno-r4-wifi/led-matrix

Wi-Fi

Le microcontrĂŽleur ESP32-S3 qui assure la connexion WiFi de l’Arduino est bien plus performant que le Renesas RA4M1 (le microcontrĂŽleur principal). Il pourrait donc avantageusement le remplacer, c’est le cas, par exemple de l’Arduino Nano ESP32. Mais cela poserait certainement des problĂšmes de compatibilitĂ© puisque les ESP32 fonctionnent sous 3,3 V (au lieu de 5 V).

L’Arduino Uno R4 WiFi est capable de se connecter Ă  un rĂ©seau existant ou de crĂ©er un point d’accĂšs. Pour tester cela, je vous propose de fabriquer un thermomĂštre connectĂ© qui crĂ©e une page Web pour afficher la tempĂ©rature.

J’ai choisi le capteur DHT22 au format Grove, parce qu’il est prĂ©cis et trĂšs facile Ă  utiliser. En adaptant lĂ©gĂšrement le code, vous pourrez le remplacer par le modĂšle DHT11 (qui est un peu moins performant, mais coĂ»te Ă©galement moins cher).

Pour installer la bibliothĂšque DHT, allez dans Croquis – Importer une bibliothĂšque – GĂ©rer les bibliothĂšques, (avec l’IDE Arduino 2.1, cliquez simplement sur l’icĂŽne correspondante dans la barre latĂ©rale). Tapez « dht grove » dans la barre de recherche, sĂ©lectionnez Grove Temperature And Humidity Sensor et cliquez sur Installer

Reliez ensuite le capteur DHT22 (ou DHT11) Ă  l’Arduino. Attention, il existe d’autres types de modules, il est donc possible que la bibliothĂšque ou l’ordre des connecteurs soient diffĂ©rents (par exemple, la bibliothĂšque Adafruit ne fonctionne pas correctement avec le capteur Grove). Fiez-vous plutĂŽt Ă  la documentation ou aux inscriptions et retenez simplement qu’il faut reliez le port de donnĂ©es au port D12 et l’alimentation du module aux ports GND et 5V de l’Arduino.

Branchement d'un module DHT22 Ă  l'Arduino Uno R4 WiFi

Puis, vous pouvez tĂ©lĂ©verser le code suivant dans l’Arduino :

// R4_Temperature_WiFi
// Appel des bibliothĂšques
#include "WiFiS3.h"
#include <DHT.h>
#include "Arduino_LED_Matrix.h"

// Constances et variables
const int CAPTEUR_TEMP = 12;
int t, h;

// Sélectionnez votre capteur
//DHT dht(CAPTEUR_TEMP, DHT11);
DHT dht(CAPTEUR_TEMP, DHT22);

// ParamÚtres du réseau Wifi
const char NOM_DU_RESEAU[] = "ARDUIBLOG";
const char MOT_DE_PASSE[] = "Azerty123";

// Création de l'objet "matrix"
ArduinoLEDMatrix matrix;

// Clé réseau (nécessaire pour WEP)
int keyIndex = 0;
int status = WL_IDLE_STATUS;

// Création de l'objet serveur (port 80)
WiFiServer server(80);

// Définition de l'image wifi
byte wifi[8][12] = {
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 },
  { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0 },
  { 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1 },
  { 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1 },
  { 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1 },
  { 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1 },
  { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 }
};

// Matrice vide
byte vide[8][12] = {
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
};

void setup() {
  // Démarrage de la matrice
  matrix.begin();
  Serial.begin(9600);
  delay(500);
  // Capteur température DHT
  dht.begin();
  // Vérifier le module Wi-Fi
  if (WiFi.status() == WL_NO_MODULE) {
    Serial.println("La communication avec le module WiFi a échoué !");
    // Le programme se bloque (boucle infinie)
    while (true);
  }

  // Connexion au réseau
  while (status != WL_CONNECTED) {
    Serial.print("Tentative de connexion au réseau : ");
    Serial.print(NOM_DU_RESEAU);
    // Connectez-vous au réseau WPA/WPA2.
    // (Modifiez la ligne si vous utilisez un réseau ouvert ou WEP)
    status = WiFi.begin(NOM_DU_RESEAU, MOT_DE_PASSE);
    // wait 10 seconds for connection:
    for (int i=0; i<= 9; i++){
      clignotementWiFi();
      Serial.print(" .");
    }
  }

  // Démarrage du serveur web (port 80)
  server.begin();
  // Afficher l'adresse de la page :
  IPAddress ip = WiFi.localIP();
  Serial.println(" Connexion réussie");
  Serial.print("Ouvrez votre navigateur Ă  l'adresse http://");
  Serial.println(ip);
}

void loop() {
  // Attends les clients entrants
  WiFiClient client = server.available();
  if (client) {
    // Une requĂȘte HTTP se termine par une ligne vide
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        // Si la requĂȘte HTTP est terminĂ©e, envoi de la rĂ©ponse
        if (c == '\n' && currentLineIsBlank) {
          // Code HTML de la page
          t = round(dht.readTemperature());
          h = round(dht.readHumidity());  
          String codeHTML = "<!DOCTYPE html>";
          codeHTML += "<head>";
          codeHTML += "<meta http-equiv='refresh' content='30'>";
          codeHTML += "<title>Arduino Uno R4 WiFi</title>";
          codeHTML += "</head>";
          codeHTML += "<body style='background-color: rgb(4, 139, 154);'>";
          codeHTML += "<div style='text-align: center;'>";
          codeHTML += "<h1 style='font-style: italic; text-decoration: underline;'>";
          codeHTML += "Serveur Arduino Uno R4 WiFi</h1><font size='+3'>";
          codeHTML += "Temp&eacute;rature : ";
          codeHTML += t;
          codeHTML += "&deg;<br>Humidit&eacute; : ";
          codeHTML += h;
          codeHTML += " %</span></font></div></body></html>";
          client.println(codeHTML);
          break;
        }

        if (c == '\n') {
          currentLineIsBlank = true;
        } else if (c != '\r') {
          currentLineIsBlank = false;
        }
      }
    }

    // Laisser au navigateur le temps de recevoir les données
    delay(1);
    clignotementWiFi();

    // Arret de la connexion
    client.stop();
  }
}

void clignotementWiFi() {
  // Clignotement de l'image "wifi"
  delay(500);
  matrix.renderBitmap(vide, 8, 12);
  delay(500);
  matrix.renderBitmap(wifi, 8, 12);
}

Au dĂ©marrage de l’Arduino, le symbole WiFi clignote sur la matrice de LED et l’adresse IP est indiquĂ©e dans le moniteur sĂ©rie. Si vous avez ratĂ© le moment oĂč l’adresse est communiquĂ©e, il suffit simplement de redĂ©marrer la carte.

Affichage de l'adresse IP dans le moniteur série

Pour connaĂźtre la tempĂ©rature et le taux d’humiditĂ© (mesurĂ©s par le capteur DHT), ouvrez votre navigateur et rendez-vous l’adresse indiquĂ©e (192.168.1.39 dans cet exemple).

Visite de la page Web créée par l'Arduino Uno R4 WiFi

En utilisant une batterie, vous pourrez facilement dĂ©placer l’Arduino dans toute la maison et mĂȘme connaĂźtre la tempĂ©rature extĂ©rieure en le plaçant sur le rebord d’une fenĂȘtre.

Le thermomÚtre connecté avec l'Arduino Uno R4 WiFi

Ce programme est inspiré des exemples de connexion WiFi fournis à cette adresse : https://docs.arduino.cc/tutorials/uno-r4-wifi/wifi-examples

Port VRTC

Avec l’Arduino Uno R4 WiFi il est possible de conserver la date et l’heure de l’horloge en temps rĂ©el (mĂȘme s’il est Ă©teint). Il suffit de branchez une pile ou une batterie de 1.6 Ă  3,3 V aux ports VRTC et GND.

Visite de la page Web créée par l'Arduino Uno R4 WiFi

Connecteur QWIIC

L’Arduino Uno R4 WiFi possĂšde aussi un connecteur QWIIC. Il permet d’accĂ©der au bus I2C (seulement en 3,3 V) pour connecter des modules compatibles (mais il existe aussi des adaptateurs pour pouvoir utiliser les capteurs Grove).

Le connecteur QWIIC bloqué par la coque de l'Arduino Uno R4 WiFi

Vous trouverez plus de dĂ©tails Ă  l’adresse suivante : https://docs.arduino.cc/tutorials/uno-r4-wifi/qwiic

Conclusion

Cette nouvelle carte, propose de nombreuses amĂ©liorations Ă  un prix plus bas ou Ă©quivalent Ă  l’Arduino Uno R3. Apparemment, la fondation Arduino ne souhaite pas seulement proposer une alternative mais bien Ă©liminer le modĂšle qui avait pourtant fait son succĂšs.

Alors faut-il suivre le mouvement et jeter son vieil Arduino ?

A mon avis, il n’y a pas d’urgence, l’Arduino Uno R3 rĂ©ponds toujours Ă  la plupart des usages pĂ©dagogiques et s’il vous donne encore satisfaction, il n’y a pas forcement de raisons d’en changer.

Par contre, si vous dĂ©butez et que vous achetez votre 1er Arduino, je vous conseillerais plutĂŽt de choisir l’Arduino Uno R4. Et pour quelques euros de plus, la version WiFi, qui me semble beaucoup plus intĂ©ressante (Ă  moins d’ĂȘtre absolument certain de ne jamais utiliser la matrice ou le WiFi).

Le modĂšle Minima conviendrait peut ĂȘtre plus au milieu scolaire. Il est en effet inutile d’acheter des dizaines de cartes avec des fonctions qui ne serviront jamais.

Mais n’enterrons pas trop vite l’Arduino Uno R3. Il est possible que certains utilisateurs refusent l’Ă©volution proposĂ©e par la fondation. Et de toute façon, avec plusieurs dizaines de millions de cartes en circulation, il y aura forcement une certaine inertie. Les versions R3 et R4 cohabiteront donc encore pendant de nombreuses annĂ©es.

Mon livre

Dans cet article, je suis passĂ© trĂšs rapidement sur certains points. Mais si vous n’avez pas tout compris ou si vous voulez en savoir plus sur l’Arduino, sachez que la 3Ăšme Ă©dition de mon livre Arduino – Apprivoisez l’Ă©lectronique et le codage est parue en juillet 2023.

Je me suis d’ailleurs amusĂ© Ă  faire une petite vidĂ©o d’unboxing Ă  l’occasion du 14 juillet.

Ce livre est disponible sur le site des Editions ENI et bien sûr dans toutes les bonnes boutiques.

Mon livre dans les rayons de la FNAC

Vous y trouverez plus de 600 pages d’explications illustrĂ©es par des exemples concrets (un peu comme dans cet article).

Arduino - Apprivoisez l'électronique et le codage (3e édition)

Evidement, je regrette de ne pas avoir pu parler de l’Arduino Uno R4 dans mon livre (qui est paru presque en mĂȘme temps que la carte). C’est une des raisons qui m’ont poussĂ©es Ă  Ă©crire cet article. Cependant, rassurez-vous, la majeur partie des exemples prĂ©sentĂ©s dans le livre pour l’Arduino Uno R3 fonctionnent toujours avec l’Arduino Uno R4.

Je vous souhaite beaucoup de plaisir et d’amusement Ă  la dĂ©couverte de l’Arduino.

Sources et liens utiles


7 réflexions sur “Arduino UNO R4

  1. Bonjour. J’ai achetĂ© votre livre et j’ai Ă©galement tĂ©lĂ©chargĂ© le programme sur ce site censĂ© connecter l’Arduino Uno R4 WiFi en WiFi Ă  ma box. Malheureusement la connexion ne se fait pas et je boucle sur l’attente de connexion. Pourtant j’ai repris intĂ©gralement votre programme. J’ai Ă©videmment juste changĂ© les identifiant et mot de passe pour ceux de ma box.

    Pourriez-vous m’aider ?

    Bien cordialement,
    Jacques

    J’aime

    1. Bonjour Jacques,
      Ça veut dire que l’Arduino n’arrive pas Ă  se connecter Ă  la box.
      Difficile de dire pourquoi, il faudrait voir s’il y a une sĂ©curitĂ© qu’il faut dĂ©sactiver pour connecter un nouveau pĂ©riphĂ©rique en wifi.
      Je pense que l’Arduino n’apparait pas dans le tableau de bord de la box.
      Vous pouvez aussi essayer de connecter l’Arduino en WiFi Ă  un smartphone (en faisant un partage de connexion) Si ça fonctionne vous saurez que le problĂšme vient de la Box.
      Bon courage
      JC

      J’aime

  2. Bonjour,

    Bravo pour ce bel article.

    J’achetĂ© rĂ©cemment un R4 wifi pour le connecter en bluetooth avec une application sous AppInventor.

    Cela fait des semaines que je cherche un exemple simple pour échanger du texte dans les 2 sens.

    MĂȘme le support Arduino ne sait pas me rĂ©pondre.

    Auriez vous des liens Ă  me proposer ?

    Merci pour votre aide

    J’aime

  3. merci pour cet excellent docuent pédagogique.

    je viens d’apprendre qu’il y a un arduino uno r4 avec wifi. Je souhaite savoir si vous comptez rĂ©aliser un complement Ă  votre livre initial, pour documenter les fonctions wifi et serveur de cette nouvelle carte.

    bien cordialement. Jf giambertone

    J’aime

    1. Bonjour,
      Merci pour ce retour.
      Pour l’Arduino R4 WiFi, j’en parle dans la 2Ăšme partie de cet article. Et bien sĂ»r il figurera en bonne place dans la prochaine Ă©dition de mon livre.
      Mais elle n’est pas prĂ©vue pour tout de suite…

      J’aime

Laisser un commentaire