Arduino – Firmware upload via webinterface

In dit voorbeeld laten we zien hoe je een “firmware upgrade” kan doen op een Arduino UNO/NANO die is aangesloten op bijvoorbeeld de Raspberry Pi, het uploaden van het bestand gaat via een webinterface.
Ik had een voorbeeld hier gezien en heb deze aangepast/verbeterd!

Hoe werkt het eigenlijk?

De arduino “firmware” is een HEX code, en kan onttrokken worden vanaf de arduino volgens deze handleiding, je kan dit HEX bestand via AVRdude weer uploaden naar de Arduino.

Wat heb je nodig?

1) AVRdude / installeer met het commando:  sudo apt-get install avrdude
2) Lighttpd (webserver) / installeer met het commando:  sudo apt-get install lighttpd
3) php5 (programmeertaal) / installeer met het commando:  sudo apt-get install php5-common php5-cgi php5

Wat moet je nog extra doen?

1) Nu moet er nog toegang tot seriele connecties worden gegeven (in Linux heet dat dialout) voor Lighttpd anders krijg je foutmeldingen als:

avrdude: ser_open(): can't open device "/dev/ttyACM0": Permission denied ioctl("TIOCMGET"): Inappropriate ioctl for device

De gebruiker voor Lighttpd is www-data, deze “gebruiker” geef je toegang tot serial devices (dialout) met het commando:

sudo usermod -a -G dialout www-data of   sudo adduser www-data dialout

2) Nu moeten de rechten voor de seriele poort nog goed gezet worden, in dit voorbeeld ttyACM0, met het commando:

sudo chmod a+rw /dev/ttyACM0 en/of  sudo chmod a+rw /dev/ttyUSB0

3) (Optioneel?) Geef Lighttpd (user: ‘www-data’) ook toegang om sudo commando’s uit te voeren, met het commando:  sudo visudo -f /etc/sudoers

Onderaan dit bestand, voeg deze regel toe:  www-data ALL=(ALL) NOPASSWD: ALL
www-data to nopasswd

4) Maak een folder aan /var/web/firmware  met het commando:

sudo mkdir /var/web/firmware

HTML FORM

Om te beginnen moet de gebruiker via een webinterface een bestand uploaden en tevens moet de gebruiker informatie aanleveren zoals Arduino type (ivm met de baudrate) en ‘serial device’.
we maken daarvoor gebruik van een HTML FORM script:

Noem het bijvoorbeeld index.html, het ziet er zo uit:

arduino firmware upload webinterface 01

 

Deze FORM roept het bestand ‘firmwarewrite.php’ aan met de variabelen, nu kunnen we dit script draaien om een firmware te schrijven naar een arduino op de Raspberry Pi.

Het PHP script ziet er zo uit (commentaar staat tussen de regels)

Plaats ‘index.html‘ en ‘firmwarewrite.php‘ in dezelfde folder en voer de gegevens in, na de knop ingedrukt te hebben en een wachttijd zo tussen de 5 a 15 seconden, zie je ade AVRdude output in de webrowser, zo kun je meteen controleren of het updaten van de firmware goed is gegaan!

arduino firmware upload webinterface 02

Onder op deze pagina kun je het hele pakketje downloaden inclusief een paar HEX dumps!

Succes!