nk25719 / PMD___aka-KiCad-esp32-6leds-2switches-1pj-circuit-

In this repo I am practicing KICAD. Created an ESP32 DevKit V1 module and a PCB footprint. I designed a circuit around this ESP32 consisting of six lamps, four switches, and two power jacks and added a voltage regulater to Vin to maintain a supply of +5V. (This project was originally made of two switches and 1 power jack and was named homeWork2.)
0 stars 2 forks source link

Hardware Bug - PCB REV 20240421, J5 HAS 3V3 PWR, However DF Player Requirs 5V #49

Closed nk25719 closed 1 month ago

nk25719 commented 2 months ago

Describe the Failure / Bug A clear and concise description of what the failure / bug is. Short Summary of the expected behavior: Short Summary of the buggy behavior: connected the DF Player at J5. loaded the PMDtoKrake firmware that was known to work in the Mocking Krake, during running the code, the serial monitor

image

Device Under Test, aka DUT Steps to reproduce the behavior:

  1. Model Number:
  2. Serial Number(s): LEB 1
  3. Location where failure / bug occurred lebanon and texas
  4. Hardware configuration. (How connected, any accessories, what else it takes to replicate the system in which the failure occurred.)
  5. Extent of Failure Is failure intermittent? no Is failure fixed by power cycling? yes ** Is failure perminant? yes

To Reproduce Steps to reproduce the behavior:

  1. Go to: https://github.com/nk25719/KiCad-esp32-6leds-2switches-1pj-circuit/blob/main/FIRMWARE/PMDtoKrake/PMDtoKRake_KrakeV2/PMDtoKRake_KrakeV2.ino
  2. Click on : Copy and upload the IDE code to the ESP32 module
  3. Navigate to: Serial monitor pf the IDE
  4. See error: DF player is not initializing

Expected behavior A clear and concise description of what you expected to happen. DF Player initialized

Screenshots If applicable, add screenshots to help explain your problem.

**Hardware description Model: Serial Number: Other:

**Test Equipment Model: Serial Number:

Additional context Add any other context about the problem here.

nk25719 commented 2 months ago

cc: @ForrestErickson

ForrestErickson commented 2 months ago

Journal Trying To Duplicate in Maryville TN USA

Test hardware and Setup

Loading into device SN USA1 which does NOT have an LCD connected and does NOT have a DFPlayer connected.

  1. Sync my fork
  2. Pull to update local clone
  3. Open PMDtoKRake_KrakeV2.ino in Arduino IDE, compile and upload into target hardware.
  4. Run and capture the serial port traffic.
    image
  5. With Android smart phone find the Soft AP "ESP32" and connect with success.
  6. With Android smart phone web browser try to open 192.168.4.1 with OUT success. The browser reports, "This site can't be reached. 192.168.4.1 took too long to respond. Try: Checking the connection."

Failure to Duplicate DF Player Error

In Maryville, I cannot duplicated the error. I never see the text "Initializing DFPlayer" Is the missing LCD or missing DFPlayer hardware the reason the message fails to duplicate?

@nk25719 Please duplicate my setup by running your PMD with out the LCD and with out the DFPlayer connected. Do you get the same result as I outlined above or not?

ForrestErickson commented 2 months ago

More Notes On DFPlayer Testing

From https://wiki.dfrobot.com/DFPlayer_Mini_SKU_DFR0299 Lee found some code for evaluating the module Here it is with modifications for the ESP32 pins as per the PMD.

//From: https://wiki.dfrobot.com/DFPlayer_Mini_SKU_DFR0299
//File saved as: DFPlayer_AllFunctions
/***************************************************
 DFPlayer - A Mini MP3 Player For Arduino
 <https://www.dfrobot.com/product-1121.html>

 ***************************************************
 This example shows the all the function of library for DFPlayer.

 Created 2016-12-07
 By [Angelo qiao](Angelo.qiao@dfrobot.com)

 GNU Lesser General Public License.
 See <http://www.gnu.org/licenses/> for details.
 All above must be included in any redistribution
 ****************************************************/

/***********Notice and Trouble shooting***************
 1.Connection and Diagram can be found here
<https://www.dfrobot.com/wiki/index.php/DFPlayer_Mini_SKU:DFR0299#Connection_Diagram>
 2.This code is tested on Arduino Uno, Leonardo, Mega boards.
 ****************************************************/

#include "Arduino.h"
#include "DFRobotDFPlayerMini.h"

