I2C entre Arduino et raspberry

Bonjour à tous,

Voila j'essaie de créé une communication I2C entre mon arduino et ma raspberry pi pour ensuite stocker les valeurs des capteurs en BDD. Mon problème est que certaine fois la transmission ne se termine pas et recommence du début. une photo et un code seront surement plus parlant.les voici

#include <Wire.h>

char data[59]= {};// mon tableau à envoyer
int i =0;
int X=0;
String donnees;
int humsol=50;
int humair=20;
int tempext=25;
int tempint=18;
int niveau=1;
int lum=1000;

void setup()
{
  Serial.begin(9600);
  Wire.begin(0x12);        // addresse 0x12          
  Wire.onRequest(sender);
}

void loop()
{
  donnees="";                //je vide le String donnees
  donnees="tempext";
  donnees +="=";
  donnees +=String(tempext);
  donnees += ";";   // et je le remplis 
  
  donnees +="tempint";
  donnees +="=";
  donnees +=String(tempint);
  donnees += ";"; 
  
  donnees +="humsol";
  donnees +="=";
  donnees +=String(humsol);
  donnees += ";"; 
  
  donnees +="humair";
  donnees +="=";
  donnees +=String(humair);
  donnees += ";"; 
  
  donnees +="lum";
  donnees +="=";
  donnees +=String(lum);
  donnees += ";"; 
  
  donnees +="niveau";
  donnees +="=";
  donnees +=String(niveau);
  
  //Serial.println(donnees);   // cela me donne 1 fois string = "50 20"
  for (int i=donnees.length()+1;i<60;i++){
  donnees +=" ";
  }
  
  
  donnees.toCharArray(data,60); // je le tranforme en tableau de char
  //Serial.println(data);      // cela me donne 1 fois char = "50 20"
  delay(100);
}

void sender()
{
  Serial.print(data[X]);
  
  Wire.write(data[X]);   // envoi du tableau sur 59 byte
  //Serial.println(X);
  X++;
  if(X>=59){ 
    X=0;
    Serial.println("");
  }
}

Le programme chargé de la réception m'affiche ce même décalage. Si vous pouviez m'aider, ou simplement m'assurer que cela ne viens pas du code arduino mais bien du python.
Je reste à l'écoute pour toute supposition ou si vous avez besoin du code Python. Je continue les recherche de mon côté.

Merci d'avance.

bonjour, quelle version de l'ide ?

Bonjour,

Arduino 1.0.5
Faudrait-il faire une Màj ?

Pas forcement, juste que j'ai pas réussi a faire fonctionner ton code sur l'ide 1.6.0

Je viens juste de l'essayer sur arduino 1.6.0, il ce compile sans problème. je ne suis pas chez moi, je ne peux donc pas le tester sur la carte je le ferai mardi.

Bonjour,
de retour chez moi,sur la version 1.6.0 le programme se compile/transfère bien. Mais ne fonctionne pas. La carte Arduino n'est pas détecté par la Raspberry. La bibliothèque a t'elle été changée lors de la MàJ, si oui que dois-je faire?

Même l'exemple "slave_sender" ne fonctionne pas ?
Un problème de connexion ?
quel version de l'arduino ?

coté arduino

#include <Wire.h>

String donnees;
int index=0;

void setup()
{
  Wire.begin(0x12); 
  Wire.onRequest(requestEvent);
  Wire.onReceive(receiveEvent);
  Serial.begin(9600);
  donnees="";
  }

void loop()
{
  
  delay(1000);
}

void receiveEvent(int bytesReceived)
{
  Serial.println("receiveEvent");
  Serial.println(bytesReceived);
  while(Wire.available()){
    int n=Wire.read();
    Serial.print(n);
    if (n==15 && bytesReceived==1){
      donnees="Hello all !";
      index=0;
    }    
    Serial.print(" ");
  }
  Serial.println("");
}

void requestEvent()
{
  Serial.println("requestEvent");
  if (index >= donnees.length())
  {
    Wire.write(0);
  }
  else
  {
    Wire.write(donnees[index]);
  }
  index++;
}

coté raspy

Je teste ça bientôt :slight_smile: Je te tiens au courant

Bonjour,
l'exemple semble fonctionner.
La différence entre l'exemple et mon code est qu'il utilise une chaîne de caractères et moi un tableau de caractères. mais cela ne résout pas mon problème de départ.
sinon je pense que je vais demander au script python de vérifier l’intégrité de la trame.

Edit: je viens de refaire mon code avec une chaîne de caractères, cela règle tout les problèmes :slight_smile:
Merci a toi moxys :slight_smile: