esp32 avec 2 nunchuck

Bonjour, je souhaite récupéré les valeurs de deux nunchucks i2C en même temps sur une wemos mini ttgo esp32. Je n'arrive pas a récupéré les valeurs de un nunchucks i2C. Est ce vous avez une solution s'il vous plait. Je sais pas si mon esp32 est compatible avec les I2C.

En général un composant I2C a une interface de commande (description des échanges entre maître et esclave).
Sans aucune indication à propos du nunchuck utilisé, que dire ?

C'est un i2C Wiichuck Nunchuck

Cette bibliothèque est faite pour ça,mais je ne sais pas si elle est compatible de l'esp32. Le plus simple c'est d'essayer...

ok merci je vais essayé

http://www.lilygo.cn/prod_view.aspx?TypeId=50033&Id=1258&FId=t3:50033:3

SDA SCL ont l'air d'occuper les pins 21 22.
Ensuite comme tu ne dis rien à propos de la librairie et du code utilisés, :confused:

J’avais testé ce code :
#include <WiiChuck.h>
#include <ESP32Servo.h>

Accessory nunchuck1;
const int anal=33;
const int anal2=32;
Servo one;
Servo two;
Servo three;

void setup() {
delay(1000);
Serial.begin(115200);
nunchuck1.begin();

Serial.println(“Loading controller…”);

one.attach(35);
two.attach(27);
three.attach(25);

}

void loop() {

nunchuck1.readData(); // Read inputs and update maps
int Servo1Val = map(nunchuck1.values[0],0,255,0,180);
int Servo2Val = map( nunchuck1.values[10]>0?
0:// Upper button pressed
(nunchuck1.values[11]>0?
255:// Lower button pressed
128)//neither pressed
,0,255,0,180);
int Servo3Val = map(nunchuck1.values[1],0,255,0,130);// z button
Servo3Val=Servo3Val+27;
if (Servo1Val>=100){
Servo1Val=Servo1Val+21;

}
else if (Servo1Val<=85){
Servo1Val=Servo1Val-18;

}

Serial.println(Servo3Val);
if (Servo3Val>=100){
Servo3Val=Servo3Val+41;
Serial.print(“Changement :”);
Serial.println(Servo3Val);

}
else if (Servo3Val<=85){
Servo3Val=Servo3Val-42;
Serial.print(“Changement :”);
Serial.println(Servo3Val);

}

one.write(Servo1Val);
two.write(Servo2Val);
three.write(Servo3Val);

}

Mais il me renvoyé comme réponse:

rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:1216
ho 0 tail 12 room 4
load:0x40078000,len:9720
ho 0 tail 12 room 4
load:0x40080400,len:6352
entry 0x400806b8

I2C error code _burstRead error: 2 repeted: 1

I2C error code _burstRead error: 2 repeted: 2

I2C error code _burstRead error: 2 repeted: 3

I2C error code _burstRead error: 2 repeted: 4

I2C error code _burstRead error: 2 repeted: 5

J’utilise la bibliothèque WiiChuck et ESP32Servo

Il serait bien de lire ceci :

Excusé moi je débute dans ce forum donc je ne sais pas encore comment ça fonctionne

rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:1216
ho 0 tail 12 room 4
load:0x40078000,len:9720
ho 0 tail 12 room 4
load:0x40080400,len:6352
entry 0x400806b8

I2C error code _burstRead error: 2 repeted: 1

I2C error code _burstRead error: 2 repeted: 2

I2C error code _burstRead error: 2 repeted: 3

I2C error code _burstRead error: 2 repeted: 4

I2C error code _burstRead error: 2 repeted: 5

Le code:

#include <WiiChuck.h>
#include <ESP32Servo.h>

Accessory nunchuck1;

Servo one;
Servo two;
Servo three;

void setup() {
 delay(1000);
 Serial.begin(115200);
  nunchuck1.begin();
  
 Serial.println("Loading controller...");
 


 one.attach(35);
 two.attach(27);
 three.attach(25);

}

void loop() {
  
 
 nunchuck1.readData();    // Read inputs and update maps
 int Servo1Val = map(nunchuck1.values[0],0,255,0,180);
 int Servo2Val = map( nunchuck1.values[10]>0?
 0:// Upper button pressed
 (nunchuck1.values[11]>0?
 255:// Lower button pressed
 128)//neither pressed
 ,0,255,0,180);
 int Servo3Val = map(nunchuck1.values[1],0,255,0,130);// z button
  Servo3Val=Servo3Val+27;
  if (Servo1Val>=100){
    Servo1Val=Servo1Val+21;
    
  }
  else if (Servo1Val<=85){
    Servo1Val=Servo1Val-18;
    
  }

  Serial.println(Servo3Val);
  if (Servo3Val>=100){
    Servo3Val=Servo3Val+41;
    Serial.print("Changement :");
    Serial.println(Servo3Val);
    
  }
  else if (Servo3Val<=85){
    Servo3Val=Servo3Val-42;
    Serial.print("Changement :");
    Serial.println(Servo3Val);
    
  }
 
 one.write(Servo1Val);
 two.write(Servo2Val);
 three.write(Servo3Val);
 
  

}

J'ai essayé la bibliothèque WiiChuck mais elle ne fonctionne pas avec un esp32

thomas456:
J'ai essayé la bibliothèque WiiChuck mais elle ne fonctionne pas avec un esp32

En regardant l'exemple WiiServoMap, je suis presque sûr du contraire.

Essaye cet exemple sans le modifier, et dis nous ce qui s'affiche :

  • Dans la fenêtre de compilation
  • Dans la console série

Pour l'I2C sur ESP32, les pins par défaut sont bien:

Wire.begin(I2C_SDA, I2C_SCL);

Sa fonctionne !!! :slight_smile: :slight_smile:

merci merci,je m'étais trompé dans les branchement donc pour changer le SDA et le SCL il faut les déclaré avant avec les pins qu'on désir exemple:

SDA : 32
SCL : 33

après il faut faire :

Wire.begin(32 , 33);

C’est un peu plus compliqué car tu utilises une bibliothèque qui fait elle-même l’appel au Wire.begin
On trouve la commande dans le fichier Accessory.cpp :

#if defined(ARDUINO_ARCH_ESP32)
Wire.begin(SDA,SCL,10000);

Donc si tu veux modifier les pins, je pense que tu dois ajouter des define avant d’inclure la bibliothèque WiiChuck, comme ceci

#define SDA 32
#define SCL 31
#include <WiiChuck.h>

A tester, mais si ça marche comme ça, continue sans rien changer, c’est plus sûr…

ça marche pas

Est ce que il faut déclaré la bibliothèque Wire.h

Pourquoi ne pas utiliser les pins 21 22 ?

Car je voudrais connecter deux I2C wiiChuck et récupéré les valeurs

Attendu que la librairie ne fait qu'un seul appel a Wire.begin(SDA,SCL,10000) ça va être difficile.