#if (defined(ARDUINO_AVR_UNO) || defined(ESP8266))   // Using a soft serial port
#include <SoftwareSerial.h>
SoftwareSerial softSerial(/*rx =*/10, /*tx =*/11);
#define FPSerial softSerial
#else
#define FPSerial Serial1
#endif

DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);

void setup()
{
#if (defined ESP32)
  //FPSerial.begin(9600, SERIAL_8N1, /*rx =*/D3, /*tx =*/D2);
  FPSerial.begin(9600, SERIAL_8N1, 16, 17); // rx2,  tx2 on ESP32 DevKit;
#else
  FPSerial.begin(9600);
#endif

  Serial.begin(115200);

  Serial.println();
  Serial.println(F("DFRobot DFPlayer Mini Demo"));
  Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));

  if (!myDFPlayer.begin(FPSerial, /*isACK = */true, /*doReset = */true)) {  //Use serial to communicate with mp3.
    Serial.println(F("Unable to begin:"));
    Serial.println(F("1.Please recheck the connection!"));
    Serial.println(F("2.Please insert the SD card!"));
    while(true);
  }
  Serial.println(F("DFPlayer Mini online."));

  myDFPlayer.setTimeOut(500); //Set serial communictaion time out 500ms

  //----Set volume----
  myDFPlayer.volume(10);  //Set volume value (0~30).
  myDFPlayer.volumeUp(); //Volume Up
  myDFPlayer.volumeDown(); //Volume Down

  //----Set different EQ----
  myDFPlayer.EQ(DFPLAYER_EQ_NORMAL);
//  myDFPlayer.EQ(DFPLAYER_EQ_POP);
//  myDFPlayer.EQ(DFPLAYER_EQ_ROCK);
//  myDFPlayer.EQ(DFPLAYER_EQ_JAZZ);
//  myDFPlayer.EQ(DFPLAYER_EQ_CLASSIC);
//  myDFPlayer.EQ(DFPLAYER_EQ_BASS);

  //----Set device we use SD as default----
//  myDFPlayer.outputDevice(DFPLAYER_DEVICE_U_DISK);
  myDFPlayer.outputDevice(DFPLAYER_DEVICE_SD);
//  myDFPlayer.outputDevice(DFPLAYER_DEVICE_AUX);
//  myDFPlayer.outputDevice(DFPLAYER_DEVICE_SLEEP);
//  myDFPlayer.outputDevice(DFPLAYER_DEVICE_FLASH);

  //----Mp3 control----
//  myDFPlayer.sleep();     //sleep
//  myDFPlayer.reset();     //Reset the module
//  myDFPlayer.enableDAC();  //Enable On-chip DAC
//  myDFPlayer.disableDAC();  //Disable On-chip DAC
//  myDFPlayer.outputSetting(true, 15); //output setting, enable the output and set the gain to 15

  //----Mp3 play----
  myDFPlayer.next();  //Play next mp3
  delay(1000);
  myDFPlayer.previous();  //Play previous mp3
  delay(1000);
  myDFPlayer.play(1);  //Play the first mp3
  delay(1000);
  myDFPlayer.loop(1);  //Loop the first mp3
  delay(1000);
  myDFPlayer.pause();  //pause the mp3
  delay(1000);
  myDFPlayer.start();  //start the mp3 from the pause
  delay(1000);
  myDFPlayer.playFolder(15, 4);  //play specific mp3 in SD:/15/004.mp3; Folder Name(1~99); File Name(1~255)
  delay(1000);
  myDFPlayer.enableLoopAll(); //loop all mp3 files.
  delay(1000);
  myDFPlayer.disableLoopAll(); //stop loop all mp3 files.
  delay(1000);
  myDFPlayer.playMp3Folder(4); //play specific mp3 in SD:/MP3/0004.mp3; File Name(0~65535)
  delay(1000);
  myDFPlayer.advertise(3); //advertise specific mp3 in SD:/ADVERT/0003.mp3; File Name(0~65535)
  delay(1000);
  myDFPlayer.stopAdvertise(); //stop advertise
  delay(1000);
  myDFPlayer.playLargeFolder(2, 999); //play specific mp3 in SD:/02/004.mp3; Folder Name(1~10); File Name(1~1000)
  delay(1000);
  myDFPlayer.loopFolder(5); //loop all mp3 files in folder SD:/05.
  delay(1000);
  myDFPlayer.randomAll(); //Random play all the mp3.
  delay(1000);
  myDFPlayer.enableLoop(); //enable loop.
  delay(1000);
  myDFPlayer.disableLoop(); //disable loop.
  delay(1000);

  //----Read imformation----
  Serial.println(myDFPlayer.readState()); //read mp3 state
  Serial.println(myDFPlayer.readVolume()); //read current volume
  Serial.println(myDFPlayer.readEQ()); //read EQ setting
  Serial.println(myDFPlayer.readFileCounts()); //read all file counts in SD card
  Serial.println(myDFPlayer.readCurrentFileNumber()); //read current play file number
  Serial.println(myDFPlayer.readFileCountsInFolder(3)); //read file counts in folder SD:/03
}

