
Witajcie moi drodzy.
Przedstawię tutaj mój zamiennik Tasmoty przeznaczony na platformę BL602 produkcji Bouffalo Lab, oferujący m. in. możliwość sparowania naszego urządzenia z Home Assistant poprzez MQTT. Pokażę tu, jak można łatwo wgrać wsad na BL602 za pomocą prostego konwertera USB na UART oraz również opiszę proces kompilacji SDK dla osób, które samodzielnie chciałyby programować tę platformę. Dodatkowo przedstawię dwa ciekawe demka z SDK BL602.
Po co programować BL602?
Motywacja jest taka sama jak w przypadku wcześniej omawianych przeze mnie platform. Własne firmware pozwala uwolnić produkt IoT od serwerów producenta, uniknąć ewentualnej utraty kontroli nad tym produktem gdy te serwery upadną, uniknąć śledzenia i zbierania danych przez producenta oraz dodatkowo umożliwia połączyć produkty różnych producentów w jeden ekosystem. To co tutaj tworzę to taka "Tasmota" dla innych platform.
Użyty moduł z BL602
Moduły z BL602 (lub pokrewnymi) układami można kupić w relatywnie niskich cenach, ale główną zasadą mojego działania jest "uwalnianie" gotowych produktów IoT z zamkniętym programowaniem ich producentów, więc do tego tematu też takiego produktu użyłem.
Za poligon doświadczalny posłużył mi pasek LED RGB z pilotem IR i WiFi - MWIR-RGB Magic Home Pro.

Szczegóły opisałem w dziale "Wnętrza urządzeń":
https://www.elektroda.pl/rtvforum/topic3881416.html
Na pokładzie tego sterownika jest BL602 oraz 3 tranzystory sterowane przez PWM:

Szkic połączeń:

Co to za firmware?
Repozytorium firmware znajduje się tutaj:
https://github.com/openshwprojects/OpenBK7231T_App
Moje firmware dla BL602 to zasadniczo port mojego OpenBeken, a właściwie OpenBeken przerobiłem tak, że jest teraz wieloplatformową aplikacją wspierającą układy BK7231T, BK7231N, XR809 i BL602.
Inicjatywa zapoczątkowana została w tych tematach:
WB2S/BK7231 Tutorial - tworzymy własny firmware - UDP/TCP/HTTP/MQTT
[BK7231T] Mój serwer HTTP, konfigurator, wsparcie MQTT z Home Assistant
Dla użytkownika - pobranie skompilowanego wsadu OpenBL602/OpenBeken dla BL602
Moje repozytorium Github posiada skrypt automatycznie kompilujący online pliki binarne dla platform BK7231N, BK7231T i XR809, niestety BL602 nie jest jeszcze przez niego wspierany.
Z tego też powodu wsad pobrać należy z folderu releases_bl602:
https://github.com/openshwprojects/OpenBK7231T_App/tree/main/bl602_release
W przyszłości być może się to zmieni i pobierać wsad będziemy z zakładki "Relases" po prawej stronie.
Dla użytkownika - podłączenie hardware
Potrzebny jest konwerter USB na UART o poziomach logicznych 3.3V, rezystor 10k, być może regulator LDO 3.3V (jak nie ma go na naszej płytce) oraz przewody.
Podłączamy:
- RX z modułu do TX UART
- TX z modułu do RX UART
- BOOT z modułu do 10k rezystora do zasilania, ale zostawiamy rozwarte (to podłączamy tylko na czas programowania)
- masa do masy
- zasilanie 3.3V (jeśli na płytce jest LDO, to możemy na jego wejście dać 5V z USB)
Szczegóły tutaj:
https://www.elektroda.pl/rtvforum/topic3881416.html
U mnie wygląda to tak:

UWAGA: Jeśli podłączycie zasilanie 5V z USB na wejście LDO (lub przetwornicy step down) na płytce z BL602 a potem podłączycie zasilacz 12V, to uszkodzicie sobie co najmniej przejściówkę USB na UART a być może też i samo USB... na czas programowania należy odłączyć zewnętrzne zasilanie.
Dla użytkownika - wgrywanie wsadu
Aby wgrać wsad musimy kolejno:
1. Podłączyć sygnał BOOT do zasilania poprzez rezystor 10k
2. Odłączyć i podłączyć ponownie zasilanie (wykonać reboot z sygnałem BOOT podniesionym do zasilania)
3. W BLDevCube.exe wybieramy kolejno pliki:

4. Upewniamy się, że port UART nie jest w użyciu (np. czy nie mamy go otwartego w RealTerm - jeśli tak, to zamykamy)
5. Klikamy "Download" (co oznacza "wyślij wsad na BL602"):

Gotowe!
Teraz, aby uruchomić wsad, odłączamy BOOT (zostawiamy go luzem) i odłączamy na chwilę zasilanie, po czym je przywracamy.
Logi urządzenia będą wciąż dostępne z baud = 2000000 (tak jak w demkach z SDK).
Dla użytkownika - konfiguracja OpenBL602
Konfiguracja portu mojego wsadu na BL602 jest analogiczna do konfiguracji opisanej w tych tematach:
- Qiachip Smart Switch - BK7231N/CB2S - wnętrze, programowanie
- Ogrodowy podwójny przekaźnik Tuya CCWFIO232PK - BK7231T - programowanie
Warto też zapoznać się z tematem:
Tutorial Home Assistant - konfiguracja, WiFi, MQTT, Zigbee, Tasmota
Po ponownym uruchomieniu urządzenia powinien pojawić się otwarty Access Point o nazwie w stylu OpenBL602_1A1B2C3D4E5:

Podłączamy się do niego i otwieramy stronę o adresie 192.168.4.1. Konfigurujemy tak jak Tasmotę (podajemy namiary na nasze WiFi, ustawiamy role pinów, podajemy namiary na MQTT...
W przypadku tego konkretnego paska LED RGB role wyprowadzeń są następujące:

W bieżącej wersji moje firmware nie wspiera pilota IR, który posiada ten pasek.
Dla użytkownika - parowanie z Home Assistant
W panelu OpenBL602 jest opcja "Generate Home Assistant Config", ale nie zawsze ona wystarcza. W przypadku kontrolera RGB opcja ta "nie wie", że trzeba połączyć trzy PWM w jeden kontroler koloru.
Z tego też powodu, polecam wziąć z niej tylko nazwę urządzenia, np obl42DACAB0 i wsadzić ręcznie do tego szablonu:
Code: yaml
Zapisujemy to w configuration.yaml. Jeśli mamy kilka świateł, to prefiks light z dwukropkiem umieszczamy raz.
Po restarcie Home Assistant możemy już sterować paskiem:




Bieżąca wersja ma pewien mankament - po ponownym uruchomieniu Home Assistant nie odczytuje bieżącej wartości jasności i koloru. Będzie to uzupełniane, nie wpływa to jednak na sterowanie tym paskiem.
Dla programisty - instalacja MSys2
Nie trzeba samodzielnie kompilować firmware, bo udostępniam gotowe pliki binarne. Ale jeśli chcemy samodzielnie modyfikować mój kod, to jednak trzeba będzie nauczyć się kompilować. Do kompilacji firmware potrzebny będzie MSys2. Należy go pobrać i zainstalować stąd:
https://www.msys2.org/#installation

Windows może blokować MSys - należy mimo wszystko kontynuować.

Wybieramy katalog instalacji:

Po instalacji uruchamiamy msys2. Trzeba go jeszcze zaktualizować.
Wykonujemy komendę:
pacman -Syu

Potem też pacman -Su
Potem pacman -S make

Dla programisty - pobranie SDK i kompilacja projektu
Tutaj niestety sprawa się komplikuje. Oficjalne SDK jest tutaj:
https://github.com/pine64/bl_iot_sdk
Na dzień dzisiejszy (kwiecień 2022) jednak ostatnia wersja SDK z Githuba nie kompiluje się poprawnie, należy użyć starszej, a dokładniej wersji b3898a520d6e5a34a5f4de8241fcc1c1d3b071b9.
Problemy z kompilacją najnowszej wersji mają też inne osoby niż ja:
https://github.com/pine64/bl_iot_sdk/issues/94
UWAGA: Jeśli pobieracie SDK z myślą o użyciu go do kompilacji mojego projektu, to należy pobrać moją zmodyfikowaną wersję stąd:
https://github.com/openshwprojects/OpenBL602
Wynika to stąd, że główna aplikacja OpenBK (czy tam OpenBL), zwana jako App, jest współdzielona między różnymi SDK różnych platform a same te SDK zawierają podstawy projektów w których te główne App się kompiluje.
Projekty w SDK znajdują się w folderze customer_app:
Oto ich lista:
benchmark_security_aes
bl602_boot2
bl602_boot2_mini
bl602_demo_event
bl602_demo_joylink
bl602_demo_nano
bl602_demo_noconnectivity
bl602_demo_wifi
bl602_huawei_cloud
sdk_app_audio_udp
sdk_app_ble_sync
sdk_app_blog
sdk_app_cli
sdk_app_cronalarm
sdk_app_dac
sdk_app_easyflash
sdk_app_event
sdk_app_fdt
sdk_app_gpio
sdk_app_hbnram
sdk_app_heap
sdk_app_helloworld
sdk_app_http_client_socket
sdk_app_http_client_tcp
sdk_app_i2c
sdk_app_ir
sdk_app_mdns
sdk_app_pwm
sdk_app_romfs
sdk_app_spi_pdm
sdk_app_spi_wave
sdk_app_timer
sdk_app_uart_ctl
sdk_app_uart_echo
Kompilacja sprowadza się do przejścia do folderu danego projektu i wywołania ./genromap

Trzeba jeszcze wywołać:
- export BL60X_SDK_PATH=~/your_path_to_Sdk/
- export CONFIG_CHIP_NAME=BL602

Ale z mojego doświadczenia wynika, że zazwyczaj nie jest to potrzebne a ścieżkę sam skrypt znajduje poprzez założenie, że SDK jest dwa katalogi wyżej niż budowany projekt. Z kolei CONFIG_CHIP_NAME wymagany jest jak chcemy wykonać komendę "clean" projektu, by usunąć pośrednie pliki .o generowane przez kompilator, które potem są łączone przez linkera.
Wygenerowane pliki znajdują się w folderze build_out, przykładowo: customer_app\bl602_sharedApp\build_out
Dla programisty - Demko sdk_app_gpio
Skoro możemy już samodzielnie kompilować, to pora potestować demka funkcjonalności zapewnione nam przez twórców SDK.
Jedno z ciekawszych demek to sdk_app_gpio.
Demko sdk_app_gpio pozwala konfigurować piny GPIO z poziomu konsoli UART. Składnia komendy to "gpio-func <indeksPinu> <trybWejścia> <pullup> <pulldown>".
Przykładowo, komenda:
gpio-func 8 0 0 0
konfiguruje GPIO pin 8 jako wyjście bez rezystorów pull up/down.
Baud demka to 2000000.
Tak demko się prezentuje po uruchomieniu:

Po wysłaniu komendy sterowania pinem:

Potem można ustawić na tym pinie stan niski lub wysoki za pomocą:
gpio-set <pin_index> <value>
W przypadku pinów wejścia, mamy analogiczną komendę UART gpio-get:
gpio-get <pin_index>
Dla ciekawskich - implementacja gpio-func wygląda tak:
Code: c
Z kolei ustawianie pinu:
Code: c
Pobieranie jego stanu:
Code: c
Dla programisty - Demko bl602_demo_wifi
Drugim ciekawym demkiem z SDK jest program pokazujący działanie WiFi. Tutaj również sterujemy nim poprzez komendy UART. Baud tak jak poprzednio.

Na początek warto poznać całą listę komend poprzez dość oczywistą komendę help:


Wypróbujmy wifi_ap_start:


wifi_scan również działa. Mamy cały kod tego demka więc możemy podejrzeć co i jak jest zrealizowane.
Podsumowanie
Kolejna platforma uwolniona! Zacząłem od uwolnienia XR809, następnie zająłem się BK7231T i BK7231N. Teraz udało się uwolnić BL602. Następne w kolejce są już układy Realteka oraz W600, ale czy z nimi się też uda? Zobaczymy.
W kolejce do programowania mam jeszcze żarówkę z BL602, ale nie sądzę, by były z tym problemy - na płytce z modułem WiFi są wymagane pady, czyli RX, TX oraz BOOT. Opisz umieszczę w dziale "wnętrza urządzeń".
Jeśli chodzi o stabilność bieżącej wersji firmware dla BL602, to testowałem ją dwa dni łącznie z celowym wyłączaniem routera (sprawdzenie, czy złapie event disconnect i podłączy się ponownie) i problemów nie napotkałem, ale oczywiście będę dalej testować i naprawiać na bieżąco ewentualne problemy.
Po szczegóły odnośnie projektu zapraszam na jego oficjalne repo:
https://github.com/openshwprojects/OpenBK7231T_App
PS: Jeśli znacie jakieś urządzenia IoT bądź podobne oparte o BL602 lub pokrewny układ dajcie znać - na bieżąco dodaję wsparcie nowych funkcjonalności do firmware i zbieram informacje co jak działa. Z popularniejszych, z tego co wiem, to przykładowo Sonoff 40 chyba z BL602 korzysta.
Cool? Ranking DIY