Sterowanie aktorami BBMagic


Aktory BBMagic to:

  • BBMagic RELAY – posiada cztery wyjścia sterujące typu on/off (BBM_RELAY_0..BBM_RELAY_3). Do sterowania dowolnymi odbiornikami w zależności od zastosowanego przekaźnika.
  • BBMagic DIMMER – steruje mocą urządzenia 230VAC poprzez regulację fazową. Do sterowania żarówkami, żarówkami LED kompatybilnymi ze ściemniaczami, silnikami, grzałkami, grzejnikami itp.
  • BBMagic PWM – posiada trzy niezależne wyjścia PWM (Pulse-Width Modulation). Idealny do sterowania trójkolorowymi paskami LED, silnikami DC, diodami POWER LED, halogenami niskonapięciowymi, itp.

Oto kod przykładowej funkcji sterującej modułem BBMagic DIMMER. Co dziesięć sekund zmienia ona moc odbiornika z 25% na 100% i dalej znów na 25%.

void dimmer_test(void)
{
    unsigned char bbm_buf[100] ;
    int i, bbm_id, counter ;

    printf("\n*** bbmagic_actors_test start : testing BBMagic DIMMER ***\n\n") ;
    i =bbm_bt_open(0, 0, 0, LIB_SHOW_CONFIG | LIB_SHOW_ACTORS) ;
    if(i) exit(1) ;
    bbm_dimmer_add("my_dimmer", "CBFD786BAA68", "2D8E75070812849C07ABF7C4382AEB3B") ;
    counter =80 ;
    do
    {
        counter++ ;
        bbm_id = bbm_bt_read(bbm_buf) ;
        switch( bbm_id )
        {
            case BBMAGIC_M_DIMMER:
                printf("REC_DATA_FROM_BBMAGIC_DIMMER\n") ;
                //printf("BBM_DIMMER_set to: %d%%\n", bbm_buf[BBM_DIMMER_VAL]) ;
            break ;
            default:
            break ;
        } ;
        if(counter ==100) bbm_dimmer_set("my_dimmer", 100) ;
        if(counter ==200)
        {
            counter =0 ;
            bbm_dimmer_set("my_dimmer", 25) ;
        }
        bbm_sleep_ms(100) ;
    }while(bbm_id != -1) ;
    bbm_bt_close() ;
    exit(0) ;
}

unsigned char bbm_buf[100]
To bufor na dane odbierane od aktorów BBMagic.

int bbm_id
Przechowuje numer modułu BBMagic, od któego funkcja bbm_bt_read(..) odebrała dane.

int counter
Posłuży do odliczania czasu.

bbm_bt_open(0, 0, 0, LIB_SHOW_CONFIG | LIB_SHOW_ACTORS)
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.
Flagi mogą włączać:

  • LIB_SHOW_CONFIG – wyświetlanie przez bibliotekę bbmagic_lib_2 komunikatów startowych,
  • LIB_SHOW_SENSORS – wyświetlanie przez bibliotekę bbmagic_lib_2 danych odebranych z sensorów BBMagic,
  • LIB_SHOW_ACTORS – wyświetlanie przez bibliotekę bbmagic_lib_2 informacji związanych z działaniem aktorów BBMagic.
  • LIB_SHOW_BBAIR – wyświetlanie przez bibliotekę bbmagic_lib_2 informacji odebranych od sensora smogu BBair.

bbm_dimmer_add(..)
Dodaje urządzenie BBMagic DIMMER do bazy aktorów aplikacji. Kolejne argumenty to:

  • my_dimmer – dowolna nazwa jaką chcemy nadać naszemu urządzeniu
  • CBFD786BAA68 – adres urządzenia
  • 2D8E75070812849C07ABF7C4382AEB3B – klucz szyfrujący urządzenia

