Problemas con la recepción de datos por puerto serie

Buenas tardes a todos,

Estoy trabajando en un proyecto en que utilizo un Arduino nano como actuador y un Raspberry Pi 3 como servidor. La comunicación entre los dos es mediante cable USB.

Desde Raspberry y mediante un script php doy formato a una cadena que será enviada a Arduino usando un script de python que prepara la comunicación y envía los datos.

El puerto USB de la Raspberry ya tiene todos los privilegios dados.

El problema viene cuando ejecuto el fichero php desde navegador. Si el monitor serie del IDE de Arduino se encuentra abierto no hay ningún problema, todo se ejecuta como debería. Si este se encuentra cerrado, parece que al ejecutarse el fichero de php si genera interacción entre el Raspberry y el Arduino (El led RX del Arduino parpadea con normalidad) pero no se surge efecto en el LED que debería encender/apagar.

El propietario de los distintos ficheros que actúan en ese procedimiento es “www-data” que a su vez esta en el grupo de sudoers.

Busqué en la red y en ese foro pero no encontré información que me aportara un poco de luz. Agradezco mucho la ayuda que puedan darme.

Un saludo.

Hola,
Nos puedes aclarar una cosa ya que no has puesto ni el código ni esquema. si tienes conectado mediante USB el Arduino y la Raspberry, ¿como tienes conectado el arduino al ordenador para poder abrir el monitor?

Hola rodripelto,
Gracias por responder.

No pensé que el problema estuviera en la conexión del hardware ni en el código por eso no adjunté toda esa información..
Estoy trabajando sobre el Raspberry que está haciendo de servidor y entorno de trabajo a la vez.

En la misma Raspberry tengo instalado el IDE con el que trabajo con Arduino.

No creo que tenga que ver el conexionado ni el código.
Entiendo lo que estas haciendo. Usando el Raspi para programar el Arduino.
Lo que creo que esta pasando es que tu arduino se esta reseteando y por eso no responde a tu código en php.
Como resolverlo no lo se.
Se que en determinadas circunstancias al accionar el Puerto serie Arduino se resetea, y creo que eso te esta ocurriendo.
Podrias verificarlo colocando un tester entre gnd y RESET (pin del arduino).

Desde Raspberry y mediante un script php doy formato a una cadena que será enviada a Arduino usando un script de python que prepara la comunicación y envía los datos.

¿Por qué no usas solo python para hacer todo?
Para casos simples un framework como flask te puede servir para hacer lo mismo que hace php, youtube está lleno de tutoriales para comenzar.

Yo creo que tu problema podría estar en el código de arduino, pero en verdad sin ver el código no es posible saber

mugen90:
En la misma Raspberry tengo instalado el IDE con el que trabajo con Arduino.

Aaaaa vale.

¿En tú script de python abres el puerto serie?

surbyte:
Lo que creo que esta pasando es que tu arduino se esta reseteando y por eso no responde a tu código en php.

Coincido con surbyte.

Creo que lo que te está pasando es que cuando se ejecuta el script de php se "abre" el puerto serie y activa una de las señales del puerto serie (el DTR) que está "conectado" al reset del Arduino, y lo resetea. Esto es útil para no tener que resetear a mano cada vez que queremos subir el programa al Arduino. Si no quieres que esto suceda, aquí tienes cómo hacerlo dependiendo del Arduino: Android Apps: Evitar auto reset Arduino

Prueba para ver si se te soluciona.

Pero acuérdate de quitar el "apaño" cuando quieras volver a programar el Arduino. Seguro que te vas a olvidar quitarlo y vas a consultar en el foro qué te está sucediendo, porque no puedes programarlo. :wink:

Vale, retiro mi pregunta, parece que el puerto se abre solo cuando se crea el objeto, prueba lo que te dice IgnoranteAbsoluto, si te sigue fallando, ponos la linea donde inicializas el objeto del puerto serie en python y tambien donde inicializas el puerto serie de arduino.

Buenas tardes a todos,
Agradezco mucho el interés y ayuda aportados.

Surbyte,
Voy a probar eso que me comentas del posible reseteo que se está ocasionando. Vi que podía darse esa posibilidad pero en temas electrónicos estoy prácticamente empezando y muchas cosas aún se me escapan. En todo caso voy a profundizar en esa dirección y si consigo resolverlo siendo esta la causa postearé compartiéndolo con vosotros.
Gracias de nuevo.

Gepd,
Si no lo hago todo en python es por que en un futuro esos datos que envio a Arduino van a ser alimentados desde formularios. El código de Arduino es simple, solamente escucha a que lleguen peticiones por el puerto serie y activa o desactiva segun los datos que llegan.

IgnoranteAbsoluto,
Gracias por tu información, voy a estudiarla y compartir con vosotros el resultado. Jaja y gracias por la advertencia, a veces es fácil que pasen por alto esas cosas...

Gracias a ti también rodripelto, así lo haré.

Soy nuevo en postear aquí, si creéis que debería postear de otro modo mis respuestas estaré encantado de hacerlo. Gracias!

Buenas tardes de nuevo,

Tengo una duda que a poder ser me gustaría que pudieran resolverme los que sois partidarios de que mi problema podría ser que mi Arduino se estuviera reiniciando...

El procedimiento que sigo es el siguiente:

1- Ejecuto el IDE y abro el monitor serie.
2- Ejecuto el fichero php que contiene la llamada al fichero python que crea la conexión serie y envía los datos.
3- El LED enciende correctamente.
4- Cierro el IDE y el correspondiente monitor serie. (Para hacer la prueba que da lugar a ese post)
5- Ejecuto de nuevo el fichero php con la orden de parar el LED. No surge efectos pero mi LED encendido en el paso 3 continua encendido.

Teniendo en cuenta el procedimiento anterior, no debería apagarse el LED cuando ejecuto el paso 5 si el problema fuera que mi Arduino está reiniciando?

No se si me expliqué de forma clara.. Espero que si!
Gracias!

Ciertamente es raro lo que te está pasando. Se supone que si el puerto serie está siendo usado por el «monitor serie» no debería de poder usarse por otra aplicación.

Lo único que se me ocurre ahora mismo es que el PHP no está iniciando el puerto serie a la velocidad adecuada y el «monitor serie» sí. Y cuando cierras el «monitor serie» el puerto serie pase a una configuración incorrecta.

Eso sí, si logras que el PHP configure el puerto serie correctamente, es probable que el Arduino se resetee y entonces se apagará el LED si lo "dejaste" encendido (a no ser que hagas lo que indica el enlace que puse para que no se resetee).

Porque no subes los códigos de arduino, python y php para poder reproducir tu problema en el mismo ambiente.
Ya es dificil imaginarlo pero sin tenerlo delante pocos podran sugerirte algo mas.

Hay que ayudar si se espera ser ayudado!!

Lo dice las normas del foro y en el primer post debiste haberlo hecho aunque estuviera de mas.
Junta todo en un archivo comprimido zip y lo adjuntas.