SoftwareSerial Library i Arduino

Softwareserial Library I Arduino



Arduino-plattformen gjør det mulig for folk å lage forskjellige prosjekter. Arduino er en brukervennlig plattform med støtte for et bredt spekter av biblioteker, inkludert Programvareseriebibliotek . De Programvareseriebibliotek lar deg lage en seriell port på hvilken som helst av de digitale pinnene på Arduino-kortet ditt.

I denne artikkelen vil vi dykke dypere inn i SoftwareSerial-biblioteket og utforske hvordan det fungerer.







Introduksjon til SoftwareSerial Library

De Programvareseriebibliotek er et standard Arduino-bibliotek som tillater seriell kommunikasjon på andre digitale pinner enn TX og RX. Biblioteket gjør det mulig å lage en seriell programvareport, som kan brukes til å kommunisere med andre enheter, for eksempel andre mikrokontrollere, datamaskiner eller til og med Bluetooth-moduler. SoftwareSerial-biblioteket er inkludert med Arduino IDE og kan brukes med alle Arduino-kort.



Merk: Som regel, TX og RX pinner brukes til seriell kommunikasjon, men ved å bruke dette biblioteket kan vi gjøre det mulig for Arduino-kortet å bruke hvilken som helst av de digitale pinnene for å erstatte TX- og RX-pinnene.



Forstå SoftwareSerial Library-funksjonene

De Programvareseriebibliotek har flere funksjoner som lar deg sette opp og kontrollere programvarens serieport. Her er noen av hovedfunksjonene du bør vite:





SoftwareSerial()

Denne funksjonen oppretter en ny forekomst av Programvareserie klasse. Denne funksjonen har to argumenter, RX-pinnen og TX-pinnen. For eksempel, hvis du vil lage en seriell programvareport på pinne 2 og 3, bruker du følgende kode:

SoftwareSerial mySerial ( 2 , 3 ) ; // RX, TX



De SoftwareSerial() metoden brukes til å lage en ny forekomst av en Programvareserie gjenstand. Det gjør det mulig å opprette flere forekomster, men bare én kan være aktiv om gangen.

Syntaks

Syntaksen for SoftwareSerial() metoden er som følger:

Programvareserie ( rxPin, txPin, inverse_logic )

Parametere

Parametrene for SoftwareSerial() er

rxPin: Denne parameteren spesifiserer pinnen som skal brukes til å motta seriedata.

txPin: Denne parameteren spesifiserer pinnen som skal brukes til å overføre seriedata.

inverse_logic: Denne parameteren er valgfri, og den inverterer innkommende bitssans. Standardverdien er falsk, noe som betyr at en LAV på RX-pinnen tolkes som en 0-bit og en HØY som en 1-bit. Hvis satt til sann, vil LOW på RX-pinnen nå ta som 1-bit og HØY som 0-bit.

Komme tilbake

De SoftwareSerial() returnerer ikke noe.

Arduino SoftwareSerial() bibliotekfunksjoner

Arduino SoftwareSerial() har en liste over funksjoner for seriell kommunikasjon mellom enheter. Noen av hovedfunksjonene diskuteres her:

begynne()

De begynne() funksjonen initialiserer programvarens serieport med en overføringshastighet. Baudraten er dataoverføringshastigheten over den serielle porten. For å sette 9600 som overføringshastighet for seriell kommunikasjon, bruker du for eksempel følgende kode:

mySerial.begin ( 9600 ) ;

tilgjengelig()

De tilgjengelig() f unction returnerer byte tilgjengelig for lesing ved programvarens serieport. For å sjekke om det er noen data som kan leses, bruker du for eksempel følgende kode:

hvis ( mySerial.available ( ) > 0 ) {
// lese inndata
char incomingByte = mySerial.read ( ) ;
}

lese()

De lese() funksjonen leser neste byte med data fra programvarens serieport. For eksempel, for å lese en byte med data og skrive den ut til den serielle monitoren, bruker du følgende kode:

char incomingByte = mySerial.read ( ) ;
Serial.println ( innkommendeByte ) ;

skrive()

De skrive() funksjonen skriver en byte med data til programvarens serieport. For eksempel å sende brevet 'EN' over programvarens serieport, vil du bruke følgende kode:

mySerial.write ( 'EN' ) ;

Arduino SoftwareSerial() bibliotekeksempelkode

Nå skal vi kommunisere mellom to Arduino-kort over seriell kommunikasjon ved å bruke dette biblioteket. Ta to Arduino-brett og koble dem til som vist på bildet nedenfor.

Koble D2 av Master Arduino-brettet med D3 på Slave Arduino-kortet, koble til på samme måte D3 av Master Arduino med D2 av Slave Arduino.