W jaki sposób odczytać adres i klucz z aktora BBMagic wyjaśniono poniżej.

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. Numery modułów zdefiniowane są w pliku ‚bbmagic_lib.h’. Np. moduł BBMagic DIMMER ma numer 21 (#define BBMAGIC_M_DIMMER 21).
    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 DIMMER mamy tu: bbm_buf[BBM_DIMMER_LIGHT] (#define BBM_DIMMER_LIGHT 8).
  • 0 – oznacza brak nowych danych od modułów BBMagic.
  • -1 – oznacza zakończenie programu (np.użytkownik nacisnął Ctrl+C)

bbm_dimmer_set(„my_dimmer”, 100)
Ustawia moc wyjściową DIMMERA ‚my_dimmer’ na 100%.

bbm_dimmer_set(„my_dimmer”, 25)
Ustawia moc wyjściową DIMMERA ‚my_dimmer’ na 25%.

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.

W jaki sposób odczytać adres i klucz aktora BBMagic

Aby móć sterować aktorami BBMagic konieczne jest ich uprzednie zarejestrowanie w biblitece za pomocą funkcji.

  • bbm_relay_add(„nazwa”, „adres” , „klucz”) – dodaje do bazy moduł BBMagic RELAY
  • bbm_dimmer_add(„nazwa”, „adres” , „klucz”) – dodaje do bazy moduł BBMagic DIMMER
  • bbm_pwm_add(„nazwa”, „adres” , „klucz”) – dodaje do bazy moduł BBMagic PWM

Wszystkie funkcje przyjmują te same argumenty: „nazwa”, „adres” , „klucz”. Nazwę nadajemy dowolnie, a adres i klucz pobieramy z modułu w następujący sposób:

1. uruchamiamy aplikację bbm_scanner_2
Znajduje się w każdym pobranym projekcie w katalogu ‚tools’. Można ją także pobrać z podstrony Download. Zmieniamy prawa dostępu jeśli to konieczne i uruchamiamy aplikację z katalogu ‚tools’:

chmod +x ./tools/bbm_scanner_2
sudo ./tools/bbm_scanner_2

2. włączamy zasilanie aktora BBMagic
Po włączeniu zasilania czerwona dioda LED mruga przez kilka sekund. W tym czasie musimy nacisnąć guzik modułu. Jeśli moduł został podłączony do sieci 230VAC należy zachować szczególną ostrożność!!
Sam guzik jest plastikowy więc nie przewodzi prądu, ale nie zaszkodzi nacisnąc go nieprzewodzącym przedmiotem np. ołówek, gumka, plastikowa zatyczka od pisaka lub drewniany patyczek itp.
BBMagic RELAY odczyt adresu

3. przytrzymujemy wciśnięty guzik
Przytrzymanie wciśniętego guzika przez 1 sekundę spowoduje zapalenie czerwonej diody światłem ciągłym i wysłanie adresu oraz klucza.
Ponieważ klucz szyfrujący powinien pozostać poufny moduł wysyła go szeptem (z małą mocą nadawania). Aby aplikacja bbm_scanner_2 mogła go usłyszeć odległość pomiędzy aktorem a Raspberry Pi powinna być niewielka (ok. 1-2 metry). Takie rozwiązanie uniemożliwia podsłuchanie przesyłanego klucza.
Aplikacja bbm_scanner_2 wyświetli na ekranie odebrany adres i klucz modułu. Teraz możemy je bezpośrednio skopiować do funkcji bbm_pwm_add, bbm_dimmer_add lub bbm_relay_add.
BBMagic sec key

Tylko aktory – moduły wykonawcze: BBMagic RELAY, BBMagic DIMMER i BBMagic PWM wysyłają swój adres i klucz.
Sensory BBMagic nie wymagają dodania do bazy modułów w aplikacji.

Zrób to sam

Przykładowa aplikacja ‚bbmagic_actors_test’ zawiera trzy funkcje do sterowania aktorami: relay_test(), dimmer_test(), pwm_test(). Można ją pobrać i rozpakować wpisując:

wget http://bbmagic.net/download/src_2/bbmagic_actors_test.tar.gz
tar -zxvf bbmagic_actors_test.tar.gz
cd bbmagic_actors_test

Wybieramy moduł, którym chcemy sterować, a zakomentujemy (znakami //) funkcje obsługujące pozostałe moduły. Tutaj sterujemy BBMagic DIMMER więc zakomantujemy pierwszą i trzecią funkcję:

int main(void)
{
    //relay_test() ;
    dimmer_test() ;
    //pwm_test() ;
}

Odczytujemy adres i klucz modułu BBMagic DIMMER aplikacją bbm_scanner_2 i kopiujemy np tak, jak pokazano poniżej:
BBMagic addres and key get
Edytujemy plik ‚bbmagic_actors_test.c’

nano bbmagic_actors_test.c

… i wklejamy odczytany adres i klucz do funkcji ‚bbm_dimmer_add’
BBMagic addres and key paste
Kompilujemy i uruchamiamy aplikację:

make
sudo ./bbmagic_actors_test

BBMagic DIMMER run
I gotowe.
Moduł BBMagic DIMMER odbiera informacje od Raspberry Pi i steruje mocą lampki, która co 10 sekund zmienia swoją jasność.

BBMagic DIMMER lamp

Tagi , , , , .Dodaj do zakładek Link.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *