Pour utiliser les pins 25 (PB19) et 23 (PB18) du port CN8 du cubietruck
# bin2fex script.bin script.fex
[twi1_para] twi1_used = 0 twi1_scl = port:PB18<2><default><default><default> twi1_sda = port:PB19<2><default><default><default>
par
[twi1_para] twi1_used = 1 twi1_scl = port:PB18<2><default><default><default> twi1_sda = port:PB19<2><default><default><default>
fex2bin script.fex script.bin
il faut installer la librairie python smbus sur la Cubietruck
Pour l'Arduino j'ai utilisé un montage avec un écran LCD 20×4 Programme à charger dans l'arduino :
#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); }
programme d'essais en Python sur le Cubietruck (pour pouvoir utiliser les ports GPIO il faut avoir les droits root) :
#!/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)