logo elektroda
logo elektroda
X
logo elektroda

Tasmota-Ersatz für BL602 – Flashen, Kopplung mit Home Assistant

p.kaczmarek2 
Tablet mit einer App zur Steuerung von RGB-LEDs und ein LED-Streifen auf einem Tisch.
Hallo liebe Freunde
Ich präsentiere hier meinen Tasmota-Ersatz, der von Bouffalo Lab für die BL602-Plattform entwickelt wurde, der unter anderem die Möglichkeit bietet, unser Gerät über MQTT mit Home Assistant zu koppeln. Ich zeige hier, wie man den Batch mit einem einfachen USB-zu-UART-Konverter einfach auf den BL602 hochladen kann, und ich werde auch den SDK-Kompilierungsprozess für Leute beschreiben, die diese Plattform selbst flashen möchten. Darüber hinaus präsentiere ich zwei interessante Demos vom SDK BL602.

Wozu BL602 flashen?
Die Motivation ist die gleiche wie bei den Plattformen, die ich zuvor besprochen habe. Mit einer eigenen Firmware kann man das IoT-Produkt von den Servern des Herstellers befreien, einen möglichen Kontrollverlust über dieses Produkt beim Ausfall dieser Server vermeiden, die Verfolgung und Erfassung von Daten durch den Hersteller vermeiden und darüber hinaus Produkte verschiedener Hersteller in einem Ökosystem kombinieren. Was ich hier erstelle, ist ein "Tasmota" für andere Plattformen.

Verwendetes Modul mit BL602
Module mit BL602-Schaltungen (oder verwandten Schaltungen) können zu relativ niedrigen Preisen erworben werden, aber das Hauptprinzip meiner Tätigkeit ist die "Freigabe" fertiger IoT-Produkte mit geschlossener Programmierung ihrer Hersteller, daher habe ich für dieses Thema ein solches Produkt verwendet.
Es diente mir als Testgelände RGB-LED-Streifen mit IR-Fernbedienung und Wi-Fi – MWIR-RGB Magic Home Pro.
LED-Streifen mit Steuerung und Fernbedienung auf einem Tisch.

An Bord dieser Steuerung befinden sich BL602 und 3 per PWM gesteuerte Transistoren:
Nahaufnahme einer Leiterplatte mit elektronischen Bauteilen, sichtbaren Beschriftungen und Drähten.
Anschlussskizze:
Elektronikmodul mit PIN-Beschreibung des BL602C/E QFN32

Was für Firmware ist das?
Das Firmware-Repository findet man hier:
https://github.com/openshwprojects/OpenBK7231T_App
Meine Firmware für BL602 ist im Grunde eine Portierung meines OpenBeken. Tatsächlich wurde OpenBeken so überarbeitet, dass es jetzt eine Multiplattform-Anwendung ist, die die Chips BK7231T, BK7231N, XR809 und BL602 unterstützt.

Für den Benutzer – Herunterladen des kompilierten OpenBL602/OpenBeken-Batches für BL602
Mein Github-Repository enthält ein Skript, das die Binärdateien automatisch online kompiliert, die Ausgaben sind hier verfügbar:
https://github.com/openshwprojects/OpenBK7231T_App/releases
Dies kann sich in Zukunft ändern und wir werden den Batch über die Registerkarte "Releases" auf der rechten Seite herunterladen.

Für den Benutzer – Anschließen der Hardware
Es wird ein USB-zu-UART-Konverter mit 3,3-V-Logikpegeln benötigt, ein 10 kΩ-Widerstand, möglicherweise ein 3,3-V-LDO-Regler (wenn er nicht auf unserer Platine ist) und Kabel.
Wir verbinden:
- RX vom Modul zum TX UART
- TX vom Modul zum RX UART
- BOOT vom Modul zum 10k-Widerstand zur Stromversorgung, aber wir lassen es offen (wir schließen es nur zum Flashen an)
- Masse zu Masse
- 3,3-V-Stromversorgung (wenn ein LDO auf der Platine vorhanden ist, können wir an seinen Eingang 5 V über USB liefern)

Bei mir sieht es so aus:
Elektronisches Prototyp mit Steckbrett, Drähten und Modul.
HINWEIS: Wenn Ihr die 5-V-Stromversorgung von USB an den LDO-Eingang (oder Abwärtswandler) auf der BL602-Platine anschließt und dann die 12-V-Stromversorgung anschließt, beschädigt Ihr mindestens den USB-zu-UART-Adapter und möglicherweise auch den USB selbst... Während des Flashens sollte man die externe Stromversorgung trennen.

Für den Benutzer – Hochladen des Batchs
Um den Batch hochzuladen, müssen wir Folgendes tun:
1. Das BOOT-Signal über einen 10k-Widerstand mit der Stromversorgung verbinden
2. Die Stromversorgung trennen und wieder anschließen (Neustart mit BOOT-Signal in hohem Zustand zur Stromversorgung).
3. In BLDevCube.exe die folgenden Dateien auswählen:
Bouffalo Lab Dev Cube 1.4.8 Software-Oberfläche für das Flashen von Mikrocontrollern.
4. Sicherstellen, dass der UART-Port nicht verwendet wird (z. B. wenn wir ihn in RealTerm nicht geöffnet haben – wenn ja, schließen wir ihn).
5. Auf "Herunterladen" klicken (was "Batch an BL602 senden" bedeutet):
Screenshot der Bouffalo Lab Dev Cube-Anwendung mit einer Erfolgsnachricht.
Fertig!
Um nun den Batch auszuführen, trennen wir den BOOT (lassen ihn locker) und unterbrechen die Stromversorgung für eine Weile und stellen sie dann wieder her.
Logdateien des Gerätes sind weiterhin mit Baud = 2000000 verfügbar (wie in SDK-Demos).


Für den Benutzer – OpenBL602-Konfiguration
Die Konfiguration meines Batch-Ports auf dem BL602 ist analog zu der in diesem Thema beschriebenen Konfiguration:
Qiachip Smart Switch BK7231N/CB2S – Innenansicht, Flashen

Nach dem Neustart des Geräts sollte ein offener Access Point mit einem Namen wie OpenBL602_1A1B2C3D4E5 edie Initiarscheinen:
Screenshot des Wi-Fi-Netzwerkmenüs auf einem Windows-Computer.
Wir verbinden uns damit und öffnen die Seite mit der Adresse 192.168.4.1. Wir konfigurieren es genau wie Tasmota (wir geben die Anweisungen für unser Wi-Fi, wir legen die Rollen der Pins fest, wir geben die Anweisungen für MQTT...
Bei diese RGB-LED-Streifen haben die Stifte folgende Aufgaben:
Screenshot der OpenBL602-Oberfläche mit einem Kanalkonfigurationsformular.
In der aktuellen Version unterstützt meine Firmware die IR-Fernbedienung mit dieser Streifen nicht.

Für den Benutzer – Kopplung mit Home Assistant
Im OpenBL602-Panel gibt es die Option "Generate Home Assistant Config", diese reicht jedoch nicht immer aus. Im Fall des RGB-Controllers "weiß" diese Option nicht, dass man drei PWMs in einem Farbcontroller kombinieren muss.
Aus diesem Grund empfehle ich, daraus nur den Gerätenamen zu übernehmen, z. B. obl42DACAB0, und ihn manuell in diese Vorlage einzufügen:
Code: YAML
Melde dich an, um den Code zu sehen

Wir speichern es in der Datei "configuration.yaml". Wenn wir mehrere Lichter haben, setzen wir das Präfix light einmal mit einem Doppelpunkt.
Nach dem Neustart von Home Assistant können wir den Streifen steuern:
Tablet mit einer App zur Steuerung von RGB-LEDs und ein LED-Streifen auf einem Tisch. Tablet mit einer App zur Steuerung der Farben von LED-Leuchten, die mit einem Mikrocontroller verbunden sind. Tablet mit einer App zur Steuerung von LED-Farben, mit einem Fenster zur Farb- und Helligkeitsauswahl. In der Nähe sind Kabel und ein rot leuchtender LED-Streifen angeschlossen. Tablet mit Beleuchtungssteuerungsanwendung, LED-Streifen und elektronischen Komponenten.
Die aktuelle Version hat einen Nachteil: Nach dem Neustart liest Home Assistant den aktuellen Helligkeits- und Farbwert nicht ab. Dies wird korrigiert, hat aber keinen Einfluss auf die Steuerung des Streifens.

Für den Programmierer – MSys2-Installation
Man muss die Firmware nicht selbst kompilieren, da ich fertige Binärdateien zur Verfügung stelle. Wenn wir meinen Code jedoch selbst ändern möchten, müssen wir noch das Kompilieren lernen. Zum Kompilieren der Firmware wird MSys2 benötigt. Es muss von hier heruntergeladen und installiert werden:
https://www.msys2.org/#installation
Screenshot der Installationsanleitung für MSYS2 mit einem Fenster zur Auswahl des Installationsordners.
Windows blockiert möglicherweise MSys – man soll trotzdem fortfahren.
Windows-Sicherheitsmeldung, die anzeigt, dass eine Anwendung von Microsoft Defender SmartScreen blockiert wurde.
Wir wählen den Ordner für die Installation:
MSYS2 64bit-Installationsfenster mit Auswahl des Installationsordners.
Nach der Installation führen wir msys2 aus. Es muss noch aktualisiert werden.
Wir führen den Befehl aus:
pacman -Syu
MSYS-Terminalfenster auf Windows, das die Synchronisierung von Paketdatenbanken mit dem Befehl pacman -Syu anzeigt.
Dann auch pacman -Su
Dann pacman -S make
Screenshot des MSYS-Terminals mit der Installation des Pakets make.

Für den Programmierer – Herunterladen von SDK und Kompilierung des Projekts
Leider wird es hier kompliziert. Das offizielle SDK ist hier:
https://github.com/pine64/bl_iot_sdk
Stand heute (April 2022) lässt sich die neueste Version des SDK von Github jedoch nicht korrekt kompilieren, man sollte die ältere Version verwenden, genauer gesagt b3898a520d6e5a34a5f4de8241fcc1c1d3b071b9.
Außer mir haben auch andere Leute Probleme mit der Kompilierung der neuesten Version:
https://github.com/pine64/bl_iot_sdk/issues/94
HINWEIS: Wenn Ihr das SDK herunterlädt, um es zum Erstellen meines Projekts zu verwenden, lädt bitte meine modifizierte Version hier herunter:
https://github.com/openshwprojects/OpenBL602
Dies liegt daran, dass die Hauptanwendung von OpenBK (oder OpenBL), App genannt, von verschiedenen SDKs verschiedener Plattformen gemeinsam genutzt wird und diese SDKs selbst die Basis für Projekte enthalten, in denen diese Haupt-Apps kompiliert werden.
Projekte im SDK befinden sich im Ordner customer_app:
Hier ist ihre Liste:

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


Beim Kompilieren geht es darum, in den Ordner eines bestimmten Projekts zu gehen und ./genromap aufzurufen
Screenshot eines Terminals mit eingegebenen Befehlen.
Man muss noch aufrufen:
- export BL60X_SDK_PATH=~/your_path_to_Sdk/
- export CONFIG_CHIP_NAME=BL602
Screenshot des MSYS-Terminals mit Konfigurationsbefehlen.
Aber meiner Erfahrung nach ist es normalerweise nicht nötig und das Skript findet den Pfad selbst, indem es davon ausgeht, dass das SDK zwei Ordner höher liegt als das zu erstellende Projekt. CONFIG_CHIP_NAME wiederum ist erforderlich, wenn wir den Befehl "clean" des Projekts ausführen möchten, um vom Compiler generierte Zwischendateien .o zu entfernen, die dann vom Linker verbunden werden.
Die generierten Dateien befinden sich im Ordner build_out, zum Beispiel: customer_app\bl602_sharedApp\build_out


Für den Programmierer – Demo sdk_app_gpio
Nachdem wir nun selbst kompilieren können, ist es an der Zeit, die von den SDK-Entwicklern bereitgestellten Funktionsdemos zu testen.
Eine der interessantesten Demos ist sdk_app_gpio.
Mit der sdk_app_gpio-Demo kann man GPIO-Pins über die UART-Konsole konfigurieren. Die Befehlssyntax lautet "gpio-func <Pin-Index> <Eingangsmodus> <pullup> <pulldown>".
Zum Beispiel der Befehl:
gpio-func 8 0 0 0

Konfiguriert GPIO-Pin 8 als Ausgang ohne Pull-Up/Down-Widerstände.
Die Baudzahl einer Demo beträgt 2.000.000.
So sieht die Demo nach dem Start aus:
Screenshot von RealTerm, der den Startvorgang eines BL602-Mikroprozessors zeigt.
Nach dem Senden des Pin-Steuerbefehls:
Computerkonsolenschnittstelle, die Systemprotokolle zum Starten des BL602-Chips anzeigt.
Dann kann man auf diesem Pin den Zustand niedrig oder hoch setzen mit:

Im Fall der Eingangspins haben wir einen analogen UART gpio-get-Befehl:

Für Neugierige: Die Implementierung von gpio-func sieht folgendermaßen aus:
Code: C / C++
Melde dich an, um den Code zu sehen

Wiederum den Pin setzen:
Code: C / C++
Melde dich an, um den Code zu sehen

Pinstatus abrufen:
Code: C / C++
Melde dich an, um den Code zu sehen


Für den Programmierer – Demo bl602_demo_wifi
Eine weitere interessante Demo des SDK ist ein Programm, das die Funktionsweise von Wi-Fi zeigt. Hier steuern wir es auch über UART-Befehle. Baud wie zuvor.
Screenshot des RealTerm-Programms mit angezeigten Ergebnissen vom seriellen Anschluss.
Zunächst lohnt es sich, die gesamte Befehlsliste über den ganz offensichtlichen Befehl help kennenzulernen:
Screenshot eines Terminals, das Netzwerkkonfiguration und Befehlsversandoptionen zeigt.
Screenshot des RealTerm-Programms mit Netzwerk- und Systembefehlen.
Versuchen wir es mit wifi_ap_start:
Screenshot einer Konsole mit Debugging-Nachrichten zur Wi-Fi-Netzwerkverbindung.
Liste der verfügbaren WLAN-Netzwerke auf einem Computer mit einem markierten Netzwerk.
wifi_scan funktioniert auch. Wir haben den gesamten Code dieser Demo, sodass wir sehen können, was und wie realisiert wird.

Zusammenfassung
Eine weitere Plattform befreit! Ich begann mit der Befreiung von XR809, dann habe ich mich um BK7231T und BK7231N gekümmert. Jetzt ist es gelungen BL602 zu befreien. Als nächstes kommen die Schaltungen Realtek und W600, aber wird es auch mit ihnen funktionieren? Wir werden sehen.
In der Warteschlange zum Flashen habe ich noch eine Glühbirne mit BL602, aber ich glaube nicht, dass es damit Probleme geben wird - auf der Platine mit dem Wi-Fi-Modul werden Pads benötigt, also RX, TX und BOOT. Ich werde die Beschreibung in den Abschnitt "Geräte-Innenansicht" einfügen.
Was die Stabilität der aktuellen Version der Firmware für BL602 angeht, habe ich sie zwei Tage lang getestet, einschließlich des absichtlichen Ausschaltens des Routers (überprüfen, ob er event disconnect abfängt und die Verbindung wiederherstellt), und ich bin auf keine Probleme gestoßen, aber natürlich werde ich weiterhin fortlaufend Tests durchführen und etwaige Probleme beheben.
Weitere Informationen zum Projekt findet man im offiziellen Repo:
https://github.com/openshwprojects/OpenBK7231T_App
PS: Wenn Ihr IoT- oder ähnliche Geräte kennt, die auf BL602 oder einem verwandten Schaltungen basieren, lässt es mich wissen - ich füge der Firmware ständig Unterstützung für neue Funktionalitäten hinzu und sammle Informationen darüber, wie sie funktioniert. Soweit ich weiß, verwendet der Sonoff 40 beispielsweise wahrscheinlich den BL602.

Über den Autor
p.kaczmarek2
p.kaczmarek2 hat 11883 Beiträge geschrieben mit der Bewertung 9960 , und dabei 569 Mal geholfen. Er ist seit 2014 bei uns.

Kommentare

Felini 18 Jun 2023 10:36

BL602 UPDATE: Seit ein paar Monaten unterstützt der BL602 das Batch-Update über WiFi - OTA-Verfahren - es reicht einfach die Web App und dann die Registerkarte OTA zu öffnen und die entsprechende Datei... [Mehr erfahren]

housertelmstein 17 Sep 2023 21:23

Ich bekomme beim flashen immer folgenden Fehler: Error 0003. Hier mein Log: [18:55:13.260] - [param] interface_type = "Uart" comport_uart = "COM5" speed_uart... [Mehr erfahren]

LordZodiac 21 Sep 2023 21:41

Hallo @pkaczmarek2, ich habe für den BL602 den IR Receiver aktiviert und bekomme von der 24 Tasten Fernbedienung die entsprechenden Codes im OpenBK Log angezeigt. Allerdings bekomme ich es nicht hin... [Mehr erfahren]

p.kaczmarek2 22 Sep 2023 10:34

Guten Morgen, kannst du etwas mehr Informationen über die Konfiguration des Geräts geben und wie du die IR-Funktion des BL602 aktiviert hast? Kannst du zeigen, wie die Codes von der Fernbedienung auf... [Mehr erfahren]

LordZodiac 22 Sep 2023 13:17

Hallo, ist das gleiche Teil was oben auf den Bildern ist. Hab 2 Stück davon und das Devboard. Hab mir das Beispiel vom SDK angeschaut. Die Konfiguration vom IR Pin steht dann in der Datei bl_factory_params_IoTKitA_40M.dts. ... [Mehr erfahren]

p.kaczmarek2 22 Sep 2023 15:03

Was du hier zeigst, ist die IR-Unterstützung des SDK BL602. Sie umfasst auch die gesamte IR-Dekodierung, wie sie von Bouffalo Labs implementiert wurde. In OpenBeken hingegen verwenden wir einen völlig... [Mehr erfahren]

LordZodiac 24 Sep 2023 13:57

Hab jetzt erstmal einen eigenen Treiber gemacht. Die IR Library compiliert und der IR Interrupt liefert Daten. Verstehe im Moment aber noch nicht, wie die Remote Library die Daten bekommt. [Mehr erfahren]

p.kaczmarek2 24 Sep 2023 18:02

Ich freue mich sehr, dass es Fortschritte gibt. Was meinst du damit, dass die Remote Library Daten empfängt? Die Remote Library sollte Folgendes aufrufen: unsigned char digitalReadFast(unsigned char... [Mehr erfahren]

gosedo6263 03 Mai 2024 09:03

Hallo @pkaczmarek2, ich möchte mich erstmal bedanken für die großartige Arbeit, die hier gemacht wird. Ich nutze OpenBeken auf mehreren Geräten. Zuletzt habe ich eine RGBCW LED mit einem BL602 erfolgreich... [Mehr erfahren]

p.kaczmarek2 03 Mai 2024 15:50

Vielen Dank für deinen Beitrag. Es scheint mir, dass auf der BL602-Plattform ein System fehlen könnte, zumindest die Unterstützung für das Schreiben mit dem $-Zeichen. Siehe obk_config.h: https://github.com/openshwprojects/OpenBK7231T_App/blob/main/src/obk_config.h Im... [Mehr erfahren]

gosedo6263 05 Mai 2024 19:09

Vielen Dank für den Tipp. Ich werde versuchen, selbst zu kompilieren. Dazu muss ich mich aber erstmal in die Thematik einlesen. [Mehr erfahren]

p.kaczmarek2 06 Mai 2024 17:48

Das Kompilieren eines Projekts mit dieser #define ist ein paar Klicks, ich kann es für dich tun: https://obrazki.elektroda.pl/6029011000_1714982126_thumb.jpg https://obrazki.elektroda.pl/7742889400_1714982181_thumb.jpg... [Mehr erfahren]

stefan68 08 Mai 2024 08:14

Das ist ein Super Projekt. Danke! Ich habe einen Sonoff MiniR3 mit BL602 damit in meinen iobroker eingebunden. Eine Frage zu den Input-Types. Ich möchte anstelle des Push Button einen echten Switch... [Mehr erfahren]

p.kaczmarek2 09 Mai 2024 10:10

Gemäß unserer Pin-Dokumentation: https://github.com/openshwprojects/OpenBK7231T_App/blob/main/docs/ioRoles.md du kannst die Rolle ToggleChannelOnToggle ausprobieren. [Mehr erfahren]

stefan68 09 Mai 2024 14:39

Danke. Ich verwende schließlich DigitalInput und tue den Rest in der I iobroker. [Mehr erfahren]

gosedo6263 11 Mai 2024 11:28

Ich habe die Binärdateien heruntergeladen und erfolgreich OTA geflasht. Mein Skript funktioniert jetzt auch. Mir ist jetzt aufgefallen, dass "Flag 12 - [LED] Remember LED driver state (RGBCW, enable,... [Mehr erfahren]