ESP32 I²C andere CPIO, finde den Fehler nicht

Hallo erstmal.....,

sitz gerad an einem Projekt um Cocktails zu mixen und benötige am ESP32Wroom32E die Pin´s 21 und 22. daher soll I²C auf 14 15 umziehen. Das ist Fehler 1.

Das 2. Problem ist das vom MCP23017 nur GPIO A ansteuern lässt nicht B.



#include <BluetoothSerial.h>
#include <Wire.h>
#include <Adafruit_MCP23X17.h>


BluetoothSerial SerialBT;


int CL_time = 500; // Delay für ein cl Dosierung
int Zutatenzahl_1 = 16; // Anzahl der verwendetet Zutaten für Inkrementenzähler
int Zutatenzahl_2 = 16; // Anzahl der verwendetet Zutaten für Inkrementenzähler
int breaktime = 1000; // Pausenzeit zwischen den einzelnen Pumpenvorgängen
int state = 0;

#define I2C_SDA 14
#define I2C_SCL 15

TwoWire I2C = TwoWire(0);
Adafruit_MCP23X17 mcp0;


#define MCP23017_I2C_addr0 0x20  // A0=GND, A1=GND, A2=GND 




//Deklarieren der MPC Ausgänge
int Kokossirup = 0;
int Kaluha = 1;
int Zuckersirup = 2;
int Malibu = 3;
int Limettensaft = 4;
int Campari = 5;
int Martini = 6;
int Soda = 7;
int Grenadine = 8;
int Apfelsaft = 9;
int Aperol = 10;
int Sahne = 11;
int Bananensaft = 12;
int Grapefruitsaft = 13;
int Mandelsirup = 14;
int Maracujasaft = 15;
// für den MCP musst du die Zutaten und Ausgänge hier deklarieren !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!



//Legt die Ausgangspins für die jeweilige Zutat fest
const int zutatenPins[32] = {
  2,   // Rum_braun
  4,   // Rum
  12,  // Tequila
  13,  // Vodka
  16,  // Gin
  17,  // Cachaca
  18,  // Bananenlikör
  19,  // Ananassaft
  20,  // Kirschsaft
  21,  // Cola
  23,  // Tonic_Water
  25,  // Orangensaft
  26,  // Cointreau
  27,  // Cranberry-Saft
  32,  // Zitronensaft
  33,  // Blue Curacao
  Kokossirup,  
  Kaluha,
  Zuckersirup,
  Malibu,
  Limettensaft,
  Campari,
  Martini,
  Soda,
  Grenadine,
  Apfelsaft,
  Aperol,
  Sahne,
  Bananensaft,
  Grapefruitsaft,
  Mandelsirup,
  Maracujasaft,                                      // Ab hier musst du mit namen arbeiten die du oben deklarierst!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
};


//-------------------------------------------Setup



void setup() {

  Serial.begin(115200);
  Serial.println(F("MCP23017 test"));
  I2C.begin(I2C_SDA, I2C_SCL, 100000);

  SerialBT.begin("ESP32test"); //Name des ESP32
  Serial.println("Der ESP32 ist bereit. Verbinde dich nun über Bluetooth.");


if (!mcp0.begin_I2C(MCP23017_I2C_addr0)) {
    Serial.println("ErrorMCP.");
    while (1);
  } 


}


//-------------------------------------------Loop----------------------------------------------
void loop() {

if (SerialBT.available()  > 0) {
    state = SerialBT.read();
    SerialBT.println(state);
  }





if (state == 'A') {
    Serial.println("Juhu");
    //      (1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6)
    Cocktail(8,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,8,1,5,9,1,3,8,1,5,1,8);}






}
//------------------------------------------- ENDE LOOP -------------------------------------



