Adafruit VS1053 MP3 Shield: .startPlayingFile funktioniert nicht

Hallo zusammen,

ich bastel gerade an meinem ersten größeren Arduino Projekt, mit MP3 Shield herum. Ich habe mir dazu neben einem Arduino UNO (Link) das Adafruit MP3 Shield VS1053 (Link) angeschafft. Es gibt bei diesem Shield grundsätzlich zwei Möglichkeiten einen Song abzuspielen, beide lassen sich über einen Beispiel Sketch aus der Library laden und ausprobieren (Code am Ende):

  1. musicPlayer.playFullFile("track001.mp3");
    Damit wird eine Datei vollständig abgespielt und während der Wiedergabe ist keine Aktion möglich.

  2. musicPlayer.startPlayingFile("track001.mp3");
    Damit wird eine Datei "im Hintergrund" abgespielt, ich kann z.B. über die Konsole Befehle zum pausieren oder stoppen erteilen.

Ich habe den o.a. Beispiel Sketch (player_simple) geladen und Möglichkeit 1 funktioniert einwandfrei, Möglichkeit 2 nicht, es wird einfach kein Sound wiedergegeben.

Ich hatte zwischenzeitlich ein Poti zur Lautstärkeregelung (Code siehe unten) angeschlossen, sobald ich dieses bewegt habe hat die Wiedergabe kurzfristig gestartet, ist dann aber auch wieder abgebrochen. Ich vermute das es hier in irgendeiner Art und Weise zu Problemen mit dem Interrupt kommt, der ist auf Pin #3 festgelegt.

Ich habe leider kaum Erfahrung und komme hier einfach nicht weiter, vielleicht kann mir ja jemand von Euch helfen. Codefragmente habe ich Euch unten angefügt.

Danke und Viele Grüße,
Michael

Code des Beispiel Sketch:

/*************************************************** 
  This is an example for the Adafruit VS1053 Codec Breakout

  Designed specifically to work with the Adafruit VS1053 Codec Breakout 
  ----> https://www.adafruit.com/products/1381

  Adafruit invests time and resources providing this open source code, 
  please support Adafruit and open-source hardware by purchasing 
  products from Adafruit!

  Written by Limor Fried/Ladyada for Adafruit Industries.  
  BSD license, all text above must be included in any redistribution
 ****************************************************/

// include SPI, MP3 and SD libraries
#include <SPI.h>
#include <Adafruit_VS1053.h>
#include <SD.h>

// define the pins used
//#define CLK 13       // SPI Clock, shared with SD card
//#define MISO 12      // Input data, from VS1053/SD card
//#define MOSI 11      // Output data, to VS1053/SD card
// Connect CLK, MISO and MOSI to hardware SPI pins. 
// See http://arduino.cc/en/Reference/SPI "Connections"

// These are the pins used for the breakout example
#define BREAKOUT_RESET  9      // VS1053 reset pin (output)
#define BREAKOUT_CS     10     // VS1053 chip select pin (output)
#define BREAKOUT_DCS    8      // VS1053 Data/command select pin (output)
// These are the pins used for the music maker shield
#define SHIELD_RESET  -1      // VS1053 reset pin (unused!)
#define SHIELD_CS     7      // VS1053 chip select pin (output)
#define SHIELD_DCS    6      // VS1053 Data/command select pin (output)

// These are common pins between breakout and shield
#define CARDCS 4     // Card chip select pin
// DREQ should be an Int pin, see http://arduino.cc/en/Reference/attachInterrupt
#define DREQ 3       // VS1053 Data request, ideally an Interrupt pin

Adafruit_VS1053_FilePlayer musicPlayer = 
  // create breakout-example object!
  //Adafruit_VS1053_FilePlayer(BREAKOUT_RESET, BREAKOUT_CS, BREAKOUT_DCS, DREQ, CARDCS);
  // create shield-example object!
  Adafruit_VS1053_FilePlayer(SHIELD_RESET, SHIELD_CS, SHIELD_DCS, DREQ, CARDCS);
  
