Webseiten-Werkzeuge


meshcore:faq:kann_ich_ein_meshcore-device_mit_einem_raspberry_pi_aktualisieren

MeshCore Geräte von Linux aus flashen

Jo, dieser Artikel hat sich mal primär mit einem Raspberry Pi beschäftigt. Im Rahmen meiner (jdmoella) Experimente mit MeshCore stand ich vor folgenden Rahmenbedingungen:

  • Ich habe ausschließlich Debian GNU/Linux als OS zur Verfügung
  • Ich möchte wissen, was „drin“ ist und vor allem einige Einstellungen vorab vornehmen.

Darüber, wie man die MeshCore Firmware selbst baut, gibt es einen separaten Artikel.

Da das Raspberry PI OS auf Debian basiert, kannst Du alle Erkenntnisse im Prinzip auch auf diesen anwenden.

ℹ️ Anweisungen für nRF-Geräte wie dem RAK, T1000-E, T114 folgen nach der ESP-Anleitung

Etwas Reverse Engineering

Als ich von meinem ersten #bsmesh Treffen nach Hause kam, hatte ich einen hervorragend zusammen gestellten Bausatz für einen MeshCore Repeater in der Hand. Der Kern des Ganzen war ein Seeed Studio XIAO nRF52840 & Wio-SX1262 Kit wie dieses hier: https://openelab.de/products/seeedstudio-xiao-nrf52840-wio-sx1262-kit

Mein Problem: Da ich weder ein Windows noch ein MacOS habe, konnte ich den Webflasher nicht verwenden. Bei Seeedstudio fand ich zumindest eine Anleitung, wie man der Arduino IDE Software auf das Gerät flashen kann: https://wiki.seeedstudio.com/XIAO_BLE/

Nachdem ich meine Arduino IDE soweit eingerichtet hatte, konnte ich einfache Beispiele compilieren wie z.B. das mit der blinkenden LED, welches ich immer wieder gerne nehme, weil ich dann sehen kann, ob das Flashen geklappt hat, wenn die LED in einem anderen Takt blinkt.

Anhand der Logausgaben hatte ich schon herausgefunden, dass das adafruit-nrfutil zum Flashen verwendet wird. Leider kam ich nicht an die Kommandozeilen-Parameter heran. Die für mich in der Arduino Konsole sichtbaren Anteile haben nicht gereicht, um den Flashvorgang außerhalb der IDE zu starten.

Daher habe ich ein kleines Script als das adafruit-nrfutil ausgegeben:

#!/bin/bash

printenv > /tmp/adafruit-nrfutil-$$-printenv.txt

strace -o /tmp/adafruit-nrfutil-$$-strace.txt /pfad/zu/.venv/bin/adafruit-nrfutil $@

Dieses ruft das tool mit strace auf, so dass man einiges an Infos bekommt. Natürlich muss man dafür das Script ausführbar machen und auch an einem gesonderten Ort ablegen, der dann in den Ausführungspfad eingehängt wird. Hier ist auch die Reihenfolge wichtig. Damit der Wrapper zuerst gefunden wird.

Also z.B. den Wrapper unter /tmp/bin/adafruit-nrfutil speichern,

chmod 755 /tmp/bin/adafruit-nrfutil

machen und dann auch noch

export PATH=/tmp/bin:$PATH

Wenn man dann aus dieser Konsole heraus die Arduino IDE startet, dann findet die IDE den Wrapper vor dem eigentlichen Tool und dann bekommt man zwei Dateien als Ergebnis.

Die strace Ausgabe hat mir dann die Kommandozeilen-Parameter verraten, die beim Aufruf aus der IDE verwendet wurden:

execve(„/home/jens/.venv/bin/adafruit-nrfutil“, [„/home/jens/.venv/bin/adafruit-nr“…, „–verbose“, „dfu“, „serial“, „-pkg“, „CODE/MeshCore/.pio/build/Xiao_nr“…, „-p“, „/dev/ttyACM0“, „-b“, „115200“, „–singlebank“, „–touch“, „1200“], 0x7ffe786def80 /* 40 vars */) = 0

Das offenbarte auch meine vorherigen Probleme: Bei diesem Tool dient der Parameter

–touch 1200

dazu, das Gerät in den Flashmodus zu versetzen. Diesen hatte ich bei meinen vorherigen Versuchen nicht dabei, so dass das Gerät nicht bereit war, die neue Firmware anzunehmen und den Vorgang abgebrochen hat.

Installation der Flash-Software

Die Flash-Softwre wird benötigt, um die Firmware auf das jeweilige Gerät zu schreiben. Sie heißt so, weil damit typischerweise der Flash-Speicher des Gerätes überschrieben wird.

Die zu verwendende Flash-Sofware hängt von dem Gerät ab, welches Du mit neuer Software versehen möchtest. In unseren Beispielen sind es in beiden Fällen in der Programmiersprache Python geschriebene Werkzeuge, so dass beide mit dem pip Paketverwaltungs-Tool installiert werden können.

Bei den ESP-basierten Geräten ist das

pip install esptool

und für die nRF basierten Geräte geht das genauso einfach mit

pip install adafruit-nrfutil

Anleitung zum Download der Firmware-Datei

Falls man die Firmware nicht selbst kompilieren möchte, kann man diese auch vom WebFlasher holen.

Gehe hierzu auf flasher.meshcore.co.uk und lade eine entsprechende Firmware-Datei herunter.

Bei meinem XIAO nrf Gerät oder auch dem SenseCap T1000e benötigst Du die zip Datei. Für ein Heltecv3 wird hingegen das bin benötigt. Es hängt also vom Gerät bzw. Chip ab, welche Datei man herunterladen muss.

Alternativ kann man sich natürlich auch die Firmware selbst bauen. Das hat unter anderem den Vorteil, dass einige Werte dann gleich voreingestellt sind und das Gerät gar nicht erst mit einer „falschen“ Konfiguration startet.

nRF-Geräte (z.B. XIAO nRF oder SenseCap T1000e

Du benötigst die ZIP-Version des Adafruit Flash-Tools (siehe weiter unten) wie z.B.:

RAK_4631_companion_radio_ble-v1.7.1-165fb33.zip

Wenn Du das Gerät über USB an Deinen Rechner anschließt, dann kann man mit

dmesg | tail

als root Benutzer (oder mit sudo-Rechten) recht schnell nachschauen, als welche /dev Datei dem neuen Gerät zugeordnet ist. Linux folgt da dem Credo: Alles ist eine Datei. In meinem Fall wurde der XIAO der

/dev/ttyACM0

zugewiesen. Die Installation des adafruit-nrfutil ist ja bereits oben beschrieben. Mit dem folgenden Befehl kannst Du den Flashvorgang starten:

adafruit-nrfutil –verbose dfu serial –package RAK_4631_companion_radio_usb-v1.7.1-165fb33.zip -p /dev/ttyACM0 -b 115200 –singlebank –touch 1200

Dabei sollte eine Ausgabe ähnlich der folgenden heraus kommen (die habe ich von einem anderen Flashfile):

Upgrading target on /dev/ttyACM0 with DFU package /home/jdmoella/CODE/MeshCore/.pio/build/Xiao_nrf52_repeater/firmware.zip. Flow control is disabled, Single bank, Touch 1200
Touched serial port /dev/ttyACM0
Opened serial port /dev/ttyACM0
Starting DFU upgrade of type 4, SoftDevice size: 0, bootloader size: 0, application size: 406492
Sending DFU start packet
Sending DFU init packet
Sending firmware file
########################################
########################################
########################################
########################################
########################################
########################################
########################################
########################################
########################################
########################################
########################################
########################################
########################################
########################################
########################################
########################################
########################################
########################################
########################################
##################################
Activating new firmware

DFU upgrade took 24.39425563812256s
Device programmed.

Für ESP-basierte Geräte (z. B. Heltec V3) gehe wie folgt vor:

Bei den ESP-basierten Geräten gibt es eine ganz coole Funktion des esptool, welches Dir anzeigt, ob Dein Gerät korrekt über USB angeschlossen und benutzbar ist:

esptool chip-id

Ansonsten findet man das Gerät auch über

root@knechenrecht:/home/jdmoella# dmesg | tail
[ 4246.548627] usb 3-4.2.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 4246.548632] usb 3-4.2.3: Product: CP2102 USB to UART Bridge Controller
[ 4246.548635] usb 3-4.2.3: Manufacturer: Silicon Labs
[ 4246.548638] usb 3-4.2.3: SerialNumber: 0001
[ 4246.626727] usbcore: registered new interface driver usbserial_generic
[ 4246.626738] usbserial: USB Serial support registered for generic
[ 4246.637307] usbcore: registered new interface driver cp210x
[ 4246.637318] usbserial: USB Serial support registered for cp210x
[ 4246.637342] cp210x 3-4.2.3:1.0: cp210x converter detected
[ 4246.638228] usb 3-4.2.3: cp210x converter now attached to ttyUSB0

In diesem Fall das Gerät also die Gerätedatei

/dev/ttyUSB0

Bei den ESPs muss man wohl die *bin Datei benutzen. Zumindest hatte ich ein Beispiel damit gefunden. Folglich ist dies der Aufruf zum Flashen:

esptool -p /dev/ttyUSB0 –chip esp32-s3 write_flash 0x10000 .pio/build/Heltec_v3_terminal_chat/firmware.bin

Die Bin-Datei ohne „merged“ im Dateinamen behält die vorhandene Bluetooth-Pairing-Datenbank bei.

Die

Heltec_v3_companion_radio_usb-v1.7.1-165fb33-merged.bin

bin-Datei überschreibt alles, einschließlich des Bootloaders und der vorhandenen Bluetooth-Pairing-Datenbank, behält aber die Konfigurationen bei. Bei so einer merged Datei muss man statt der 0x10000 die 0x00000 als Startadresse angeben. So wie in diesem Beispiel:

esptool.py -p /dev/ttyUSB0 –chip esp32-s3 write_flash 0x00000 <merged_firmware>.bin

Konfiguration über USB

Um einen Repeater oder Room Server, der über USB mit einem Pi verbunden ist, mit Shell-Befehlen zu verwalten, musst du picocom installieren. Um picocom zu installieren, führen folgenden Befehl aus:

sudo apt install picocom

Um dein über USB-Seriell angeschlossenes Gerät mit picocom zu verwalten, verwende den folgenden Befehl:

picocom -b 115200 /dev/ttyUSB0 –imap lfcrlf

Weitere Informationen zu den Befehlszeilenbefehlen für Repeater und Raumserver findest du in der Referenzliste.

Quelle



Diese Anleitung / Übersetzung wurde nach bestem Wissen erstellt, erhebt aber nicht den Anspruch auf Vollständigkeit und Richtigkeit der Angaben und dient lediglich als Hilfestellung.


Diese Seite steht in keinerlei Verbindung zum MeshCore Projekt.
Erstellt 2025 für die deutschsprachige MeshCore Community • Impressum


meshcore/faq/kann_ich_ein_meshcore-device_mit_einem_raspberry_pi_aktualisieren.txt · Zuletzt geändert: von jdmoella