You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 7 Next »

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 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.

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.

MinimalBTExample
// 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:

  • Linje 4: Vi må inkludere SoftwareSerial for at koden skal kompilere.
  • Linje 5: Slik inkluderes biblioteket etter det er installert.
  • Linje 23 og 26: Fra og med linje 23 vet vi hvor mange tegn vi trenger å ha plass til å lagre. I linje 26 allokerer vi en c-streng (char array) som er akkurat stor nok til å holde teksten.
  • Linje 28: Slik leser du fra bluetooth
  • Linje 30: Slik sender du en beskjed til bluetooth. Her sender vi bare akkurat den samme teksten som vi mottok.
  • Linje 33 - 36: Dette er logikken som leser fra konsollvinduet og sender det. Husk å ha newline som linjeavslutning i konsollvinduet (kan velges nede i høyre hjørne på Windows versjonen av programmet).
  • No labels