void loop()
{
  static unsigned long timer = millis();

  if (millis() - timer > 3000) {
    timer = millis();
    myDFPlayer.next();  //Play next mp3 every 3 second.
  }

  if (myDFPlayer.available()) {
    printDetail(myDFPlayer.readType(), myDFPlayer.read()); //Print the detail message from DFPlayer to handle different errors and states.
  }
}

void printDetail(uint8_t type, int value){
  switch (type) {
    case TimeOut:
      Serial.println(F("Time Out!"));
      break;
    case WrongStack:
      Serial.println(F("Stack Wrong!"));
      break;
    case DFPlayerCardInserted:
      Serial.println(F("Card Inserted!"));
      break;
    case DFPlayerCardRemoved:
      Serial.println(F("Card Removed!"));
      break;
    case DFPlayerCardOnline:
      Serial.println(F("Card Online!"));
      break;
    case DFPlayerUSBInserted:
      Serial.println("USB Inserted!");
      break;
    case DFPlayerUSBRemoved:
      Serial.println("USB Removed!");
      break;
    case DFPlayerPlayFinished:
      Serial.print(F("Number:"));
      Serial.print(value);
      Serial.println(F(" Play Finished!"));
      break;
    case DFPlayerError:
      Serial.print(F("DFPlayerError:"));
      switch (value) {
        case Busy:
          Serial.println(F("Card not found"));
          break;
        case Sleeping:
          Serial.println(F("Sleeping"));
          break;
        case SerialWrongStack:
          Serial.println(F("Get Wrong Stack"));
          break;
        case CheckSumNotMatch:
          Serial.println(F("Check Sum Not Match"));
          break;
        case FileIndexOut:
          Serial.println(F("File Index Out of Bound"));
          break;
        case FileMismatch:
          Serial.println(F("Cannot Find File"));
          break;
        case Advertise:
          Serial.println(F("In Advertise"));
          break;
        default:
          break;
      }
      break;
    default:
      break;
  }

}

When running on the PMD with out the DFPLayer connected the result is: image

Behavior of PMDtoKRake_KrakeV2.ino versus DFPlayer_AllFunctions

The DFPlayer_AllFunctions firmware reports the DFPlayer unable to begin. The PMDtoKRake_KrakeV2.ino firmware never gets as far as the DFPLayer even starting.

Conclusion.

In Maryville, the PMDtoKRake_KrakeV2.ino is blocking in the delivery of the WiFi Manager. The code in Aley may not be the same.

CC: @nk25719

ForrestErickson commented 2 months ago

I have rewritten the PMDtoKRake_Krake setup() so that the DFPLayer initialization comes before the WiFi connection and now I get the same error of "DFPlayer Mini not detected:" This code also reports the firmware name and version and some additional information to help us make sure we know what code we are testing. I will commit the modified PMDtoKRake_Krake firmware

Screen shot of serial capture image

ForrestErickson commented 2 months ago

@nk25719 As a result of our work today and conversation today I am not sure if you still think 3.3V to the DFPlayer is a problem or not.

Please summarized what you think is the status as of today?

If we do not need to change the voltage then my wiring on my serial number USA1 system is complete now. I have just decide to call the system I built out of the homework2 PCB, the PMD assembly serial number USA1 the " USA1 Mocking Krake"

image

It is not (yet) mounted to a board and so is still fragile when probing.

nk25719 commented 1 month ago

DFPlayer Test Result (As of 2024-10-12)

After testing the DFPlayer with 3.3V, it is functioning properly. We can proceed without making any changes to the setup.

Closing.

ForrestErickson commented 1 month ago

@nk25719 The requirement from the DFPlayer web site shows the allowed VCC range as 3.2 - 5V.
image

That is why we can close this issue.