void setup() {
  Serial.begin(9600);
  Serial.println("Adafruit VS1053 Simple Test");

  if (! musicPlayer.begin()) { // initialise the music player
     Serial.println(F("Couldn't find VS1053, do you have the right pins defined?"));
     while (1);
  }
  Serial.println(F("VS1053 found"));
  
  SD.begin(CARDCS);    // initialise the SD card
  Serial.println("SD Card done");
  
  // Set volume for left, right channels. lower numbers == louder volume!
  musicPlayer.setVolume(30,30);
  Serial.println("Volume set");
  
  // Timer interrupts are not suggested, better to use DREQ interrupt!
  //musicPlayer.useInterrupt(VS1053_FILEPLAYER_TIMER0_INT); // timer int

  // If DREQ is on an interrupt pin (on uno, #2 or #3) we can do background
  // audio playing
 if (! musicPlayer.useInterrupt(VS1053_FILEPLAYER_PIN_INT))
    {
    Serial.println(F("DREQ pin is not an interrupt pin"));
    }     // DREQ int
  
  musicPlayer.sineTest(0x44, 200);    // Make a tone to indicate VS1053 is working
  
  // Play one file, don't return until complete
  Serial.println(F("Playing track 001"));
  musicPlayer.playFullFile("track001.mp3");
  // Play another file in the background, REQUIRES interrupts!
  if (! musicPlayer.startPlayingFile("track001.mp3")) {
    Serial.println("Could not open file track001.mp3");
    while (1);
  }
  Serial.println(F("Started playing"));
}

void loop() {
  // File is playing in the background
  if (musicPlayer.stopped()) {
    Serial.println("Done playing music");
    while (1);
  }
  if (Serial.available()) {
    char c = Serial.read();
    
    // if we get an 's' on the serial console, stop!
    if (c == 's') {
      musicPlayer.stopPlaying();
    }
    
    // if we get an 'p' on the serial console, pause/unpause!
    if (c == 'p') {
      if (! musicPlayer.paused()) {
        Serial.println("Paused");
        musicPlayer.pausePlaying(true);
      } else { 
        Serial.println("Resumed");
        musicPlayer.pausePlaying(false);
      }
    }
  }

  delay(100);
}

Code den ich zusammen mit dem Poti genutzt habe (basiert auf dem Code hier), die checkVolume Routine wird aus void loop() heraus aufgerufen.

void checkVolume()
{
    // read the state of the volume potentiometer
    int read = analogRead(volumePin);
 
    // set the range of the volume from max=0 to min=254
    // (limit max volume to 20 and min to 60) 
    byte state = map(read, 0, 1023, 20, 60);
 
 
    // recognize state (volume) changes in steps of two
    if (state < volumeState - 1 || state > volumeState + 1)
    {
        // remember the new volume state
        volumeState = state;
 
        // set volume max=0, min=254
        musicPlayer.setVolume(volumeState, 254);
 
        // print out the state of the volume
        Serial.print(volumePin);
        Serial.print(" volume ");
        Serial.println(volumeState);
    }
}

Hallo,
bei meinem MP3-Player habe ich das Abspielen im Hintergrund verwendet, um die Fernbedienung abfragen zu können. Grundsätzlich funktioniert das also. Da ich den MP3-Player verschenkt habe, kann ich keine Tests machen.

Was wird Dir angezeigt, wenn Du entsprechend dieser Anleitung vorgehst? Ich meine die Anzeige am Ende der Seite.

Hallo,

der Output ist wie folgt:

Adafruit VS1053 Library Test
VS1053 found
SD OK!
SYSTEM~1/
	WPSETT~1.DAT		12
	INDEXE~1		76
TRACK002.MP3		4575853
TRACK001.MP3		3631548
Started playing
...................................................................
...................................................................
...................................................................
...................................................................
...................................................................
...................................................................
...................................................................
...................................................................
...................................................................
...................................................................
...................................................................
...................................................................
...................................................................
...................................................................
...

Kommt mir ziemlich komisch vor, zum einen sollte der Track nach ca. 2:30 Minuten zu Ende sein (Meldung "Done playing music"), zum anderen habe ich die ganze Zeit nichts gehört...

Hilft Dir das bei der Fehlersuche?

Danke und Gruß,
Michael

Hallo Michael,
wie immer bei der Fehlersuche muß man jeden Hinweis nutzen und alle Eventualitäten in Betracht ziehen:

  • Deine SD-Karte entspricht nicht den 8.3 Konventionen, sieht man an ~1, aufräumen. Warum werden die Dateien in Großbuchstaben angezeigt?
  • Die zum Testen benutzte Datei track001.ogg fehlt.
  • Wird track001.ogg hörbar abgespielt?
  • Wird durch musicPlayer.playFullFile("track001.mpg"); die Datei abgespielt?
  • Was passiert bei Benutzung des Timer-Interrupts VS1053_FILEPLAYER_TIMER0_INT?

