Page 7 sur 7

Re: Montages ESP32 S3 WROOM

Posté : 25 oct. 2026, 21:21
par Clem68
:merciiii: à vous!
De quel chapeau sort la valeur 6E400001-B5A3-F393-E0A9-E50E24DCCA9E ?
Le chapeau ! C'est le tuto à lire.... :siffle:

Exercice: N°27.2

Contrôle d'une LED via Bluetooth
ex27.5.jpg
Le sketch:

Code : Tout sélectionner

/**********************************************************************
  Filename    : BLE_USART
  Description : Esp32 communicates with the phone by BLE and sends incoming data via a serial port
  Auther      : www.freenove.com
  Modification: 2024/07/01
**********************************************************************/
#include "BLEDevice.h"
#include "BLEServer.h"
#include "BLEUtils.h"
#include "BLE2902.h"
#include "String.h"

BLECharacteristic *pCharacteristic;
bool deviceConnected = false;
uint8_t txValue = 0;
long lastMsg = 0;
char rxload[20];

#define SERVICE_UUID "6E400001-B5A3-F393-E0A9-E50E24DCCA9E"
#define CHARACTERISTIC_UUID_RX "6E400002-B5A3-F393-E0A9-E50E24DCCA9E"
#define CHARACTERISTIC_UUID_TX "6E400003-B5A3-F393-E0A9-E50E24DCCA9E"
#define LED 2

class MyServerCallbacks : public BLEServerCallbacks {
  void onConnect(BLEServer *pServer) {
    deviceConnected = true;
  };
  void onDisconnect(BLEServer *pServer) {
    deviceConnected = false;
    //pServer->getAdvertising()->start(); //Reopen the pServer and wait for the connection.
  }
};

class MyCallbacks : public BLECharacteristicCallbacks {
  void onWrite(BLECharacteristic *pCharacteristic) {
    String rxValue = pCharacteristic->getValue();
    if (rxValue.length() > 0) {
      for (int i = 0; i < 20; i++) {
        rxload[i] = 0;
      }
      for (int i = 0; i < rxValue.length(); i++) {
        rxload[i] = (char)rxValue[i];
      }
    }
  }
};

void setupBLE(String BLEName) {
  const char *ble_name = BLEName.c_str();
  BLEDevice::init(ble_name);
  BLEServer *pServer = BLEDevice::createServer();
  pServer->setCallbacks(new MyServerCallbacks());
  BLEService *pService = pServer->createService(SERVICE_UUID);
  pCharacteristic = pService->createCharacteristic(CHARACTERISTIC_UUID_TX, BLECharacteristic::PROPERTY_NOTIFY);
  pCharacteristic->addDescriptor(new BLE2902());
  BLECharacteristic *pCharacteristic = pService->createCharacteristic(CHARACTERISTIC_UUID_RX, BLECharacteristic::PROPERTY_WRITE);
  pCharacteristic->setCallbacks(new MyCallbacks());
  pService->start();
  pServer->getAdvertising()->start();
  Serial.println("Waiting a client connection to notify...");
}

void setup() {
  pinMode(LED, OUTPUT);
  setupBLE("ESP32S3_Bluetooth");
  Serial.begin(115200);
  Serial.println("\nThe device started, now you can pair it with Bluetooth!");
}

void loop() {
  long now = millis();
  if (now - lastMsg > 100) {
    if (deviceConnected && strlen(rxload) > 0) {
      if (strncmp(rxload, "led_on", 6) == 0) {
        digitalWrite(LED, HIGH);
      }
      if (strncmp(rxload, "led_off", 7) == 0) {
        digitalWrite(LED, LOW);
      }
      Serial.println(rxload);
      memset(rxload,0,sizeof(rxload));
    }
    lastMsg = now;
  }
}
Allumage de la LED: led_on
Extinction : led_off



@+

Re: Montages ESP32 S3 WROOM

Posté : 26 oct. 2026, 17:07
par Clem68
Exercice: N°28

Lecture écriture sur carte sd

Le sketch:

Code : Tout sélectionner

    /**********************************************************************
      Filename    : SDMMC Test
      Description : The SD card is accessed using the SDMMC one-bit bus
      Auther      : www.freenove.com
      Modification: 2022/10/28
    **********************************************************************/
    #include "sd_read_write.h"
    #include "SD_MMC.h"

    #define SD_MMC_CMD 38 //Please do not modify it.
    #define SD_MMC_CLK 39 //Please do not modify it.
    #define SD_MMC_D0  40 //Please do not modify it.

    void setup(){
        Serial.begin(115200);
        SD_MMC.setPins(SD_MMC_CLK, SD_MMC_CMD, SD_MMC_D0);
        if (!SD_MMC.begin("/sdcard", true, true, SDMMC_FREQ_DEFAULT, 5)) {
          Serial.println("Card Mount Failed");
          return;
        }
        uint8_t cardType = SD_MMC.cardType();
        if(cardType == CARD_NONE){
            Serial.println("No SD_MMC card attached");
            return;
        }

        Serial.print("SD_MMC Card Type: ");
        if(cardType == CARD_MMC){
            Serial.println("MMC");
        } else if(cardType == CARD_SD){
            Serial.println("SDSC");
        } else if(cardType == CARD_SDHC){
            Serial.println("SDHC");
        } else {
            Serial.println("UNKNOWN");
        }

        uint64_t cardSize = SD_MMC.cardSize() / (1024 * 1024);
        Serial.printf("SD_MMC Card Size: %lluMB\n", cardSize);

        listDir(SD_MMC, "/", 0);

        createDir(SD_MMC, "/mydir");
        listDir(SD_MMC, "/", 0);

        removeDir(SD_MMC, "/mydir");
        listDir(SD_MMC, "/", 2);

        writeFile(SD_MMC, "/hello.txt", "Hello ");
        appendFile(SD_MMC, "/hello.txt", "World!\n");
        readFile(SD_MMC, "/hello.txt");

        deleteFile(SD_MMC, "/foo.txt");
        renameFile(SD_MMC, "/hello.txt", "/foo.txt");
        readFile(SD_MMC, "/foo.txt");

        testFileIO(SD_MMC, "/test.txt");
       
        Serial.printf("Total space: %lluMB\r\n", SD_MMC.totalBytes() / (1024 * 1024));
        Serial.printf("Used space: %lluMB\r\n", SD_MMC.usedBytes() / (1024 * 1024));
    }

    void loop(){
      delay(10000);
    }




@+

Re: Montages ESP32 S3 WROOM

Posté : 26 oct. 2026, 17:13
par likiki
:PetitPoucejpg: :PetitPoucejpg: :PetitPoucejpg:

Re: Montages ESP32 S3 WROOM

Posté : 26 oct. 2026, 19:17
par patrice_b
Clem68 a écrit : 25 oct. 2026, 21:21 :merciiii: à vous!
De quel chapeau sort la valeur 6E400001-B5A3-F393-E0A9-E50E24DCCA9E ?
Le chapeau ! C'est le tuto à lire.... :siffle:
Quel tuto stp ??
Merci.

C'est bon je l'ai, j'avais loupé le petit lien, vers le tuto, sorry !!

Re: Montages ESP32 S3 WROOM

Posté : 26 oct. 2026, 20:14
par Amigorl
Ha ok... Désolé, Clem, pas vu le lien vers le tuto.

Je comprends mieux, il faut installer Lightblue et 6E400001-B5A3-F393-E0A9-E50E24DCCA9E est son uuid DentBleue...

Faut synthétiser....

Je découvre, toujours un peu plus chaque jour et je n'aurai pas assez d'une vie pour faire le tour de toutes ces technologies même si je focalise sur mes utilisations ou projets.

Merci Patrice pour m'avoir mis sur la voie, j'aime bien comprendre en détail comment ça fonctionne ces trucs là, sinon aucun intérêt....

Je dois aller voir l'OPH maintenant...

Re: Montages ESP32 S3 WROOM

Posté : 26 oct. 2026, 22:22
par patrice_b
Pour un modéliste, mettre sur la voie c'est sa passion...

:siffle:

:PetitPoucejpg:

Re: Montages ESP32 S3 WROOM

Posté : 26 oct. 2026, 23:54
par Clem68
Profitez-en, je publierai encore 2 exercices et j’arrête les essais. Par contre je publierai les derniers mais je ne les ferai pas. Ils concerneront Wi-Fi et serveurs. Et ça ne m’intéresse pas d’aller bidouiller dans ces systèmes. J’ai fait le Bluetooth, c’est déjà pas mal. L’autre raison cela prend du temps et j’ai d’autres tâches qui m’attendent… les maquettes en impression 3d dont j’ai du mal à avancer…
@+

Re: Montages ESP32 S3 WROOM

Posté : 27 oct. 2026, 09:25
par C2Vues-BricoTrain
patrice_b a écrit : 26 oct. 2026, 22:22 Pour un modéliste, mettre sur la voie c'est sa passion...

:siffle:

:PetitPoucejpg:
Le tout, c'est de bien "aiguiller" les gens !

:hhhaaaa: :hhhaaaa: :hhhaaaa:

Re: Montages ESP32 S3 WROOM

Posté : 28 oct. 2026, 15:51
par Clem68
Les 2 derniers... :siffle:

Exercice: N°29

Musique sur carte sd v1
ex29.jpg
Le sketch:

