Komunikacja radiowa Arduino - Raspberry Pi z wykorzystaniem modułu Bluetooh HC-06

Podobne dokumenty
Instrukcja dla: Icomsat v1.0 SIM900 GSM/GPRS shield for Arduino oraz dla GPRS Shield produkcji Seeedstudio.

MultiTool instrukcja użytkownika 2010 SFAR

Łącza nienazwane(potoki) Łącza nienazwane mogą być używane tylko pomiędzy procesami ze sobą powiązanymi.

SCL > Pin 21 SDA > Pin 20 VCC > 5V GND > GND

Instrukcja podstawowego uruchomienia sterownika PLC LSIS serii XGB XBC-DR20SU

Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska

Przewodnik połączenia (dla aparatu COOLPIX)

Wersja polska. Wstęp. Sterowniki i oprogramowanie. Instalacja. BT211 Sweex Bluetooth 2.0 Class 1 Adapter USB

Pobieranie argumentów wiersza polecenia

Konfigurowanie sterownika CX1000 firmy Beckhoff wprowadzenie. 1. Konfiguracja pakietu TwinCAT do współpracy z sterownikiem CX1000

INSTRUKCJA UŻYTKOWNIKA MPCC

Instrukcja do oprogramowania ENAP DEC-1

Konfigurowanie sterownika CX9000 firmy Beckhoff wprowadzenie

Biblioteka standardowa - operacje wejścia/wyjścia

Konfigurowanie sterownika BC8150 firmy Beckhoff wprowadzenie

Pliki w C/C++ Przykłady na podstawie materiałów dr T. Jeleniewskiego

Schemat blokowy architektury AVR

Instrukcja instalacji i obsługi modemu ED77 pod systemem operacyjnym Windows 98 SE (wydanie drugie)

Linksys/Cisco SPA2102, SPA3102 Instrukcja Konfiguracji

4 Channel Video Server ACD Ver Quick Installation Guide

dokument DOK wersja 1.0

Instytut Teleinformatyki

Modem Bluetooth MBL-232/UK

Funkcje standardowej biblioteki wejść-wyjść do wyświetlania i pobierania danych

Aktualizacje oprogramowania Instrukcja obsługi

Linksys/Cisco RT31P2, WRT54GP2. Instrukcja Konfiguracji

UW-DAL-MAN v2 Dotyczy urządzeń z wersją firmware UW-DAL v5 lub nowszą.

Funkcje zawarte w bibliotece < io.h >

Kod produktu: MP-W7100A-RS485

Interfejsy: Ethernet do połączenia z siecią LAN Serial do połączenia z siecią WAN. pełną konfigurację urządzenia. Zadanie

2014 Electronics For Imaging. Informacje zawarte w niniejszej publikacji podlegają postanowieniom opisanym w dokumencie Uwagi prawne dotyczącym tego

Funkcje zawarte w bibliotece < io.h >

Kod produktu: MP-W7100A-RS232

cmt + CODESYS, oraz zdalne wejścia/ wyjścia

Przewodnik połączenia (dla aparatu KeyMission 80)

PODŁĄCZENIE I KONFIGURACJA BRAMKI VoIP LINKSYS PAP2T

PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO

Obsługa plików. Systemy Operacyjne 2 laboratorium. Mateusz Hołenko. 25 września 2011

ZiMSK. mgr inż. Artur Sierszeń mgr inż. Łukasz Sturgulewski ZiMSK 1

3. Sieć PLAN. 3.1 Adresowanie płyt głównych regulatora pco

Seria wielofunkcyjnych serwerów sieciowych USB

Konfigurowanie sterownika BX9000 firmy Beckhoff wprowadzenie. 1. Konfiguracja pakietu TwinCAT do współpracy ze sterownikiem BX9000

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

Seria wielofunkcyjnych serwerów sieciowych USB

Kod produktu: MP-BT-RS232

Język polski na wyświetlaczu przemiennika

BT180 CLASS I USB BLUETOOTH ADAPTER Informacje na temat produktu

Fiery Remote Scan. Uruchamianie programu Fiery Remote Scan. Skrzynki pocztowe

NWD-210N Bezprzewodowy adapter USB n

Języki programowania. Przetwarzanie plików amorficznych Konwencja języka C. Część siódma. Autorzy Tomasz Xięski Roman Simiński

Sieciowy serwer IP urządzeń USB z 4 portami USB 2.0

Instrukcja instalacji Zespołu Diagnostycznego Delphi w systemie Vista.

