[Résolu] Problème ESP32c3 super mini (et problème de librairie)

salut à tous

j'ai depuis pas mal de temps un esp32c3 super mini, le même que celui dans ce sujet

je voulais testé l'affichage sur un mini oled 0.96" i2c donc je me dis c'est le moment de testé esp32 pour changer du 328p.

je me décide enfin à testé l'esp32 ( je l'ai déballé il y a 48h environ), 1er problème la led power ne s'allume pas, j'ai mis du temps mais j'ai trouver comment le mettre en mode 1er firmware, j'ai inséré le firmware blink de la led bleu (sur le pin8) mais rien à faire aucune des led ne s'allume. j'ai essayé d'inséré un firmware pour testé l'écran oled trouvé ici

j'ai bien respecté le câblage mais rien ne fonctionne en étant branché sur l'usb. j'ai donc pensé à une défaillance sur une partie du circuit en sortie de l'usb, j'ai alors branché une alimentation régulé par un lm2596 (réglé sur 5v avant branchement au 5v de l'esp). correspondance d câblage ici, le circuit me ressort bien le 3.3v sur la sortie dédié

le téléversement du firmware s'est bien passé les 2 fois je suppose donc que mon esp32 n'est pas complètement défaillant

et aucun affichage sur l'oled,

dans le firmware je ne vois pas de #define pour les bornes SDA et SCL,

cela ne fonctionne pas car mon esp est défailant ou car les bornes SDA et SCL ne sont pas correctement appeler et qui serait donc pas sur les bonnes pin de ma carte ?

Pourquoi ne pas modifier l'Example blink pour mettre sur une autre sortie et y connecter une led et sa résistance?

En effet j'ai pas réfléchis cette fois, alors qu'en temps normal c'est moi qui ferais cette suggestion, je teste ça et je vous dis

Qu'est-ce que tu appelles "firmware" ?

Dans le principe du système arduino les particularités des différentes cartes, le brochage en est une, sont dans le fichier "pins_arduino.h".

Ce fichier qui ne dépend que du microcontroleur, ici l'ESP32-C3, se trouve dans le répertoire "variants".

Je mets le code du fichier pour l'esp32-C3 générique.

 #ifndef Pins_Arduino_h
#define Pins_Arduino_h

#include <stdint.h>
#include "soc/soc_caps.h"

#define EXTERNAL_NUM_INTERRUPTS 22
#define NUM_DIGITAL_PINS        22
#define NUM_ANALOG_INPUTS       6

static const uint8_t LED_BUILTIN = SOC_GPIO_PIN_COUNT+8;
#define BUILTIN_LED  LED_BUILTIN // backward compatibility
#define LED_BUILTIN LED_BUILTIN
#define RGB_BUILTIN LED_BUILTIN
#define RGB_BRIGHTNESS 64

#define analogInputToDigitalPin(p)  (((p)<NUM_ANALOG_INPUTS)?(analogChannelToDigitalPin(p)):-1)
#define digitalPinToInterrupt(p)    (((p)<NUM_DIGITAL_PINS)?(p):-1)
#define digitalPinHasPWM(p)         (p < EXTERNAL_NUM_INTERRUPTS)

static const uint8_t TX = 21;
static const uint8_t RX = 20;

static const uint8_t SDA = 8;
static const uint8_t SCL = 9;

static const uint8_t SS    = 7;
static const uint8_t MOSI  = 6;
static const uint8_t MISO  = 5;
static const uint8_t SCK   = 4;

static const uint8_t A0 = 0;
static const uint8_t A1 = 1;
static const uint8_t A2 = 2;
static const uint8_t A3 = 3;
static const uint8_t A4 = 4;
static const uint8_t A5 = 5;

#endif /* Pins_Arduino_h */

Pour moi (PlatformIo sur vscode + Linux) le chemin est :
~/.platformio/packages/framework-arduinoespressif32/variants/esp32c3$pins_arduino.h.

A adapter un petit peu , sur la C3-super-mini il n'y a pas de diodes RGB.

Tuyau :
Si tu as un doute sur des connexions comme I2C, SPI, tu peux écrire un petit programme :

Serial.print("SDA = ");
Serial.println(SDA);

Tu obtiendra 8 comme réponse bien plus vite que de fouiller dans les fichiers de l'IDE.
Idem pour le SPI ou la liaison série.

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

Concernant l'I2C et ESP32-C3.
Au printemps, Espressif a publié une version boguée d'ArduinoEspressif (3.2 ou 3.3 ou ? je ne sais plus).
Je ne sais pas où cela en est.

J'avais constaté le même bug sur la version pour l'IDE arduino comme sur PlatformIO.
Il fallait revenir sur des anciennes versions.

En ce moment, je suis sur un portable secondaire qui est encore en version 2.x et tout fonctionne au poil, je me garde bien de mettre à jour sans avoir la certitude que tout est rentré dans l'ordre.

Sur mon PC principal j'avais contourné le problème en utilisant un fork de la version de PlatformIO IDE (→ pioarduino).

Actuellement, je ne sais pas où cela en est.

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

Pour revenir a ton problème.
J'utilise une carte ESP32-C3 super mini et le même écran que toi et tout fonctionne.

Je suis un peu inquiet de ce que tu écris :

Pas bon du tout !

Est-tu certain de ne pas avoir fait une fausse manip ?
Pas de court-circuit (accidentel bien sûr) sur le 3,3 V ?

Cela arrive à tout le monde, le régulateur 3,3 V de la carte est fragile.
Je peux le confirmer :grinning_face: → la sortie 3,3 V du régulateur a fait preuve de mauvais caractère en n'appréciant pas que j'y connecte un fil relié à la masse.
C'était la pin d'à côté, juste une toute petite erreur d'un pas, manque total de coopération, inadmissible :grinning_face:.

La carte peut toujours fonctionner à condition de l'alimenter directement en 3,3 V.
Au prix où cette carte est vendue, je les achète par paquet de 5.
Parce qu'il existe une version améliorée sur la portée du WiFi et les vendeurs cassent les prix pour vider leurs étagères.

@Leptro : merci grâce à toi je suis partiellement rassuré, en effet quand je branche Une led externe (led jaune et résistance 1.8kohm) sur la sortie GPIO8, la led clignote bien mais pas la led du circuit.

j'ai remodifier le firmware pour mettre le blink sur la sortie 10, et j'ai déplacé ma connexion de la led externe sur le pin 10 et ça fonctionne, donc mon esp est pas HS

@68tjs : non je n'ai pas fais d'erreur de câblage, jusqu'à l'insertion de blink la 1ère fois, les pin dupond n'etait pas encore soudé sur la carte donc je ne pouvais pas faire d'erreur.

je suis très doué pour avoir de la poisse donc je vérifie tout 2 ou 3 fois pour les raccordement.

j'ai testé en rajoutant tes 2 lignes dans ma boucle du blink et oui j'ai bien le retour du moniteur série qui dit 8, reste plus qu'à réussir à faire affiché sur le oled du contenu

j'ai remis le firmware pour l'affichage oled, j'ai toujours rien sur l'ecran j'ai donc regarder le moniteur série et j'ai les messages suivants
E (15845) i2c.master: s_i2c_synchronous_transaction(945): I2C transaction failed

E (15852) i2c.master: i2c_master_multi_buffer_transmit(1207): I2C transaction failed

E (15859) i2c.master: I2C hardware NACK detected

une idée ?

Voila ce que je fais (pompé à partir des exemples de la bibliothèque):

Inclusion de bibliothèques :

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

Déclaration d'un objet écran :

#define SCREEN_WIDTH 128    // OLED display width, in pixels
#define SCREEN_HEIGHT 64    // OLED display height, in pixels
#define OLED_RESET -1       // Reset pin # (or -1 if sharing Arduino reset pin)

Adafruit_SSD1306 ecran(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

Utilisation de l'écran :

ecran.begin(SSD1306_SWITCHCAPVCC, 0x3C) ;

ecran.clearDisplay();
 
ecran.setTextSize(1);
ecran.setTextColor(WHITE);
ecran.setCursor(25, 10);
  
ecran.println("Test affichage");
ecran.display(); // Indispensable

Note : les commandes adressées à l'écran ne s'exécutent que si on les termine en faisant appel à la méthode "display()".

Je reste sur le bug I2C avec les dernières versions d'ArduinoEspressif 3.x.

Là avec une V2.x cela fonctionne
En Juin avec une V3.2 ou 3.3 (je ne sais plus vraiment) cela capotait complètement.
D'où mon utilisation d'un fork.

Je pense qu'un mois plus tard, le bug devrait être résolu.

Peux-tu passer en version 2, je suppose que tu utilises l'IDE arduino.

je suis sur ide 2.3.6, j'ai testé un code obtenu par méta Ai qui est presque identique à celui que tu m'a donné, au quel j' ajouté le blink et le retour moniteur série pour être sur que mon code soit bien passé.

#include <Wire.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
#define LED 10

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

void setup() {
  Serial.begin(9600);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3D);
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0, 0);
  display.println("Bonjour !");
  display.display();
pinMode(LED, OUTPUT);

}

void loop() {
  digitalWrite(LED, HIGH);  // turn the LED on (HIGH is the voltage level)
  delay(1000);                      // wait for a second
  digitalWrite(LED, LOW);   // turn the LED off by making the voltage LOW
  delay(1000);                      // wait for a second
Serial.print("SDA = ");
Serial.println(SDA);

}

j'ai bien la led sur Le GPIO10 qui clignote, le retour de 8 sur le moniteur série mais toujours rien sur le oled

si non il faut que j'essaie avec visual studio ? ou le problème est ailleurs ?

j'ai demandé à l'ia pour voire ce qu'elle en fait

bon j'ai trouvé un contournement du problème grâce à @68tjs quand tu as parlé d'utilisation d'un fork, en effet la librairie adafruit semble avoir un problème lié à un des éléments utilisé, j'ai chercher directement sur google et j'ai rien trouvé, mais en demandant à méta Ai et quelques insistances il m'a proposé U8G2 et en effet là ça marche bien.

merci de vos promptes réponses, je vais enfin pouvoir débuté 2 projets,

le 1er est un retrofit d'une presse hydraulique avec affichage du niveau de pression et affichage de la descente du piston mesuré par une règle numérique

NON
Tu mélanges tout.

Je ne parlais pas des bibliothèques pour utiliser un composant.
Je parle de ce qui est génériquement appelé l'IDE.

je répondais à ça que tu as posté :

E (15845) i2c.master: s_i2c_synchronous_transaction(945): I2C transaction failed

Au printemps dernier le problème se trouvait dans les fonctions qui permettent d'utiliser l'I2C avec un ESP32.

Exemple digitalWrite() est une fonction qui reçoit LOW ou HIGH et qui va modifier les registres du micro qui vont bien.
Tu écris simplement LOW ou HIGH et la fonction digitalWrite() fait tout le boulot.

Mais, si pour modifier une sortie, le nom digitalWrite est le même quel que soit le micro, le code sera complètement différent d'un micro à l'autre.

C'est cet ensemble de fichiers écrit en C ou en Cpp que tu télécharges par l'intermédiaire de l'IDE. Cela n'a strictement rien à voir avec les bibliothèques de composants.

En conclusion :
Le bogue I2C Espressif a été résolu.
C'est une bonne chose, je vais pouvoir mettre à jour mon platformIO.

Je me fiche totalement des bibliothèques que tu utilises, c'est ton problème, c'est ta liberté. Du moment que ça fonctionne, c'est le principal.

Mais je ne peux pas laisser passer que tu laisses entendre qu'une bibliothèque ne fonctionne pas alors qu'il ne fait aucun doute, puisque je vois l'écran fonctionner sous mes yeux, que c'est toi qui n'as pas su la faire fonctionner ou que tu avais un défaut dans le câblage.

E (15845) i2c.master: s_i2c_synchronous_transaction(945): I2C transaction failed

Les bogues sont le plus souvent entre la chaise et le clavier.
Quand cela ne fonctionne pas il faut se poser la question : qu'est-ce que j'ai encore fait comme connerie.
Qu'on soit débutant ou chevronné ne change rien, les bêtises on en fait toujours.

Mon cher @68tjs je ne remet pas en doute tes connaissances en programmation qui sont clairement bien meilleures que les miennes.

Je peux mal interpreté une reponse qu'un me donne, mais j'ai aucun interet a dire (ou écrire) n'importe quoi, en changeant de bibliothèque donc pas de midification du câblage mon problème s'est résolu.

Oui mon esp32c3 super mini est tres bas de gamme. J'ai bien fais attention d'installer toutes les bibliothèques des cartes esp32 pour sélectionner la bonne surtout que la detection automatique me selectionnais esp32 dev donc plusieurs dois j'ai dû aller chercher la bonne selection.

Et je suis le 1er a dire que 80% des problèmes sont entre la chaise et le clavier. Mais si il y a une variation subtile entre les 2 bibliothèques c'est elle qui a fais la différence dans mon cas.

Je te rappel que je ne suis pas le seul humain, les créateurs des bibliothèques aussi, il ne faut pas se dire que tout est sans faille car on à pas encore eu le problème.

Je suis très doué pour avoir de la malchance et quand un problème peut survenir, souvent il tombe sur moi (defaut sur la carte les led ne fonctionne pas dès le premier branchement) donc ne parle pas d'impossible mais de rare ou d'improbable

Mais encore merci car grace a toi j'ai trouvé une solution fonctionnelle, au plaisir de te relire

méaculpa, j'ai la réponse au problème pas logique, l'écran oled est indiqué 12864 dans le code il est bien indiqué adresse ecran pour le 12864 0x3D et 0x3C pour le 128*32

mon écran étant un 128*64 j'ai respecté l'adresse indiqué dans les commentaires du code, mais dans la même page de tuto il donne l'adresse 0x3c pour cet écran. j'ai donc corriger l'adresse et là ça fonctionne

Bien.
L'important est que tu as trouvé l'explication.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.