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)