...
På GitHub kontoen vår, under plab-library, kan dere finne PLabBT, et bibliotek for å forenkle mottak av beskjeder. Dette biblioteket inneholder to tre klasser: PLabBTSerial, PLabBTCallback og PLabBTCallbackPLabBTLEController.
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.
...
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. |
Se TwoButtonsExample under ArduinoMobileIntegration/TwoButtonsExample/Arduino/TwoButtonsCallbackExample for eksempel på bruk.
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 bruke eksempel 1 under, og skrive AT kommandoene dere vil kjøre manuelt fra konsollvinduet.
Eksempel 1: Oppkobling og basis
Siden biblioteket vi bruker baserer seg på SoftwareSerial, gir vi først det mest grunnleggende eksempelet som kan gies med dette. Det er bare beregnet til å se i konsollvinduet alt som kommer inn fra enheten, og for å sende tekst til enheten. Dette kan brukes til for eksempel å sende AT kommandoer til enheten.
Oppkobling viser HC-05 enhet, men føttene er like som BLE enheten, og de fire tilkoblede føttene er like som HC-06 enheten du kan bruke.
Oppkobling av Arduino og bluetooth
Legg merke til en viktig detalj: Det som er RX i kode er TX på enheten, og motsatt. RX står for motta (Receive) og TX står for send (Transmit). Det du sender fra Arduino blir mottatt av enheten, og det du mottar på Arduino blir sendt fra enheten.
Koden for dette eksempelet er bare eksempelkoden for SoftwareSerial, og kan finnes her, eller i menyen under File->Examples->SoftwareSerial->SoftwareSerialExample. Er det noe problem med dette, prøv å endre hastigheten på kommunikasjonen til 9600.
Eksempel 2: Ekko fra Arduino
Dette eksempelet er Arduino koden fra et litt større eksempel som inkluderer Processing kode, både for datamaskin og for mobil.
Eksempelet mottar data fra bluetooth enhet, og returnerer et ekko til senderen. I tillegg er det mulig å skrive i konsollvinduet for å sende beskjeder til tilkoblet bluetooth enhet. Husk å sette på newline som linjeskift om du vil prøve det!
Oppkobling av Arduino og bluetooth
Oppkoblingen av dette eksempelet er nesten lik som eksempelet over. Eneste forskjellen er et send og motta pinnene er tilkoblet andre utganger på Arduinoen.
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
// Libraries:
// The SoftwareSerial is used for serial communcation using any two pins on the arduino.
// If PLabBTSerial is used, it must be included to make your code compile
#include <SoftwareSerial.h>
#include <PLabBTSerial.h>
// rx (receive from) bluetooth pin. Connected to tx on bt unit
const int btRxPin = 2;
// tx (transmit to) bluetooth pin. Connected to rx on bt unit
const int btTxPin = 6;
// Creates a PLabBTSerial object. The rx (receive) and tx (transmit) pins MUST be defined.
PLabBTSerial btSerial(btRxPin, btTxPin);
void setup() {
Serial.begin(9600);
// Start communication with your bluetooth device
btSerial.begin(9600);
}
void loop() {
// Check if some data has come from bt device
int availableCount = btSerial.available();
if (availableCount > 0) {
// Create a char array (c-string) to hold the incomming data.
char text[availableCount];
// Read the incomming data. bufferSize refers to the buffer you are giving as an argument
btSerial.read(text, availableCount);
// Echo text back
btSerial.println(text);
}
// If some data has been written in the console, send this to bt unit
while (Serial.available() > 0) {
char letter = Serial.read();
btSerial.write(letter);
}
} |
Koden i sin helhet ligger i Examples på GitHub kontoen vår, under ArduinoMobileIntegrationExamples/MinimalBTExample/Arduino/MinimalBTExample. Der er det litt mer debug output til Serial, men logikken er ellers helt lik.
Verdt å merke seg i koden:
...
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 |
...
. |