Over-the-Air-Upgrades?

8

Ich möchte in der Lage sein, Software auf einem Arduino zu aktualisieren, ohne das Gerät physisch zu berühren oder ein Kabel zu verlegen. Kann es gemacht werden?

Wählt ein drahtloses Protokoll aus, das dies am einfachsten macht.

Johannes Ernst
quelle
Schauen Sie sich Moteino an .
Gerben
Sehr gut aussehen.
Johannes Ernst
Ich habe ein paar Moteinos bestellt und werde hoffentlich in den nächsten Tagen Upgrades ausprobieren.
Johannes Ernst

Antworten:

6

Die beste und einfachste Lösung, die ich gefunden habe, ist die Verwendung des Bluefruit EZ-Link von Adafruit. Sie haben ein Modul, das Sie an die Serial / Power / Reset-Pins anschließen ( Link hier ) oder eine Abschirmung für das Uno ( Link hier ). Sie haben auch eine großartige Beschreibung und Anleitung ( Link hier ), die ziemlich gut ist. Es erscheint im Grunde genommen als serielle Bluetooth-Verbindung in der Arduino IDE und Sie programmieren es wie gewohnt. Es hat den zusätzlichen Vorteil, dass es nicht nur zum Programmieren, sondern auch zum Senden und Empfangen von Daten von Nutzen ist.

mwwalk
quelle
4

Wir haben Remote-Updates auf einem Arduino Pro Mini (ATMega328P) implementiert, indem wir einen "Boot" -Befehl in die normale Firmware eingefügt haben. Wie es funktioniert ist:

  • Der Host sendet den Befehl "boot" an das entfernte Arduino.
  • Der Arduino springt zum Bootloader (Programmadresse 0x3C00 für den Pro Mini)
  • Der Host sendet die neue Firmware über die Verbindung mit avrdude (AVR109-Protokoll).

Dies erfordert keinen neuen Bootloader oder keine neue Hardware. Für kommerzielle Geräte ist dies jedoch keine gute Lösung. Wenn die hochgeladene Firmware beschädigt ist, kann das Board ohne Hard-Reset nicht in den Bootloader-Modus versetzt werden.

Einige drahtlose Kommunikationsgeräte, wie z. B. XBees, verfügen über GPIO, das per Fernzugriff umgeschaltet werden kann. Wenn Sie dies mit dem Arduino-Reset-Pin verbinden, kann die Karte stattdessen in den Bootloader zurückgesetzt werden.

geometrisch
quelle
3

Das Arduino Yun kann per Fernzugriff neu geflasht werden (entweder über WLAN oder ein Netzwerkkabel): Sie müssen seine IP-Adresse im Menü "Extras> Boards" der Arduino IDE auswählen und dann wie gewohnt die Upload-Taste drücken.

Federico Fissore
quelle
2

Es ist möglich, einen Bootloader zu schreiben, der im RAM ausgeführt wird (oder sogar in Flash, möglicherweise in einem speziellen Bootblock - abhängig vom Mikrocontroller).
Dieser Bootloader muss in der Lage sein, die drahtlose Kommunikation herzustellen, das Protokoll zu verstehen und den Flash-Speicher zu löschen / schreiben.
Grundsätzlich gibt es zwei Ansätze für das Software-Upgrade:

  1. Der Bootloader sucht beim Start nach einem Befehl "Software-Upgrade". Wenn es empfangen wird, wartet es auf die Programmiersequenz. Wenn es nicht empfangen wird, wird die Anwendung gestartet.
  2. Die Anwendung kann einen solchen Befehl empfangen und gibt dann dem Bootloader die Kontrolle.

Welches Protokoll Sie wählen, ist fast irrelevant. Stellen Sie einfach sicher, dass genügend Ressourcen vorhanden sind, um es im RAM / Flash zu halten. Auf einem Arduino Due gibt es zum Beispiel mehr als genug Ressourcen für eine solche Implementierung.

mic
quelle
Ah! Würdest du zufällig einen frei verfügbaren Code kennen, der so etwas irgendwo implementiert hat?
Johannes Ernst
1

Ja, das kann man machen. Lowpowerlab.com hat Moteino, das OTA programmiert werden kann.

Jose Leon
quelle
1

Spark.io-Boards eignen sich auch sehr gut für OTA-programmierbare Arduino-ähnliche Geräte. Ich habe eine und habe festgestellt, dass es ziemlich einfach ist, damit zu arbeiten.

https://www.spark.io/

sdcharle
quelle