logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Układ bluetooth ANNA-B112 - pisanie programu i programowanie

Adam Ś. 24 Paź 2022 06:41 852 12
  • #1 20250203
    Adam Ś.
    Poziom 12  
    Cześć.

    Czy uruchamiał już ktoś układ bluetooth ANNA-B112? W jakim środowisku i języku pisze się kod pod ten układ? I jak go się programuje?
    Bardzo trudno będzie to ogarnąć komuś kto miał styczność głównie z Arduino i prockami AVR?
  • #2 20250234
    TvWidget
    Poziom 38  
    Jeśli chodzi o tego typu układy to potrzebne jest dedykowane środowisko. Zwykle dodawane jest do jakiegoś zestawu demo lub można je pobrać oddzielnie. Zawiera ono między innymi stos Bluetooth. Musisz znać przynajmniej podstawy działania BLE aby go użyć. Dostęp do części funkcjonalności może wymagać podpisania dodatkowej umowy. To zależy jednak od polityki danej firmy. Ogólnie pisanie aplikacji na specjalizowane procesory to zadanie raczej dla zaawansowanych programistów mających spore doświadczenie.
  • #3 20250479
    Marek_Skalski
    VIP Zasłużony dla elektroda
    Adam Ś. napisał:
    Bardzo trudno będzie to ogarnąć komuś kto miał styczność głównie z Arduino i prockami AVR?

    To akurat będzie duża różnica, ponieważ musisz znacznie lepiej rozumieć działanie sprzętu i programu. Kopiuj/wklej uprawiane w Arduino (AVR) w oparciu o "biblioteki .c/.h" tutaj się nie sprawdzi. Najtrudniej będzie na początku, ale jak przeskoczysz próg, to później odkryjesz zupełnie nowy, fascynujący świat. Spróbuj na początek zainstalować środowisko dla nRF i zobacz jak wygląda oprogramowanie. Dużo czytania przed Tobą zanim napiszesz pierwszy działający program dla tego modułu.

    A co mówi dokumentacja?
    Sekcja 1.3 - sercem układu jest nRF52832.
    Sekcja 1.5 - proponowane IDE i pakiety programowe

    Inna sprawa, to kwestia połączenia elektrycznego i mechanicznego modułu z PCB. Już na tym etapie łatwo popełnić błąd i w domu tego raczej nie przylutujesz.
  • #4 20263386
    Adam Ś.
    Poziom 12  
    Dzięki za odpowiedzi. Potrzebuję tak naprawdę "pożenić" ten układ z płytką ESP32. Idea jest ogólnie taka aby ESP32 był zamontowany w pomieszczeniu a układ ANNA-B112 był na zasadzie taga, gdzie po jego wykryciu ESP32 monitorował by obecność osoby w pomieszczeniu. Czyli nie potrzebuję skomplikowanych wodotrysków, aczkolwiek przydałby się jeszcze jakiś tryb uśpienia układu ANNA-B112 aby bateria nie uległa szybkiemu rozładowaniu.
    Ale wracając do temu, faktycznie sercem układu jest nRF52832 i znalazłem ciekawą informację odnoszącą się przynajmniej nie do ANNA-B112 ale do MDBT42Q, a brzmi ona tak:

    MDBT42Q to moduł Bluetooth Low Energy oparty o mikrokontroler nRF52832 firmy Nordic Semiconductor. Układ oferuje interfejsy GPIO, SPI, UART, I2C, I2S, PWM, ADC i NFC do podłączania urządzeń peryferyjnych i czujników. Moduł charakteryzuje się kompaktowym rozmiarem oraz niskim poborem mocy. Jest kompatybilny z większością urządzeń takich jak smartphone, tablet, czy komputer. Może być programowany za pomocą środowiska Nordic SDK, Arduino, micropython lub MyNewt.

    Czyli skoro oba moduły są oparte na nRF52832 to ten moduł ANNA-B112 też powinno dać się chyba programować przez Arduino? :D
  • #5 20263400
    TvWidget
    Poziom 38  
    Gotowe beacony BLE nie są drogie. Najprościej będzie coś takiego kupić. Zanim opanujesz SDK minie sporo czasu.
    Smartfon również może pracować jako beacon. Trzeba tylko pamiętać, że adres MAC będzie zmieniany co kilka minut.
  • #6 20263424
    khoam
    Poziom 42  
    Adam Ś. napisał:
    Czyli skoro oba moduły są oparte na nRF52832 to ten moduł ANNA-B112 też powinno dać się chyba programować przez Arduino?

    Niezupełnie. Arduino Core dla danej płytki wymaga również szeregu specyficznych konfiguracji np. enumeracji pinów czy ustawienia dla bootloadera. Jest wiele płytek z nRF52832, które takie wsparcie posiadają, ale nie ma wśród nich ANNA-B112. Link
  • #7 20265009
    Adam Ś.
    Poziom 12  
    Dorwałem układ ANNA-B112 z wylutu. Nie jestem pewien co tam jest wgrane, ale... na pająka polutowałem najbardziej potrzebne rzeczy, czyli: GND, VCC, RxD, TxD, zmostkowanie dla anteny wbudowanej, oraz dwa wyprowadzenia pinów 30 oraz 38, które przez dwie diody 1N4148 i switch są ściągane do GND w celu wprowadzenia układu w tryb bootloadera (tak jest w dokumentacji ANNA-B112).

    Zasiliłem układ z 3,3V i po chwili mój telefon go wykrył przez Bluetooth jako "ANNA-B1-0608BC". Podłączyłem się też do układu konwerterem USB-UART i w terminalu po zasileniu układu odebrałem "+STARTUP". Po wysłaniu polecenia "AT" otrzymuję "OK" czyli układ działa i odpowiada, jest chyba w jakimś trybie komend AT.

    Teraz odłączyłem zasilanie od układu i trzymając przyciśnięty przycisk (piny 30 i 38 do GND) zasiliłem ponownie układ. Teraz układ wysłał mi przez UART ">". Według dokumentacji "u-connectXpress bootloader protocol specification, UBX-17065404" jest to poprawne wejście w tryb bootladera. Dokumentacja mówi też, że po wysłaniu "?" powinny zostać zwrócone podstawowe informacje i faktycznie, dostałem coś takiego:

    ANNA-B1 boot loader 3.0.0
    u-blox
    All parameters in HEX format
    
    ?                                       Help
    b <start_addr>                          Boot (execute) image
    e <start_addr> <size>                   Erase flash memory
    d <start_addr> <size>                   Dump memory
    i                                       Get information
    x <to_addr>                             Download image using xmodem, erase+program memory
    r <baud_rate>                           Set baud rate
    q                                       Reset
    c <image_type> <image_size> <crc32>     CRC32 verify and perform dual-banked update
    
    OK


    Jest już progress ale nie wiem co dalej z tym mogę zrobić :D

    Próbowałem wgrać coś przez Arduino sugerując się tym artykułem:
    https://learn.sparkfun.com/tutorials/nrf52832...up-guide?_ga=1.127634063.328141757.1440497381

    Ale nie mogłem nic wgrać, może bootloader jest inny niż powinien być dla przykładu z linku?
  • #8 20272892
    Adam Ś.
    Poziom 12  
    Pomyślałem aby inaczej podejść do tematu i zaprogramować układ przed SWD. Mam programator ST-Link V2. Znalazłem w necie informacje ze można programować za jego pomocą przy użyciu openOCD. I faktycznie programator widzi układ i nawet udaje mi się coś wgrać poleceniem:

    Openocd.exe - f interface/stlink.cfg -f target/nrf52.cfg -c "program test.hex verify"

    Ale po wgraniu nic się nie dzieje. Plik .hex wyciągnąłem z lokalizacji arduino po skompilowaniu przykładu zmagającą diodą LED. Taki hex się nadaje? Wystarczy go tylko wgrać?
  • #9 20801547
    Adam Ś.
    Poziom 12  
    Wracam z tematem bo znowu znalazłem czas na eksperymenty z tym układem.

    W między czasie pojawiła się obsługa ANNA-B112 (nrf52832) w Arduino w postaci Nicla Sense ME. Zainstalowałem w Arduino potrzebny core i próbowałem wygenerować .bin a później zaprogramować przez SWD (STLink + OpenOCD), ale bezskutecznie. Program testowy miał za zadanie migać diodą podłączoną do pinu P0.30, wgrywał się poprawnie (przynajmniej po wgraniu weryfikacja przechodziła pomyślnie), ale dioda nie migała.ac
    Aby wykluczyć problemy po stronie programatora i samego układu ANNA-B112, poprosiłem użytkowników na portalu Nordic DevZone (https://devzone.nordicsemi.com/f/nordic-q-a/105035/please-help-me-generate-a-test-bin) o stworzenie programu w dedykowanym środowisku Nordic SDK dla układu nrf52832, który migałby diodą na tym konkretnym pinie. Jeden z użytkowników stworzył mi taki soft i podesłał plik .bin. Po jego wgraniu dioda zaczęła migać. Czyli samo programowanie jak i układ ANNA-B112 działa poprawnie.

    Nie byłem w stanie sprawić aby wygenerowany plik .bin dla płytki Nicla Sense ME zadziałał mi po wgraniu go programatorem, więc na tapetę wziąłem raz jeszcze core "Adafruit Bluefruit nRF52 Boards" oraz "Nordic Semiconductor nRF5 based boards". Oba core wspierają układ nrf52832, a ten jest sercem ANNA-B112. Kod w obu przypadkach był taki sam:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Najpierw skompilowałem (Sketch -> Export Compiled Binary) kod dla core Nordic Semiconductor w wyniku czego dostałem plik .bin. Wgrałem do układu i... dioda nie miga. Pomyślałem, że ten core nie będzie współpracować z ANNA-B112 i spróbowałem wygenerować .bin tym razem dla Adafruit. Po wgraniu wsadu dioda nadal nie migała. Byłem już zrezygnowany ale coś mnie tchnęło i zwróciłem uwagę na coś takiego jak "SoftDevice". Z neta dowiedziałem się na szybko, że jest to jakiś stos obługi bluetooth. W obu przypadkach miałem to zaznaczone w zakładce "Tools -> SoftDevice". O ile dla Adafruit jest zaznaczony SoftDevice 6.1.1 i nie można zmienić na nic innego, to dla Nordic Semiconductor mogę dać SoftDevice na None. Wtedy po wgraniu takiego softu dioda zaczeła mi migać :)
    Idąc tym tropem doszedłem do wniosku, że gdy jest wybrany SoftDevice to soft chyba musi wchodzić w interakcję z tym całym SoftDevice, a plik .bin go nie zawiera. Znalazłem taką rozpiskę mapy pamięci

    Układ bluetooth ANNA-B112 - pisanie programu i programowanie

    Pochyliłem się bardziej nad Adafruit bo na tym core chciałbym się skupić. Znalazłem w plikach tego repozytorium w ścieżce Arduino plik .hex który zawiera w sobie SoftDevice i Bootloader. Otwierając plik w edytorze HxD faktycznie widać, że zgodnie z mapą w zakresie 0x00000 do 0x26000 i 0x74000 - 0x80000 są jakieś dane - zapewne SoftDevice i Bootloader. Dodałem do tego pliku od adresu 0x26000 zawartość .bin wygenerowanego przez Arduino i wgrałem całość do procka. Dioda zaczęła migać, ale tylko przez chwilę, później kilka sekund przerwy i znowu zaczeła migać ale w losowych odstępach czasu, więc jest już lepiej ale nie do końca. Zauważyłem, że Arduino oprócz .bin generuje też plik .dat. Założyłem, że to mogą być dane oznaczone na mapie jako UserData. Dodałem więc i je od adresu 0x6D000, ale po wgraniu dioda zaczęła migać ale po chwili przestała i już nie chciała więcej migać. Czyli gorzej.

    Ktoś może wie gdzie robię błąd?
    I w ogóle to co to jest dokładnie ten cały SoftDevice? Jak to działa?
  • #10 20802003
    TvWidget
    Poziom 38  
    Możesz spróbować wgrać wysokopoziomowy Micropython https://micropython.org/download/?mcu=nrf52
    Nie wiem jak będzie z trybami oszczędzania energii ale skrypt migający diodą jest prosty. To zwykły plik tekstowy. Nie trzeba nic kompilować. Oczywiście jeśli dany uP ma wystarczającą ilość pamięci aby udało się uruchomić interpreter Micropython.
  • #11 20803172
    Adam Ś.
    Poziom 12  
    Nie znam Pythona i wolałbym pozostać w C :)
    Co do prostego programu to owszem miganie diodą się do takiego zalicza, ale to tylko na potrzebę testów. Gdyby mi się już udało rozpracować programowanie przez SWD to docelowo chciałbym stworzyć program obsługujący połączenie bluetooth.
  • #12 20803193
    khoam
    Poziom 42  
    Adam Ś. napisał:
    I w ogóle to co to jest dokładnie ten cały SoftDevice? Jak to działa?

    Tutaj jest to opisane:
    https://infocenter.nordicsemi.com/index.jsp?t..._ses%2FUG%2Fgsg%2Fsoftdevices.html&cp=1_0_1_3

    Przy okazji, PlatformIO wspiera nrf52832. Można sobie szybko zbudować ładne środowisko (toolchain jest automatycznie ściągany) ze wsparciem dla debuggera. Nawet jest opcja frameworku dla "Arduino Core for Adafruit Bluefruit nRF52 Boards".
    https://docs.platformio.org/en/stable/platforms/nordicnrf52.html
  • #13 20803764
    Adam Ś.
    Poziom 12  

    khoam napisał:
    Przy okazji, PlatformIO wspiera nRF52832. Można sobie szybko zbudować ładne środowisko (toolchain jest automatycznie ściągany) ze wsparciem dla debuggera.


    Nie słyszałem o PlatformIO. Spróbuję się pobawić tym środowiskiem. Dzięki!

Podsumowanie tematu

Użytkownicy dyskutują na temat programowania układu Bluetooth ANNA-B112, który oparty jest na mikrokontrolerze nRF52832. Wskazują, że do programowania potrzebne jest dedykowane środowisko, takie jak Nordic SDK, oraz znajomość BLE. Wymagane są również odpowiednie połączenia elektryczne. Użytkownicy dzielą się doświadczeniami związanymi z programowaniem układu, w tym z użyciem programatora ST-Link V2 oraz OpenOCD. Pojawiają się sugestie dotyczące użycia PlatformIO jako alternatywnego środowiska programistycznego. Wspomniano również o możliwości użycia Micropython, chociaż autor preferuje język C. Problemy z programowaniem są omawiane, a użytkownicy dzielą się rozwiązaniami, w tym z wykorzystaniem plików .bin do testów.
Podsumowanie wygenerowane przez model językowy.
REKLAMA