multi-serie.ino

Arduino Nano Every · Fichier : multi-serie.ino · Langage : Arduino · Usage : Exploiter les 4 ports série du 4809

Le grand gain du Nano Every sur le classique : quatre UART matériels. Ce pont recopie Serial1 (broches D0/D1) vers le port USB, pratique pour écouter un GPS ou un module voix tout en gardant le moniteur série libre pour le debug.

Matériel requis

Un Arduino Nano Every (ATmega4809 à 20 MHz, brochage identique au Nano, USB micro-B, convertisseur UART séparé, broches 5 V, pile de compatibilité avec le Nano classique). Nano Every, appareil série 3,3/5 V sur D0/D1 (GPS, capteur série), câble USB.

Câblage

TX du module→D0 (RX carte), RX du module→D1, masse commune ; le 4809 est en logique 5 V tolérante 3,3 V.

Fonctionnement

Chaque SerialX pilote un vrai émetteur-récepteur du 4809 : aucun bit-banging. Les boucles available/read non bloquantes font le pont dans les deux sens à 9600 bauds.

Exécution

Installez le package Arduino megaAVR Boards dans l'IDE, sélectionnez Arduino Nano Every, téléversez. Le Serial USB est séparé du Serial1 matériel (broches RX/TX) : le code série classique fonctionne tel quel.

Variantes

Affectez Serial2/Serial3 (broches E1RX/E1TX) à un second appareil pour un concentrateur 3 voies, ou montez le débit pour un module WiFi série.

multi-serie.ino

// Le Nano Every (ATmega4809) possede 4 Uarts materiels.
// Serial = USB (vers le PC), Serial1 = broches D0/D1, etc.
void setup() {
  Serial.begin(9600);    // pont USB du board
  Serial1.begin(9600);   // D0=RX D1=TX : GPS, module voix...
  Serial2.begin(9600);   // broches dediees (voir schema) : E1RX/E1TX
  Serial.println(F("Serial  USB pret"));
  Serial1.println(F("Hello sur D0/D1"));
}

void loop() {
  // Pont serie : ce qui arrive sur Serial1 part sur l'USB
  while (Serial1.available()) {
    char c = Serial1.read();
    Serial.write(c);
    // boucle de dialogue simple sur l'uart annexe
    if (c == 'H') Serial1.println(F("OK depuis le Nano Every"));
  }
  // Et inversement : les commandes tapees sur l'USB partent sur D0/D1
  while (Serial.available()) {
    Serial1.write(Serial.read());
  }
}

← Retour à la fiche