==== UTILISER UNE CONNECTION I2C AVEC LE CUBIETRUCK ==== === Installer les ports GPIO === Pour utiliser les pins 25 (PB19) et 23 (PB18) du port CN8 du cubietruck * la pin 25 étant la ligne SDA du bus I2C * la pin 23 étant la ligne SDK du bus I2C * on pourra utiliser la pin 13 du port CN8 comme masse commune *aller dans le répertoire /boot *décompresser le fichier script.bin avec la commande suivante : <code># bin2fex script.bin script.fex</code> *éditer le fichier script.fex et modifier <code>[twi1_para] twi1_used = 0 twi1_scl = port:PB18<2><default><default><default> twi1_sda = port:PB19<2><default><default><default></code> par <code>[twi1_para] twi1_used = 1 twi1_scl = port:PB18<2><default><default><default> twi1_sda = port:PB19<2><default><default><default></code> *recompiler le fichier script.fex : <code>fex2bin script.fex script.bin</code> *rebooter le Cubietruck. === Exemple de Programmation I2C en python === il faut installer la librairie python smbus sur la Cubietruck == connection Cubietruck-Arduino (Cubietruck étant le maitre) == *connecter la broche PB19 du Cubie à la broche A4 de l'Arduino *connecter la broche PB18 du Cubie à la broche A5 de l'arduino *connecter un broche GROUND du Cubie à la broche GND de l'arduino Pour l'Arduino j'ai utilisé un montage avec un écran LCD 20X4 Programme à charger dans l'arduino : <code>#include <Wire.h> #include <LiquidCrystal.h> #include <string.h> #include <ctype.h> const int RS = 12; const int E = 11; const int D4 = 5; const int D5 = 4; const int D6 = 3; const int D7 = 2; LiquidCrystal lcd(RS,E,D4,D5,D6,D7); #define SLAVE_ADDRESS 0x12 int dataReceived = 0; void setup() { Serial.begin(9600); Wire.begin(SLAVE_ADDRESS); Wire.onReceive(receiveData); Wire.onRequest(sendData); lcd.begin(20,4); // 16 caracteres sur 2 colonnes delay(10); lcd.print ("LCD OK"); delay(2000); delay(10); Serial.println("depart"); } void loop() { delay(200); } void receiveData(int byteCount){ //char chaine[100]; char c[byteCount+1]; int i = 0; Serial.print("Nbre donnees recues : "); Serial.println(byteCount); int z = Wire.read(); while (Wire.available()){ c[i] = Wire.read(); i++; } c[i]='\0'; Serial.println(z); Serial.print("->"); for (int a = 0;a<i;a++){ Serial.print(c[a]); } Serial.println("<-"); lcd.setCursor(0,1); lcd.print(c); } void sendData(){ int envoi = dataReceived + 1; Wire.write(envoi); } </code> programme d'essais en Python sur le Cubietruck (pour pouvoir utiliser les ports GPIO il faut avoir les droits root) : <code> #!/usr/bin/python #-*-coding: utf8 -*- import smbus import time bus = smbus.SMBus(1) address = 0x12 print("/////////////////") var=[ord(z) for z in "ceci est un test"] bus.write_i2c_block_data(address,0x00,var) </code>