ESP8266 + Camera - Software.Serial() - Problem!? Bitte um HILFE

Hey,
ich bin gerade mit einem Projekt beschäftigt: Security-System.

Bestehend aus NodeMCU ESP8266 DivKit V1, SD-Card Breakboard + SD-Card, Linksprite TTL JPEG Camera, PIR-Motion Sensor.

Funktionen:
Foto soll nach auslösen des PIR Sensors auf die SD Card gespeichert werden.

Was ich bis jetzt auf Funktion getestet habe: SD-Card read write Funktion, PIR-Sensor.

Problem: Camera lässt sich nicht ansprechen. Ich vermute das Problem liegt an Software.Serial(), danach hängt nämlich das Programm in einer dauerschleife. Verkabelung müsste richtig sein!?
Meine Frage: Stimmt die Verkabelung? Ist Softwareserial richtig deklariert/ richtige Pinbelegung? Warum Waran könnte es liegen, dass ich keine antwort bekomme?

Verkabelung:
SD-Card → ESP Camera → ESP
VCC → 5V VCC → 5V
GND → GND GND → GND
MOSI → D7 (MOSI) RXD → D9 (RX)
MISO → D6 (MISO) TXD → D10 (TX)
CS → D8


upload pic

(Aufbau: https://ibb.co/esNxfa)

An folgende Tutorials orientiere ich mich (Jedoch wurde bei beiden Projekten mit einem Arduino Uno gearbeitet):
LinkSprite: http://learn.linksprite.com/jpeg-camera/tutorial-of-using-linksprite-2mp-uart-jpeg-camera-with-arduino/
Projekt Alarmanlage: Saving Images on an SD Card | Robotic Controls

Mein aktueller Code mit dem ich versuche die Camera zum laufen zu bringen (ich habe testcases eingebaut damit ich sehen kann, wo mein Programm hängt):

/***************************
Save Images on SD Card

by Jennifer Case
4/14/2014

Parts:
-SD Card Breakout Board
-TTL Camera

Pin 2,3 - Camera
Pin 10 - CS/D3
Pin 11 - CMD
Pin 12 - D0
Pin 13 - CLK
****************************/
#include <SoftwareSerial.h>
#include <SdFat.h>

//SD Card
SdFat sd;
SdFile myFile;
int picCnt = 0;

//Camera
byte incomingbyte;

SoftwareSerial cameraSerial = SoftwareSerial(D9, D10);   //Configure soft serial port

int a=0x0000,j=0,k=0,count=0;   //Read Starting address       
uint8_t MH,ML;
boolean EndFlag=0;

//Declare pins
const int chipSelect = D8;

void setup() { 
  Serial.println("Test");
  Serial.begin(19200); //start serial
  cameraSerial.begin(38400); //start serial with camera
  
  // Initialize SdFat or print a detailed error message and halt
  // Use half speed like the native library.
  // change to SPI_FULL_SPEED for more performance.
  if (!sd.begin(chipSelect, SPI_HALF_SPEED)) sd.initErrorHalt();
  
  SendResetCmd(); //allows camera to take pictures
  delay(3000); //delay necessary for camera reset
}

void loop() {
    //create title for images
    char photoTitle[25] = {};
    sprintf(photoTitle, "pic%d.txt", picCnt);
    
    //make sure file can be created, otherwise print error
    if (!myFile.open(photoTitle, O_RDWR | O_CREAT | O_AT_END)) {
      sd.errorHalt("opening photoTitle.txt for write failed");
    }
    
    SendTakePhotoCmd(); //take photo
    delay(200); //delay to make sure there is no drop in the data 
  
    while(cameraSerial.available()>0) {
      incomingbyte=cameraSerial.read(); //clear unneccessary serial from camera
    }
    byte b[32];
    
    while(!EndFlag) {  
      j=0;
      k=0;
      count=0;
      SendReadDataCmd(); //command to get picture from camera
             
      delay(75); //delay necessary for data not to be lost
      while(cameraSerial.available()>0) {
        incomingbyte=cameraSerial.read(); //read serial from camera
        k++;
        if((k>5)&&(j<32)&&(!EndFlag)) {
          b[j]=incomingbyte;
          if((b[j-1]==0xFF)&&(b[j]==0xD9))
          EndFlag=1; //when end of picture appears, stop reading data                          
          j++;
          count++;
        }
      }
              
      for(j=0;j<count;j++) { //store picture into file
        if(b[j]<0x10)
          myFile.print("0");
        myFile.print(b[j], HEX);
      }
      myFile.println();
    }
    
    StopTakePhotoCmd(); //stop this picture so another one can be taken
    EndFlag = 0; // reset flag to allow another picture to be read
    
    myFile.close(); //close file
    
    picCnt++; //increment value for next picture
}

//Send Reset command
void SendResetCmd() {
  cameraSerial.write((byte)0x56);
  cameraSerial.write((byte)0x00);
  cameraSerial.write((byte)0x26);
  cameraSerial.write((byte)0x00);   
}

//Send take picture command
void SendTakePhotoCmd() {
  cameraSerial.write((byte)0x56);
  cameraSerial.write((byte)0x00);
  cameraSerial.write((byte)0x36);
  cameraSerial.write((byte)0x01);
  cameraSerial.write((byte)0x00);
    
  a = 0x0000; //reset so that another picture can taken
}

void FrameSize() {
  cameraSerial.write((byte)0x56);
  cameraSerial.write((byte)0x00);
  cameraSerial.write((byte)0x34);
  cameraSerial.write((byte)0x01);
  cameraSerial.write((byte)0x00);  
}

//Read data
void SendReadDataCmd() {
  MH=a/0x100;
  ML=a%0x100;
      
  cameraSerial.write((byte)0x56);
  cameraSerial.write((byte)0x00);
  cameraSerial.write((byte)0x32);
  cameraSerial.write((byte)0x0c);
  cameraSerial.write((byte)0x00);
  cameraSerial.write((byte)0x0a);
  cameraSerial.write((byte)0x00);
  cameraSerial.write((byte)0x00);
  cameraSerial.write((byte)MH);
  cameraSerial.write((byte)ML);
  cameraSerial.write((byte)0x00);
  cameraSerial.write((byte)0x00);
  cameraSerial.write((byte)0x00);
  cameraSerial.write((byte)0x20);
  cameraSerial.write((byte)0x00);
  cameraSerial.write((byte)0x0a);

  a+=0x20; 
}

void StopTakePhotoCmd() {
  cameraSerial.write((byte)0x56);
  cameraSerial.write((byte)0x00);
  cameraSerial.write((byte)0x36);
  cameraSerial.write((byte)0x01);
  cameraSerial.write((byte)0x03);        
}

Ausgabe:
Auf SD-Card wird eine Bilddatei ohne Inhalt abgelegt.
Ausgabe-Code:
Test3
Test1
Test4
Test9
Test5
vor der schleife

Test9
Test5
vor der schleife

Test9
Test5
vor der schleife

Test9
Test5
vor der schleife
.
.
.

Bin für jede Hilfestellung dankbar- Google und Freunde fragen war bisher vergebens. Hoffe daher, dass Ihr mir weiterhelfen könnt!

Grüße Pommi

Was mir aufgefallen ist, du musst bei der seriellen die Leitungen kreuzen.

RXD auf TX
TXD auf RX

weiter habe ich mir das noch nicht angesehen.

Super danke! Das habe ich glatt übersehn.
ALso Code bleibt bestehen. Die Deklaration von Software.Seria(RX TX) ist so richtig oder?

Bekomme trotzdem folgende Ausgabe:

c�¾vc�¾vc�¾vc�¾v
Initializing SD card...initialization done.
please waiting ....
Test1
Test3
Test1
Test4
Test9
Test5
vor der schleife

Test9
Test5
vor der schleife

Test9
Test5
vor der schleife
.
.
. (Dauerschleife)

Mhh?

Da ich von der Kamera kein Ahnung habe, kann ich da nicht helfen.

Aber die Definition der SoftwareSerial ist verkehrt.
Du benutzt den Pin D10 doppelt.
D10 brauchst du für SPI der SD-Karte.

Hast aber in der Beschreibung im Sketch D2 und D3 geschrieben.

Warum brauche ich D10 für die SD karte?
Ich habe D10 als TXD mit RX der Kamera verbunden und auch so im Code deklariert!?
Siehe Belegung NodeMCU ESP:

Den SPI Bus des ESPs belege ich von D5 bis D8 wobei mein D8 mein CS ist.
Stehe ich auf dem Schlauch? Ich glaube nämlich nicht das, dass der Fehler ist!?

Gruß
Pommi

Pommi92:
Warum brauche ich D10 für die SD karte?
Ich habe D10 als TXD mit RX der Kamera verbunden und auch so im Code deklariert!?

Dann solltest du das auch in der Beschreibung im Sketch ändern.
Da habe ich es rausgelesen. Ok, evtl. zu wenig gelesen, irritiert aber.

Bist Du schon weiter gekommen? Dieses Thema interessiert mich sehr, habe auch auf den anderen post von Dir geantwortet. Werde mich mit diesem Projekt beschäftigen, die Kamera und den SD-Kartenadapter habe ich vor einigen Wochen bei Alixxxx bestellt, wird noch dauern.......
Softserial verwendest Du, weil die eigentliche serielle Schnittstelle des ESP8266 für die Programmierung verwendet wird? Der HW-UART wäre vielleicht besser geeignet, die Softserial könnte dann zum debuggen verwendet werden. Könnte mit umstecken/umschalten der HW-seriellen Schnittstelle gelöst werden?

Ja habe das Projekt fertig stellen können. Ich wollte jedoch Gestern einem Freund, das Projekt zeigen und da ging es Plötzlich nicht mehr. Den fertigen Code + Bilder des Projekts mit dem Fehlerbild werde ich in einem neuen Post veröffentlichen. Siehe: https://forum.arduino.cc/index.php?topic=489338.new#new

Gruß
Pommi