Domanda:
Differenza tra SoftwareSerial e Serial
Siddharth
2014-08-31 14:58:18 UTC
view on stackexchange narkive permalink

Dal codice di esempio

  #include <SoftwareSerial.h>SoftwareSerial mySerial (10, 11); // RX, TXvoid setup () {// Apri comunicazioni seriali e attendi l'apertura della porta: Serial.begin (57600); while (! Serial) {; // attende che la porta seriale si connetta. Necessario solo per Leonardo} Serial.println ("Goodnight moon!"); // imposta la velocità dati per la porta SoftwareSerial mySerial.begin (4800); mySerial.println ("Hello, world?");} void loop () // eseguito ancora e ancora {if (mySerial.available ()) Serial.write (mySerial.read ()); if (Serial.available ()) mySerial.write (Serial.read ());}  

Qual è la differenza tra, perché utilizzare 2 tipi di chiamate per effettuare chiamate di comando AT.

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

e

Serial.begin ( 9600)

Modifica, questo risponde alla mia domanda con parole mie basate sulla risposta di @jfpoilpret.

  1. È importante inizializza sia Serial che SoftwareSerial , poiché SoftwareSerial viene utilizzato per inviare i comandi effettivi al GSM, e Serial viene utilizzato per visualizzare tutti i comandi e le loro risposte sulla porta di debug di il GSM
  2. I pin sul GSM e su Arduino servono per connettere il 2 e trasmettere i comandi effettivi . Mentre l'RS232 viene utilizzato solo per il debug. Possiamo tuttavia collegare un connettore RS232 a USB in modo da collegare il GSM al desktop (o laptop)
  3. Il codice nel loop è essenziale per aiutare a convertire tutti i comandi effettivi in la porta di debug RS232 e viceversa, in modo da consentirci di utilizzare uno strumento come cutecom (su ubuntu) per passare comandi ai pin di ingresso seriale GSM.
  4. ol >

    Nota importante: quando si utilizza cutecom assicurarsi di selezionare Fine riga CR per inviare i comandi.

Due risposte:
#1
+7
jfpoilpret
2014-08-31 15:39:51 UTC
view on stackexchange narkive permalink

Tutti gli MCU Atmel, su cui si basano i modelli Arduino, includono hardware speciale per la comunicazione seriale; questa parte dell'MCU si chiama USART (sta per Universal Synchronous / Asynchronous Receiver / Transmitter ).

In base al modello Arduino che hai, tu può avere solo uno (ad es. su UNO) o più USART (leonardo, mega ...) sulla scheda MCU.

Ogni MCU USART è mappato su pin specifici della scheda, non è possibile modificare quei pin.

Su Arduino, se usi il monitor per inviare informazioni di debug al tuo PC, viene utilizzato un USART, questo è quando hai usato Serial.

Se hai bisogno di più di un collegamento di comunicazione seriale (ad esempio perché hai alcuni dispositivi che comunicano tramite seriale) ma il tuo modello Arduino ha solo una USART, allora devi usare la libreria SoftwareSerial che "simula" il lavoro di una USART solo tramite software. Quindi è molto meno ottimizzato dell'hardware USART.

Un vantaggio di SoftwareSerial è che puoi mapparlo su qualsiasi coppia di pin che ti piace.

Andando all'esempio di codice:

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

Ovviamente qui, Serial viene utilizzato per il debug (invio di informazioni al monitor seriale del PC), mentre mySerial viene utilizzato per comunicare con il dispositivo GSM.

Quindi questo disegno viene utilizzato per consentire di digitare i comandi AT sul monitor, che verranno poi inoltrati al dispositivo GSM; viceversa, eventuali stringhe restituite dal dispositivo GSM verranno echeggiate sul monitor seriale.

Sto usando il modulo SIM808 con Arduino Uno, una cosa che non capisco è che quando uso TX1 e RX0 di Arduino per comunicare con il modulo GSM, ottengo un errore sul software Arduino durante il processo di caricamento: qualcosa come 'avrude ... . '. Ma quando uso SoftwareSerial impostando i pin tx e rx su pin7 e pin8, non ci sono problemi durante il caricamento quando i pin sono collegati. Un'altra cosa è che quando vengono utilizzate diverse versioni di Arduino come comunichi al dispositivo GSM se non usi SoftwareSerial? Ho visto il codice per altre versioni di Arduino e SIM908 in cui SoftwareSerial lib. non viene utilizzato affatto.
#2
  0
RegarBoy
2017-02-22 20:11:44 UTC
view on stackexchange narkive permalink
  #include <SoftwareSerial.h>SoftwareSerial GSMSerial (7, 8); // usa i pin 7 e 8 come RX e TXvoid setup () {GSMSerial.begin (19200); // il baud rate GPRS / GSM Serial.begin (19200); // il baud rate GPRS / GSM} void loop () {if (Serial.available ()) {// per inviare i comandi ricevuti da Serial Monitor al modulo GSM GSMSerial.print ((char) Serial.read ()); } else if (GSMSerial.available ()) {// Per stampare i dati ha risposto dal modulo GSM al monitor seriale. Serial.print ((char) GSMSerial.read ()); }}  

Nel codice sopra all'interno della funzione loop è necessaria la prima istruzione if per parlare con il modulo GMS da Serial Monitor, ad es. quando digiti AT nel monitor e premi invio, il tuo comando viene inviato al modulo GSM.

La seconda istruzione if else if è di stampare qualsiasi cosa viene ricevuto o risposto dal modulo GSM es Il modulo GSM risponde al comando ricevuto come AT e il suo risultato OK dopo aver inviato il comando AT al modulo.



Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...