Hva du finner her og generell info

Her kan du lese om veldig enkel oppkobling av bluetooth (og BLE) for de HC-06 modulene dere har. HM-10 modulene (BLE) som dere kan få kobles opp akkurat likt (de har seks bein, men vi bruker bare de fire som har samme navn som HC-06 modulene). All kode vi bruker er lik for begge enhetene.

For å forenkle kommunikasjonen litt har vi lagd et eget bibliotek for å forenkle mottak av beskjeder fra bluetooth.

PLab bibliotek

GitHub kontoen vår, under plab-library, kan dere finne PLabBT, et bibliotek for å forenkle mottak av beskjeder. Dette biblioteket inneholder tre klasser: PLabBTSerial, PLabBTCallback og PLabBTLEController.

PLabBTSerial

Denne arver fra Arduinos SoftwareSerial, og har derfor de samme begrensningene som det. Hovedbegrensningen vi har merka, er nok bare at om du bruker flere enheter som bruker det, kan du bare motta data fra en av dem. Så lenge du bare kobler til en bluetooth enhet tror vi ikke dette har noe å si.

Ting å legge merke til ved bruk:

  • Buffer størrelsen (valgfritt constructor argument) vil avgjøre hvor mange tegn som kan være i hver beskjed, og mye minne du bruker. Arduino er veldig begrenset på ressurser, så det er en ting verdt å merke seg (altså, ikke sett denne til mange tusen). Standardinnstillingen er 50.
  • available() vil ikke returnere annet enn 0 før et linjeskift er tilgjengelig. Når det er en beskjed tilgjengelig vil denne returnere antall tegn INKLUSIVE tekstavslutningsbokstaven ('\0' eller 0 om du vil). Dette kan brukes til å dynamisk allokere nøyaktig riktig størrelse på tekststrengen du vil lese.
  • Ved integrasjon med appen vår (beskrives senere), bruk println() for å sende en beskjed; Appen vår forstår ikke dette var en hel beskjed før den mottar linjeskift ('\n').
  • Vi har lagt til en overloaded versjon av read() som tar inn en c-streng (char array/ char peker) og størrelse som argument. Hvis størrelsen er mindre enn tilgjengelige tegn, vil ingenting skje. Hvis den er like stor, eller større, vil den vedlagte c-strengen bli fylt med den mottatte beskjeden, og available() vil bli 0.
  • "Vanlig" read() vil fjerne ett tegn fra tilgjengelige tegn (available() vil bli 1 mindre).

Se eksempel 2 for å se det i bruk.

PLabBTCallback

Denne klassen er helt egen. Den bruker PLabBTSerial internt, men dette har liten innvirkning for deg.

Constructor:

MetodeArgumenter
PLabBTCallback

uint8_t receivePin - Pinne som brukes for å motta på

uint8_t transmitPin - Pinne som brukes for å sende til

char divider = ':' - Tegnet som skiller kommando og argument. Standard er ':

bool inverse_logic = false - Hvorvidt enheten er styrt av aktivt lavt signal. Standard er aktiv høy

uint8_t bufferSize = 50 - Hvor lang en kommando og argument kan være tilsammen

Metoder:

MetodeArgumenterForklaring
void beginlong speed - Hvor raskt kommunikasjonen skal foregå. 9600 fungerer bra for dette. Må kalles før update()Starter kommunikasjon med bluetooth enheten
void update Oppdaterer alle interne strukturer. Forårsaker callback kall
void registerCallback

char *command - Tekst kommandoen callback skal reagere på

void(*callback)(char *arg) - Callback funksjonen. Må ta et char * argument (c-streng)

Registrerer en callback funksjon som blir kalt når den gitte kommandoen kommer inn.Flere callbacks kan registreres på samme kommando.

void registerNoCommandCallbackvoid(*callback)(char *arg) - Callback funksjonen. Må ta et char * argument (c-streng)Registrerer en callback funksjon som blir kalt hvis delingstegnet ikke er tilstede i mottatt beskjed. Kun en slik vil registreres.

PLabBTLEController

Denne klassen arver fra SofwareSerial og pakker inn AT kommandoer for å styre HM-10/11. Den kan gjøre det enklere å konfigurere disse enhetene, for eksempel for å sette dem opp i nettverk.

Constructor

MetodeArgumenter
PLabBTLEController

rx - Samme som SoftwareSerial rx

tx - Samme som SoftwareSerial tx

Operatorer:

OperatorBeskrivelse
[size_t index]Elementtilgang. Hent ut oppdaget enhet etter index.

Metoder:

MetodeArgumenterBeskrivelse
void update Oppdaterer indre datastrukturer. Må kalles ofte, anbefalt i begynnelsen på loop().
bool isReady Forteller om enheten er klar for å motta instruksjoner
void setNamechar *name - Nytt navnSetter nytt synlig navn på Bluetooth LE enheten.
char *getName Henter navnet på Bluetooth LE enheten.
Role getRole Forteller hvilken rolle Bluetooth LE enheten har (central/peripheral).
void setRoleRole r - Ny rolleSetter ny rolle for Bluetooth LE enheten (central/peripheral).
bool isPeripheral Forteller om Bluetooth LE enheten har peripheral rolle.
bool isCentral Forteller om Bluetooth LE enheten har central rolle. Enheten må ha central rolle for å initiere nettverk med andre enheter.
bool isDiscoveringNames Forteller om Bluetooth LE enheten oppdager navnene til enheter når den søker.
void setDiscoveringNamesbool disc - Om navn skal oppdagesSetter om enheten skal oppdage navn på andre enheter eller ikke.
bool isWorkingImmediately Forteller om enheten skal starte tilkobling ved første mulighet.
void setWorkingImmediatelybool wi - Om enheten skal jobbe umiddelbartSetter om enheten skal starte tilkobling ved første mulighet. Anbefales av under tilkobling til andre enheter når denne enheten har central rolle.
void discoverDevices Starter søk etter andre enheter. Krever central rolle.
bool isDiscoveringDevices Forteller om enheten holder på å søke etter andre enheter akkurat nå.
int devices Forteller hvor mange enheter i nærheten som er oppdaget.
void clearDiscoveredDevices Sletter listen med oppdagede enheter.
void connectDeviceint id - identifikator/ indeks i device liste.Koble til enhet etter id. Krever at enheten har oppdaget den andre enheten.
void connectDevicePLabBTLEDevice device - Oppdaget enhetKoble til den angitte oppdagede enheten.
void connectDevicechar *address - Addresse å koble tilKoble til enhet med angitt addresse
void connectLastDevice Koble til forrige enhet som vellykket tilkobling ble oppnådd.
bool connectionFailed Forteller om tilkoblingsforsøk feilet
bool isConnecting Forteller om enheten holder på å koble til.
bool isConnected Forteller om enheten er tilkoblet akkurat nå.
void disconnect Kobler fra sammenkoblet enhet.
void reset Starter enheten på nytt
void factoryReset Gjenoppretter enhetens fabrikkinnstillinger.

 

AT kommandoer

AT kommandoer trenger generelt å bare kjøres en gang. Etter de er kjørt lagres resultatet på chipen. Derfor fungerer det helt fint å bare kjøre terminal eksempelet og skrive AT kommandoer direkte i konsollvinduet når du bruker HC06 eller HM10 enheten.

Eksempler i biblioteket

I biblioteket har vi en del eksempler som demonstrerer bruk av de ulike klassene, og som kan hjelpe til med sammenkobling av enheter.

Alle disse eksemplene finnes i PLabExamples/examples/13.Bluetooth/.

EksempelForklaring
ButtonTestLeser en knapp, og sender en beskjed når knappens tilstand endres.
HC05_BindingSetter opp en HC05 enhet til å koble til en annen enhet. Etter tilkobling kommer enheten til å gjenoppta tilkoblingen når den andre enheten er i nærheten. Tilkobling huskes etter strømbrudd.
HM10_ConnectViser hvordan en HM10 enhet kan konfigureres til å koble til en annen enhet ved hjelp av PLabBTLEController klassen.
HM10_ConnectAndStayConnectedViser hvordan en HM10 enhet kan konfigureres til å koble til en annen enhet ved hjelp av PLabBTLEController klassen. Tilkoblingen gjenopptas med en gang enhetene er i nærheten av hverandre. Tilkobling huskes etter strømbrudd.
HM10_ControllerTestViser hvordan PLabBTLEController klassen virker. Kan brukes for konfigurasjon av HM10/11 enheter.
PLabBTCallbackAdvancedEchoViser avansert bruk av PLabBTCallback klassen.
PLabBTCallbackEchoViser bruk av PLabBTCallback klassen med ekko.
PLabBTSerialEchoViser bruk av PLabBTSerial klassen med ekko.
TerminalGrunnleggende terminalbruk med Bluetooth enheter.
  • No labels