Merk: For seriell kommunikasjon, TX pin er alltid koblet til RX pin av motsatt Arduino og RX pin av Master er alltid koblet til TX pinne til den andre Arduinoen.

Følgende er maskinvaren til begge Arduino-brettene.

Her er et eksempel på Arduino-kode som viser hvordan du bruker Programvareseriebibliotek å etablere kommunikasjon mellom to Arduino-kort:

Avsendertavlekode

Koden nedenfor er for avsenderen Arduino som vil skrive en streng til mottakerens Arduino-kort.

#include

// Sett opp programvareserieobjekt
SoftwareSerial mySerial ( 2 , 3 ) ;

ugyldig oppsett ( ) {
// Start seriell kommunikasjon
Serial.begin ( 9600 ) ;
samtidig som ( ! Seriell ) {
; // vente til seriell port for å koble til
}

// Start programvaren seriell kommunikasjon
mySerial.begin ( 9600 ) ;
}

ugyldig sløyfe ( ) {
// Send en melding over programvarens serielle tilkobling
mySerial.println ( 'Hei, mottakerbord!' ) ;
forsinkelse ( 1000 ) ;
}

Mottakerkortkode

Koden nedenfor er for mottakerkortet. Ved å bruke denne koden vil Arduino motta strengen fra et annet kort over seriell kommunikasjon etablert mellom to Arduino-kort.

#include

// Sett opp programvareserieobjekt
SoftwareSerial mySerial ( 2 , 3 ) ;

ugyldig oppsett ( ) {
// Start seriell kommunikasjon
Serial.begin ( 9600 ) ;
samtidig som ( ! Seriell ) {
; // vente til seriell port for å koble til
}

// Start programvaren seriell kommunikasjon
mySerial.begin ( 9600 ) ;
}

ugyldig sløyfe ( ) {
// Kryss av hvis data er tilgjengelig på programvarens serielle tilkobling
hvis ( mySerial.available ( ) ) {
// Les dataene og skriv dem ut til den serielle monitoren
Serial.println ( mySerial.readString ( ) ) ;
}
}

I dette eksemplet inkluderer vi først Programvareseriebibliotek i begynnelsen av koden. Deretter lager vi en Programvareserie objekt kalt ' mySerial ” med pinner 2 og 3 spesifisert som henholdsvis RX- og TX-pinner.

I oppsett() funksjon, starter vi både maskinvare- og seriell kommunikasjon med en overføringshastighet på 9600. I Løkke() funksjonen til avsenderkortet sender vi en melding over programvarens serielle tilkobling ved å bruke mySerial.println()-metoden, og venter et sekund før vi sender neste melding.

I loop()-funksjonen til mottakerkortet vil koden sjekke om serielle data er tilgjengelige på programvarens serielle tilkobling ved å bruke mySerial.available() metode. Hvis det er data tilgjengelig, leser vi dataene ved å bruke mySerial.readString()-metoden og skriver dem ut til den serielle monitoren ved å bruke Serial.println()-metoden.

Begrensninger for SoftwareSerial() Library

De Programvareseriebibliotek har flere forskjellige fordeler, men har også noen begrensninger som brukere bør være klar over. Disse begrensningene inkluderer

  • Manglende evne til å sende og motta data samtidig.
  • Når du bruker flere programvareserieporter, kan bare én port motta data samtidig.
  • De programvarebaserte serielle portene som er opprettet ved hjelp av dette biblioteket, opererer med lavere overføringshastigheter og er ikke like pålitelige som maskinvarebaserte serielle porter.
  • Noen pinner på Mega- og Mega 2560-kortene støtter ikke endringsavbrudd for RX, noe som begrenser hvilke pinner som kan brukes.
  • På samme måte, på Leonardo- og Micro-brettene, kan bare visse pinner brukes for RX på grunn av mangel på endringsavbrudd.
  • Maksimal RX-hastighet på Arduino- eller Genuino 101-kort er 57600 bps.
  • RX fungerer ikke på digital pin 13 på Arduino- eller Genuino 101-kort.
Borde RX-pinner
Mega og Mega 2560 10, 11, 12, 13, 14, 15, 50, 51, 52, 53, A8 (62), A9 (63), A10 (64), A11 (65), A12 (66), A13 (67), A14 (68), A15 (69).

Leonardo og Mic 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).

Konklusjon

De Programvareseriebibliotek i Arduino er et nyttig verktøy for å kommunisere med enheter ved hjelp av serielle kommunikasjonsprotokoller. Det lar utviklere lage programvarebaserte serielle porter som kan brukes sammen med maskinvarebaserte serielle porter. Dette biblioteket har noen begrensninger siden det ikke tillater samtidig dataoverføring. For flere detaljer, les artikkelen ovenfor.