Go Down

Topic: Arduino yun con placa arduino due 32 bits (Read 780 times) previous topic - next topic

mojisi

Hola a todos,

tengo una placa arduino yun en la que estoy realizando un proyecto y necesito ampliar el número de entradas y salidas.

He optado por comprar una placa Arduino Due con ARM Cortex M3 32bit.

Ahora el problema que tengo que no se como aprovechar el arduino due con el yun, necesitaria ayuda para decidir la mejor manera de seguir con mi proyecto.

Me surgen algunas dudas:

1.  y no se como enviar y recibir datos desde el arduino due a mi servidor web, ahora utilizo el API REST de yun (ajax,html,php)

2. y si estos datos se pueden manejar a través de arduino yun.

Un saludo a  todos.

surbyte

Yo no me complicaría pero tienes 3 alternativas por no citar mas.

1. Serial: el DUE tiene 4 puertos y el YUN tiene 2 si mal recuerdo. Lo conectas a 115k2 y tienes un enlace simple entre ambos.

2. I2C configuración maestro - esclavo.

3. SPI : configuración maestro - esclavo

Esas son las opciones directas usando lo que esta disponible en ambos Arduinos.

mojisi

#2
Aug 19, 2017, 12:36 pm Last Edit: Aug 20, 2017, 02:33 pm by mojisi
Voy a hacer unas pruebas con el protocolo I2C, me parece a mi que es mas robusto, aunque soy novato para decidir, tengo que elegir uno.

Ahora una vez elegido el protocolo I2C, no se cual de los dos arduinos poner como maestro.

En el arduino yun tengo hecho ahora casi todo el código pero tengo el problema que este me ocupa ya el 81 % del espacio de almacenamiento, por eso también decidí adquirir un arduino due aparte de por el mayor número de entradas y salidas,

y el arduino due 32 bits no me interactua con el servidor web, pero a favor, tiene más velocidad y capacidad.

¿Cual pondríais vosotros como maestro y cual como esclavo?

surbyte

También el YUN usa un ARM asi que no tiene nada que envidiarle al DUE, pero de todos modos lo que hagas en el DUE tendras que comunicarlo al YUN asi que da igual.

Divide tareas en todo caso, o permite que el YUN atienda los requerimientos de los clietnes Web y cumpla con algunas tareas que no lo demoren demasiado y el resto que lo haga el DUE.


mojisi

Gracias por tu respuesta.

La comunicación entre los dos arduinos con I2C funciona bien con ejemplos de paso de un caracter, cuando tenga que pasar variables o frases, uff, ya veremos,

Intentaré equilibrar el código entre los dos arduinos.

surbyte

#5
Aug 23, 2017, 02:10 pm Last Edit: Aug 23, 2017, 02:15 pm by surbyte
Simplifica el pasaje de información creando una estructura con todas las variables que intercambies y en solo un comando tienes todo transferido.

Ejemplo lado DUE:

Code: [Select]
volatile struct DataSD {  // olvide poner volatile ya que requestEvent lo requiere
    int errorstatus, alt, sats;
    float lat, lon, temp_int, temp_ext;
};



void requestEvent() {
 
    struct DataSD data;

    data.errorstatus = error;
    data.gps_alt      = alt;
    data.sats          = sats;
    data.lat            = lat;
    data.lon           = long;
    data.temp_int   = t1;
    data.temp_ext  = t2;

    uint8_t *ptr= (uint8_t *)&data;
    Wire.write(ptr,sizeof(data));

}


En el YUN (Master)

Code: [Select]

    struct DataSD dato_a_recibir;

    Wire.requestFrom(2,sizeof(dato_a_recibir));


   uint8_t *ptr=(uint8_t*)&dato_a_recibir;

   while (Wire.available()) {
            *ptr=Wire.read();
}



Adapte un ejemplo que venía bien para explicarte el punto.
El único truco esta en usar el puntero.

EDITO : prueba el código del YUN a ver si funciona, sino tengo una idea de como mejorarlo que lo pongo a continuacion.... por si no lee todos los bytes

Code: [Select]
int numbytes = sizeof( dato_a_recibir);
int n = Wire.requestFrom(2, numbytes);
if( n = numbytes) {  // chequeo si es la misma cantidad de bytes recibidos
  readBytes( (char *) &data_to_receive, n);
}

Go Up