Une expérience « malheureuse » qui montre que toutes les pins du Wemos ne sont pas utilisables n’importe comment.
En voulant utiliser deux lignes de ce circuit pour des entrées de configuration positionables à 0 ou 1 par des micro-switch, il s’est avéré impossible de télécharger un shetch avec l’IDE Arduino. Au boot suivant le système ne répondait pas, sauf après avoir débranché les connecteurs reliées aux lignes d’E/S.
L’étude de la documentation disponible montre que les pins D3, D4, D8 contrôlent ces fonctions de boot et de téléversement (et je suis tombé dans le piège en utilisant ces pins):
Source: https://zoetrope.io/tech-blog/esp8266-bootloader-modes-and-gpio-state-startup/
« Bootloader Modes
The bootloader can go into a number of modes depending on the state of GPIOs 0, 2 and 15. The two useful modes are the UART download mode (for flashing new firmware) and the flash startup mode (which boots from flash). »
(tableau mis en forme et surligné par moi)
« GPIO state on startup
When choosing GPIO pins to use, it’s best to avoid GPIO 0, 2 and 15 unless absolutely necessary. If you do end up using them, you’ll need pullups / pulldowns to ensure the correct bootloader mode. You should also be aware of the fact that GPIO 0 is driven as an output during startup (at least with NodeMCU).
Here’s what we found: 40ms after startup, the GPIO0 line is driven with a signal at around 350 Hz for around 100 ms. So make sure you don’t rely on GPIO0 being stable for the first ~200 ms after startup.
»
Comment j’ai résolu mon problème:
- D’abord en n’utilisant pas la pin D3 ce qui veut dire qu’elle reste inactive (3ème état: haute impédance) puisque elle doit être à 0 pour le téléversement et à 1 pour le boot, ce qui est compliqué à gérer d’autant que pendant le boot elle est en sortie (oscillo ci-dessus) ce qui peut être très gênant vis à vis du processus commandé.
- En utilisant la pin D8 comme une sortie (permutation de l’utilisation de pins) qui pilote alors un transistor NPN d’interface et en ramenant celle-ci au niveau 0 par une résistance de pullDown de 10 kΩ: le boot et le téléversement sont alors possibles.
Autres possibilités:
- Utiliser la pin D4 en sortie avec résistance de pullUp de 10 kΩ associée à un transistor PNP par exemple pour piloter une diode IR.
- Utiliser un condensateur et une résistance pour réaliser une temporisation à la mise sous tension pour les pins D4 et D8. Par exemple pour le boot:
(Les valeurs indiquées devraient fournir une temporisation de 0.2 s avant d’atteindre 1 V – constante de temps de 1 s -.)
- Avec le Wemos utiliser un module I2C qui ajoute 16 lignes d’E/S (MCP23017 – 2.76€ chez Bangood.com -), et vous ne serez pas gêné par le nombre d’E/S ou utiliser à la place du Wemos D1 un ESP32 !
- A vous d’imaginer d’autres solutions …
Mais comme le dit la source citée: il vaut mieux ne pas utiliser ces pins … si vous ne voulez pas vous compliquer la vie (en particulier D3).
Pour les fonction des pins du Wemos voir en particulier: https://www.esp8266.com/wiki/doku.php?id=esp8266_gpio_pin_allocations
Gaston