🧬 Communication i2c entre une Micro:bit et une Arduino

Bonjour, vous allez bien ?
J'aimerais envoyer un nombre depuis l'Arduino vers la Micro:bit en utilisant le bus i2c.
Le nombre serait compris entre 0 et 255 (donc un byte). J'ai soudé les broches sda et scl de la Micro:bit sur l'Arduino et j'ai déjà essayé des programme mais rien ne marche pour l'instant.
Makecode (blocs Micro:bit) :
image
Code Arduino (Pour une Arduino R4) :

#include <Wire.h>
byte message = 33; (exemple)
void setup() 
{
  Wire.begin();
}
void loop()
{
  Wire.beginTransmission(44);
  Wire.write(message);
  Wire.endTransmission();
}

Merci d'avance de votre réponse !
Cdt pattenron

Bonjour pattenron

Oui, bien, merci :wink:

Je ne connais pas ces cartes Micro:bit mais est ce que le bus i2C ne nécessite pas des résistances de pullup
Autrement, avec le scanner i2c, vois-tu l'adresse de la carte Micro:bit?

Cordialement
jpbbricole

vous avez oublié sans doute de connecter aussi les GND

Cet à dire ?

en plus de SCL et SDA il faut mettre un fil entre le GND de l'arduino et le GND du micro:bit pour qu'ils soient d'accord sur la référence de tension

Ok je vais essayer

pas la peine - le micro:bit est équipé de résistances de pull-up internes de l'ordre de quelques kilo-ohms (4.7KΩ) pour les lignes de bus I2C (SCL et SDA).

Je ne trouve aucun périphérque i2c, c'est bizarre pourtant ma Micro:bit est bien connectée aux broches SDA et SCL. Et elle est bien aimetée.

et aussi:

Avez vous connecté les GND ?

pour trouver un périphérique I2C, il faut que l'un des deux soit configuré en "esclave" et le code de détection tourne sur l'autre

Bonjour

:exclamation:Attention : la carte Micro:Bit peut très mal supporter des tensions de 5V sur ses broches I2C

Au delà de 3,6V le pire est possible

La liaison directe est sans danger si la 'carte Arduino' fonctionne sous 3,3V ou si un adaptateur de niveaux logiques pour I2C est inséré

ce code va faire la "mitraillette" .. il faut laisser un peu de temps pour que l'autre côté réagisse...

void loop()
{
  Wire.beginTransmission(44);
  Wire.write(message);
  Wire.endTransmission();
  delay(1000); // on bloque pour envoyer 1 fois par seconde
}

bon point

dans ce tuto

il montrent ce schéma

mais en dessous ils disent bien

➜ vous risquez d'endommager votre micro:bit si ce n'est pas déjà fait...

on trouve des adaptateur de tension

image

l'image montre une carte Micro::Bit associée à une carte d'extension de Keyes Studio qui comporte peut être une adaptation de niveaux de tensions pour faciliter l'interconnection avec les cartes Arduino 'classiques' image

La carte Micro::Bit n'en possède pas

Oui bah pour ça pas de problême vu que la micro:bit est alimentée par l'Arduino en 3.3V.

Ah merde du coup je ne peux rien faire sans shield avec adaptation ?

D'une part cette pin 3.3V donne-t-elle assez de courant pour alimenter la micro:bit ? Et d'autre part, il faut le GND quand même

pas du tout , le problème subsiste même si la carte Micro::Bit est alimentée en 3,3V par la 'carte Arduino'
tu lui demandes d'encaisser 5v sur SDA et SCL :hot_face: ça passe ou ça casse.....

sauf bien entendu si la carte ARduino est une Pro MIni 8MHZ 3V3, ou autre carte fonctionnant sous 3,3V

aaaahhhhhh :sweat_smile: :sweat_smile: :sweat_smile: :sweat_smile: :sweat_smile: :sweat_smile: :sweat_smile:

Pas certain, les bus I2C est en collecteur ouvert et les pullups sont sur la micro:bit, donc on peut supposer qu'ils sont tirés au 3.3V. Par contre il n'est pas certain que l'Arduino voit des niveaux corrects.
Ceci dit, il serait quand même plus prudent d'avoir un adaptateur de niveaux.