¿Actualizaciones por aire?

8

Me gustaría poder actualizar el software en un arduino sin tocar físicamente el dispositivo o conectar un cable. Se puede hacer?

Escogerá el protocolo inalámbrico que lo haga más fácil.

Johannes Ernst
fuente
Echa un vistazo a Moteino .
Gerben
Un aspecto muy agradable.
Johannes Ernst
He ordenado un par de Moteinos, y espero poder probar las actualizaciones en los próximos días.
Johannes Ernst

Respuestas:

6

La mejor y más fácil solución que he encontrado es usar Bluefruit EZ-Link de Adafruit. Tienen un módulo que se conecta a los pines de serie / encendido / reinicio ( enlace aquí ) o un escudo para el uno ( enlace aquí ). También tienen una excelente descripción y guía práctica ( enlace aquí ) que es bastante buena. Básicamente aparece como un enlace de Bluetooth en serie en el IDE de Arduino y usted lo programa normalmente. Tiene el beneficio adicional de ser útil no solo para la programación, sino también para enviar y recibir datos.

mwwalk
fuente
4

Hemos implementado actualizaciones remotas en un Arduino Pro Mini (ATMega328P) al poner un comando de "arranque" en el firmware normal. Cómo funciona es:

  • El host envía el comando "boot" al Arduino remoto.
  • El Arduino salta al gestor de arranque (dirección del programa 0x3C00 para el Pro Mini)
  • El host envía el nuevo firmware a través del enlace usando avrdude (protocolo AVR109)

Esto no requiere un nuevo cargador de arranque o hardware. Sin embargo, no es una buena solución para dispositivos comerciales, ya que si el firmware cargado está dañado, la placa no podrá ponerse en modo de cargador de arranque sin un restablecimiento completo.

Algunos dispositivos de comunicaciones inalámbricas, como XBees, tienen GPIO que se puede activar de forma remota. Conectar esto al pin de reinicio de Arduino permitirá que la placa se reinicie en el cargador de arranque.

Geometrikal
fuente
3

El Arduino Yun se puede actualizar remotamente (ya sea a través de wifi o cable de red): deberá seleccionar su dirección IP en el menú "Herramientas> Tableros" del IDE de Arduino y luego presionar el botón de carga como de costumbre.

Federico Fissore
fuente
2

Es posible escribir un cargador de arranque que se ejecute en RAM (o incluso en Flash, tal vez en un bloque de arranque especial, depende del microcontrolador).
Este gestor de arranque debe poder establecer la comunicación inalámbrica, comprender el protocolo y borrar / escribir memoria Flash.
Existen básicamente dos enfoques para la actualización de software:

  1. El gestor de arranque busca en el inicio un comando de "actualización de software". Si se recibe, espera la secuencia de programación. Si no se recibe, inicia la aplicación.
  2. La aplicación puede recibir dicho comando y luego le da el control al gestor de arranque.

El protocolo que elija es casi irrelevante. Solo asegúrese de que haya suficientes recursos para mantenerlo en RAM / Flash. En un Arduino Due, por ejemplo, hay recursos más que suficientes para dicha implementación.

mic
fuente
Ah! ¿Sabrías algún código de libre acceso que implementara ese tipo de cosas en alguna parte?
Johannes Ernst
1

Sí, se puede hacer. Lowpowerlab.com tiene Moteino que se puede programar OTA.

Jose Leon
fuente
1

Las tarjetas Spark.io también son muy buenas para dispositivos tipo Arduino programables OTA. Tengo uno y he encontrado que es bastante fácil trabajar con él.

https://www.spark.io/

sdcharle
fuente