Esta es una clase de ayuda para las comunicaciones PHP-Arduino en Linux
Después de una semana de Google y Pruebas, construyo esta clase para comunicarme desde PHP que se ejecuta en Linux (Master) a un tablero de Arduino a través de la serie USB.
La longitud máxima del mensaje maestro es 60 Char (límite de búfer de arduino RX), la respuesta (de Arduino) como sin límites. El char ' n' se usa internamente como Terminator. El protocolo utiliza CRC8 para asegurar la corrección. En caso de error, el mensaje se reenvía 3 veces antes de salir en estado de error.
Se utiliza un script bash (Serialarduino.sh) para configurar el dispositivo USB en Linux, después de la conexión de inicio o USB (RE). La comunicación en serie está abierta para cada mensaje: en el script bash, el pin DTR está deshabilitado para evitar el reinicio automático de Arduino. (Ver: https://playground.arduino.cc/main/disablingautoresetonserialConnection)
SOLUCIÓN DE PROBLEMAS
CONFIGURACIÓN
Ver Arduinolinuxserial.php File.
Conclusiones
Now you can develop MySQL and web enabled Arduino applications only working on Arduino and PHP.
To keep ligth the Arduino Sketch, you can port all not realtime logic to PHP side.
At the end your application will works on MXQ+Arduino UNO even 24/7 with only 20 Watt AC power, and can
be controlled by smartphone via WiFi.
What more?
Enjoy.
Estoy muy interesado en usar TVBoxes (como MXQ) como servidores web dedicados con extensiones de Arduino: entonces sobre (Linux + Android) -Armarduino USB Communication. Probé muchas soluciones:
Using ArduinoLinuxSerial (https://github.com/msillano/ArduinoLinuxSerial) the Master is php, and you need the
serial driver (uses devices like /dev/ACMx or /dev/USBx). It is blocking the master and the php->Arduino message
is limited to 60 char. Fast and robust (CRC and repetions). Useful with simple and fast Arduino responses.
Using USBphpTunnel (https://github.com/msillano/USBphpTunnel) the master is Arduino, and the Android app uses
ports like /dev/bus/dev/00X/00Y, so you don't need the serial driver. It is blocking the master (arduino) and
it allows big messages. It works in background of the main php program. Useful for data logging and RT.
Using USBphpTunnel_Fifo (https://github.com/msillano/USBphpTunnel_fifo) the master is php. It is NOT blocking the
master, allows payload up to 4k, allows concurrence (many users via WIFI). Works in background, and it is no fast
(depending from polling Arduno frequence, 5-15 sec. plus processing time). Well placed for long Arduino processes
(like waiting user actions).