Stałe i zmienne znakowe. Stała znakowa: znak

ZyXEL NBG-415N. Bezprzewodowy router szerokopasmowy n. Skrócona instrukcja obsługi. Wersja /2006 Edycja 1

Kod produktu: MP-BTM222-5V

1. Tworzenie nowego projektu.

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

1.1 Co to jest USBCOM? Budowa oraz parametry techniczne... 3

Rozwiązywanie problemów z łącznością Bluetooth dotyczących klocka EV3

Warsztaty AVR. Instalacja i konfiguracja środowiska Eclipse dla mikrokontrolerów AVR. Dariusz Wika

PBS. Wykład Organizacja zajęć. 2. Podstawy obsługi urządzeń wykorzystywanych podczas laboratorium.

Konfigurowanie sterownika CP6601 firmy Beckhoff wprowadzenie

Konfigurowanie modułu BK9050 firmy Beckhoff wprowadzenie

Instrukcja obsługi. Grand IP Camera III. Kamera IP do monitoringu

Narzędzie Setup. Instrukcja obsługi

AMX 530BT. Instrukcja instalacji i konfiguracji AMX 530BT dla systemów operacyjnych XP, 7 i Instalacja i konfiguracja AMX 530BT dla Windows XP

Rozdział 8. Sieci lokalne

ZADANIE.02 Podstawy konfiguracji (interfejsy) Zarządzanie konfiguracjami 1,5h

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

Operacje na plikach. Informatyka. Standardowe strumienie wejścia i wyjścia

Łącza nienazwane(potoki)

Klawiatura matrycowa

Contents 1. Czujniki, wskaźniki, wyposażenie Dymo Co zawiera opakowanie Elementy czujnika Dymo Specyfikacja

Programowanie w językach

8. Sieci lokalne. Konfiguracja połączenia lokalnego

USB firmware changing guide. Zmiana oprogramowania za przy użyciu połączenia USB. Changelog / Lista Zmian

Instrukcja obsługi programu DS150E. Dangerfield March. 2009V3.0 Delphi PSS

Moduł Ethernetowy. instrukcja obsługi. Spis treści

PIXMA MG5500. series. Przewodnik konfiguracji

Wersja polska. Wstęp. Zawartość opakowania. Dane techniczne. Dodatkowe dane techniczne. BT200 - Sweex Bluetooth 2.0 Class II Adapter USB

TomTom ecoplus Reference Guide

Instrukcja instalacji i obsługi systemu AR4vision (wersja 1.0.0)

Ćwiczenie 1. Kolejki IBM Message Queue (MQ)

Instrukcja użytkowania

Projekt procesora NIOSII w strukturze programowalnego układu logicznego CYCLONEII EP2C35F672C6 podłączenie i obsługa wyświetlacza LCD.

MultiBoot Instrukcja obsługi

instrukcja instalacji modemu SpeedTouch 605s

Przełącznik USB 2.0. Podręcznik użytkownika. Typ: DA & DA

1 POLSKI INSTALACJA OPROGRAMOWANIA IDC3 FIRMY TEXA INSTALACJA W SYSTEMIE WINDOWS VISTA...21

Instrukcja podłączenia i konfiguracji BLUETOOTH NX. Interfejs. (instrukcja dostępna także na ver

LabVIEW PLATFORMA EDUKACYJNA Lekcja 5 LabVIEW i Arduino konfiguracja środowiska i pierwszy program

Zasilanie ednet.power

MOBOT-RCR v2 miniaturowe moduły radiowe Bezprzewodowa transmisja UART

Opcje Fiery1.3 pomoc (klient)

POLITECHNIKA WROCŁAWSKA WYDZIAŁ ELEKTRYCZNY KATEDRA ENERGOELEKTRYKI LABORATORIUM INTELIGENTNYCH INSTALACJI ELEKTRYCZNYCH

Zarządzanie licencjami dla opcji Fiery na komputerze klienta

Packet Tracer - Nawigacja w IOS

Kod produktu: MP00501-XE232NET

KAmodRPi ADC DAC. Rev Źródło:

1. Instalacja modułu w systemie Windows.

Transkrypt:

Komunikacja radiowa Arduino - Raspberry Pi z wykorzystaniem modułu Bluetooh HC-06 Uruchomienie komunikacji radiowej pomiędzy Arduino a komputerem Rapsberry Pi, z wykorzystaniem modułu łącza radiowego Bluetooth HC06, wymaga wykonania następujących kroków: 1. Podłączyć modułu HC-06 do Arduno. a. W przypadku pracy z płytką edukacyjną etap ten można pominąć. Moduł Bluetooth jest już podłączony. b. W przypadku własnego montażu należy: i. Pin VCC modułu HC06 podłączyć do pinu 3.3V w Arduino Due ii. Pin GND modułu HC06 podłączyć do pinu GND w Arduino Due iii. Pin RXD modułu HC06 podłączyć do pinu 19 (RX1) w Arduino Due iv. Pin TXD modułu HC06 podłączyć do pinu 18 (TX1) w Arduino Due Od tego momentu moduł HC06 jest podłączony do portu szeregowego nr 1 w Arduino Due, a komunikacja z nim odbywać się będzie za pomocą obiektu Serial1. 2. Ustawić nazwę modułu HC-06 na unikalną w danej okolicy. W przypadku zajęć proponowana nazwa to stanxx, gdzie XX to numer stanowiska. 3. Sprawdzić, czy Raspberry Pi widzi moduł po zmianie nazwy. 4. Sparować Raspberry PI z modułem HC-06 i nawiązać połączenie. 5. Przetestować, czy Raspberry Pi może odbierać dane od Arduino. W tym celu potrzeba prostego programu, pracującego w module Arduino i wysyłającego teksty do modułu HC-06. 6. GOTOWE. Teraz można już swobodnie przesyłać dane po łączu radiowym. Kroki te opisano szczegółowo poniżej: Ustawienie nazwy przyjaznej (identyfikatora modułu Bluetooth HC-06) Nazwa modułu jest nazwą przyjazną, wyświetlaną przez wszelkiego rodzaju urządzenia do komunikacji protokołem Bluetooth. Alternatywą dla nazwy przyjaznej jest numer MAC (np. F0:D2:2E:59:92:F3). Nazwa przyjazna musi być unikalna, np. stanxx, gdzie XX to numer stanowiska. Aby ustawić nazwę modułowi HC-06, można skorzystać z następującego programu: #include <ISADefinitions.h> void setup() { pinmode(led8, OUTPUT); Serial1.begin(9600); Serial.begin(9600); Serial.flush(); Serial1.flush();

Serial1.print("AT+NAME stan01 "); delay(1000); String str = Serial1.readString(); Serial.print("Odpowiedz: ["); Serial.print(str); Serial.println("]"); void loop() { Uwaga 1: Nazwa modułu HC-06 zapisywana jest w pamięci nieulotnej Flash. Pamięć ta ma określoną liczbę cykli zapisu, stąd nie wolno zapisywać nazwy w funkcji loop(). Uszkodzenie pamięci, odpowiedzialnej za nazwę urządzenia, uniemożliwia jej późniejszą zmianę. Uwaga 2: Nazwę modułu HC-06 można zmieniać jedynie w dwóch trybach: a) niesparowany oraz b) sparowany/niepołączony. Jeśli polecenie AT+NAME zostanie wysłane do modułu Bluetooth w trybie połączony, zostanie ono potraktowane jako zwykłe dane i przekazana do odbiornika (np. komputera, telefonu komórkowego czy Raspberry Pi). Uwaga 3 : Moduł HC-06, po załączeniu zasilania, jest zawsze w trybie niesparowany. Parowanie wykonywane jest manualnie, przez użytkownika urządzenia zdalnego (tutaj Raspberry PI). Wyjątkiem jest sytuacja, gdy urządzenie zdalne jest skonfigurowane do automatycznego parowania z wykrytym modułem HC-06 (lub dowolnym innym). Uwaga 4 : Moduł HC-06 podłączono do portu szeregowego Serial1, pod piny: RX1 (pin 19) oraz TX1 (pin 18). Sprawdzenie obecności urządzenia HC-06 po zmianie nazwy Aby sprawdzić, jakie są dostępne urządzenia Bluetooth w okolicy, należy skorzystać z odpowiednich poleceń systemu Linux. W tym celu należy skorzystać z konsoli - wcisnąć kombinację Lewy Ctrl+Lewy Alt+T lub wybrać ikonę Terminal z paska narzędzi systemowych. Wejście w tryb superużytkownika W tym celu należy przełączyć się na konto roota: pi@localhost:~ $ sudo su root@localhost:/home/pi# Sprawdzenie dostępnych urządzeń Bluetooth A następnie wydać polecenie hcitool scan, które wyszukuje urządzenia w okolicy. root@localhost:/home/pi# hcitool scan Scanning... AC:B5:7D:AB:66:7E LAPEK

20:16:12:15:63:50 stan01 W uzyskanym wyniku interesuje nas wiersz podświetlony na niebiesko. Pierwsza wartość to adres MAC (nazwa sprzętowa) urządzenia Bluetooth o nazwie przyjaznej stan01. Adres MAC 20:16:12:15:63:50 jest unikalny dla każdego modułu i należy go wykorzystywać przy dalszej konfiguracji. Dobrze jest zamontować go na kartce lub w pliku tekstowym. Podłączenie Po pomyślnej zmianie nazwy i odnalezieniu swojego urządzenia, należy sparować go w systemie Raspbian. Można to zrobić za pomocą a) narzędzia dostępnego w pod ikonką w pasku narzędzi systemowych, lub b) za pomocą następujących poleceń: Wyłączenie trybu samolotowego (brak komunikacji RF): W celu aktywacji komunikacji radiowej należy skorzystać z polecenia rfkill : root@localhost:/home/pi# rfkill list 0: phy0: Wireless LAN Soft blocked: no Hard blocked: no 1: hci0: Bluetooth Soft blocked: yes Hard blocked: no root@localhost:/home/pi# rfkill unblock 1 root@localhost:/home/pi# rfkill list 0: phy0: Wireless LAN Soft blocked: no Hard blocked: no 1: hci0: Bluetooth Soft blocked: no Hard blocked: no W tym przykładzie wyświetlono listę urządzeń, w której moduł Bluetooth z Raspberry Pi ma identyfikator 1. Po ustaleniu identyfikatora użyto polecenia unblock. Parowanie modułu HC-06 i Raspberry Pi Aby sparować dowolne urządzenie z Raspberry Pi, należy skorzystać z następujących poleceń narzędzia bluetoothctl : root@localhost:/home/pi# bluetoothctl -a [NEW] Controller B8:27:EB:A7:0C:73 localhost [default] Agent registered [bluetooth]# power on Changing power on succeeded [bluetooth]# scan on Discovery started [CHG] Controller B8:27:EB:A7:0C:73 Discovering: yes [NEW] Device 20:16:12:15:63:50 nazwa [NEW] Device 2C:D0:5A:50:DC:8D DESKTOP-4GF1VDR

[NEW] Device AC:B5:7D:AB:66:7E LAPEK [bluetooth]# trust 20:16:12:15:63:50 [CHG] Device 20:16:12:15:63:50 Trusted: yes Changing 20:16:12:15:63:50 trust succeeded [CHG] Device 2C:D0:5A:50:DC:8D RSSI: -77 [CHG] Device 2C:D0:5A:50:DC:8D RSSI: -65 [bluetooth]# pair 20:16:12:15:63:50 Attempting to pair with 20:16:12:15:63:50 [CHG] Device 20:16:12:15:63:50 Connected: yes Request PIN code [agent] Enter PIN code: 1234 [CHG] Device 20:16:12:15:63:50 UUIDs: 00001101-0000-1000-8000-00805f9b34fb [CHG] Device 20:16:12:15:63:50 Paired: yes Pairing successful [CHG] Device 20:16:12:15:63:50 Connected: no [bluetooth]# quit Agent unregistered [DEL] Controller B8:27:EB:A7:0C:73 localhost [default] Po wykonaniu polecenia pair w narzędziu bluetoothctl system operacyjny wyświetli monit o treści: Device xxxx has requested a pairing. Do you accept the request? Należy odpowiedzieć OK. Możliwy jest również następujący komunikat: GDBus.Error:org.bluez.Error.NotAvailable: Operation currently not available. Try connect manually. Należy go zignorować (wcisnąć OK ). Po wyjściu z narzędzia bluetoothctl komputer Raspberry Pi oraz moduł HC-06 o numerze MAC 20:16:12:15:63:50 są sparowane. Nawiązywanie połączenia pomiędzy sparowanymi urządzeniami W tej chwili moduł HC-06 znajduje się w trybie sparowany/niepołączony. Aby nawiązać połączenie, należy skorzystać z następującego polecenia: root@localhost:/home/pi# rfcomm connect hci0 20:16:12:15:63:50 Connected /dev/rfcomm0 to 20:16:12:15:63:50 on channel 1 Press CTRL-C for hangup Po wydaniu polecenia rfcomm w systemie zainstalowane zostanie urządzenie /dev/rfcomm0, które komunikuje się bezpośrednio z modułem Bluetooth HC-06. Uwaga! Wciśnięcie CTRL+C spowoduje zatrzymanie i wyłączenie urządzenia. Jeśli użytkownik ma potrzebę wydawania kolejnych poleceń w terminalu, należy utworzyć nowy terminal. Nawiązywanie połączenia pomiędzy sparowanymi urządzeniami Wydanie następującego polecenia: pi@localhost:~ $ cat /dev/rfcomm0 ta Ala ma kota Ala ma ko^c