void Cocktail(int cl01, int cl02, int cl03, int cl04,
              int cl05, int cl06, int cl07, int cl08,
              int cl09, int cl10, int cl11, int cl12,
              int cl13, int cl14, int cl15, int cl16,
              int cl17, int cl18, int cl19, int cl20,
              int cl21, int cl22, int cl23, int cl24,
              int cl25, int cl26, int cl27, int cl28,
              int cl29, int cl30, int cl31, int cl32) {

    //Erstellt ein Array für die Dosierung, nur noch die Angabe in cl ist nötig
    int clArray1[16] = {cl01, cl02, cl03, cl04, cl05, cl06, cl07, cl08, cl09, cl10, cl11, cl12, cl13, cl14, cl15, cl16};
    int clArray2[16] = {cl17, cl18, cl19, cl20, cl21, cl22, cl23, cl24, cl25, cl26, cl27, cl28, cl29, cl30, cl31, cl32};

    //Liest die einzelnen Stellen aus und befüllt dann entsprechend der Menge
      for (int i = 0; i < Zutatenzahl_1; i++) {
        if (clArray1[i] > 0) {
          int pin = zutatenPins[i];
          pinMode(pin, OUTPUT);
          digitalWrite(pin,HIGH);
          delay(clArray1[i]*CL_time);
          digitalWrite(pin,LOW);
          delay(breaktime);
          }
      }
      for (int i = 0; i < Zutatenzahl_2; i++) {
        if (clArray2[i] > 0) {
          int pin = zutatenPins[i];
          mcp0.pinMode(pin, OUTPUT);
          mcp0.digitalWrite(pin,HIGH);
          delay(clArray2[i]*CL_time);
          mcp0.digitalWrite(pin,LOW);
          delay(breaktime);
          }
      }
  
}

Kannst du das bitte etwas genauer beschreiben.
So, dass es alle verstehen.

Standart Pin für I²C SDA ist 21 und für SCL ist 22, diese sollen auf Pin 14 für SDA und 15 für SDC. Mit Standart Pin´s ohne Änderung auf die anderen Pin´s finde ich den MCP, wenn ich es ändere nicht mehr. Es kommt Fehler "Error MCP".

Mit I2C sollte kein Problem sein.
Was ist GPIO A und GPIO B?

Der MCP23017 hat GPIO A von 0-7 und B von 8-15 die ich deklariere aber nur 8 geschaltet werden. Dieser Fehler ist aber gerade nicht relevant da ich keine Verbindung über I²C bekomme.

GPIO15 ist ein Strapping Pin, da solltest du besser einen anderen Pin wählen.
Hier darfst du das nachlesen.

Kann ich welche verwenden die mit dem internem SPI-Flash verbunden sind?

Nein, wie soll das gehen ?
Damit kommt das Flash aus dem Takt.

Und warum geht GPIO21 und 22 nicht. Da sehe ich in deinem Sketch nichts.

Maximale Ausgänge :joy: 16 vom ESP und 16 vom MCP

Muss doch noch einen 2. MCP23017 einsetzen.

Ja....und, wo ist da dein Problem ?

I2C ist ein Bus und da können mehrere Clients parallel betrieben werden.
Du musst nur die richtige Adresse des Client ansprechen.

Und das heißt genau ?

Was für ESP Ist das?

Da sollte der TO wohl endlich mal ganze, verständliche Sätze schreiben, damit man auch alles versteht.

So ist das nur ein ewiges rumgeeier und kann noch viele Posts so weiter gehen.

ich habe 16 Ausgänge um Pumpen zu schalten am ESP

ESP32Wroom32E

moment ich versuch etwas nicht das ich einen Denkfehler hab.

DAS sieht aus wie vom ChatGPT

Poste doch mal einen Link vom Board, damit wir sehen können, was das genau ist.

_images/esp32_pinout.jpg

Sicher ?
Das kann auch dies hier sein. Diese Raterei ist doch blöd.

Fakt ist, wer ChatGPT nutzt kennt seine Hardware und die Datenblätter nicht.

Nix ChatGPT, bin über 50 und hab mit AI nix am Hut.