Vraag:
Verschil tussen SoftwareSerial en Serial
Siddharth
2014-08-31 14:58:18 UTC
view on stackexchange narkive permalink

Van de voorbeeldcode

  #include <SoftwareSerial.h>SoftwareSerial mySerial (10, 11); // RX, TXvoid setup () {// Open seriële communicatie en wacht tot de poort wordt geopend: Serial.begin (57600); while (! Serial) {; // wacht tot de seriële poort verbinding maakt. Alleen nodig voor Leonardo} Serial.println ("Goodnight moon!"); // stel de gegevenssnelheid in voor de SoftwareSerial-poort mySerial.begin (4800); mySerial.println ("Hallo wereld?");} void loop () // keer op keer {if (mySerial.available ()) Serial.write (mySerial.read ()); if (Serial.available ()) mySerial.write (Serial.read ());}  

Wat is het verschil tussen, waarom twee soorten aanroepen gebruiken om AT-opdrachtoproepen te maken.

SoftwareSerial mySerial (10,11) mySerial.begin (10,11)

en

Serial.begin ( 9600)

Bewerken, dit beantwoordt mijn vraag in mijn eigen woorden op basis van @jfpoilpret antwoord.

  1. Het is belangrijk om initialiseer zowel Serial als SoftwareSerial , aangezien SoftwareSerial wordt gebruikt om de daadwerkelijke commando's naar de GSM te sturen, en Serial wordt gebruikt om alle commando's en hun antwoorden op de debug-poort van te bekijken de GSM
  2. De pinnen op de GSM en Arduino worden gebruikt om de 2 te verbinden en daadwerkelijke commando's door te geven. Terwijl de RS232 alleen wordt gebruikt voor foutopsporing. We kunnen echter een RS232-naar-USB-connector aansluiten om de GSM met de desktop (of laptop) te verbinden
  3. De code in de lus is essentieel om alle daadwerkelijke commando's om te zetten naar de debugging RS232-poort, en andersom, zodat we een tool als cutecom (op ubuntu) kunnen gebruiken om commando's door te geven aan de seriële GSM-invoerpinnen.
  4. ol >

    Belangrijke opmerking: zorg er bij het gebruik van cutecom voor dat u CR line end selecteert om opdrachten te verzenden.

Twee antwoorden:
jfpoilpret
2014-08-31 15:39:51 UTC
view on stackexchange narkive permalink

Alle Atmel MCU, waarop Arduino-modellen zijn gebaseerd, bevatten speciale hardware voor seriële communicatie; dit deel van de MCU heet USART (staat voor Universal Synchronous / Asynchronous Receiver / Transmitter ).

Gebaseerd op het Arduino-model dat je hebt, mag slechts één (bijv. op UNO) of meer USART (leonardo, mega ...) op de MCU op het bord hebben.

Elke MCU USART is toegewezen aan specifieke pinnen van het bord, je kunt die pinnen niet wijzigen.

Als u op Arduino de monitor gebruikt om foutopsporingsinformatie naar uw pc te sturen, wordt één USART gebruikt, dit is wanneer u Serial gebruikte.

Als je meer dan één seriële communicatieverbinding nodig hebt (bijvoorbeeld omdat je apparaten hebt die via serieel communiceren) maar je Arduino-model maar één USART heeft, dan moet je de bibliotheek SoftwareSerial gebruiken die de 'simuleert' de taak van een USART alleen door software. Daarom is het veel minder geoptimaliseerd dan de hardware USART.

Een voordeel van SoftwareSerial is dat u het kunt toewijzen aan elk paar pinnen dat u maar wilt.

Naar uw codevoorbeeld gaan:

  if (mySerial.available ()) Serial.write (mySerial.read ()); if (Serial.available ()) mySerial.write (Serial.read ());  

Uiteraard wordt hier Serial gebruikt voor foutopsporing (informatie verzenden naar de seriële monitor van uw pc), terwijl mySerial wordt gebruikt om te communiceren met het GSM-apparaat.

Dus deze schets wordt gebruikt om AT-commando's op de monitor in te typen, die vervolgens naar het GSM-apparaat worden doorgestuurd; omgekeerd zullen alle strings die door het GSM-apparaat worden geretourneerd, worden doorgestuurd naar de seriële monitor.

Ik gebruik de SIM808-module met Arduino Uno, een ding dat ik niet begrijp, is dat wanneer ik TX1 en RX0 van Arduino gebruik om met de GSM-module te communiceren, ik een foutmelding krijg op Arduino-software tijdens het uploadproces: zoiets als 'avrude ... . '. Maar als ik de SoftwareSerial-instelling tx en rx-pinnen op pin7 en pin8 gebruik, is er geen probleem met uploaden wanneer pinnen zijn aangesloten. Een ander ding is dat wanneer verschillende versies van Arduino worden gebruikt, hoe communiceer je dan met het GSM-apparaat als je SoftwareSerial niet gebruikt? Ik heb code gezien voor andere versies van Arduino en SIM908 waarbij SoftwareSerial lib. wordt helemaal niet gebruikt.
RegarBoy
2017-02-22 20:11:44 UTC
view on stackexchange narkive permalink
  #include <SoftwareSerial.h>SoftwareSerial GSMSerial (7, 8); // gebruik pinnen 7 en 8 als RX en TXvoid setup () {GSMSerial.begin (19200); // de GPRS / GSM baudrate Serial.begin (19200); // de GPRS / GSM baudrate} void loop () {if (Serial.available ()) {// om commando's ontvangen van Serial Monitor naar GSM-module GSMSerial.print ((char) Serial.read ()) te sturen; } else if (GSMSerial.available ()) {// Om gegevens af te drukken van de GSM-module naar de seriële monitor. Serial.print ((char) GSMSerial.read ()); }}  

In de bovenstaande code is de inside loop-functie eerst if -instructie nodig om met de GMS-module te praten vanuit Serial Monitor, bijv. wanneer u AT in de monitor typt en op enter drukt, wordt uw commando naar de GSM-module gestuurd.

De tweede if-instructie else if is om wat dan ook af te drukken wordt ontvangen of gereageerd van een GSM-module, bijv De GSM-module beantwoordt het ontvangen commando zoals AT en het resultaat OK nadat je het commando AT naar de module hebt gestuurd.



Deze Q&A is automatisch vertaald vanuit de Engelse taal.De originele inhoud is beschikbaar op stackexchange, waarvoor we bedanken voor de cc by-sa 3.0-licentie waaronder het wordt gedistribueerd.
Loading...