Quelle est la différence entre toutes les bibliothèques série de logiciels? Lequel est compatible Arduino Nano?

11

Il y a tellement de bibliothèques logicielles série, quelles sont les différences entre elles? Et lequel puis-je utiliser avec mon Arduino Nano? Pour mon Arduino Nano, j'ai besoin d'un port série matériel et d'un port série logiciel à un débit de 115200 bauds.

Sur quelles broches de l'Arduino Nano puis-je utiliser la bibliothèque série de logiciels?

William Roy
la source
J'utilise neoswserial avec un clavier I2C, mais lorsque j'ajoute key=getKey();mon GSM (en utilisant les broches 2 et 3 Arduino Uno) ne reçoit pas de SMS. Aidez-moi s'il vous plaît.
Nguyễn Trường Hải

Réponses:

16

Cette réponse répertorie les 4 choix de base:

  • HardwareSerial, toujours le meilleur. Utilisez simplement la Serialvariable prédéfinie . Sur certains Arduinos, il y a des ports HardwareSerial supplémentaires, appelés Serial1, Serial2etc. La Nano a seulement Serial.

  • AltSoftSerial, le meilleur des bibliothèques de logiciels en série. Une seule instance est autorisée et doit être utilisée sur l'une des broches de capture d'entrée (broches 8 et 9 pour un Nano).

  • Mon NeoSWSerialprochain meilleur. Il fonctionne sur deux broches, mais uniquement aux débits en bauds 9600, 19200 et 38400.

  • SoftwareSerialest le pire choix. Il fonctionne sur deux broches, mais il est très inefficace. Il désactive les interruptions pendant tout le temps pendant lequel un caractère est envoyé OU reçu, et il ne peut pas faire les deux en même temps (contrairement à tous les autres choix en série). Cela peut interférer avec d'autres parties de votre croquis, d'autres communications de périphérique ou des bibliothèques.

Si vous pouviez utiliser un débit en bauds plus lent, vous pourriez conserver vos impressions de débogage Serialet utiliser soit AltSoftSerialou NeoSWSerialpour votre appareil.

Mais si vous devez utiliser 115200, le seul choix fiable est Serial. Bien AltSoftSerialet SoftwareSerialpermettre que la vitesse de transmission, ils ne peuvent pas envoyer / recevoir des données correctement.

Dans ce cas, je suggère d'utiliser Serialle périphérique 115200. Sauf si vous utilisez un FAI, vous devrez déconnecter l'appareil pour télécharger un nouveau croquis via USB.

Utilisez ensuite AltSoftSerialou NeoSWSerialpour vos instructions de débogage. Vous aurez besoin d'un adaptateur TTL série-USB (alias FTDI) sur les broches sélectionnées pour vous connecter au PC. Le Serial Monitorou un autre programme d'émulation de terminal lira à partir de ce port COM USB.

slash-dev
la source
AltSoftSerial est-il le même en termes de performances et de caractéristiques, seulement que NeoICSerial ajoute la fonctionnalité de quoi? Je n'ai pas bien compris. github.com/SlashDevin/NeoICSerial
William Roy
2
@WilliamRoy, NeoICSerialajoute simplement la attachInterruptméthode à AltSoftSerial. Vous n'avez probablement pas besoin de gérer chaque personnage dans une interruption. Utilisez simplement AltSoftSerialet appelez le available()puis read()si un caractère est prêt. De même, NeoHWSerialajoute la même attachInterruptfonctionnalité au noyau HardwareSerial. Cependant, NeoSWSerialc'est une classe complètement différente (elle a aussi la attachInterruptfonctionnalité).
slash-dev
-2

Un logiciel série émule un port série, différent d'un port natif qui a un registre pour enregistrer tous les bits dans l'ordre et les définit un indicateur pour appeler la boucle principale, un logiciel série n'a rien de tout cela. Le logiciel série doit recevoir tous les bits, un par un, vous devez donc lire un port numérique, attendre une heure spécifique et relire la broche numérique. Vous devez le faire 10 fois (1 bit de début, 8 bits de données et 1 bit de fin). Le temps est très important. Pour utiliser un logiciel en série, vous devez vous soucier davantage des performances.

Vous pouvez utiliser une broche d'interruption numérique pour la broche RX, de sorte que vous êtes "appelé" dans la bordure inférieure (bit de démarrage) et que vous avez reçu les 8 bits.

rodrigo
la source
1
Cela ne même pas tenter de répondre à la question initiale.
Edgar Bonet
1
Oui, cela ne tente pas de répondre à la question d'origine car la communauté Arduino ne sait pas faire soi-même le code périphérique.
rodrigo