Arduino - Communication

Des centaines de protocoles de communication ont été définis pour réaliser cet échange de données. Chaque protocole peut être classé dans l'une des deux catégories: parallèle ou série.

Communication parallèle

La connexion parallèle entre l'Arduino et les périphériques via des ports d'entrée / sortie est la solution idéale pour des distances plus courtes jusqu'à plusieurs mètres. Cependant, dans d'autres cas, lorsqu'il est nécessaire d'établir une communication entre deux appareils sur de plus longues distances, il n'est pas possible d'utiliser une connexion parallèle. Les interfaces parallèles transfèrent plusieurs bits en même temps. Ils nécessitent généralement des bus de données - transmettant sur huit, seize fils ou plus. Les données sont transférées par vagues déferlantes de 1 et de 0.

Avantages et inconvénients de la communication parallèle

La communication parallèle a certainement ses avantages. Il est plus rapide que la série, simple et relativement facile à mettre en œuvre. Cependant, il nécessite de nombreux ports et lignes d'entrée / sortie (E / S). Si vous avez déjà dû déplacer un projet d'un Arduino Uno de base vers un Mega, vous savez que les lignes d'E / S sur un microprocesseur peuvent être précieuses et peu nombreuses. Par conséquent, nous préférons la communication série, sacrifiant la vitesse potentielle pour l'immobilier à broches.

Modules de communication série

Aujourd'hui, la plupart des cartes Arduino sont construites avec plusieurs systèmes différents pour la communication série en tant qu'équipement standard.

Lequel de ces systèmes est utilisé dépend des facteurs suivants -

  • Avec combien d'appareils le microcontrôleur doit-il échanger des données?
  • À quelle vitesse l'échange de données doit-il être?
  • Quelle est la distance entre ces appareils?
  • Est-il nécessaire d'envoyer et de recevoir des données simultanément?

L'une des choses les plus importantes concernant la communication série est la Protocol, qui doit être strictement respectée. Il s'agit d'un ensemble de règles qui doivent être appliquées pour que les appareils puissent interpréter correctement les données qu'ils échangent mutuellement. Heureusement, Arduino s'en charge automatiquement, de sorte que le travail du programmeur / utilisateur se réduit à une simple écriture (données à envoyer) et à la lecture (données reçues).

Types de communications série

La communication série peut être classée en outre comme -

  • Synchronous - Les appareils synchronisés utilisent la même horloge et leur minutage est synchronisé les uns avec les autres.

  • Asynchronous - Les appareils asynchrones ont leurs propres horloges et sont déclenchés par la sortie de l'état précédent.

Il est facile de savoir si un appareil est synchrone ou non. Si la même horloge est donnée à tous les appareils connectés, ils sont synchrones. S'il n'y a pas de ligne d'horloge, elle est asynchrone.

Par exemple, le module UART (Universal Asynchronous Receiver Transmitter) est asynchrone.

Le protocole série asynchrone a un certain nombre de règles intégrées. Ces règles ne sont rien d'autre que des mécanismes permettant de garantir des transferts de données robustes et sans erreur. Ces mécanismes, que nous obtenons pour éviter le signal d'horloge externe, sont -

  • Bits de synchronisation
  • Bits de données
  • Bits de parité
  • Vitesse de transmission

Bits de synchronisation

Les bits de synchronisation sont deux ou trois bits spéciaux transférés avec chaque paquet de données. Ce sont le bit de démarrage et le (s) bit (s) d'arrêt. Fidèles à leur nom, ces bits marquent respectivement le début et la fin d'un paquet.

Il n'y a toujours qu'un seul bit de démarrage, mais le nombre de bits d'arrêt est configurable sur un ou deux (bien qu'il soit normalement laissé à un).

Le bit de départ est toujours indiqué par une ligne de données inactive allant de 1 à 0, tandis que le ou les bits d'arrêt reviendront à l'état inactif en maintenant la ligne à 1.

Bits de données

La quantité de données dans chaque paquet peut être définie sur n'importe quelle taille de 5 à 9 bits. Certes, la taille de données standard est votre octet de base de 8 bits, mais d'autres tailles ont leur utilité. Un paquet de données 7 bits peut être plus efficace que 8, surtout si vous transférez simplement des caractères ASCII 7 bits.

Bits de parité

L'utilisateur peut choisir s'il doit y avoir un bit de parité ou non, et si oui, si la parité doit être paire ou impaire. Le bit de parité est 0 si le nombre de 1 parmi les bits de données est pair. La parité impaire est exactement le contraire.

Vitesse de transmission

Le terme débit en bauds est utilisé pour désigner le nombre de bits transférés par seconde [bps]. Notez qu'il fait référence à des bits et non à des octets. Il est généralement requis par le protocole que chaque octet soit transféré avec plusieurs bits de contrôle. Cela signifie qu'un octet dans le flux de données série peut être composé de 11 bits. Par exemple, si le débit en bauds est de 300 bps, un maximum de 37 et un minimum de 27 octets peuvent être transférés par seconde.

Arduino UART

Le code suivant fera qu'Arduino enverra bonjour le monde au démarrage.

void setup() {
   Serial.begin(9600); //set up serial library baud rate to 9600
   Serial.println("hello world"); //print hello world
}

void loop() {

}

Une fois le croquis Arduino téléchargé sur Arduino, ouvrez le moniteur série dans la section supérieure droite de l'IDE Arduino.

Tapez n'importe quoi dans la case supérieure du moniteur série et appuyez sur envoyer ou sur entrée sur votre clavier. Cela enverra une série d'octets à l'Arduino.

Le code suivant renvoie tout ce qu'il reçoit en entrée.

Le code suivant permettra à Arduino de fournir une sortie en fonction de l'entrée fournie.

void setup() {
   Serial.begin(9600); //set up serial library baud rate to 9600
}

void loop() {
   if(Serial.available()) //if number of bytes (characters) available for reading from { 
      serial port
      Serial.print("I received:"); //print I received
      Serial.write(Serial.read()); //send what you read
   }
}

Remarquerez que Serial.print et Serial.println renverra le code ASCII réel, alors que Serial.writerenverra le texte réel. Voir les codes ASCII pour plus d'informations.