Hallo agmue,

Danke für Dein Feedback, ich werde mal Deine Liste abarbeiten:

  • Deine SD-Karte entspricht nicht den 8.3 Konventionen, sieht man an ~1, aufräumen. Warum werden die Dateien in Großbuchstaben angezeigt?
  • Die zum Testen benutzte Datei track001.ogg fehlt.
  • Wird track001.ogg hörbar abgespielt?
  • Wird durch musicPlayer.playFullFile("track001.mpg"); die Datei abgespielt?
  • Was passiert bei Benutzung des Timer-Interrupts VS1053_FILEPLAYER_TIMER0_INT?

Zu den oben genannten Punkten:

  • Kann ich leider nicht aufräumen, da nix zum aufräumen da... (siehe Screenshot) Warum die Dateien in Großbuchstaben angezeigt werden kann ich Dir leider auch nicht sagen, abgespeichert sind sie in kleinbuchstaben.

  • Stimmt, ich habe keine OGG Dateien. Aber das das Abspielen mittels playFullFile() funktioniert - sofern die Datei da ist - hatte ich ja auch schon geschrieben. daher hatte ich dem keine Beachtung mehr geschenkt. Ich habe aber nochmal OGG durch MP3 ersetzt und es klappt immer noch. :slight_smile:

  • Durch musicPlayer.playFullFile("track001.mpg"); wird keine Datei abgespielt, da sich keine solche auf der SD Karte befindet :wink: aber mit track001.mp3 klappt es, siehe Punkt zuvor.

  • Oha, jetzt klappts :smiley: , die Datei wird abgespielt, parallel werden in der Konsole die Punkte erzeugt und die Abschlußmeldung "Done playing music" erzeugt, dann geht es wieder von vorne los:

Adafruit VS1053 Library Test
VS1053 found
SD OK!
SYSTEM~1/
	WPSETT~1.DAT		12
	INDEXE~1		76
TRACK002.MP3		4575853
TRACK001.MP3		3631548
Started playing
........................................................
........................................................
.........Done playing music
Started playing
........................................................
........................................................
.........Done playing music

Screenshot SD.png

Hallo,

ich habe ein ähnliches Problem mit dem MusicMaker Shield (und UNO), nur dass bei mir gar nichts abgespielt wird.
Ich verwende ebenfalls das aktuelle Beispiel von "player_simple"

/***************************************************
  This is an example for the Adafruit VS1053 Codec Breakout

  Designed specifically to work with the Adafruit VS1053 Codec Breakout
  ----> https://www.adafruit.com/products/1381

  Adafruit invests time and resources providing this open source code,
  please support Adafruit and open-source hardware by purchasing
  products from Adafruit!

  Written by Limor Fried/Ladyada for Adafruit Industries.
  BSD license, all text above must be included in any redistribution
 ****************************************************/

// include SPI, MP3 and SD libraries
#include <SPI.h>
#include <Adafruit_VS1053.h>
#include <SD.h>

// define the pins used
//#define CLK 13       // SPI Clock, shared with SD card
//#define MISO 12      // Input data, from VS1053/SD card
//#define MOSI 11      // Output data, to VS1053/SD card
// Connect CLK, MISO and MOSI to hardware SPI pins.
// See http://arduino.cc/en/Reference/SPI "Connections"

// These are the pins used for the breakout example
#define BREAKOUT_RESET  9      // VS1053 reset pin (output)
#define BREAKOUT_CS     10     // VS1053 chip select pin (output)
#define BREAKOUT_DCS    8      // VS1053 Data/command select pin (output)
// These are the pins used for the music maker shield
#define SHIELD_RESET  -1      // VS1053 reset pin (unused!)
#define SHIELD_CS     7      // VS1053 chip select pin (output)
#define SHIELD_DCS    6      // VS1053 Data/command select pin (output)

// These are common pins between breakout and shield
#define CARDCS 4     // Card chip select pin
// DREQ should be an Int pin, see http://arduino.cc/en/Reference/attachInterrupt
#define DREQ 3       // VS1053 Data request, ideally an Interrupt pin

