elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Mala lectura puerto USB ARUDINO vía PHP
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Mala lectura puerto USB ARUDINO vía PHP  (Leído 4,088 veces)
Hurdano


Desconectado Desconectado

Mensajes: 322


Se que puedo cambiar el futuro, pero no el pasado


Ver Perfil WWW
Mala lectura puerto USB ARUDINO vía PHP
« en: 31 Mayo 2015, 00:49 am »

Hola gentica.

Os vengo a comentar que estoy trasteando con arduino y raspberry pi, y bueno, el caso es que tengo creado un archivo index.php con un código para que se conecte al puerto serial de arduino e imprima los datos.

La conexión es correcta, lo que los datos no salen bien, es decir, tengo que refrescar la página muchas veces para que salga correctamente: Humedad 35.00% Temperatura: 28 *C (por poneros un ejemplo)
Y lo que sale otras veces es nada, o a mitad, etc.

Alguien sabe como podría leer correctamente estas cadenas de caracteres y que PHP las mostrara bien?He pensado quizás haciendo con un array, pero claro, el código de arduino también es muy especial, y no estoy seguro de si funcionará si pongo los datos que recoge por separado.

Si alguien alguna vez ha hecho algo, o sabe de algún método por favor que me lo diga. Llevo bastante rato buscando por internet, probando diferentes "soluciones" si se pueden llamar así, pero no me sirven ninguna.

Un saludo.

EDITO: JUU enserio no sabe nadie? joer, pero esque nose como hacer que PHP muestre la lectura entera que recibe del puerto serial conectado a Arduino, llevo días intentando solucionarlo, por favor si alguien le ha pasado lo mismo o tiene idea de como hacerlo que porfavor me diga alguna manera. Un saludo.


« Última modificación: 1 Junio 2015, 08:43 am por Hurdano » En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Mala lectura puerto USB ARUDINO vía PHP
« Respuesta #1 en: 1 Junio 2015, 18:11 pm »

algo de codigo para ver si no es que estás metiendo la pata en algo D:


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Hurdano


Desconectado Desconectado

Mensajes: 322


Se que puedo cambiar el futuro, pero no el pasado


Ver Perfil WWW
Re: Mala lectura puerto USB ARUDINO vía PHP
« Respuesta #2 en: 8 Junio 2015, 23:36 pm »

Perdona la tardanza, pero el material no disponía del material por estar en otro lguar de residencia. El código que tengo es este:

Arduino
Código
  1. #include <DHT.h>
  2.  
  3. // Sketch de prueba para sensores DHT humedad / temperatura
  4. // Libreria para Sensores DHT
  5.  
  6. #define DHTPIN 7     // Pin del Arduino al cual esta conectado el pin 7 del sensor
  7.  
  8. #define DHTTYPE DHT11   // DHT 11
  9.  
  10.  
  11. // Inicializa el sensor
  12. DHT dht(DHTPIN, DHTTYPE);
  13.  
  14. // Configura Arduino
  15. void setup() {
  16.  Serial.begin(9600);
  17.  Serial.println("HurdesGeek\n\nPrueba de sensor DHT11!");
  18.  
  19.  dht.begin();
  20. }
  21.  
  22. void loop() {
  23.  // Espera dos segundos para realizar la primera medición.
  24.  delay(2000);
  25.  
  26.  // El sensor muestrea la temperatura cada 2 segundos}
  27.  
  28.  // Obtiene la Humedad
  29.  float h = dht.readHumidity();
  30.  // Obtiene la Temperatura en Celsius
  31.  float t = dht.readTemperature();
  32.  
  33.  // Control de errores, valida que se obtuvieron valores para los datos medidos
  34.  if (isnan(h) || isnan(t)) {
  35.    Serial.println("Falla al leer el sensor DHT11");
  36.    return;
  37.  }
  38.  
  39.  Serial.print("Humedad: ");
  40.  Serial.print(h);
  41.  Serial.print(" %\t");
  42.  Serial.print("Temperatura: ");
  43.  Serial.print(t);
  44.  Serial.println(" *C ");
  45. }








El de PHP
Código
  1. <?php
  2. $h = 'h'
  3. $portAddress = "/dev/ttyACM0";
  4.  
  5.  
  6. echo ("<h1>Temperatura y humedad</h1>");
  7.  
  8.  
  9. echo ("<p>Conectando...");
  10.  
  11. $port = fopen($portAddress, 'w+');
  12.  
  13. if (!$port)
  14.  
  15. { echo "<br /> No se puede conectar con el puerto $portAddress";
  16.  
  17. }
  18.  
  19. else
  20.  
  21. { echo "<br />Conectado con exito al puerto $portAddress";
  22.  
  23. }
  24.  
  25. echo ("</p>");
  26.  
  27. fwrite($port, 'h','t');
  28.  
  29.  
  30. echo fgets($port);
  31.  
  32.  
  33. ?>
  34.  

La verdad es que me lío mucho con el tema de Arduino, y nose que cosas se pueden y no hacer con PHP con el código de Arduino. Si les llamo por variables por seperado podría resultar? Nose la verdad. Espero sus respuestas un saludo.
En línea

Regexp

Desconectado Desconectado

Mensajes: 22



Ver Perfil
Re: Mala lectura puerto USB ARUDINO vía PHP
« Respuesta #3 en: 9 Junio 2015, 03:30 am »

Hola gentica.

Os vengo a comentar que estoy trasteando con arduino y raspberry pi, y bueno, el caso es que tengo creado un archivo index.php con un código para que se conecte al puerto serial de arduino e imprima los datos.

La conexión es correcta, lo que los datos no salen bien, es decir, tengo que refrescar la página muchas veces para que salga correctamente: Humedad 35.00% Temperatura: 28 *C (por poneros un ejemplo)
Y lo que sale otras veces es nada, o a mitad, etc.

Alguien sabe como podría leer correctamente estas cadenas de caracteres y que PHP las mostrara bien?He pensado quizás haciendo con un array, pero claro, el código de arduino también es muy especial, y no estoy seguro de si funcionará si pongo los datos que recoge por separado.

Si alguien alguna vez ha hecho algo, o sabe de algún método por favor que me lo diga. Llevo bastante rato buscando por internet, probando diferentes "soluciones" si se pueden llamar así, pero no me sirven ninguna.

Un saludo.

EDITO: JUU enserio no sabe nadie? joer, pero esque nose como hacer que PHP muestre la lectura entera que recibe del puerto serial conectado a Arduino, llevo días intentando solucionarlo, por favor si alguien le ha pasado lo mismo o tiene idea de como hacerlo que porfavor me diga alguna manera. Un saludo.

No tengo mucha experiencia con arduino, no en este sentido. Pero mirando tu código es posible que te sea útil cambiar fgets por file_get_contents() para leer el "archivo" completo en lugar de una sola línea, sino, hacer un ciclo.. Dado que arduino seguirá imprimiendo en un loop infinito ¿no?

Espero te sea de ayuda, sino, un amigo en la universidad hizo algo por el estilo, también para una raspberry pi, pero en lugar de PHP usó python, lo que hace es twittear la temperatura, cada vez que llega a un punto crítico. Tiene el repositorio en github.


Edit

Quizá para resolver este problema te sirva que arduino lea, si existe determinada entrada (o si simplemente existe), imprima las últimas mediciones de temperatura. De manera que el PHP, le diga al arduino que imprima la última medición y le de un tiempo estipulado para hacer esto último. :rolleyes:

Acá encontré algo que puede ser útil, para usar fgets y fwrite. http://stackoverflow.com/questions/13114275/php-serial-port-data-return-from-arduino

Saludos
« Última modificación: 9 Junio 2015, 03:46 am por Regexp » En línea

No todo el que deambula está perdido
engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Mala lectura puerto USB ARUDINO vía PHP
« Respuesta #4 en: 9 Junio 2015, 05:37 am »

efectivamente como dice Regexp esto está mal...

por qué?
porque el protocolo http es un protocolo que abre, envía una cantidad de datos conocida y cierra. Debido a esto php solo envía datos al finalizar el script... así como el script se mantenga, el navegador esperará los datos y el script puede que termine porque se excedió su tiempo maximo de ejecución o porque el buffer de salida lleno el espacio de ram asignado... en ese caso enviará lo que tiene y un error...
 
a demás tienes un error en el uso de fwrite (sin contar que lo usas para nada)....

como puedes hacerlo?
por pasos, explico:

en el arduino debes leer en el serial lo que le enviará el php...

es decir... dejas lo que está fuera del setup y loop igual

Código
  1. float humedad;
  2. float temperatura;
  3. int recibido;
  4.  
  5. void setup() {
  6.  Serial.begin(9600);
  7.  dht.begin();
  8. }
  9.  
  10. void loop() {
  11.  
  12. //variable con el dato recibido
  13.  recibido = 0;//0 = no se recibió nada
  14.  
  15. //si hay info, leemos
  16.  if (Serial.available() > 0) {recibido = Serial.read();}
  17.  
  18.  /*
  19.     establecemos una tabla de valores para recibido para simplificar el proceso
  20.     1 = leer datos desde el sensor
  21.     2 = enviar datos por serial
  22.   */
  23.  
  24.  if(recibido==1){
  25.    humedad = dht.readHumidity();
  26.    temperatura = dht.readTemperature();
  27.    if (isnan(humedad ) || isnan(temperatura)) {  
  28.      Serial.println("error");
  29.    }else{
  30.      Serial.println("leido");
  31.    }
  32.  }
  33.  
  34.  if(recibido==2){
  35.    Serial.print(humedad);
  36.    Serial.print(";");//uso esto como separador
  37.    Serial.print(temperatura );
  38.    Serial.print(";");//uso esto como separador
  39.    Serial.println("fin");
  40.  }
  41. }
  42.  

ya tenemos la estructura, coloco las variables como globales para que no haya problema en el loop y para volver a leerlas (el valor viejo) de ser necesario

el php, asumiendo que te funcione bie (nunca lo he probado con arduino)

Código
  1. <?php
  2. $leer_sensor = 1;
  3. $recibir_datos = 2;
  4. $portAddress = "/dev/ttyACM0";
  5.  
  6. $port = fopen($portAddress, 'w+');
  7.  
  8. if (!$port){
  9.  echo "<br /> No se puede conectar con el puerto $portAddress";
  10. }else{
  11.  echo "<br />Conectado con exito al puerto $portAddress";
  12. }
  13. echo ("</p>");
  14.  
  15. //le digo al arduino que lea
  16. fwrite($port, $leer_sensor);
  17.  
  18. //si responde "leido" todo está bien, uso trim ara eliminar espacios y saltos de linea
  19. if(trim(fgets($port))=="leido"){
  20.  //el sensor fue leido correctamente
  21.  
  22.  //le digo al arduino que me envie los datos
  23.  fwrite($port, $recibir_datos);
  24.  //recibo los datos
  25.  $datos = trim(fgets($port));
  26.  
  27.  //separo los datos por ";" como fue planeado y queda separeado en 3 partes
  28.  $datos=explode(";",$datos);
  29.  
  30.  //si la tercera parte es "fin" todo fue bien
  31.  if($datos[2]=="fin"){
  32.    //muestro al usuario
  33.    echo "la humedad es de $datos[0]%";
  34.    echo "la temperatura es de $datos[1]°C";
  35.  }else{
  36.   //si no dijo "fin" algo fue mal
  37.    echo "error";
  38.  }
  39. }else{
  40.  //si no dijo "leido" no leyó bien los datos
  41.  echo "error de lectura"
  42. }
  43.  
  44. ?>

podrás entender que por la naturaleza de lo explicado arriba este php tendrá que se llamado cada vez para mostrar los datos... esto lo haces por medio de ajax con javascript
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Hurdano


Desconectado Desconectado

Mensajes: 322


Se que puedo cambiar el futuro, pero no el pasado


Ver Perfil WWW
Re: Mala lectura puerto USB ARUDINO vía PHP
« Respuesta #5 en: 11 Junio 2015, 14:52 pm »

Genial, gracias chicos por vuestras respuestas. NO me había fijado y comprendido las cosas de ese modo, este fin de semana que puedo estar en el lugar donde lo tengo seguiré vuestras indicaciones. Muchas gracias de verdad.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
una grabacion mala?
Software
Badcode 6 2,190 Último mensaje 29 Agosto 2003, 09:08 am
por Badcode
Mala señal
Materiales y equipos
JBellser 8 3,128 Último mensaje 23 Julio 2008, 21:56 pm
por KARR
foto lectura, y lectura veloz, scanning y otros metodos de lectura rapida....
Foro Libre
Kase 3 12,627 Último mensaje 4 Febrero 2014, 08:47 am
por camilo_
USB mala!
Hardware
Abbaidd 5 2,846 Último mensaje 10 Marzo 2011, 20:41 pm
por simorg
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines