ESP8266 erreur lors de la compilation

Bonjour, pourriez vous m'aider à comprendre ce que le compilateur me demande de faire?
J'utilise un D1 mini et dans l'IDE j'ai choisi Generic ESP8266 Module.
Le probleme semble venir de la déclaration des pins du 8266, mais je ne vois pas quoi mettre d'autre.

Le sketch est ici: GitHub - cmcgerty/Sofar2mqtt: A smart home interface for Sofar solar and battery inverters.

Et voici les erreurs en sortie de l'IDE:

/Users/franck/Downloads/Sofar2mqtt/Sofar2mqtt.ino:117:15: error: 'D6' was not declared in this scope
  117 | #define RXPin        D6  // Serial Receive pin
      |               ^~
/Users/franck/Downloads/Sofar2mqtt/Sofar2mqtt.ino:119:28: note: in expansion of macro 'RXPin'
  119 | SoftwareSerial RS485Serial(RXPin, TXPin);
      |                            ^~~~~
/Users/franck/Downloads/Sofar2mqtt/Sofar2mqtt.ino:118:15: error: 'D7' was not declared in this scope
  118 | #define TXPin        D7  // Serial Transmit pin
      |               ^~
/Users/franck/Downloads/Sofar2mqtt/Sofar2mqtt.ino:119:35: note: in expansion of macro 'TXPin'
  119 | SoftwareSerial RS485Serial(RXPin, TXPin);
      |                                   ^~~~~
/Users/franck/Downloads/Sofar2mqtt/Sofar2mqtt.ino: In function 'int sendModbus(uint8_t*, byte, modbusResponse*)':
/Users/franck/Downloads/Sofar2mqtt/Sofar2mqtt.ino:114:42: error: 'D5' was not declared in this scope
  114 | #define SERIAL_COMMUNICATION_CONTROL_PIN D5 // Transmission set pin
      |                                          ^~
/Users/franck/Downloads/Sofar2mqtt/Sofar2mqtt.ino:561:15: note: in expansion of macro 'SERIAL_COMMUNICATION_CONTROL_PIN'
  561 |  digitalWrite(SERIAL_COMMUNICATION_CONTROL_PIN, RS485_TX);
      |               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/franck/Downloads/Sofar2mqtt/Sofar2mqtt.ino: In function 'int listen(modbusResponse*)':
/Users/franck/Downloads/Sofar2mqtt/Sofar2mqtt.ino:644:24: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
  644 |   resp->errorMessage = "Response too short";
      |                        ^~~~~~~~~~~~~~~~~~~~
/Users/franck/Downloads/Sofar2mqtt/Sofar2mqtt.ino:649:24: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
  649 |   resp->errorMessage = "Valid data frame";
      |                        ^~~~~~~~~~~~~~~~~~
/Users/franck/Downloads/Sofar2mqtt/Sofar2mqtt.ino:654:24: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
  654 |   resp->errorMessage = "Error: invalid data frame";
      |                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/franck/Downloads/Sofar2mqtt/Sofar2mqtt.ino: In function 'void setup()':
/Users/franck/Downloads/Sofar2mqtt/Sofar2mqtt.ino:114:42: error: 'D5' was not declared in this scope
  114 | #define SERIAL_COMMUNICATION_CONTROL_PIN D5 // Transmission set pin
      |                                          ^~
/Users/franck/Downloads/Sofar2mqtt/Sofar2mqtt.ino:854:10: note: in expansion of macro 'SERIAL_COMMUNICATION_CONTROL_PIN'
  854 |  pinMode(SERIAL_COMMUNICATION_CONTROL_PIN, OUTPUT);
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

exit status 1

Compilation error: 'D6' was not declared in this scope

Comme le module existe, il faut le choisir afin que la définition de la carte soit prise en compte, notamment le fait que les pins sont nommées par D0, D1, D2, ...

image

Bonjour

le choix "D1 mini clone" conviendrait également

(l'ESP8266 n'a pas de bornes Dx, ce nommage est introduit par certains fabricants de cartes, d'où la nécessité de selectionner une carte qui par exemple associe D6 au GPIO12)

autre solution : utiliser systématiquement les numéros de GPIO = remplacer par exemple D6 par 12 dans le code

Sur les cartes D1 mini originales récentes (versions 3 et 4) les appellations Dx ont d'ailleurs disparu au profit des numéros de GPIO :
https://www.wemos.cc/en/latest/d1/d1_mini.html
image

Si je remplace par GPIO12 et GPIO13, erreur durant la compilation. J'ai bien sélectionné LOLIN(WEMOS) D1 R2 & mini.

/Users/franck/Downloads/Sofar2mqtt/Sofar2mqtt.ino:117:15: error: 'GPIO12' was not declared in this scope; did you mean 'GPC12'?
  117 | #define RXPin        D6  // Serial Receive pin
      |               ^~~~~~
/Users/franck/Downloads/Sofar2mqtt/Sofar2mqtt.ino:119:28: note: in expansion of macro 'RXPin'
  119 | SoftwareSerial RS485Serial(RXPin, TXPin);
      |                            ^~~~~
/Users/franck/Downloads/Sofar2mqtt/Sofar2mqtt.ino:118:15: error: 'GPIO13' was not declared in this scope; did you mean 'GPC13'?
  118 | #define TXPin        D7  // Serial Transmit pin
      |               ^~~~~~
/Users/franck/Downloads/Sofar2mqtt/Sofar2mqtt.ino:119:35: note: in expansion of macro 'TXPin'
  119 | SoftwareSerial RS485Serial(RXPin, TXPin);
      |                                   ^~~~~
/Users/franck/Downloads/Sofar2mqtt/Sofar2mqtt.ino: In function 'int sendModbus(uint8_t*, byte, modbusResponse*)':
/Users/franck/Downloads/Sofar2mqtt/Sofar2mqtt.ino:114:42: error: 'GPIO14' was not declared in this scope; did you mean 'GPC14'?
  114 | #define SERIAL_COMMUNICATION_CONTROL_PIN D5 // Transmission set pin
      |                                          ^~~~~~
/Users/franck/Downloads/Sofar2mqtt/Sofar2mqtt.ino:561:15: note: in expansion of macro 'SERIAL_COMMUNICATION_CONTROL_PIN'
  561 |  digitalWrite(SERIAL_COMMUNICATION_CONTROL_PIN, RS485_TX);
      |               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/franck/Downloads/Sofar2mqtt/Sofar2mqtt.ino: In function 'int listen(modbusResponse*)':
/Users/franck/Downloads/Sofar2mqtt/Sofar2mqtt.ino:644:24: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
  644 |   resp->errorMessage = "Response too short";
      |                        ^~~~~~~~~~~~~~~~~~~~
/Users/franck/Downloads/Sofar2mqtt/Sofar2mqtt.ino:649:24: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
  649 |   resp->errorMessage = "Valid data frame";
      |                        ^~~~~~~~~~~~~~~~~~
/Users/franck/Downloads/Sofar2mqtt/Sofar2mqtt.ino:654:24: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
  654 |   resp->errorMessage = "Error: invalid data frame";
      |                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/franck/Downloads/Sofar2mqtt/Sofar2mqtt.ino: In function 'void setup()':
/Users/franck/Downloads/Sofar2mqtt/Sofar2mqtt.ino:114:42: error: 'GPIO14' was not declared in this scope; did you mean 'GPC14'?
  114 | #define SERIAL_COMMUNICATION_CONTROL_PIN D5 // Transmission set pin
      |                                          ^~~~~~
/Users/franck/Downloads/Sofar2mqtt/Sofar2mqtt.ino:854:10: note: in expansion of macro 'SERIAL_COMMUNICATION_CONTROL_PIN'
  854 |  pinMode(SERIAL_COMMUNICATION_CONTROL_PIN, OUTPUT);
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

exit status 1

Compilation error: 'GPIO12' was not declared in this scope; did you mean 'GPC12'?

Si je laisse les D5, D6 et D7 voila la sortie du compilateur.

/Users/franck/Downloads/Sofar2mqtt/Sofar2mqtt.ino: In function 'int listen(modbusResponse*)':
/Users/franck/Downloads/Sofar2mqtt/Sofar2mqtt.ino:644:24: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
  644 |   resp->errorMessage = "Response too short";
      |                        ^~~~~~~~~~~~~~~~~~~~
/Users/franck/Downloads/Sofar2mqtt/Sofar2mqtt.ino:649:24: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
  649 |   resp->errorMessage = "Valid data frame";
      |                        ^~~~~~~~~~~~~~~~~~
/Users/franck/Downloads/Sofar2mqtt/Sofar2mqtt.ino:654:24: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
  654 |   resp->errorMessage = "Error: invalid data frame";
      |                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
. Variables and constants in RAM (global, static), used 30812 / 80192 bytes (38%)
║   SEGMENT  BYTES    DESCRIPTION
╠══ DATA     1516     initialized variables
╠══ RODATA   2016     constants       
╚══ BSS      27280    zeroed variables
. Instruction RAM (IRAM_ATTR, ICACHE_RAM_ATTR), used 62559 / 65536 bytes (95%)
║   SEGMENT  BYTES    DESCRIPTION
╠══ ICACHE   32768    reserved space for flash instruction cache
╚══ IRAM     29791    code in IRAM    
. Code in flash (default, ICACHE_FLASH_ATTR), used 273428 / 1048576 bytes (26%)
║   SEGMENT  BYTES    DESCRIPTION
╚══ IROM     273428   code in flash   

Si je remplace par GPIO12 et GPIO13, erreur durant la compilation. J'ai bien sélectionné LOLIN(WEMOS) D1 R2 & mini.

remplacer D6 par 12 (numéro du GPIO) pas par "GPIO12'

Si je laisse les D5, D6 et D7 voila la sortie du compilateur.

les 'warnings' ne sont pas des erreurs, la sortie du compilateur de montre pas d'erreur

Comment dois je interpréter les warnings dans ce cas ?

Plus d'erreur effectivement après avoir mis 14, 12 et 13.

/Users/franck/Downloads/Sofar2mqtt/Sofar2mqtt.ino: In function 'int listen(modbusResponse*)':
/Users/franck/Downloads/Sofar2mqtt/Sofar2mqtt.ino:644:24: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
  644 |   resp->errorMessage = "Response too short";
      |                        ^~~~~~~~~~~~~~~~~~~~
/Users/franck/Downloads/Sofar2mqtt/Sofar2mqtt.ino:649:24: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
  649 |   resp->errorMessage = "Valid data frame";
      |                        ^~~~~~~~~~~~~~~~~~
/Users/franck/Downloads/Sofar2mqtt/Sofar2mqtt.ino:654:24: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
  654 |   resp->errorMessage = "Error: invalid data frame";
      |                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
. Variables and constants in RAM (global, static), used 30812 / 80192 bytes (38%)
║   SEGMENT  BYTES    DESCRIPTION
╠══ DATA     1516     initialized variables
╠══ RODATA   2016     constants       
╚══ BSS      27280    zeroed variables
. Instruction RAM (IRAM_ATTR, ICACHE_RAM_ATTR), used 62559 / 65536 bytes (95%)
║   SEGMENT  BYTES    DESCRIPTION
╠══ ICACHE   32768    reserved space for flash instruction cache
╚══ IRAM     29791    code in IRAM    
. Code in flash (default, ICACHE_FLASH_ATTR), used 273428 / 1048576 bytes (26%)
║   SEGMENT  BYTES    DESCRIPTION
╚══ IROM     273428   code in flash   

si vous voulez virez les warning qui portent sur
warning: ISO C++ forbids converting a string constant to 'char*'

il faut changer la structure

le dernier attribut devrait être
const char* errorMessage

Je vous remercie, autre point. Est il normal que nul part dans le sketch ne soit déclarées les pins utilisées pour l'écran OLED ?

Je n'est trouvé que sa :

// Wemos OLED Shield set up. 64x48, pins D1 and D2
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 0  // GPIO0
Adafruit_SSD1306 display(OLED_RESET);

`Du coup je ne sais pas si leur nom est bon, car pour l'instant il ne fonctionne pas, il affiche une constellation de point blanc ...

cette ligne positionne la broche chargée du signal Reset en GPIO0 alias D3

SDA et SCL sont définis par ailleurs leur emplacement étant imposé dans les cas de l'ESP8266
Rien à ajouter à ce sujet dans le code
image

Pour information : quand tu sélectionnes une des cartes D1 Mini dans l'IDE voici le fichier qui est ajouté au code à ton sketch : (on y voit l'attribution des alias aux GPIOs)

Dans l'exemple c'est le Shields OLED qui est utilisé, moi j'ai ce model et il n'a pas de broche de RESET comme on peu le voir donc je suppose que c'est pour sa qu'il ne fonctionne pas?

Il est pas possible de gérer le reset autrement ?

c'est à toi dans le code d'indiquer explicitement un fonctionnement sans reset avec la valeur -1 pour OLED_RESET

#define OLED_RESET -1

C'est indiqué dans la documentation de la bibliothèque et visible dans au moins un des exemples fournis

Sorcellerie ?? :slight_smile:

Je suis en temps normal sous MacOS.

J'ai récupéré un pc sous Windows 10, IDE 2.2.1, même carte 8266, même choix LOLIN(WEMOS) .... et la pas d'erreur dans le compilateur, nul besoin de modifier les pins, etc ...

Par contre une fois uploader, le sketch ne fonctionne pas, l'ESP ne ce connecte pas au wifi et l'oled affiche une constellation de pixel blanc. J'ai testé avec un sketch de démo l'ESP et l'OLED et tout fonctionne.

Si vous pouvez me guider pour me dire ou je pêche je suis preneur

Voila la sortie du moniteur série.

Il faut vérifier aussi si la définition des cartes est à jour ainsi que les préférences de compilation

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