Adafruit_VS1053_FilePlayer musicPlayer =
  // create breakout-example object!
  //Adafruit_VS1053_FilePlayer(BREAKOUT_RESET, BREAKOUT_CS, BREAKOUT_DCS, DREQ, CARDCS);
  // create shield-example object!
  Adafruit_VS1053_FilePlayer(SHIELD_RESET, SHIELD_CS, SHIELD_DCS, DREQ, CARDCS);

void setup() {
  Serial.begin(9600);
  Serial.println("Adafruit VS1053 Simple Test");

  if (! musicPlayer.begin()) { // initialise the music player
    Serial.println(F("Couldn't find VS1053, do you have the right pins defined?"));
    while (1);
  }
  Serial.println(F("VS1053 found"));

  if (!SD.begin(CARDCS)) {
    Serial.println(F("SD failed, or not present"));
    while (1);  // don't do anything more
  }

  // list files
  printDirectory(SD.open("/"), 0);

  // Set volume for left, right channels. lower numbers == louder volume!
  musicPlayer.setVolume(20, 20);

  // Timer interrupts are not suggested, better to use DREQ interrupt!
  //musicPlayer.useInterrupt(VS1053_FILEPLAYER_TIMER0_INT); // timer int

  // If DREQ is on an interrupt pin (on uno, #2 or #3) we can do background
  // audio playing
  musicPlayer.useInterrupt(VS1053_FILEPLAYER_PIN_INT);  // DREQ int


  // Play one file, don't return until complete
  Serial.println(F("Playing track 001"));
  musicPlayer.playFullFile("track001.mp3");
  // Play another file in the background, REQUIRES interrupts!
  Serial.println(F("Playing track 002"));
  musicPlayer.startPlayingFile("track002.mp3");
}

void loop() {
  // File is playing in the background
  if (musicPlayer.stopped()) {
    Serial.println("Done playing music");
    while (1);
  }
  if (Serial.available()) {
    char c = Serial.read();

    // if we get an 's' on the serial console, stop!
    if (c == 's') {
      musicPlayer.stopPlaying();
    }

    // if we get an 'p' on the serial console, pause/unpause!
    if (c == 'p') {
      if (! musicPlayer.paused()) {
        Serial.println("Paused");
        musicPlayer.pausePlaying(true);
      } else {
        Serial.println("Resumed");
        musicPlayer.pausePlaying(false);
      }
    }
  }

  delay(100);
}


/// File listing helper
void printDirectory(File dir, int numTabs) {
  while (true) {

    File entry =  dir.openNextFile();
    if (! entry) {
      // no more files
      //Serial.println("**nomorefiles**");
      break;
    }
    for (uint8_t i = 0; i < numTabs; i++) {
      Serial.print('\t');
    }
    Serial.print(entry.name());
    if (entry.isDirectory()) {
      Serial.println("/");
      printDirectory(entry, numTabs + 1);
    } else {
      // files have sizes, directories do not
      Serial.print("\t\t");
      Serial.println(entry.size(), DEC);
    }
    entry.close();
  }
}

Und die Ausgabe am Seriellen Monitor ist so:

Adafruit VS1053 Simple Test
VS1053 found
~LOCKR~1.ODT		98
SYSTEM~1/
	WPSETT~1.DAT		12
	INDEXE~1		76
TRACK0~2.MP3		9578229
TRACK0~3.MP3		10965429
Playing track 001
Playing track 002
Done playing music

Bei mir zeigt das Programm die Dateien auch in Großbuchstaben und mit der Tilde (~) an, obwohl ich sie klein abgespeichert habe.

Ich habe auch das Beispiel "player_interrupts" ausprobiert. Dort wird mir eine Fehlermeldung ausgeworfen:

Adafruit VS1053 Library Test
VS1053 found
SD OK!
~LOCKR~1.ODT		98
SYSTEM~1/
	WPSETT~1.DAT		12
	INDEXE~1		76
TRACK0~2.MP3		9578229
TRACK0~3.MP3		10965429
Could not open file track001.mp3

Ich habe auch schon zwei verschiedene SD-Karten ausprobiert. Eine NoName mit 2 GB, die man ja eher nicht verwenden soll und eine von Transcend mit 32 GB.
Kann es an denen liegen?
[EDIT] Habe gerade gelesen, dass nur Karten bis 8 GB unterstützt werden. Habe eben noch eine ScanDisk mit 4 GB ausprobiert und wieder keine Veränderung.