spowoduje wyświetlenie w terminalu danych Ala ma kota\n, otrzymywanych od Arduino. Program wysyłający te dane może mieć następującą postać: #include <ISADefinitions.h> void setup() { pinmode(led8, OUTPUT); Serial1.begin(9600); bool state = false; const char* tekst = "Ala ma kota\n"; int counter = 0; void loop() { char ch = tekst[counter]; counter = (counter + 1) % strlen(tekst); digitalwrite(led8, state=!state); Serial1.print(ch); delay(150); Komunikacja - programowanie Raspberry Pi Nowy projekt w środowisku Qt: QtCreator -> New Project -> Non-Qt Project -> Pain C/C++ Project (CMake Build). Uruchamianie w oddzielnym terminalu, ze względu na niepoprawną obsługę strumieni WE/WY w oknie Qt: Project->Run settings, zaznaczyć "Run in Terminal" Kod odbierający dane, przesyłane przez Arduino do Raspberry Dane są liniami tekstu, zakończonego znakiem \n. #include <stdio.h> #include <stdlib.h> int main( void ) { FILE * f = fopen( " /dev/rfcomm0 ", "rw" ); if (f == NULL ) { perror( "fopen" ); exit( 1 ); // odbierz linię tekstu; linia MUSI kończyć się symbolem \n int cnt = 0 ;

while ( 1 ) { char line[ 100 ]; fgets(line, sizeof (line), f); printf( "line %d=%s", cnt++, line); fflush( stdout ); // zapewnij wyświetlanie wyniku fclose(f); return 0 ; Kod Arduino odbierający dane od Raspberry PI Dane są liniami tekstu, zakończonego znakiem \n. W ramach tekstu podawane są polecenia SET x oraz RESET x, gdzie x jest numerem diody LED zakresu 0-7. Polecenie SET włącza diodę, polecenie RESET wyłącza. #include <ISADefinitions.h> void setup() { for (int i = 0; i < 8; i++) pinmode(leds[i], OUTPUT); Serial1.begin(9600); Serial.begin(9600); Serial.println("start"); void loop() { String command = Serial1.readStringUntil('\n'); command.trim(); command.tolowercase(); Serial.print("."); if (command == "") return; if (command.startswith("set")) { command.remove(0, 3); command.trim(); int id = command.toint(); if (id >= 0 && id <= 7) digitalwrite(leds[id], true); if (command.startswith("reset")) { command.remove(0, 5); command.trim(); int id = command.toint(); if (id >= 0 && id <= 7)

digitalwrite(leds[id], false); Kod wysyłający polecenia SET/RESET do Arduino #include <stdio.h> #include <stdlib.h> int main( void ) { FILE * f = fopen( "/dev/rfcomm0", "w" ); if (f == NULL ) { perror( "fopen" ); exit( 1 ); while ( 1 ) { printf( "Wpisz polecenie i naciśnij ENTER:\n" ); fflush( stdout ); char command[ 100 ]; //fgets(stdin, sizeof(command), f); gets(command); printf( "> %s (%d)\n", command, strlen(command)); int a = fprintf(f, "%s\n", command); printf( "fprintf: wyslano %d bajtow\n", a); if (a==- 1 ) { perror( "printf" ); exit( 1 ); fclose(f); return 0 ; Kod realizujący dwukierunkową transmisję Raspberry Pi - Arduino Uwaga! Operacja read jest blokująca - w buforze odbiorczym musi być co najmniej jeden bajt, aby funkcja ta mogła się zakończyć. Proszę skorzystać z funkcji select. #include <stdio.h> #include <stdlib.h> #include <fcntl.h> int main( void )

{ int fd = open( "/dev/rfcomm0", O_RDWR ); printf( "fd=%d\n", fd); char buffer[ 100 ]; write(fd, "123\n", 4 ); int b = read(fd, buffer, 100 ); printf( "b=%d\n", b); close(fd); return 0 ; ---------------- Polecenia: apt-get remove --purge qtcreator apt-get install qt5-default apt-get install qtcreator