In der folgenden Anleitung wird das Beispiel der Beleuchtungs-App aus dem Matter SDK zusammen mit einem M5Stack ESP32-Entwicklungsboard verwendet.
Build-Umgebung einrichten
Klonen Sie zuerst das Matter SDK.
In diesem Beispiel sehen wir uns den minimal unterstützten Commit für Release 5 von Matter von Google Home an:
mkdir otaprepcd otaprepgit clone https://github.com/project-chip/connectedhomeip.git
cd connectedhomeip
git fetch origin v1.0-branch
git checkout FETCH_HEAD
git submodule update --init --recursive
source ./scripts/activate.sh
Als Nächstes prüfen wir die im ESP32-GitHub-Workflow verwendete Version, um festzustellen, welches Docker-Image am besten zu unserem Build passt:
cat .github/workflows/examples-esp32.yaml | grep chip-build | head -n 1image: connectedhomeip/chip-build-esp32:0.5.99Wir führen einen Container aus dem Docker-Image aus und übergeben Flags, um das Matter SDK im Container bereitzustellen und Zugriff auf das ESP32-Gerät zu gewähren.
docker run --name container_name -it --user $(id -u):$(id -g)--mount source=$(pwd),target=/workspace,type=bind --device=/dev/ttyUSB0 connectedhomeip/chip-build-esp32:0.5.99 /bin/bashMatter-Docker-Container beenden und starten
Wenn Sie einen docker run-Befehl ausführen, wird ein neuer Container mit dem angegebenen Image erstellt. Dabei gehen Ihre alten Daten verloren, die in einer vorherigen Containerinstanz gespeichert wurden. Manchmal ist das genau das, was Sie wollen, weil Sie so mit einer Neuinstallation beginnen können. In diesem Beispiel möchten Sie Ihre Arbeit und Umgebungskonfiguration jedoch wahrscheinlich zwischen den Sitzungen speichern.
user@host> docker stop container_name
Wenn Sie bereit sind, den Container wieder auszuführen, starten Sie ihn und öffnen Sie ein Terminalfenster:
user@host> docker start container_name
user@host> docker exec -it container_name /bin/bash
Sie können zusätzliche Terminalsitzungen für Ihren Container öffnen:
user@host> docker exec -it container_name /bin/bash
Oder starten Sie eine Root-Sitzung mit:
user@host> docker exec -u 0 -it container_name /bin/bash
SDK initialisieren
Im Container initialisieren wir das Matter SDK und ESP IDF:
cd /workspacegit submodule update --init --recursivesource ./scripts/activate.shsource /opt/espressif/esp-idf/export.shBuild erstellen und flashen
Die nächste Aufgabe besteht darin, das Image zu erstellen und das Development Kit zu flashen, um das OTA-Firmware-Update Matter zu erhalten.
Dazu müssen Sie ein Image erstellen.
Konfigurieren Sie zuerst den Build mit dem Dienstprogramm menuconfig aus dem ESP-IDF.
cd examples/lighting-app/esp32
idf.py menuconfigKonfigurieren Sie im interaktiven Menü die folgenden Einstellungen:
Component config --->CHIP Device Layer --->Device Identification Options --->Lege für
Vendor IDdie von Connectivity Standards Alliance (Alliance) zugewiesene VID fest.Legen Sie für
Product IDdie PID fest, die Sie für die Matter-Integration in der Google Home Developer Console festgelegt haben.
Aktivieren Sie das Flag „OTA Requestor“:
Component config -->CHIP Core -->System options --->Aktivieren Sie das Flag „OTA Requestor“
[*] Enable OTA Requestor.Drücken Sie zweimal die ESC, um zum Menü der obersten Ebene zurückzukehren.
Aktivieren Sie das Flag Matter für die Erstellung von OTA-Images:
Component config -->CHIP Device Layer --->Matter OTA Image --->[*] Generate OTA IMAGE
Legen Sie die Versionsnummer fest:
Application manager --->[*] Get the project version from KconfigauswählenSetzen Sie
Project version (NEW)auf1.0.Drücken Sie s, um die Konfiguration zu speichern, drücken Sie zweimal die Eingabetaste und dann q, um
menuconfigzu beenden.
Testzertifikate einrichten
Folge der Anleitung unter Matter-Gerätetestzertifikate erstellen, um CD-, DAC- und PAI-Zertifikate zu erstellen.
Gerät erstellen
Führe jetzt den Build aus und flashe das Gerät:
idf.py build
idf.py -p /dev/ttyUSB0 erase_flash
idf.py -p /dev/ttyUSB0 flashOTA-Image erstellen und hochladen
Ändere jetzt die Build-Einstellungen noch einmal, um ein OTA-Image zu erstellen. Verwenden Sie dasselbe Image, aber mit einer höheren Versionsnummer.
Führen Sie menuconfig aus.
idf.py menuconfigAktualisieren Sie im interaktiven Menü Folgendes:
Application manager --->[*] Get the project version from Kconfigauswählen- Setzen Sie
Project version (NEW)auf2.0. - Drücken Sie s, um die Konfiguration zu speichern, drücken Sie zweimal die Eingabetaste und drücken Sie dann q, um
menuconfigzu beenden.
Erstellen Sie das Image und rufen Sie es ab. Das Beispiel zeigt sowohl den Speicherort des Images für OTA als auch die Ausgabe beim Parsen mit dem ota_image_tool.py.
cd build && /workspace/src/app/ota_image_tool.py show ./chip-lighting-app-ota.binDie Ausgabe sieht so aus:
Magic: 1beef11e
Total Size: 1243360
Header Size: 64
Header TLV:
[0] Vendor Id: XXXXX (0x000)
[1] Product Id: XXXXX (0x000)
[2] Version: 2 (0x2)
[3] Version String: v2.0
[4] Payload Size: 1243280 (0x12f890)
[8] Digest Type: 1 (0x1)
[9] Digest: e367f4d71e2ccd554b9a399c864abbf2c039382ef1def1b986fb2f59a99923a8
Da das Matter-SDK von Ihrem Containerhost bereitgestellt wird, ist das OTA-Image auf Ihrem Containerhost verfügbar.
Lade das OTA-Image gemäß der Anleitung zum Hochladen von OTA-Images in das Developer Console hoch.
Inbetriebnahme in Google Home und OTA beobachten
Achte darauf, dass dein Gerät über USB mit dem Linux-Hostcomputer verbunden ist. Im folgenden Beispiel wird die Verwendung von GNU screen zum Lesen der Geräteprotokolle gezeigt:
screen -L /dev/ttyUSB0 115200Dadurch wird die Ausgabe des Geräts in Ihrem Terminal angezeigt und dieselbe Ausgabe in die Standard-Bildschirmprotokolldatei mit dem Namen screenlog.0 geschrieben.
Sie können die Datei screenlog.0 in einem anderen Texteditor öffnen oder sie mit cat, tail, more oder grep in einer anderen Shell anzeigen lassen.
Drücke die rote Reset-Taste an der Seite des Geräts, um die Logs vom Bootvorgang aufzurufen.
In der Geräteausgabe sollten die zuvor festgelegten VID und PID sowie eine URL zum QR-Code-Bild angezeigt werden, das du für die Inbetriebnahme des Geräts verwendest.
[0;32mI (2388) chip[DIS]: Advertise commission parameter vendorID=XXXXX productID=XXXX discriminator=3840/15 cm=1[0m
[0;32mI (1928) chip[SVR]: SetupQRCode: [MT:E59-000000000000000][0m
https://project-chip.github.io/connectedhomeip/qrcode.html?data=MT%3AE59-000000000000000
Dein Hub muss in deinem Zuhause online sein.
Nimm das Gerät mit dem Google Home app (GHA) in Betrieb. Verwende dazu den QR-Code aus dem Link, der in der Protokolldatei angezeigt wird.
Lass das Gerät nach der Inbetriebnahme einige Minuten lang ununterbrochen laufen.
Sie sollten Logausgaben im Zusammenhang mit dem OTA-Anforderer, dem OTA-Image-Download und OTAImageProcessor sehen.
Nachdem das Image installiert wurde, prüfen Sie, ob die Kompilierungszeit des Images mit der des in die Console hochgeladenen Images übereinstimmt und nach der Kompilierungszeit liegt, die beim ersten Start gemeldet wurde. Wenn Sie grep mit dem folgenden Muster im Modus für reguläre Ausdrücke auf screenlog.0 ausführen, können Sie den OTA-Prozess veranschaulichen:
grep -E "(Compile time|OTA)" screenlog.0Die Ausgabe sieht so aus:
I (76) boot: 1 otadata OTA data 01 00 0000f000 00002000
I (91) boot: 3 ota_0 OTA app 00 10 00020000 00177000
I (99) boot: 4 ota_1 OTA app 00 11 001a0000 00177000
I (645) cpu_start: Compile time: Oct 15 2022 06:21:59
I (135558) chip[SWU]: OTA Requestor received AnnounceOTAProvider
I (540658) chip[SWU]: OTA image downloaded to offset 0x1a0000
I (541348) OTAImageProcessor: Applying, Boot partition set offset:0x1a0000
I (76) boot: 1 otadata OTA data 01 00 0000f000 00002000
I (91) boot: 3 ota_0 OTA app 00 10 00020000 00177000
I (99) boot: 4 ota_1 OTA app 00 11 001a0000 00177000
I (645) cpu_start: Compile time: Oct 15 2022 07:35:31
I (76) boot: 1 otadata OTA data 01 00 0000f000 00002000
I (91) boot: 3 ota_0 OTA app 00 10 00020000 00177000
I (99) boot: 4 ota_1 OTA app 00 11 001a0000 00177000
I (645) cpu_start: Compile time: Oct 15 2022 07:35:31
Nach der ersten Ausführung kannst du die Schritte im Abschnitt OTA-Image erstellen und hochladen wiederholen, ohne ein neues Image hochzuladen.
Setzen Sie die Versionen dieses Mal auf 1 zurück.
Führen Sie menuconfig aus und wählen Sie in den interaktiven Menüoptionen Folgendes aus:
Component config -->CHIP Device Layer --->Device Identification OptionsSetzen Sie
Version Stringaufv1.0.Setzen Sie
Device Software Version Numberauf1.Drücken Sie s, um die Konfiguration zu speichern, und dann q, um
menuconfigzu beenden.
Entferne das Gerät in der GHA aus deinem Zuhause.
Erstellen Sie das Image, falls es noch nicht erstellt wurde:
idf.py buildFlashen:
idf.py -p /dev/ttyUSB0 erase_flashidf.py -p /dev/ttyUSB0 flashWiederhole die Schritte unter In Google Home in Betrieb nehmen und OTA beobachten nach Bedarf.
OTA-Softwareupdate validieren
Die Softwareversion des Geräts kann in der Google Home App (GHA) geprüft werden. Nachdem ein Gerät in Betrieb genommen wurde, gehe so vor:
- Drücke auf dem Hauptbildschirm von GHA lange auf die Gerätekachel.
- Tippen Sie oben rechts auf das Symbol .
- Tippe auf Technische Informationen.
- Prüfe das Feld Softwareversion.