LED Blanche sur une ESP32-S3

Bonjour à tous,

Dans le cadre de mon auto-formation sur une ESP32-S3, j'avoue je me suis fait aider par ChatGPT pour faire allumer la led blanche sur ma carte
DollaTek ESP32-S3-DevKitC-1 ESP32-S3 WiFi Bluetooth BLE 5.0 Mesh Development Board ESP32 Wireless Module
https://amzn.eu/d/08vG99xwais pas moyen. On a essayé toutes les pins connues.

Pourriez-vous me dire si cette carte possède une led pilotable ou pas ? Je vous remercie

Bonjour goldorak57

Quel programme as tu essayé, mets le en ligne.

Cordialement
jpbbricole

Ah zut, là tu me prends de cours…mais je te le mets quand même. Tu vas certainement me dire que la variable de déclaration de la led, ou plutôt de la pin n’est pas correct. Mais sache qu’on a tout essayé…GPIO48…et toutes les autres.

Voici:

Edit: code correctement formaté visible au #7

Corriges ton message et mets ton code entre les balises idoines.

Dans un premier temps pour répondre à la question à quoi sert le programme ? Surtout quand le code n'est pas placé entre balise code et ne sera pas lu par les utilisateurs de téléphone ou de tablette.

J'ai trouvé ça :


Est-ce bien ta carte ?
C'est le point essentiel : part-on sur la bonne carte ?
Ton lien donne : Page not found.

Sur ce document la diode est commandée par le gpio 48.
S'il y a une seule pin de commande un rapide raisonnement fait dire que soit c'est une simple diode, soit c'est un composant adressable.

D'après la photo de la carte il y a 99 % de chance que ce soit un WS2812.
Encore une fois est-ce la bonne carte ?

Note :
Si le composant est une diode simple, actionner le gpio en le mettent à HIGH ou à LOW, suffit pour allumer ou éteindre.
Si l'action précédente ne fait rien, alors c'est bien un composant WS2812.
Il faut évidemment installer une bibliothèque le gérer.

N'utilisant pas l'IDE arduino, je ne sais pas ce qu'il y a de disponible dans son magasin de bibliothèques.

Avec PIO et un ESP32-S3 j'utilise « LiteLED ».
C'est la bibliothèque la plus simple que j'ai trouvée pour gérer une seule malheureuse WS2812.
N'importe quelle autre bibliothèque pour WS2812 conviendra.

#include <WiFi.h>
#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>
#include <BLE2902.h>

/\* ================= CONFIG ================= \*/

const char\* ssid = "Genista-Guests";
const char\* password = "Gen45-Band75!Gu23";

WiFiServer server(80);

/\* ================= BLE ================= \*/

#define SERVICE_UUID        "12345678-1234-1234-1234-1234567890ab"
#define CHARACTERISTIC_UUID  "abcd1234-5678-90ab-cdef-1234567890ab"
#define LED_PIN 2

BLECharacteristic\* pCharacteristic;

String lastBLEMessage = "Aucun message";
bool deviceConnected = false;


/\* ================= MOTOR ================= \*/

// ---- PINS ----
#define IN1 4
#define IN2 5
#define IN3 6
#define IN4 7
#define ENA 15
#define ENB 16

// ---- SPEED ----
int motorSpeed = 150;

/\* ===================================================== \*/
/\*                    MOTOR FUNCTIONS                   \*/
/\* ===================================================== \*/

void stopMotors() {
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, LOW);
  analogWrite(ENA, 0);
  analogWrite(ENB, 0);
}

void avancer() {
  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);

  digitalWrite(IN3, HIGH);
  digitalWrite(IN4, LOW);

  analogWrite(ENA, motorSpeed);
  analogWrite(ENB, motorSpeed);
}

void reculer() {
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, HIGH);

  digitalWrite(IN3, LOW);
  digitalWrite(IN4, HIGH);

  analogWrite(ENA, motorSpeed);
  analogWrite(ENB, motorSpeed);
}

void tournerGauche() {
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, HIGH);

  digitalWrite(IN3, HIGH);
  digitalWrite(IN4, LOW);

  analogWrite(ENA, motorSpeed);
  analogWrite(ENB, motorSpeed);
}

void tournerDroite() {
  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);

  digitalWrite(IN3, LOW);
  digitalWrite(IN4, HIGH);

  analogWrite(ENA, motorSpeed);
  analogWrite(ENB, motorSpeed);
}

/\* ===================================================== \*/
/\*                    BLE CALLBACKS                      \*/
/\* ===================================================== \*/

class ServerCallbacks : public BLEServerCallbacks {

  void onConnect(BLEServer\* pServer) override {
    deviceConnected = true;
    Serial.println(">>> BLE CLIENT CONNECTE");
  }

  void onDisconnect(BLEServer\* pServer) override {
    deviceConnected = false;
    Serial.println(">>> BLE CLIENT DECONNECTE");
  }
};

class CharacteristicCallbacks : public BLECharacteristicCallbacks {

