Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Kategoria: Kamery IP / Alarmy / Automatyka Bram
Montersi
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

BTM112 flaga sparowania urządzeń?

Jakub17 07 Mar 2017 20:00 915 13
  • #1 07 Mar 2017 20:00
    Jakub17
    Poziom 6  

    Witam

    Czy istnieje w modułach bluetooth coś w stylu flagi nawiązania połączenia tzn. master zapala flagę gdy sparuje się ze slavem, a gasi ją gdy połączenie zostanie przerwane?

    Program miałby działać tak: Po nawiązaniu połączenia między mikrokontrolerami (ATmega32A i ATmega8L) za pomocą nadajników bluetooth przesyłany jest ze slave'a do mastera klucz w postaci string, którego autoryzacja w pętli głównej programu mastera, odblokowuje tę pętlę i pozwala na wykonanie innych instrukcji w zależności czy moduły bluetooth nadal są sparowane czy nie tzn. w momencie pomyślnej autoryzacji klucza silnik krokowy (załóżmy że ma się kręcić w prawo) zaczyna pracę aż do osiągnięcia konkretnej zadanej liczby kroków po czym się zatrzymuje, jednakże jeżeli sparowanie bluetooth zostałoby w trakcie jego pracy przerwane, to w tym momencie w którym to nastąpiło program przeszedłby do innej funkcji (poprzez np. break czy go to) dzięki której silnik kręciłby się w lewo aż do osiągnięcia pozycji startowej - innymi słowy o tyle ile się zakręcił w prawo, miałby się odkręcić w lewo.
    Myślę że do tego przydałaby mi się jakaś flaga w postaci stanu pinu jaki mógłbym odczytywać z modułu bluetooth za pomocą uC. Następnie użyć konstrukcji switch case do przeskakiwania między warunkami (tylko chyba znowu funkcja obrot_tab() by blokowała)

    Wyczytałem w datasheet do BTM112 że na pinie 25 jest:

    "PIO(6) Bi-directiona Programmable Input/Output line (connection status indication,
    active high) "

    Ale do końca nie wiem czy to mogę wykorzystać w roli mojej flagi, fajnie jakby ktoś mądry się wypowiedział. Również wszelkie sugestie jak napisać takie program lepiej, inaczej mile widziane.
    Funckję mam napisane przy okazji realizowania innych projektów lecz były one wykorzystane w ramach samodzielnych projektów więc pewnie wymagają przebudowy.

    Funkcja do silnika krokowego, zmienna static m - empirycznie wyznaczona liczba krokow. Funkcja musiałaby działać w pętli aby nie skończyć pracy na 4 krokach.

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Blokowanie pętli głównej aż do autoryzacji klucza 1234

    Kod: c
    Zaloguj się, aby zobaczyć kod

  • #3 11 Mar 2017 12:44
    Piotrus_999
    Poziom 39  

    Toż sobie sprawdź czy tak w Twojej konfiguracji BTM tak jest. Jezeli tak jest i naprawdę nie wiesz jak sprawdzić stan pinu to niestety musisz rozpocząć od migania diodą i odczytywania klawisza, a dopiero później zabrać się za coś innego. Poprzedni Twój wątek również pokazał że języka C nie znasz praktycznie w ogóle. Proponuje Ci prawidłową kolejność:

    1. Nauka jezyka C z ćwiczeniami (nie metodą YT)
    2. Miganie diodą
    3. Klawisz

    dalej próbuj więcej.

    Naucz się podstaw podstaw.

  • #4 12 Mar 2017 18:03
    TvWidget
    Poziom 29  

    Jakub17 napisał:
    w momencie pomyślnej autoryzacji klucza silnik krokowy (załóżmy że ma się kręcić w prawo) zaczyna pracę aż do osiągnięcia konkretnej zadanej liczby kroków po czym się zatrzymuje, jednakże jeżeli sparowanie bluetooth zostałoby w trakcie jego pracy przerwane, to w tym momencie w którym to nastąpiło program przeszedłby do innej funkcji (poprzez np. break czy go to) dzięki której silnik kręciłby się w lewo aż do osiągnięcia pozycji startowej

    Czy ma być to jakiś zamek z przesuwanym ryglem ?

  • #5 15 Mar 2017 19:09
    Jakub17
    Poziom 6  

    Piotrus_999 napisał:
    Toż sobie sprawdź czy tak w Twojej konfiguracji BTM tak jest. Jezeli tak jest i naprawdę nie wiesz jak sprawdzić stan pinu to niestety musisz rozpocząć od migania diodą i odczytywania klawisza, a dopiero później zabrać się za coś innego. Poprzedni Twój wątek również pokazał że języka C nie znasz praktycznie w ogóle. Proponuje Ci prawidłową kolejność:

    1. Nauka jezyka C z ćwiczeniami (nie metodą YT)
    2. Miganie diodą
    3. Klawisz

    dalej próbuj więcej.

    Naucz się podstaw podstaw.


    Pytam dlatego, że nie posiadam tego modułu i nie chce go kupować po nic

    Dodano po 3 [minuty]:

    TvWidget napisał:
    Jakub17 napisał:
    w momencie pomyślnej autoryzacji klucza silnik krokowy (załóżmy że ma się kręcić w prawo) zaczyna pracę aż do osiągnięcia konkretnej zadanej liczby kroków po czym się zatrzymuje, jednakże jeżeli sparowanie bluetooth zostałoby w trakcie jego pracy przerwane, to w tym momencie w którym to nastąpiło program przeszedłby do innej funkcji (poprzez np. break czy go to) dzięki której silnik kręciłby się w lewo aż do osiągnięcia pozycji startowej

    Czy ma być to jakiś zamek z przesuwanym ryglem ?


    Na elektrozaczep. W zasadzie zrobiłem już to na zasadzie ciągłego wysyłania identyfikatora. Zastanawiam się tylko nad ulepszeniem programu poprzez oparcie go o zasięg radiowy. Jeżeli to się uda to w następstwie pomyślę nad tym aby zamiast atmegi z bluetooth będącego z slavem zastosować zwykły telefon gdzie unikalnym identyfikatorem będzie adres MAC. Ale telefony są oporne w łączeniu się z modułami bluetooth, więc to jest już dość trudne.

    Stworzyłem sobie model 3D. Otoczenie i oświetlenie oraz model nie jest jeszcze skończony więc przepraszam za niedokładność, ale mniej więcej tak ma działać mechanika i stąd sterowanie silnikiem krokowym. Łatwiej byłoby to wykonać na siłowniku, no ale są drogie.

    BTM112 flaga sparowania urządzeń?

    Jak znajdę czas to wyrenderuję animację żeby pokazać jak to ma działać, gdyby ktoś się interesował

  • Pomocny post
    #6 15 Mar 2017 21:06
    TvWidget
    Poziom 29  

    Podszycie się pod urządzenie o określonym adresie MAC jest dość proste. Autoryzacja na tej podstawie jest więc bardzo słabym zabezpieczeniem.
    Opiszę jak to co chcesz osiągnąć jest realizowane w bardziej profesjonalny sposób.
    Aplikacja w smartfonie (widget uruchomiony w tle) włącza rozgłaszanie BLE z określonym identyfikatorem UUID. Taki proces nawet stale działający w praktyce nie wpływa na szybsze rozładowanie baterii. Zewnętrzne urządzenie (moduł BT) wykrywa obecność telefonu i nawiązuje z nim połączenie. Następnie moduł przesyła ciąg losowy. Smartfon przy pomocy wcześniej wpisanego hasła szyfruje ten ciąg algorytmem AES128 i odsyła go do modułu. Zwróć uwagę, że hasło (klucz) nie jest przesyłane. Moduł przeprowadza identyczną operację szyfrowania losowego ciągu i porównuje wyniki. Jeśli wszytko się zgadza to otwiera rygiel. Działa to pewnie a autoryzacja trwa ułamek sekundy.
    Moduł BT ma wyjście ON/OFF ale chyba może je przełączyć w tryb sterowania serwem modelarskim. Zastępuje to mniej więcej to co chciałeś zrobić przy pomocy silnika krokowego.
    Niestety potrzebna funkcjonalność jest dostępna tylko w stosunkowo nowych smartfonach z systemem Android.

  • #7 15 Mar 2017 21:55
    Jakub17
    Poziom 6  

    TvWidget napisał:

    Aplikacja w smartfonie (widget uruchomiony w tle) włącza rozgłaszanie BLE z określonym identyfikatorem UUID.


    Czy taką aplikację można stworzyć w bloczkowym języku Androida? A ten indentyfikator UUID to jak moge sobie wygenerować?

    TvWidget napisał:

    Zewnętrzne urządzenie (moduł BT) wykrywa obecność telefonu i nawiązuje z nim połączenie.


    Próbowałeś kiedyś aby moduł bluetooth np. BTM222 nawiązał połączenie z telefonem? Ja próbowałem i telefon ciągle odrzuca mi połączenie, jest na to jakaś rada?

    TvWidget napisał:

    Następnie moduł przesyła ciąg losowy. Smartfon przy pomocy wcześniej wpisanego hasła szyfruje ten ciąg algorytmem AES128 i odsyła go do modułu. Zwróć uwagę, że hasło (klucz) nie jest przesyłane. Moduł przeprowadza identyczną operację szyfrowania losowego ciągu i porównuje wyniki. Jeśli wszytko się zgadza to otwiera rygiel. Działa to pewnie a autoryzacja trwa ułamek sekundy.


    I znowu szyfrowanie... To wszystko można zrobić pisząc aplikację na smartfona, użwjąc odpowiednich instrukcji?

    Czyli zarówno moduł jak i smartfon posiadają hasło, szyfrują ciag znaków (który jest wysyłany przez bluetooth do sarftona) i jeżeli kody są takie same to zamek się otwiera, tak?

  • #8 15 Mar 2017 23:04
    TvWidget
    Poziom 29  

    Jakub17 napisał:
    Czy taką aplikację można stworzyć w bloczkowym języku Androida? A ten indentyfikator UUID to jak moge sobie wygenerować?

    W tzw. bloczkowym języku aplikacji włączającej rozgłaszanie BLE chyba się nie da się napisać. Nie używałem nigdy tego języka więc nie mogę się mylić.
    UUID to dowolny wymyślony 16-bajtowy ciąg identyfikujący urządzenie. W BLE można taką informacje dołączyć do ramki rozgłoszeniowej.
    Jakub17 napisał:

    Próbowałeś kiedyś aby moduł bluetooth np. BTM222 nawiązał połączenie z telefonem? Ja próbowałem i telefon ciągle odrzuca mi połączenie, jest na to jakaś rada?

    Moduł o jakim wspomniałem to moduł BLE czyli standardu BT4.0. BTM-222 to starszy standard BT2.1. Wyszukiwanie urządzeń, łączenie i przesyłanie danych w BLE odbywa się inaczej niż BT2.1

    Jakub17 napisał:
    I znowu szyfrowanie... To wszystko można zrobić pisząc aplikację na smartfona, użwjąc odpowiednich instrukcji?

    Oczywiście.

    Jakub17 napisał:

    Czyli zarówno moduł jak i smartfon posiadają hasło, szyfrują ciag znaków (który jest wysyłany przez bluetooth do sarftona) i jeżeli kody są takie same to zamek się otwiera, tak?

    Tak.
    Chodzi oto aby nie przesyłać hasła w żadnej postaci. Uznaje się, że mając tylko losowy ciąg zaszyfrowany przy użyciu AES128 nie da się uzyskać hasła.
    Porównując ze sobą dwa zaszyfrowane ciągi można jednak stwierdzić czy obie strony dysponują tym samym hasłem.

  • #9 17 Mar 2017 23:18
    Jakub17
    Poziom 6  

    Możesz mi jeszcze polecić jakiś w miare tani alternatywny model takiego modułu z BT4.0? Chodzi mi narazie o zapoznanie się z tego typu urządzeniami więc może być jakkolwiek zubożony model, byle tylko łączył się z telefonem.

    Znalazłem coś takiego: https://pl.aliexpress.com/item/2pc-lot-Low-En...lgo_pvid=4a408df7-a268-46ac-bc9e-b80972820a4d
    Nada się?

    Dodano po 5 [minuty]:

    TvWidget napisał:

    W tzw. bloczkowym języku aplikacji włączającej rozgłaszanie BLE chyba się nie da się napisać. Nie używałem nigdy tego języka więc nie mogę się mylić.

    To z jakiem językiem proponujesz się zapoznać aby dało się napisać taką aplikację? Skoro mam telefon z systemem Android to istnieje w ogóle jakaś inna możliwość niż skorzystanie z języka bloczkowego Androida?

    TvWidget napisał:

    Smartfon przy pomocy wcześniej wpisanego hasła szyfruje ten ciąg algorytmem AES128

    W jaki sposób mogę wywołać to szyfrowanie AES128 pisząc aplikację? Czy jest jakaś specjalna funkcja w danym języku programowania za pomocą której realizuję to szyfrowanie?

  • Pomocny post
    #10 17 Mar 2017 23:57
    TvWidget
    Poziom 29  

    Sprawa jest chyba trochę bardziej skomplikowana niż myślisz. Dla większości osób przesyłanie danych przez Bluetooth kojarzy się z portem szeregowym i profilem SPP. W przypadku BLE takie pojęcia w zasadzie nie mają sensu. Smartfon po połączeniu z modułem będzie mógł zapisywać/odczytywać dane do/z tzw. charakterystyk. Te charakterystyki przypominają trochę rejestry procesora. Ich zestaw, rodzaj i właściwości zależą od wewnętrznego firmware modułu. Podobnie jest z połączeniem w drugą stronę. Czyli aby moduł mógł nawiązać połączenie ze smartfonem to najpierw jakaś aplikacja w telefonie musi uruchomić server GATT, utworzyć zestaw potrzebnych charakterystyk, nadać im określone właściwości itd. Smartfon w tym względzie zachowuje się jak procesor. Jest uniwersalny, dużo może ale bez programu jest "martwy".

    Zwykle programy na Androida piszę się w Javie. Są też narzędzia pozwalające to robić w C, Basicu, JavaScript i kilku innych językach.
    https://developer.android.com/studio/index.html
    https://www.b4x.com/

  • #11 19 Mar 2017 15:28
    Jakub17
    Poziom 6  

    W takim razie mogłbyś polecić jakiś model bluetootha na początek tak do nauki zeby ogarnąć temat?

    I dzięki za odpowiedź :) Faktycznie sprawa wydaje sie troche bardziej złoźona ale teraz juz przynajmniej wiem jakich informacji szukać.

  • #12 19 Mar 2017 16:16
    TvWidget
    Poziom 29  

    Sposób działania jaki opisałem wymaga włączenia rozgłaszania BLE w smartfonie. Ta funkcja jest dostępna chyba dopiero od Android 5. Niestety wiele urządzeń z Android 6 jej jeszcze nie ma. Sprawdź czy telefony jakimi dysponujesz mają potrzebną funkcjonalność.
    Następnie napisz jakąś prostą aplikację. Zanim zdobędziesz wiedzę potrzebną do zrealizowania od podstaw tego co sobie wymyśliłeś upłynie trochę czasu. Oczywiście można kupić gotowe rozwiązanie ale przyjemności ze zrobienia wszystkiego samu nie będzie.

  • #13 20 Mar 2017 07:38
    Jakub17
    Poziom 6  

    Z tego co zobaczyłem w opcjach mojego huawei p8lite to nie ma opcji rozglaszania ble :( Ok zatem zapoznam sie z Javą zanim zaczne cos tworzyc. Jezyk C jest popularny przy tworzeniu aplikacji na android i zapewnia pełny dostęp do zasobów telefonu jak Java czy są jakies haczyki?
    A bluetooth w wersji 4.0 programuje sie komendami AT czy w inny sposob?

  • #14 20 Mar 2017 22:37
    TvWidget
    Poziom 29  

    Tego nie ma w opcjach telefonu. To jest kwestia odpowiednich funkcji API.

    Dodano po 14 [godziny] 37 [minuty]:

    Zainstaluj np tą aplikację https://play.google.com/store/apps/details?id=com.uriio&hl=en i spróbuj dodać beacon przyciskiem w prawym dolnym rogu. Jeśli pojawi się komunikat "Unsupported feature" oznacza, że smartfon nie obsługuje rozgłaszania BLE.
    Uniwersalne moduły BT komunikują się przy pomocy protokołu HCI. Do obsługi BLE wystarczy tylko kilka prostych instrukcji.

 Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME