logo elektroda
logo elektroda
X
logo elektroda

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

p.kaczmarek2 5604 16
WERBUNG
  • 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.

    Cool? DIY-Rangliste
    Hilfreicher Beitrag? Kauf mir einen Kaffee.
    Über den Autor
    p.kaczmarek2
    Moderator Smart Home
    Offline 
    p.kaczmarek2 hat 11883 Beiträge geschrieben mit der Bewertung 9960, und dabei 569 Mal geholfen. Er ist seit 2014 bei uns.
  • WERBUNG
  • #2 20621492
    Felini
    Moderator
    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 (bin.xyz.ota), die vom Link unten heruntergeladen wurde, einzustellen.
    https://github.com/openshwprojects/OpenBK7231T_App/releases

    Auf YT sind Filme über BL602:
    https://www.youtube.com/watch?v=bs0ylC6xRs0
    https://www.youtube.com/watch?v=L6d42IMGhHw

    BLDevCube, eine ältere Version, die wir verwenden, ist hier verfügbar: https://github.com/openshwprojects/OpenBL602
    Der LF686 wird ebenfalls unterstützt, wir behandeln ihn einfach wie den BL602, der LF686 ist mit dem BL602 kompatibel, es ist im Wesentlichen derselbe Mikrocontroller.
  • #3 20737157
    housertelmstein
    Niveau 3  
    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 = "115200"
    speed_jlink = "1000"
    bl60x_brd = "IoTKitA"
    bl60x_xtal = "40M"
    aes_key = ""
    aes_iv = ""
    addr = "0x0"
    
    [check_box]
    partition_download = true
    boot2_download = true
    bin_download = true
    media_download = false
    use_romfs = false
    mfg_download = false
    ro_params_download = true
    ckb_erase_all = "True"
    encrypt = false
    download_single = false
    
    [input_path]
    pt_bin_input = "C:\\Users\\info\\Documents\\GitHub\\OpenBL602\\tools\\flash_tool\\bl602\\partition\\partition_cfg_2M.toml"
    boot2_bin_input = "C:\\Users\\info\\Documents\\GitHub\\OpenBL602\\tools\\flash_tool\\bl602\\builtin_imgs\\blsp_boot2.bin"
    cfg2_bin_input = "C:\\Users\\info\\Downloads\\OpenBL602_1.17.245.bin"
    meida_bin_input = ""
    romfs_dir_input = ""
    mfg_bin_input = ""
    img_bin_input = ""
    [18:55:13.272] - ========= Interface is Uart =========
    [18:55:13.279] - eflash loader bin is eflash_loader_40m.bin
    [18:55:13.282] - ========= chip flash id: ef4015 =========
    [18:55:13.285] - Update flash cfg finished
    [18:55:13.285] - create partition.bin, pt_new is True
    [18:55:13.285] - bl60x_fw_boot_head_gen xtal: 40M
    [18:55:13.301] - Create bootheader using C:\Users\info\Documents\GitHub\OpenBL602\tools\flash_tool\bl602\efuse_bootheader/efuse_bootheader_cfg.ini
    [18:55:13.301] - Updating data according to <C:\Users\info\Documents\GitHub\OpenBL602\tools\flash_tool\bl602\efuse_bootheader/efuse_bootheader_cfg.ini[BOOTHEADER_CFG]>
    [18:55:13.301] - Created file len:176
    [18:55:13.301] - Create efuse using C:\Users\info\Documents\GitHub\OpenBL602\tools\flash_tool\bl602\efuse_bootheader/efuse_bootheader_cfg.ini
    [18:55:13.301] - Updating data according to <C:\Users\info\Documents\GitHub\OpenBL602\tools\flash_tool\bl602\efuse_bootheader/efuse_bootheader_cfg.ini[EFUSE_CFG]>
    [18:55:13.316] - Created file len:128
    [18:55:13.316] - ========= sp image create =========
    [18:55:13.316] - Image hash is b'c5e2ce515a5783ac80efdd4910238a466572f882b53b3284e63c763e1da9847f'
    [18:55:13.316] - Header crc: b'52b188af'
    [18:55:13.316] - Write flash img
    [18:55:13.334] - bl60x_fw_boot_head_gen xtal: 40M
    [18:55:13.334] - Create bootheader using C:\Users\info\Documents\GitHub\OpenBL602\tools\flash_tool\bl602\efuse_bootheader/efuse_bootheader_cfg.ini
    [18:55:13.334] - Updating data according to <C:\Users\info\Documents\GitHub\OpenBL602\tools\flash_tool\bl602\efuse_bootheader/efuse_bootheader_cfg.ini[BOOTHEADER_CFG]>
    [18:55:13.334] - Created file len:176
    [18:55:13.348] - Create efuse using C:\Users\info\Documents\GitHub\OpenBL602\tools\flash_tool\bl602\efuse_bootheader/efuse_bootheader_cfg.ini
    [18:55:13.348] - Updating data according to <C:\Users\info\Documents\GitHub\OpenBL602\tools\flash_tool\bl602\efuse_bootheader/efuse_bootheader_cfg.ini[EFUSE_CFG]>
    [18:55:13.348] - Created file len:128
    [18:55:13.348] - ========= sp image create =========
    [18:55:13.364] - Image hash is b'2a76576dfe56444f0504ecd8bec5c428db9a817df39a212fb3ebf375072998ad'
    [18:55:13.364] - Header crc: b'90a6a86b'
    [18:55:13.364] - Write flash img
    [18:55:13.379] - FW Header is 176, 3920 still needed
    [18:55:13.379] - FW OTA bin header is Done. Len is 4096
    [18:55:13.662] - FW OTA bin is Done. Len is 758208
    [18:55:14.415] - FW OTA xz is Done
    [18:55:14.415] - ========= eflash loader config =========
    [18:55:14.493] - =========C:\Users\info\Documents\GitHub\OpenBL602\tools\flash_tool\bl602\device_tree/bl_factory_params_IoTKitA_40M.dts ——> bl602/device_tree/ro_params.dtb=========
    [18:55:14.745] - Version: bflb_eflash_loader_v2.0.0
    [18:55:14.745] - Program Start
    [18:55:14.745] - ========= eflash loader cmd arguments =========
    chipname : None
    chipid : False
    usage : False
    flash : True
    efuse : False
    write : True
    erase : False
    read : False
    none : False
    port : COM5
    baudrate : None
    config : None
    interface : None
    xtal : None
    start : None
    end : None
    addr : None
    mac : None
    file : None
    data : None
    mass : None
    loadstr : None
    loadfile : None
    userarea : None
    csvfile : None
    csvaddr : None
    para : None
    aeskey : None
    aesiv : None
    key : None
    ecdh : False
    echo : False
    auto : False
    version : False
    [18:55:14.792] - Config file: C:\Users\info\Documents\GitHub\OpenBL602\tools\flash_tool\bl602\eflash_loader/eflash_loader_cfg.ini
    [18:55:14.792] - serial port is COM5
    [18:55:14.792] - chiptype: bl602
    [18:55:14.792] - ========= Interface is Uart =========
    [18:55:14.792] - com speed: 115200
    [18:55:14.792] - Eflash load helper file: C:\Users\info\Documents\GitHub\OpenBL602\tools\flash_tool\bl602\eflash_loader/eflash_loader_40m.bin
    [18:55:14.792] - Eflash load helper file: C:\Users\info\Documents\GitHub\OpenBL602\tools\flash_tool\bl602\eflash_loader/eflash_loader_40m.bin
    [18:55:14.792] - ========= load eflash_loader.bin =========
    [18:55:14.792] - Load eflash_loader.bin via uart
    [18:55:14.792] - ========= image load =========
    [18:55:15.090] - tx rx and power off, press the machine!
    [18:55:15.090] - cutoff time is 0.1
    [18:55:15.200] - power on tx and rx
    [18:55:16.021] - reset cnt: 0, reset hold: 0.005, shake hand delay: 0.1
    [18:55:16.021] - clean buf
    [18:55:16.162] - send sync
    [18:55:16.399] - ack is b'4f4b'
    [18:55:16.461] - shake hand success
    [18:55:16.477] - get_boot_info
    [18:55:18.484] - ack is b''
    [18:55:18.484] - Not ack OK
    [18:55:18.484] - result:
    [18:55:18.484] - fail
    [18:55:18.484] - Img load fail
    [18:55:18.484] - Load helper bin time cost(ms): 3691.71142578125
    [18:55:18.484] - {"ErrorCode": "0003","ErrorMsg":"BFLB LOAD HELP BIN FAIL"}
    [18:55:18.484] - Burn Retry
    [18:55:18.484] - 0
    [18:55:18.484] - Burn return with retry fail
  • #4 20742481
    LordZodiac
    Niveau 2  
    Hallo @p.kaczmarek2,

    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 über die autoexec.bat die Kanäle zu steuern. Könnte etwas Hilfe gebrauchen?

    MfG Marco
  • #5 20742859
    p.kaczmarek2
    Moderator Smart Home
    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 deinem BL602 angezeigt werden?
    Ich bin der Autor von OBK und soweit ich weiß, hat die BL602-Plattform im Moment keine IR-Unterstützung, da die fehlenden Timer/Unterbrechungen hinzugefügt werden müssen, damit unser IRRemote-Port auf dieser Plattform funktioniert. Man muss diese Datei vom BK7231 auf den BL602 portieren:
    https://github.com/openshwprojects/OpenBK7231T_App/blob/main/src/driver/drv_ir.cpp
    Kennst du C und hast du dies erfolgreich portiert? Wenn ja, öffne einen Pull Request, damit wir die Änderungen zu Github hinzufügen können.
    Sobald die IR auf einer bestimmten Plattform gestartet ist, kann man sie wie hier skripten:
    https://www.youtube.com/watch?v=KU0tDwtjfjw
    Oder meinst du BK7231 und nicht BL602?
    Hilfreicher Beitrag? Kauf mir einen Kaffee.
  • WERBUNG
  • #6 20743030
    LordZodiac
    Niveau 2  
    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.
    
    static void event_cb_ir_event(input_event_t *event, void *private_data)
    {
        switch (event->code) {
            case CODE_IR_RECEIVE_NEC:
            {
                printf("[IR] [EVT] RECEIVE DATA @%llums, RAW %08lx, ADDR %02x, CMD %02x\r\n", aos_now_ms(), (unsigned long)event->value,
                        bl_ir_get_addr((unsigned int)event->value),
                        bl_ir_get_cmd((unsigned int)event->value)
                );
            }
            break;
            case CODE_IR_RECEIVE_NEC_REPEAT:
            {
                printf("[NEC] Repeat @%llums\r\n", aos_now_ms());
            }
            break;
            default:
            {
                printf("[IR] [EVT] Unknown code %u, %lld\r\n", event->code, aos_now_ms());
                /*nothing*/
            }
       }
    }
    

    und

    
        loopset_ir_hook_on_looprt();
        /* ir */
        if (0 == get_dts_addr("ir", &fdt, &offset)) {
            hal_ir_init_from_dts(fdt, offset);
        }
        aos_register_event_filter(EV_IR, event_cb_ir_event, NULL);
    

    Die Ausgabe sieht dann so aus.

    
    2023-09-19 17:03:46,550 - INFO - [17:03:46.550] - [IR] [EVT] RECEIVE DATA @800256ms, RAW e21dff00, ADDR 00, CMD 1d
    2023-09-19 17:03:46,600 - INFO - [17:03:46.599] - [NEC] Repeat @800308ms
    2023-09-19 17:03:46,708 - INFO - [17:03:46.707] - [NEC] Repeat @800415ms
    2023-09-19 17:03:47,007 - INFO - [17:03:47.006] - [IR] [EVT] RECEIVE DATA @800716ms, RAW e21dff00, ADDR 00, CMD 1d
    2023-09-19 17:03:47,060 - INFO - [17:03:47.060] - [NEC] Repeat @800767ms
    2023-09-19 17:03:47,415 - INFO - [17:03:47.415] - [IR] [EVT] RECEIVE DATA @801120ms, RAW e21dff00, ADDR 00, CMD 1d
    2023-09-19 17:03:47,463 - INFO - [17:03:47.463] - [NEC] Repeat @801171ms
    2023-09-19 17:03:48,355 - INFO - [17:03:48.354] - [IR] [EVT] RECEIVE DATA @802062ms, RAW e01fff00, ADDR 00, CMD 1f
    2023-09-19 17:03:48,405 - INFO - [17:03:48.404] - [NEC] Repeat @802113ms
    2023-09-19 17:03:48,785 - INFO - [17:03:48.785] - [IR] [EVT] RECEIVE DATA @802493ms, RAW e01fff00, ADDR 00, CMD 1f
    2023-09-19 17:03:48,838 - INFO - [17:03:48.838] - [NEC] Repeat @802544ms
    2023-09-19 17:03:49,271 - INFO - [17:03:49.271] - [IR] [EVT] RECEIVE DATA @802976ms, RAW e21dff00, ADDR 00, CMD 1d
    2023-09-19 17:03:49,319 - INFO - [17:03:49.319] - [NEC] Repeat @803027ms
    2023-09-19 17:03:49,702 - INFO - [17:03:49.702] - [IR] [EVT] RECEIVE DATA @803408ms, RAW f609ff00, ADDR 00, CMD 09
    2023-09-19 17:03:49,752 - INFO - [17:03:49.752] - [NEC] Repeat @803460ms
    2023-09-19 17:03:50,343 - INFO - [17:03:50.343] - [IR] [EVT] RECEIVE DATA @804049ms, RAW e41bff00, ADDR 00, CMD 1b
    2023-09-19 17:03:50,392 - INFO - [17:03:50.392] - [NEC] Repeat @804100ms
    2023-09-19 17:03:50,560 - INFO - [17:03:50.560] - Info:MQTT:mqtt_host empty, not starting mqtt
    2023-09-19 17:03:51,375 - INFO - [17:03:51.374] - [IR] [EVT] RECEIVE DATA @805078ms, RAW e916ff00, ADDR 00, CMD 16
    2023-09-19 17:03:51,422 - INFO - [17:03:51.421] - [NEC] Repeat @805129ms
    

    C kann ich. Muß ich mal schauen, ob ich die Funktionen entsprechend portiert bekomme.
  • WERBUNG
  • #7 20743125
    p.kaczmarek2
    Moderator Smart Home
    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 anderen Ansatz. Wir haben einen Port der IRRemote-Bibliothek für Beken:
    https://github.com/openshwprojects/OpenBK7231.../tree/main/src/libraries/Arduino-IRremote-mod
    Die IRRemote-Bibliothek ist hier verlinkt:
    https://github.com/openshwprojects/OpenBK7231T_App/blob/main/src/driver/drv_ir.cpp
    Die wichtigste Stelle, die portiert werden muss, ist die ISR aus dieser Datei:

    
    // this is our ISR.
    // it is called every 50us, so we need to work on making it as efficient as possible.
    extern "C" void DRV_IR_ISR(UINT8 t){
        int sending = 0;
    

    Das Ausführen des IR-Treibers über das BL602 SDK kann in manchen Fällen hilfreich sein, aber ich weiß nicht, ob das eine gute Lösung ist, denn dann haben wir einen separaten IRRemote-Port in OpenBeken auf BK7231 und auf BL602 haben wir IR von BL602, und das sind zwei verschiedene Standards und ich weiß nicht einmal, ob sie die gleichen Daten ausgeben.

    Es ist sicherlich besser, BL602 IR zu haben als gar nichts, aber letztendlich sollten wir versuchen, die gleiche Lösung auf allen Plattformen zu verwenden (IRRemote mit Arduino), anstatt separate Implementierungen zu haben.
    Hilfreicher Beitrag? Kauf mir einen Kaffee.
  • Hilfreicher Beitrag
    #8 20745336
    LordZodiac
    Niveau 2  
    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.
  • #9 20745655
    p.kaczmarek2
    Moderator Smart Home
    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:
    Code: C / C++
    Melde dich an, um den Code zu sehen

    und intern den Status verarbeiten basierend auf dem vom GPIO gelesenen Wert.

    Mir scheint es, dass es hier abgerufen wird:
    https://github.com/openshwprojects/OpenBK7231.../Arduino-IRremote-mod/src/IRReceive.hpp#L1527
    Das hat eigentlich keine Bedeutung, da wir IRremote nicht bearbeiten, sondern nur die GPIO-Funktionen selbst, Timer usw. portieren.

    Wenn dann etwas empfangen wird, dann sollte die Funktion:
    Code: C / C++
    Melde dich an, um den Code zu sehen

    die Informationen im Protokoll anzeigen.

    Die Datenübertragung von IRRemote zu OpenBeken und MQTT sieht hingegen wie folgt aus:
    Code: C / C++
    Melde dich an, um den Code zu sehen

    Die Daten werden an MQTT (z. B. an Home Assistant) und an OpenBeken-Skripte übertragen.

    Erwähnenswert ist, dass das MQTT-Format, dieses mit „IrReceived“, mit Tasmota kompatibel ist:
    Tasmota-Ersatz für BL602 – Flashen, Kopplung mit Home Assistant

    Wenn dein Treiber kompiliert wird und funktioniert, erwäge bitte, pull request in unserem Repository zu öffnen:
    https://github.com/openshwprojects/OpenBK7231T_App
    Andere Benutzer werden sicherlich daran Interesse haben und vielleicht auch beim Testen helfen.

    Möglicherweise habe ich irgendwo einen Treiber für LED-Streifen für den BL602 mit IR-Empfänger. Ich muss suchen. Vielleicht schaffe ich es irgendwann auch, deine Arbeit zu testen. Das sieht vielversprechend aus.
    Hilfreicher Beitrag? Kauf mir einen Kaffee.
  • #10 21068338
    gosedo6263
    Niveau 2  
    Hallo @p.kaczmarek2,
    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 geflasht. Die Lampe funktioniert sehr gut. Jetzt möchte ich ein Script schreiben, um die Farben automatisch durchlaufen zu lassen. Da ich mit Scripts noch nicht so gut auskenne, habe ich zuerst das Beispiel "channel_as_loop_counter_and_if.bat" verwendet.

    restart:
    	// Channel 11 is a counter variable and starts at 0
    	setChannel 11 0
    again:
    
    	// If channel 11 value reached 10, go to done
    	if $CH11>=10 then goto done
    	// otherwise toggle channel 1, wait and loop
    	toggleChannel 1
    	addChannel 11 1
    	delay_ms 250
    	goto again
    done:
    	toggleChannel 1
    	delay_s 1
    	toggleChannel 1
    	delay_s 1
    	toggleChannel 1
    	delay_s 1
    	toggleChannel 1
    	delay_s 1
    	goto restart


    In dem Beispiel wird bei mir die again-Schleife nie verlassen. Channel 11 wird immer weiter hoch gezählt. Es scheint so, als würde das if-Kommando nicht funktionieren. Auf einem anderen Gerät mit BK7231N funktioniert das Script einwandfrei.
    Kann es sein, dass es hier ein Problem mit dem BL602 gibt?
  • #11 21068759
    p.kaczmarek2
    Moderator Smart Home
    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 Block für BL602 fehlt es:
    
    // parse things like $CH1 or $hour etc
    #define ENABLE_EXPAND_CONSTANT		1
    

    Der BL602 hat recht wenig freien Speicher auf dem OTA, so dass viele Dinge deaktiviert sind. Du kannst versuchen, diese Dinge selbst zu aktivieren und das Projekt online zu kompilieren:
    https://www.elektroda.com/rtvforum/topic4033833.html#20946719
    Hilfreicher Beitrag? Kauf mir einen Kaffee.
  • #12 21071084
    gosedo6263
    Niveau 2  
    Vielen Dank für den Tipp. Ich werde versuchen, selbst zu kompilieren. Dazu muss ich mich aber erstmal in die Thematik einlesen.
  • #13 21072131
    p.kaczmarek2
    Moderator Smart Home
    Das Kompilieren eines Projekts mit dieser #define ist ein paar Klicks, ich kann es für dich tun:
    Screenshot zeigt den Quellcode der Konfigurationsdatei obk_config.h des OpenBK7231T_App-Projekts auf GitHub.
    GitHub-Oberfläche mit bearbeitetem Quellcode und einem Fenster zur Änderungsvorschlag.
    GitHub Pull-Request-Erstellungsoberfläche.
    Hier ist Pull Request:
    https://github.com/openshwprojects/OpenBK7231T_App/pull/1212
    Weisst du, wie man die Binärdateien von dort herunterladen kann?
    Hier ist die Anweisung:
    https://www.elektroda.com/rtvforum/topic4033833.html#20946719
    Bitte lade die kompilierten Dateien aus diesem Pull Request herunter und überprüfe zwei Dinge: erstens, ob das OTA weiter funktioniert und zweitens, ob dein Skript funktioniert.
    Hilfreicher Beitrag? Kauf mir einen Kaffee.
  • #14 21073954
    stefan68
    Niveau 3  
    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 anschließen. Also nicht einen Taster sondern einen Schalter der eine An- und Ausstellung hat. Dazu kann man den Pin 5 auf einen zweiten channel mappen und den per mqtt übertragen.
    Ich habe aber keine Möglichkeit gesehen von dem toggle Button mode auf einen switch mode umzuschalten.
    Irgendwie denkt die Software immer, es müsste ein toggle mode sein.
    Danke
  • WERBUNG
  • #16 21075815
    stefan68
    Niveau 3  
    Danke. Ich verwende schließlich DigitalInput und tue den Rest in der I iobroker.
  • #17 21078018
    gosedo6263
    Niveau 2  
    >>21072131
    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, brightness, temperature) after reboot" nicht funktioniert. Die Lampe startet nicht so, wie sie soll. Dieses Verhalten habe ich auch mit der Version 1.17.571 festgestellt. Wenn Flag 12 aktiviert ist, und ich versuche über WLAN auf die Lampe zuzugreifen, startet sie neu.
    [F]

Themenzusammenfassung

In dieser Diskussion wird ein Tasmota-Ersatz für die BL602-Plattform vorgestellt, der die Integration mit Home Assistant über MQTT ermöglicht. Der Benutzer beschreibt den Flash-Prozess mit einem USB-zu-UART-Konverter und den SDK-Kompilierungsprozess. Es werden verschiedene Probleme beim Flashen, wie der Fehler 0003, sowie die Aktivierung der IR-Funktion des BL602 behandelt. Nutzer berichten von Fortschritten bei der Implementierung von IR-Funktionen und der Erstellung von Skripten zur Steuerung von RGB-LEDs. Zudem wird auf die Möglichkeit hingewiesen, OTA-Updates durchzuführen und die Firmware anzupassen, um spezifische Funktionen zu aktivieren. Es gibt auch Diskussionen über die Verwendung von Schaltern anstelle von Tastern und die Konfiguration von Kanälen.
Vom Sprachmodell generierte Zusammenfassung.
WERBUNG