  void handleCommand(String value) {

    if (value == "HELLO") {
      pCharacteristic->setValue("Bonjour utilisateur 😎");
    }

    else if (value == "STATUS") {
      pCharacteristic->setValue("WiFi OK | BLE OK");
    }

    else if (value == "LED_ON") {
      digitalWrite(LED_PIN, HIGH);
      pCharacteristic->setValue("LED ALLUMEE");
    }

    else if (value == "LED_OFF") {
      digitalWrite(LED_PIN, LOW);
      pCharacteristic->setValue("LED ETEINTE");
    }

    // 🔥 COMMANDES MOTEUR
    else if (value == "F") {
      avancer();
    }

    else if (value == "B") {
      reculer();
    }

    else if (value == "L") {
      tournerGauche();
    }

    else if (value == "R") {
      tournerDroite();
    }

    else if (value == "STOP") {
      stopMotors();
    }

    else {
      pCharacteristic->setValue("Commande inconnue");
    }
  }

  void onWrite(BLECharacteristic\* characteristic) override {

    String value = characteristic->getValue();

    Serial.print("Recu brut: \[");
    Serial.print(value);
    Serial.println("\]");

    value.trim();

    value.replace("\\x01", "");
    value.replace("\\x02", "");
    value.replace("\\x03", "");

    value.replace("t0", "");
    value.replace("T0", "");

    value.trim();
    value.toUpperCase();

    Serial.print("Apres nettoyage: \[");
    Serial.print(value);
    Serial.println("\]");

    lastBLEMessage = value;

    handleCommand(value);
  }
};

/\* ===================================================== \*/
/\*                        SETUP                          \*/
/\* ===================================================== \*/

void setup() {

  Serial.begin(115200);

  // MOTOR PINS
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
  pinMode(ENA, OUTPUT);
  pinMode(ENB, OUTPUT);

  pinMode(LED_PIN, OUTPUT);

  /\* -------- WIFI -------- \*/

  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);

  Serial.print("Connexion WiFi");

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("\\nWiFi Connecte !");
  Serial.println(WiFi.localIP());

  server.begin();

  /\* -------- BLE -------- \*/

  BLEDevice::init("ESP-32-PROJECT");

  BLEServer\* pServer = BLEDevice::createServer();
  pServer->setCallbacks(new ServerCallbacks());

  BLEService\* pService = pServer->createService(SERVICE_UUID);

  pCharacteristic = pService->createCharacteristic(
      CHARACTERISTIC_UUID,
      BLECharacteristic::PROPERTY_READ |
      BLECharacteristic::PROPERTY_WRITE |
      BLECharacteristic::PROPERTY_NOTIFY
  );

  pCharacteristic->addDescriptor(new BLE2902());
  pCharacteristic->setCallbacks(new CharacteristicCallbacks());
  pCharacteristic->setValue("READY");

  pService->start();

  BLEAdvertising\* advertising = BLEDevice::getAdvertising();
  advertising->addServiceUUID(SERVICE_UUID);
  advertising->start();

  Serial.println("BLE Service Pret !");
}

/\* ===================================================== \*/
/\*                        LOOP                           \*/
/\* ===================================================== \*/

void handleWebServer() {

  WiFiClient client = server.available();

  if (!client) return;

  client.setTimeout(10);
  client.readStringUntil('\\r');
  client.flush();

  client.println("HTTP/1.1 200 OK");
  client.println("Content-type:text/html");
  client.println("Connection: close");
  client.println();

  client.println("<html><body>");
  client.println("<h1>IoT Dashboard</h1>");

  client.println("<p><b>Etat BLE :</b> ");
  client.println(deviceConnected ? "Connecte" : "Deconnecte");
  client.println("</p>");

  client.println("<p><b>Dernier message BLE :</b> ");
  client.println(lastBLEMessage);
  client.println("</p>");

  client.println("<p><b>IP :</b> ");
  client.println(WiFi.localIP());
  client.println("</p>");

  client.println("</body></html>");

  client.stop();
}

void loop() {

  if (WiFi.status() != WL_CONNECTED) {
    WiFi.reconnect();
  }

  handleWebServer();
  delay(5);
}

Merci de m’avoir répondu, mais malheureusement non, ce n’est pas ma carte.

j’envoie un photo :

Par la même occasion, quelqu’un pourrait m’expliquer comment mettre mon code entre les balises ?

J’ai mis au début puis à la fin mais apparemment ce n’est pas encore juste. Merci

A 99,99% c'est une WS2812.

Donc sans la bibliothèque qui va bien, que dalle pour obtenir quoi que ce soit.

Le lien sur la carte que tu donnes est mort.

Dans l'IDE Arduino quelle carte as-tu sélectionnée ?

Toutes les cartes basées sur ESP32-S3 ont plus de 90 % des fichiers en commun.
Ce qui change c'est les variants et dans le répertoire variant le fichier pins_arduino.h dans lequel tu touveras la pin corespondant à la commande de la WS2812

C'est normalement dans la doc fabricant ou dans la doc vendeur ........quand on peut la consulter.

J'ai trouvé d'autres cartes
mot de recherche : « DollaTek ESP32-S3-DevKitC-1 schematic »
qui utilisent aussi la pin 48, cela semble respecté sur les devkitC-1.
Tu peux toujours essayer avec ta carte.

IMPORTANT :
Edites tes messages pour le code.

  1. Dans l'IDE tu indentes systématiquement le code (ctrl T) avant de le copier
  2. Tu clique sur le crayon en bas du message à modifier..
  3. Le message s'ouvre en mode modification.
  4. Tu sélectionnes toutes les lignes qui contiennent du code et dans la barre d'outils tu cliques sur l'icône

image

J’ai utilisé la ESP32S3 Dev Module

Merci pour tes réponses. Mais concernant mon code, je vais en rester là. Je me débrouillerais autrement.

Cordialement, et encore merci pour le temps passé.

Je suis au taf, et malheureusement je n‘ai pas trop le temps de poursuivre et surtout d’essayer de chercher comment envoyer un code. Si je n’y arrive pas, je procéderais d’une autre façon, comme par exemple de mettre mon code dan un fichier .txt

C’est pourtant pas compliqué

  • tu cliques sur l’icône code
  • tu colles ton code entre les balises, là où tu vois écrit "type or paste code here"

Oui, c’est peut-être facile comme tu dis, mais là je suis au taf et je travaille aussi sur AutoCAD et Microstation donc sur un ordi. Je regarderais plus tranquillement ce soir sur mon Laptop Dell et sans contrainte.

Mais t’inquiète, je vais respecter ce que tu m’as expliqué et je vais bien finir par y arriver. :wink:

Pour vous ce sont des choses que vous faites quotidiennement, ou que vous maîtrisez, moi j’apprends tous les jours et à 61 ans c’est un défis que je me suis lancé. Mais j’abandonne pas, et avec l’aide de ChatGPt et le semblant d’explication qu’il me donne, j’apprends à mon rythme et je peux lui reposer 2x la même question si je n’ai pas compris du premier coup…elle est pas belle la vie ? :joy: :joy:

C'est simple : il ne sera pas lu.

D'un autre côté quand on cherche à comprendre comment gérer la WS2812, on ne le fait pas avec un programme qui fait plusieurs pages écran.

Pour apprendre à gérer une WS2812, on vire tout ce qui n'est pas WS2812, c'est une question de bon sens.

Je viens d’essayer de refaire la manip pour envoyer mon code en cliquant sur et à aucun moment j’ai les 2 balises qui s’affichent, et j’ai encore moins de message ou d’information me demandant “type or paste code here” voilà peut-être l’explication de paraître à la ramasse.

C’est peut-être du fait que je sois sur Microsoft Edge, je vais du coup refaire la manip ce soir en étant chez moi avec un Dell et sans contraintes de blocage par Firewall ou Antivirus professionnel :wink:

Peut-être, mais on m’a demandé le code que j’utilise, et comme je suis un bon soldat, j’envoie le code que j’utilise à l’instant T dans mon Arduino IDE et c’était celui-là.

Je remettais l'église au centre du village.

  1. on s'assure de l'identité de la carte, puisque le programme va dépendre de la carte.
  2. on s'occupe du programme.

Le bon sens est que quand on teste un nouveau composant, on commence avant toute autre chose à faire un exemple fourni avec la bibliothèque.
Uniquement quand cet exemple fonctionne, on revient à son programme pour y intégrer ce composant.

Si tu ne respectes pas cette notion de bon sens, comme ton programme fait plusieurs pages écran, l'échec est quasi assuré.
La charrue se met après les bœufs et non pas avant.

C’est ce qui a été fait. Ce code a été fait en 5 ou 6x. Le premier code a été d’activer la Wifi, puis le BluetoothLE, le 3eme code à été de déclarer mon serveur Web, le 4ème code de faire des tests tout bête sur une page Web, et ainsi de suite. Avant-hier, j’ai reçu une autre carte ESP32-S3 car la première avait ses pins soudées et pas dans le bon sens, alors plutôt que de m’amuser à tous dessouder au risque de flinguer la carte, j’en ai racheté une autre. En l’occurrence celle de la photo plus haut au #post68. Celle-ci l’ayant reçu hier, avec l’aide de ChatGPT on s’est aperçu que la Led blanche n’était pas sur une proche pilotable. Nous avons fait au moins 5 essais différents donc avec 5 type de code différents pour essayer de trouver cette fameuse Led blanche. En débranchant mon connecteur USB-C puis le branchant à nouveau, aucune réaction de la Led blanche. Par élimination, on en a déduit que c’était pas une led pilotable.

Et oui, je sais où se mettent les Boeufs

Je pense que oui, essaies sur le GPIO 48, avec un exemple de la bibliothèque Neopixel ou FastLed

Ah d’accord, ça c’est nouveau. Je vais l’essayer en rentrant. Je garde l’info sous le coude. Merci

Ça peut être 48 ou 38, dépendant de la version de la carte.