Aby skorzystać z danych przesyłanych przez sensory BBMagic należy:
- odczytać dane funkcją bbm_bt_read(..)
- sprawdzić, który sensor przysłał informacje
- odczytać i przetworzyć dane znajdujące się w buforze
Wszystko to zrobi kilka poniższych linii kodu:
#include <stdio.h> #include <stdlib.h> #include "bbmagic_lib.h" int main(void) { unsigned char bbm_buf[100] ; int i, bbm_id ; i =bbm_bt_open(0, 0, 0, LIB_SHOW_CONFIG) ; if(i) exit(1) ; do { bbm_id = bbm_bt_read(bbm_buf) ; if( bbm_id == BBMAGIC_M_BUTTON) { printf("Button: ") ; if(bbm_buf[BBM_BUTTON_BUTTON_FUNCTION] == BBM_BUTTON_FN_SINGLE_CLICK) printf("SINGLE CLICK") ; else if(bbm_buf[BBM_BUTTON_BUTTON_FUNCTION] == BBM_BUTTON_FN_DOUBLE_CLICK) printf("DOUBLE CLICK") ; else if(bbm_buf[BBM_BUTTON_BUTTON_FUNCTION] == BBM_BUTTON_FN_HOLDING) printf("HOLDING") ; printf("\n\r") ; } if( bbm_id == BBMAGIC_M_MAGNETO) { printf("Window: ") ; if(bbm_buf[BBM_MAGNETO_FLAGS] & BBM_MAGNETO_MAGNET_MASK) printf(" CLOSED") ; else printf(" OPEN") ; printf("\n\r") ; } bbm_sleep_ms(100) ; }while(bbm_id != -1) ; bbm_bt_close() ; exit(0) ; }
A oto wynik działania programu:
bbm_buf[100]
To bufor na dane odbierane od sensorów BBMagic.
bbm_bt_open(0, 0, 0, LIB_SHOW_CONFIG)
Funkcja otwiera komunikację BBMagic Bluetooth Smart. W miejsce pierwszych trzech zer można wpisać numery pinów Raspbeey Pi z podłączonymi przez rezystory diodami LED sygnalizującymi kolejno: odbieranie, wysyłanie danych oraz działanie aplikacji.
Parametr LIB_SHOW_CONFIG włącza wyświetlanie przez bibliotekę bbmagic_lib_2 komunikatów startowych.
bbm_bt_read(bbm_buf)
Funkcja zapisująca w buforze dane odebrane od modułów BBMagic. Po wykonaniu funkcji w zmiennej 'bbm_id’ może pojawić się:
- wartość większa od 0 – numer modułu BBMagic, który przysłał dane. Zdefiniowane są w pliku 'bbmagic_lib.h’. Np. moduł BBMagic METEO ma numer 1 (#define BBMAGIC_M_METEO 1).
Dane otrzymane od modułu znajdują się w buforze bbm_buf[]. Położenie konkretnych danych zdefiniowano również w pliku 'bbmagic_lib.h’. Np. poziom natężenia światła z modułu METEO mamy tu: bbm_buf[BBM_METEO_LIGHT] (#define BBM_METEO_LIGHT 11). - 0 – oznacza brak nowych danych.
- -1 – oznacza zakończenie programu (np. gdy naciśnięto Ctrl+C)
if( bbm_id == BBMAGIC_M_BUTTON)
Jeśli nadeszła wiadomość od sensora BBMagic BUTTON to sprawdzimy jaka funkcja guzika została wywołana: pojedyncze kliknięcie, podwójne kliknięcie czy przytrzymanie.
if( bbm_id == BBMAGIC_M_MAGNETO)
Jeśli nadeszła wiadomość od sensora BBMagic MAGNETO zainstalowanego przy oknie, to wyświetlamy stan okna: zamknięte/otwarte.
bbm_sleep_ms(100)
Zatrzymuje pętlę główną na 100ms. Zastępuje funkcje usleep(), sleep(), itp. które nie są kompatybilne z bibliteką bbmagic_lib_2.
bbm_bt_close()
Funkcja zamykająca komunikację BBMagic Bluetooth Smart.
Zrób to sam
Przykładowa aplikacja 'bbmagic_sensor_test’ jest bardziej rozbudowana. Odbiera i przetwarza dane od sensorów:
- BBair
- BBMagic BUTTON
- BBMagic MOTION
- BBMagic METEO
- BBMagic MAGNETO
- BBMagic FLOOD
Aby ją pobrać, rozpakowac i uruchomić wpisz:
wget http://bbmagic.net/download/src_2/bbmagic_sensor_test.tar.gz tar -zxvf bbmagic_sensor_test.tar.gz cd bbmagic_sensor_test sudo ./bbmagic_sensor_test
I w działaniu z sensorami BUTTON, MAGNETO, MOTION i BBair: