Bonjour à tous !
J'essaie d'envoyer les données d'un capteur avec un module XBEE S1 à un autre XBEE avec une Arduino Uno et un Shield Seeds Studio V2.2 (avec les jumpers réglés sur 0 pour RX et 1 pour TX).
Doc du shield (version V2.0 du Shield)
Le capteur que j'utilise est l'IMU BNO055 que j'ai branché sur les pins A4 et A5 pour l'I2C.
Doc de la centrale inertielle
Le module XBEE est relié à mon PC et je lis les trames qu'il reçoit grâce au logiciel XCTU.
Voici le code que j'applique, j'utilise la librarie XBEE Arduino.
#include <Wire.h> //library I2C
#include <Adafruit_Sensor.h>
#include <Adafruit_BNO055.h>
#include <utility/imumaths.h>
#include <XBee.h>
Adafruit_BNO055 bno = Adafruit_BNO055(); //sensor declaration
/* Sensor */
double theta; //axis X
double phi; //axis Y
double psi; //axis Z
/* Communication */
XBee xbee = XBee();
uint8_t sent[40]; //where i store my data to be sent
char hex[40]="Tilt : "; //to send
String convert=""; //for conversion to send
int i;
void setup() {
Serial.begin(9600); //opening serial with 9600 baud
/* Sensor Initialisation */
if(!bno.begin())
{
Serial.println("Ooops, no BNO055 detected ... Check your wiring or I2C ADDR!");
while(1);
}
bno.setExtCrystalUse(true);
}
void loop() {
/* EULER DATA Vector */
imu::Vector<3> euler = bno.getVector(Adafruit_BNO055::VECTOR_EULER);
/* Display Angular Position */
theta= euler.x();
phi=euler.y();
psi=euler.z();
Serial.print("Angles");
Serial.print("\t\t");
Serial.print(euler.x());
Serial.print("\t\t");
Serial.print(euler.y());
Serial.print("\t\t");
Serial.println(euler.z());
/* Data Conversion in String */
convert="";
convert.concat(String(theta));
convert.concat(" "); //space
convert.concat(String(phi));
convert.concat(" ");
convert.concat(String(psi));
convert.concat(" ");
/*Setting frame */
char val[convert.length()];
convert.toCharArray(val,convert.length());
Serial.print("Valeur convertie : ");
Serial.println(convert);
for (int i=0;i<32;i++){
Serial.println(val[i]);
hex[8+i]=val[i];
sent[8+i]="";
}
for (int i=0; i<40;i++){
sent[i]=hex[i];
//Serial.println(sent[i]);
}
/*Sending frame */
Tx16Request tx = Tx16Request(0x1234, sent, sizeof(sent));
xbee.send(tx);
}
Si j'arrive à obtenir le début de mes data, impossible d'avoir les données complètes.
Par exemple voici ce qui s'affiche sur le lecteur de XCTU :
En Ascii : Tilt : 356.06 5.31
Et en HEX : 54 69 6C 74 20 3A 20 00 33 35 36 2E 30 36 20 35 2E 33 31 20 86 86 86 86 86 86 86 86 86 86 86 86 86 86 86 86 86 86 86 86
Alors que je devrais avoir :
Tilt : 356.06 5.31 -2.01
Il me manque toujours la dernière mesure, alors qu'elle est bien acquise par le capteur et bien stockée dans mon tableau "val".
Je pensais que j'avais un problème au niveau de la taille des tableaux que j'envoie mais après plusieurs essais, le problème ne semble pas venir de là.
Avez-vous des pistes ? Y a-t-il des contre-indications à utiliser XBEE et l'I2C en parallèle ?