Mises à niveau en direct?

8

J'aimerais pouvoir mettre à niveau le logiciel sur un arduino sans toucher physiquement l'appareil ou enfiler un câble. Peut-on le faire?

Choisira un protocole sans fil qui rend cela plus facile.

Johannes Ernst
la source
Jetez un œil à Moteino .
Gerben
Très joli.
Johannes Ernst
J'ai commandé quelques Moteinos et j'espère pouvoir essayer les mises à niveau dans les prochains jours.
Johannes Ernst

Réponses:

6

La solution la meilleure et la plus simple que j'ai trouvée consiste à utiliser le Bluefruit EZ-Link d'Adafruit. Ils ont un module que vous branchez sur les broches Serial / Power / reset ( lien ici ) ou un blindage pour l'uno ( lien ici ). Ils ont également une excellente description et un guide pratique ( lien ici ) qui est assez bon. Il apparaît essentiellement comme un lien Bluetooth série dans l'IDE Arduino et vous le programmez comme d'habitude. Il a l'avantage supplémentaire d'être utile non seulement pour la programmation, mais aussi pour l'envoi et la réception de données.

mwwalk
la source
4

Nous avons implémenté des mises à jour à distance sur un Arduino Pro Mini (ATMega328P) en mettant une commande "boot" dans le firmware normal. Comment cela fonctionne:

  • L'hôte envoie la commande "boot" à l'Arduino distant.
  • L'Arduino passe au chargeur de démarrage (adresse de programme 0x3C00 pour le Pro Mini)
  • L'hôte envoie le nouveau micrologiciel via la liaison à l'aide d'avrdude (protocole AVR109)

Cela ne nécessite pas de nouveau chargeur de démarrage ou matériel. Ce n'est pas une bonne solution pour les appareils commerciaux, car si le firmware téléchargé est corrompu, la carte ne pourra pas être mise en mode chargeur de démarrage sans réinitialisation matérielle.

Certains appareils de communication sans fil, tels que les XBees, ont un GPIO qui peut être basculé à distance. La connexion à la broche de réinitialisation Arduino permettra à la carte d'être réinitialisée dans le chargeur de démarrage à la place.

geometrikal
la source
3

L' Arduino Yun peut être reflasher à distance (via wifi ou câble réseau): vous devrez sélectionner son adresse IP dans le menu "Outils> Cartes" de l'IDE Arduino puis appuyer sur le bouton de téléchargement comme d'habitude.

Federico Fissore
la source
2

Il est possible d'écrire un chargeur de démarrage fonctionnant en RAM (ou même en Flash, peut-être dans un bloc de démarrage spécial - dépend du microcontrôleur).
Ce chargeur de démarrage doit pouvoir établir la communication sans fil, comprendre le protocole et effacer / écrire la mémoire Flash.
Il existe essentiellement deux approches pour la mise à niveau logicielle:

  1. Le chargeur de démarrage recherche au démarrage une commande de "mise à niveau logicielle". S'il est reçu, il attend la séquence de programmation. S'il n'est pas reçu, il démarre l'application.
  2. L'application est capable de recevoir une telle commande et donne alors le contrôle au chargeur de démarrage.

Le protocole que vous choisissez est presque hors de propos. Assurez-vous simplement qu'il y a suffisamment de ressources pour le garder en RAM / Flash. Sur un Arduino Due - par exemple - il y a plus que suffisamment de ressources pour une telle implémentation.

micro
la source
Ah! Connaissez-vous un code disponible gratuitement qui implémenterait ce genre de chose quelque part?
Johannes Ernst
1

Oui, ça peut se faire. Lowpowerlab.com a Moteino qui peut être programmé OTA.

Jose Leon
la source
1

Les cartes Spark.io sont également très agréables pour les appareils de type Arduino programmables OTA. J'en ai un et je l'ai trouvé assez facile à travailler.

https://www.spark.io/

sdcharle
la source