Go Down

Topic: I2C entre Arduino et raspberry (Read 1 time) previous topic - next topic

bearcorrupted

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
Code: [Select]
#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. 

moxys

bonjour, quelle version de l'ide ?

bearcorrupted

Bonjour,

Arduino 1.0.5
Faudrait-il faire une Màj ?

moxys

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

bearcorrupted

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.

bearcorrupted

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? 

moxys

#6
Feb 17, 2015, 06:36 pm Last Edit: Feb 17, 2015, 06:44 pm by moxys
Même l'exemple "slave_sender" ne fonctionne pas ?
Un problème de connexion ?
quel version de l'arduino ?

moxys

#7
Feb 18, 2015, 12:04 am Last Edit: Feb 18, 2015, 02:51 pm by moxys
coté arduino

Code: [Select]
#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

http://pastebin.com/SJyFd4kh

bearcorrupted

#8
Feb 18, 2015, 12:11 am Last Edit: Feb 18, 2015, 12:11 am by bearcorrupted
Je teste ça bientôt :) Je te tiens au courant

bearcorrupted

#9
Feb 19, 2015, 03:10 pm Last Edit: Feb 19, 2015, 03:22 pm by bearcorrupted
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 :)
Merci a toi moxys :)

Go Up