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
På 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:
Metode | Argumenter |
---|---|
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:
Metode | Argumenter | Forklaring |
---|---|---|
void begin | long 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 registerNoCommandCallback | void(*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
Metode | Argumenter |
---|---|
PLabBTLEController | rx - Samme som SoftwareSerial rx tx - Samme som SoftwareSerial tx |
Operatorer:
Operator | Beskrivelse |
---|---|
[size_t index] | Elementtilgang. Hent ut oppdaget enhet etter index. |
Metoder:
Metode | Argumenter | Beskrivelse |
---|---|---|
void update | Oppdaterer indre datastrukturer. Må kalles ofte, anbefalt i begynnelsen på loop(). | |
bool isReady | Forteller om enheten er klar for å motta instruksjoner | |
void setName | char *name - Nytt navn | Setter 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 setRole | Role r - Ny rolle | Setter 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 setDiscoveringNames | bool disc - Om navn skal oppdages | Setter om enheten skal oppdage navn på andre enheter eller ikke. |
bool isWorkingImmediately | Forteller om enheten skal starte tilkobling ved første mulighet. | |
void setWorkingImmediately | bool wi - Om enheten skal jobbe umiddelbart | Setter 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 connectDevice | int id - identifikator/ indeks i device liste. | Koble til enhet etter id. Krever at enheten har oppdaget den andre enheten. |
void connectDevice | PLabBTLEDevice device - Oppdaget enhet | Koble til den angitte oppdagede enheten. |
void connectDevice | char *address - Addresse å koble til | Koble 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/.
Eksempel | Forklaring |
---|---|
ButtonTest | Leser en knapp, og sender en beskjed når knappens tilstand endres. |
HC05_Binding | Setter 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_Connect | Viser hvordan en HM10 enhet kan konfigureres til å koble til en annen enhet ved hjelp av PLabBTLEController klassen. |
HM10_ConnectAndStayConnected | Viser 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_ControllerTest | Viser hvordan PLabBTLEController klassen virker. Kan brukes for konfigurasjon av HM10/11 enheter. |
PLabBTCallbackAdvancedEcho | Viser avansert bruk av PLabBTCallback klassen. |
PLabBTCallbackEcho | Viser bruk av PLabBTCallback klassen med ekko. |
PLabBTSerialEcho | Viser bruk av PLabBTSerial klassen med ekko. |
Terminal | Grunnleggende terminalbruk med Bluetooth enheter. |