Code : Tout sélectionner

    #include <Arduino.h>
    #include <WiFi.h>
    #include "FS.h"
    #include "SD_MMC.h"
    #include "AudioFileSourceSD_MMC.h"
    #include "AudioFileSourceID3.h"
    #include "AudioGeneratorMP3.h"
    #include "AudioOutputI2SNoDAC.h"

    #define SD_MMC_CMD 38 //Please do not modify it.
    #define SD_MMC_CLK 39 //Please do not modify it.
    #define SD_MMC_D0  40 //Please do not modify it.

    AudioGeneratorMP3 *mp3;
    AudioFileSourceID3 *id3;
    AudioOutputI2SNoDAC *out;

    AudioFileSourceSD_MMC *file = NULL;

    // Called when a metadata event occurs (i.e. an ID3 tag, an ICY block, etc.
    void MDCallback(void *cbData, const char *type, bool isUnicode, const char *string)
    {
      (void)cbData;
      Serial.printf("ID3 callback for: %s = '", type);

      if (isUnicode) {
        string += 2;
      }
     
      while (*string) {
        char a = *(string++);
        if (isUnicode) {
          string++;
        }
        Serial.printf("%c", a);
      }
      Serial.printf("'\n");
      Serial.flush();
    }

    void setup()
    {
      WiFi.mode(WIFI_OFF);
      Serial.begin(115200);
      delay(1000);
      SD_MMC.setPins(SD_MMC_CLK, SD_MMC_CMD, SD_MMC_D0);
      if (!SD_MMC.begin("/sdcard", true, true, SDMMC_FREQ_DEFAULT, 5)) {
          Serial.println("Card Mount Failed");
          return;
      }
      Serial.printf("Sample MP3 playback begins...\n");

      audioLogger = &Serial;
      file = new AudioFileSourceSD_MMC("/music/01.mp3");
      id3 = new AudioFileSourceID3(file);
      id3->RegisterMetadataCB(MDCallback, (void*)"ID3TAG");
      //out = new AudioOutputI2S();
      out = new AudioOutputI2SNoDAC();
      out->SetPinout(12,13,14);//Set the audio output pin, Only 14 were used
      out->SetGain(0.9);//Setting the Volume
      mp3 = new AudioGeneratorMP3();
      mp3->begin(id3, out);
    }

    void loop()
    {
      if (mp3->isRunning()) {
        if (!mp3->loop()) mp3->stop();
      } else {
        Serial.printf("MP3 done\n");
        delay(1000);
      }
    }
Le son est à peine audible.




Exercice: N°29.2

Musique sur carte sd v2

ex29.2.jpg
Le sketch:

Code : Tout sélectionner

    /**********************************************************************
      Filename    : SDMMC Music
      Description : Play music from the sd card.
      Auther      : www.freenove.com
      Modification: 2022/10/29
    **********************************************************************/
    #include "Arduino.h"
    #include "Audio.h"
    #include "FS.h"
    #include "SD_MMC.h"

    #define SD_MMC_CMD 38
    #define SD_MMC_CLK 39
    #define SD_MMC_D0  40
    #define I2S_BCLK  14
    #define I2S_DOUT  13
    #define I2S_LRC    12

    Audio audio;

    void setup() {
      Serial.begin(115200);
     
      SD_MMC.setPins(SD_MMC_CLK, SD_MMC_CMD, SD_MMC_D0);
      if (!SD_MMC.begin("/sdcard", true, true, SDMMC_FREQ_DEFAULT, 5)) {
        Serial.println("Card Mount Failed");
        return;
      }
      uint8_t cardType = SD_MMC.cardType();
      if (cardType == CARD_NONE) {
        Serial.println("No SD_MMC card attached");
        return;
      }
      if (cardType == CARD_MMC) {
        Serial.println("MMC");
      } else if (cardType == CARD_SD) {
        Serial.println("SDSC");
      } else if (cardType == CARD_SDHC) {
        Serial.println("SDHC");
      } else {
        Serial.println("UNKNOWN");
      }
      uint64_t cardSize = SD_MMC.cardSize() / (1024 * 1024);
      Serial.printf("SD_MMC Card Size: %lluMB\n", cardSize);

      audio.setPinout(I2S_BCLK, I2S_LRC, I2S_DOUT);
      audio.setVolume(12);  // 0...21

      audio.connecttoFS(SD_MMC, "/music/Jingle Bells.mp3");
    }

    void loop() {
      audio.loop();
      if (Serial.available()) {  // put streamURL in serial monitor
        audio.stopSong();
        String r = Serial.readString();
        r.trim();
        if (r.length() > 5) audio.connecttoFS(SD_MMC, r.c_str());
        log_i("free heap=%i", ESP.getFreeHeap());
      }
    }

    // optional
    void audio_info(const char *info) {
      Serial.print("info        ");
      Serial.println(info);
    }
    void audio_id3data(const char *info) {  //id3 metadata
      Serial.print("id3data    ");
      Serial.println(info);
    }
    void audio_eof_mp3(const char *info) {  //end of file
      Serial.print("eof_mp3    ");
      Serial.println(info);
    }
    void audio_showstation(const char *info) {
      Serial.print("station    ");
      Serial.println(info);
    }
    void audio_showstreamtitle(const char *info) {
      Serial.print("streamtitle ");
      Serial.println(info);
    }
    void audio_bitrate(const char *info) {
      Serial.print("bitrate    ");
      Serial.println(info);
    }
    void audio_commercial(const char *info) {  //duration in sec
      Serial.print("commercial  ");
      Serial.println(info);
    }
    void audio_icyurl(const char *info) {  //homepage
      Serial.print("icyurl      ");
      Serial.println(info);
    }
    void audio_lasthost(const char *info) {  //stream URL played
      Serial.print("lasthost    ");
      Serial.println(info);
    }


@+