Das einzige, das wiedergegeben wird ist der sineTest. Beim Start ertönt dieser kurze Piepston, das war's dann aber auch.

Hoffe mir kann jemand weiterhelfen.
Vielen Dank im Voraus.

Grüße

robomow21:
Hallo,

ich habe ein ähnliches Problem mit dem MusicMaker Shield (und UNO), nur dass bei mir gar nichts abgespielt wird.
Ich verwende ebenfalls das aktuelle Beispiel von "player_simple"

/***************************************************

...
  Serial.println(F("Playing track 001"));
  musicPlayer.playFullFile("track001.mp3");




Und die Ausgabe am Seriellen Monitor ist so: 



Adafruit VS1053 Simple Test
VS1053 found
~LOCKR~1.ODT 98
SYSTEM~1/
WPSETT~1.DAT 12
INDEXE~1 76
TRACK0~2.MP3 9578229
TRACK0~3.MP3 10965429
Playing track 001
Playing track 002
Done playing music

Kopier mal eine track001.mp3 auf die Karte, die gibt es nämlich nicht, und teste nochmal.
Ansonste gilt das oben gesagte zu den 8.3 Konventionen:
"Deine SD-Karte entspricht nicht den 8.3 Konventionen, sieht man an ~1, aufräumen. "

Ein Test ergibt: Alle Dateien und Verzeichnisse werden in großen Buchstaben angezeigt, ist also kein Fehler.

Die Dateiliste sieht bei mir so aus:

TRACK001.MP3 5357208
TRACK002.MP3 7212672
TRACK003.MP3 5532488
VERZEI~1.TXT 5153
TEXTE/
 V.TXT 5153
 ANZAHL.TXT 5

Die mp3-Dateien werden ohne "~" dargestellt, da steckt ein Fehler.

Meine SD-Karte hat 32 GByte und ist FAT32 formatiert.

Guten Morgen,

danke erstmal für die Antworten.

Ich habe jetzt nochmal die SD-Karte formatiert (FAT32) und zwei andere Dateien (MP3) drauf gezogen.
Wieder track001.mp3/track002.mp3 genannt (8.3 Konventionen eingehalten) und getestet mit dem selben Ergebnis.

Serieller Monitor:

Adafruit VS1053 Simple Test
VS1053 found
SYSTEM~1/
	WPSETT~1.DAT		12
	INDEXE~1		76
TRACK0~1.MP3		4724486
TRACK0~2.MP3		9578229
Playing track 001
Playing track 002
Done playing music

Die SD-Karte würde ich als Fehlerquelle ausschließen, da ich mehrere ausprobiert habe.
Könnte es an einer der Bibliothek liegen? Bezweifle ich aber eigentlich auch, weil was soll ich da großartig falsch machen.

Weiß ehrlich gesagt nicht was ich noch probieren könnte.

So, hab' den Fehler gefunden.

Ich darf die Datei nicht "track001.mp3" nennen, sondern nur "track001".
Windows scheint das ".mp3" automatisch noch an den Dateinamen zu hängen, sodass meine Dateien dann "track001.mp3.mp3" hießen.

Hätte ich auch mal früher drauf kommen können. >:(

Nun zu einer anderen Sache. Ich möchte die GPIO Pins benutzen, aber die IDE mag den Befehl

GPIO_pinMode(2, INPUT);

nicht.

Fehler:
'GPIO_pinMode' was not declared in this scope

Hättet ihr hier einen Rat?

die IDE mag den Befehl GPIO_pinMode(2, INPUT); nicht.

Mal abgesehen davon, dass das kein "Befehl" ist: wie kommst du darauf, dass es sowas geben könnte?

Es gibt in der Arduino IDE die Funktion pinMode, die du so   pinMode (2,INPUT);  aufrufen kannst.

Der Begriff "GPIO" wird üblicherweise bei Arduinos nicht verwendet, auch wenn die meisten Pins für mehrere Zwecke verwendet werden können.

Redest du noch (wie zu Beginn dieses Threads) von einem Adafruit VS1053 Shield auf einem UNO ?

Sorry für die falsche Bezeichnung. Ich meinte natürlich Funktion :slight_smile:

Ja ich rede noch vom selben Shield (mit UNO) und zwar dieses:

Unter diesem Link sind auch die GPIO Breakout Pins beschrieben die ich meine.

Die Funktion GPIO_pinMode(uint8_t i, uint8_t dir); habe ich in der Header-Datei der Adafruit_VS1053_Library-master - Bibliothek gefunden.
Genauso wie die Funktion GPIO_digitalRead(uint8_t i);

Nur gibt mir die IDE eben oben genannten Fehler aus wenn ich sie verwenden möchte.

#define GPIO_LED_2 2
...
Adafruit_VS1053_FilePlayer musicPlayer = Adafruit_VS1053_FilePlayer(SHIELD_RESET, SHIELD_CS, SHIELD_DCS, DREQ, CARDCS);
...
  musicPlayer.GPIO_pinMode(GPIO_LED_2, OUTPUT);

Wenn Du die Methode einer Programmbibliothek nutzt, mußt Du den Instanznamen vor die Methode schreiben (dieser Satz ganz ausdrücklich ohne Gewähr).

michael_x:
Redest du noch (wie zu Beginn dieses Threads) von einem Adafruit VS1053 Shield auf einem UNO ?

Das MP3-Shield hat GPIOs.

GPIO_pinMode ist auch keine Funktion, sondern eine Methode 8) (SCNR)

agmue war natürlich einfach schneller

Tatsache,
da hätte ich auch selbst drauf kommen können.
Und das mit den Funktionen/Methoden-Unterschied... naja ich lerne noch :smiley:

Danke euch für eure Hilfe!

Eine abschließende Frage noch:

Initialisieren der Ein/Ausgänge nehme ich ja ganz normal im setup()-Teil vor oder?

robomow21:
So, hab' den Fehler gefunden.

Wenn Du Windows so einrichtest, daß alle Dateiendungen angezeigt werden, wäre Dir das nicht passiert. Schön, daß Du es gefunden hast.

robomow21:
Initialisieren der Ein/Ausgänge nehme ich ja ganz normal im setup()-Teil vor oder?

Ja.

Hallo,
ich hab' nochmal eine Frage bezüglich den GPIOs.

Und zwar hab ich die Masse aller meiner Taster (13 Stk.) durchgeschliffen damit nur noch eine Leitung zum Arduino bzw. auf das Shield geht. Dabei hab ich nicht bedacht, dass die GPIOs ja extra auf der Platine sind.

Jetzt die Frage: Kann ich die Masse, also die linken Pins der IO auf dem Shield, alle Brücken und mit auf die Masse vom Shield ziehen damit's funktioniert? Oder muss ich die jeweilige Taster alle extra dazwischen hängen?

Hier nochmal das Shield:

Und wenn ich schon schreibe: Kann ich mein Bauteile (Nano, Uno etc) mit einem Klebeklettband befestigen oder ist das nicht ratsam wegen der Wärmeentwicklung? Würde mir einen riesen Haufen Arbeit sparen.

So eins mein ich:

robomow21:
Und zwar hab ich die Masse aller meiner Taster (13 Stk.) durchgeschliffen damit nur noch eine Leitung zum Arduino bzw. auf das Shield geht. Dabei hab ich nicht bedacht, dass die GPIOs ja extra auf der Platine sind.

Jetzt die Frage: Kann ich die Masse, also die linken Pins der IO auf dem Shield, alle Brücken und mit auf die Masse vom Shield ziehen damit's funktioniert? Oder muss ich die jeweilige Taster alle extra dazwischen hängen?

Deine Frage verstehe ich so nicht.

Du kannst eine Masse (GND) vom Board an eine Seite aller Taster löten oder stecken.
Die andere Seite der Taster geht jeweils an die GPIOs.
Also von jedem Taster (13) ein Anschluss an jeweils einen GPIO (0-12).

Auch wenn deine Frage nicht (für mich) sehr deutlich war, sollte die Antwort stimmen.

Also von jedem Taster (13) ein Anschluss an jeweils einen GPIO (0-12).

Ich meine nicht die normalen Pins des Arduinos sondern die GPIO Breakout Pins vom Shield (1-7).
Die sind separat auf dem Shield, wie unter dem Link zu sehen.
Hätte ich vlt mehr betonen sollen.

Und ich möchte jetzt die Masse der Breakoutpins mit der, des Arduinos verbinden damit ich weiterhin nur eine Leitung für Masse vom Board weggehen hab und frag mich ob es funktionieren wird.

Auch für diese zusätzlichen GPIOs reicht ein GND-Anschluss. Auch schon der vorhandene.