sobota, 30 września 2017

[34.1] Arduino - Bluetooth HC-05 - Sterowanie diodą

Ten post chciałbym poświęcić na opisanie sposobu zaprogramowania modułu bluetooth HC-05 za pomocą Arduino Uno. Do projektu przedstawię krótki program wykonany w app inventor, który pozwala na sterowanie diodą znajdującą się na płytce.


[Źródło: https://store.arduino.cc/usa/arduino-uno-rev3]

Program App Inventor:


Teraz zaprezentuje prosty program wykonany w App inventor. Służy on do zapalania pojedynczej diody. Poprzez rozbudowanie tego programu, co prawdopodobnie zaprezentuje w kolejnych postach, można w bardzo łatwy sposób uzyskać sterowanie przekaźnikami czy innymi urządzeniami poprzez bluetooth wykorzystując do tego Arduino lub przez programowanie niskopoziomowe w języku C.

Aplikacja wygląda następująco:


W App Inventor logikę programu wykonuje się poprzez połączenie odpowiednich bloków ze sobą. Całość wygląda następująco:


Idąc od góry kontrolka Screen1.Initialize zawiera definicje stanów wprowadzonych przycisków. Następnie BTList.BeforePicking prezentuje po kliknięciu w przycisk aktualną listę urządzeń bluetooth jakie może zostać wykryte przez telefon. Następnie w BTList.AfterPicking po udanym połączeniu ustawiane są stany dla pozostały przycisków, gdy połączenie może być nawiązane. Kolejna kontrolka steruje stanem przycisku. Sprawdza ona aktualnie wyświetlaną informację, zmienia ją na przeciwną i wysyła odpowiedni znak ASCII do modułu bluetooth. Ostatnia kontrolka pozwala na wyłączenie układu od bluetootha i ustawienie nowych stanów dla kontrolek na ekranie.

Program Arduino:


Program przygotowany w app inventor oraz arduino można pobrać pod tym linkiem

  1. #include <SoftwareSerial.h>
  2. #include <Wire.h>
  3. //define PIN11 and PIN10 as RX and TX
  4. SoftwareSerial I2CBT(11,10);
  5. void setup()
  6. {
  7.   /* Baudrate for send data to user in terminal*/
  8.   Serial.begin(9600);
  9.   /* Set baudrate to bluetooth if it sends incorrect information change speed, probably to 57600 */
  10.   I2CBT.begin(9600);  
  11.   pinMode(13, OUTPUT); //set pin 13 as output, where we put a LED
  12. }
  13. void loop()
  14. {
  15.   byte recData[30];
  16.   int insize;
  17.   if ((insize=(I2CBT.available()))>0)
  18.   {
  19.       Serial.print("input data size = ");
  20.       Serial.println(insize);
  21.      
  22.       for (int i=0; i<insize; i++)
  23.       {
  24.         Serial.print("Odebrano: ");
  25.         Serial.print(recData[i]=char(I2CBT.read()));
  26.         Serial.println("    @#@");
  27.       }
  28.       /* Check only first receive character */
  29.       switch (recData[0])
  30.       {
  31.         case 2:
  32.           Serial.println("Turn led OFF");
  33.           digitalWrite(13,LOW); //LED off
  34.         break;
  35.         case 1:
  36.           Serial.println("Turn led ON");
  37.           digitalWrite(13,HIGH); //LED light up
  38.         break;
  39.       }
  40.    }
  41. }

Program wykonuje dwa połączenia przez serial port jedno do informowania użytkownika, drugie jako systemowy UART do komunikacji z modułem bluetooth. W pętli odbierana jest wiadomość, jeśli jest co odbierać urządzenie sprawdza czy odebrana wiadomość w pierwszym bajcie (bo tylko jeden jest wysyłany przez program na komórkę) jest poprawna i odpowiada przypisanym do niej stanom. Jeśli taka informacja jest zdefiniowana to następuje zapalenie bądź zgaszenie diody.

Pliki z projektem można znaleźć na dysku Google pod tym linkiem.