ESP32 devkit v1

Ici sont rassemblés des informations pour travailler avec un ESP32 devkit. Ce kit a été créé par une boite nommée Espressif. https://www.espressif.com/en/products/hardware/esp32/overview

Avant toute chose, il faut bien vérifier le modèle de l'ESP32 board que vous utilisez, car il existe de noumbreux modèles differents, avec pour chacun un cablage différents.

La version “lolin32” semble être un bon choix pour une carte de developpement, car elle fit mieux sur une breadbord. Il reste une ligne de chaque côté de la breadbord pour connecter des fils. Elle dispose de quoi brancher une batterie et du nécéssaire de recharge de la baterie, et consomme très peu de courant en deepsleep mode. Néansmoins, il semble qu'il faille toujours souder les connecteurs sois même.

Un tuto complet ici : https://mjrobot.org/iot-made-simple-playing-with-the-esp32-on-arduino-ide/. Attenton, votre ESP32 est probablement cablé différement !

Beaucoup de versions sont listés dans ce magnifique document google : vous trouverez forcément chaussures à votre pied. Vous pouvez trier le document par un tas de critères, comme “breadboard friendly”, présence d'un ecran, présence d'un transceiver LoRa, présence d'une gestion de charge de batterie, …

Voici les détails techniques colléctés en vrac depuis le site internet de https://mjrobot.org.

Fonctionnalités clées

  • 240 MHz dual-core Tensilica LX6 microcontroller avec 600 DMIPS
  • 520 KB SRAM intégré
  • Émetteur-récepteur Wi-Fi 802.11 b/g/n HT40 Wi-Fi transceiver intégré, baseband, stack et LwIP
  • Bluetooth dual mode intégré (classic et BLE)
  • 16 MB flash, memory-mapped to the CPU code space
  • 2.3V to 3.6V operating voltage
  • Temperature de fonctionnement de -40°C à +125°C
  • Onboard PCB antenna / IPEX connector for external antenna

Capteurs

  • Ultra-low noise analog amplifier
  • Capteur à effet Hall
  • 10x capacitive touch interfaces
  • 32 kHz crystal oscillator

34 ports GPIO

  • 3 x UARTs, including hardware flow control
  • 3 x SPI
  • 2 x I2S
  • 18 x ADC input channels
  • 2 x DAC
  • 2 x I2C
  • PWM/timer input/output available on every GPIO pin
  • OpenOCD debug interface with 32 kB TRAX buffer
  • SDIO master/slave 50 MHz
  • Supports external SPI flash up to 16 MB
  • SD-card interface support

Securité des communications

  • WEP, WPA/WPA2 PSK/Enterprise
  • Hardware accelerated encryption: AES/SHA2/Elliptical Curve Cryptography/RSA-4096

Performance

  • Supports sniffer, Station, SoftAP and Wi-Fi direct mode
  • Max data rate of 150 Mbps@11n HT40, 72 Mbps@11n HT20, 54 Mbps@11g, and 11 Mbps@11b
  • Maximum transmit power of 19.5 dBm@11b, 16.5 dBm@11g, 15.5 dBm@11n
  • Minimum receiver sensitivity of -97 dBm
  • 135 Mbps UDP sustained throughput
  • 5 μA power consumption in Deep-sleep

L'installation de la carte sur Arduino IDE est documenté sur le projet github .

Le projet annonce que la plupart du framework arduino est implémenté.

Mes premiers ESP32 devkit semblent etre des “ESP32 devkit v1”. C'est un terme plutot générique et il existe beaucoup de kit differents avec ce nom. Mon devkit est chiant car il n'est pas breadboard friendly. Lorsque je le monte sur une breadboard, je n'ai accès quà un côté des pins dispositif.

Voici un tuto bien étoffé pour commencer à bricoler rapidement avec le meme ESP32 devkit que le mien : https://mjrobot.org/iot-made-simple-playing-with-the-esp32-on-arduino-ide/

Ports de communications SPI

cf: http://iot-bits.com/esp32/esp32-spi-tutorial-part-1/

Sur l'ESP32, 2 ports SPI sont disponnibles :

  • SPI2 (HSPI)
  • SPI3 (VSPI)

Sketch examples pour manipuler les 2 ports SPI hardware : https://github.com/espressif/arduino-esp32/blob/master/libraries/SPI/examples/SPI_Multiple_Buses/SPI_Multiple_Buses.ino

HSPI (SPI2)

  • CLK ⇒ GPIO 14
  • MISO ⇒ GPIO 13
  • MOSI ⇒ GPIO 12
  • SS ⇒ GPIO 15

VSPI (SPI3)

  • CLK ⇒ GPIO 18
  • MISO ⇒ GPIO 23
  • MOSI ⇒ GPIO 19
  • SS ⇒ GPIO 5

Notes

  • GPIO2 pilote la diode bleue.
  • GPIO22 pas utilisable en INPUT ou en INPUT_PULLUP ?

Troubleshooting

  • Lors de l'UPLOAD du code compilé: l'erreur suivante apparait : “Serial object has no attribut dtr”. Pour régler cela il faut maj la biblothèque python pyserial: sudo pip install –upgrade pyserial
  • Lors de l'UPLOAD du code compilé: l'erreur suivante apparait : “Failed to connect to ESP32: Timed out waiting for packet header”. Il faut vérifier que les pin RX0/TX0 (GPIO3/GPIO1) de l'ESP32 ne sont pas utilisés. Ces 2 pins servent à la liaison de debug.
  • Ajouter l'utilisateur dans le groupe dialout.

Pilotage d'un écran TFT 240x240 px : le ST7789

Cablage

  • 1 GND Power ground
  • 2 VCC Power 3.3+
  • 3 SCL SPI clock line
  • 4 SDA SPI data line
  • 5 RES Reset
  • 6 DC Data/command selection foot
  • 7 BLK Backlight control, the default can be left floating, low level to turn off the backlight.

Je recommande la lib TFT-eSPI de Bodmer qui permet de driver beaucoup d'écran, et qui est construite sépcifiquement pour les ESP. Elle permet notamment le choix de l'un ou l'autre des 2 ports SPI hardware de l'ESP32. La lib est disponible dans le lib manager arduino ou sur github ici : https://github.com/Bodmer/TFT_eSPI
Je déconseil la lib d'Adafruit qui n'a jamais voulu fonctionner avec un SPI hardware de l'ESP32.
Configuration de la lib TFT-eSPI dans le fichier User_Setup.h :

#define ST7789_DRIVER  
 
#define TFT_WIDTH  240
#define TFT_HEIGHT 240
 
#define TFT_MISO 23
#define TFT_MOSI 19
#define TFT_SCLK 18
#define TFT_CS   -1  // Chip select control pin
#define TFT_DC   15  // Data Command control pin
#define TFT_RST   22  // Reset pin (could connect to RST pin)

Plus de code sur github ici : https://github.com/mxbossard/laperco-capteurs/blob/master/arduino_sketches/screen_test_2/screen_test_2.ino

Mon objectif initial est de tester des librairies graphiques en vue d'un futur projet sur ce genre de hardware (teasing de ouf). J'avais sous la main un écran ST7735 (en 128x160px) qui embarque également un port microSD, je l'ai acheté à vil prix chez une grande enseigne française d'électronique. Le module ESP32 m'a été gentiment prêté par Gaziel qui en avait un au fond de son sac. Celui-ci viens du marché chinois des internets et laisse une rangé de libre de chaque coté de la breadboard une fois enfiché.

Hardware

L'écran

l'écran est un 1.8' de chez Joy-it: http://anleitung.joy-it.net/?goods=1-8-tft-lcd-st7735 . Il embarque également un port microSd: une partie de l'adressage du module est consacré au display et l'autre au stockage. On notera que ce module ne possède pas de pin “LED” contrôlant le rétro-éclairage, certains modules concurrents en disposent ce qui permet de piloter la luminosité depuis l'ESP32. Mon module est toujours éclairé au max.

Le montage

Le montage respecte le schéma présenté sur le site Xtronical. Choix moyennement judicieux, on y reviendra dans la partie software. Il diverge dans l'adressage des pins CS, RTS et DC par rapport au montages qu'on peu trouver chez Adafruit par exemple. La connexion à la pin LED à été ignorée sur mon montage.

wiringdiagram.jpg

LCD SCREEN NODEMCU ESP32
5V 3v3
GND GND
LED 5V
SCL (SPI Clock) GPIO18 VSPI SCK (SPI Clock)
SDA (SPI Data) GPIO23 VSPI MOSI (MOSI, Data to Screen)
RS (Register Select) GPIO2 (labelled as DC in Adafruit code)
RST (Screen reset) GPIO4
CS (Chip Select : Defined as Slave Select in SPI) If low this device is active on data lines GPIO5 VSPI SS (Slave Select/ Chip Select)

Software

Les librairies

  • Une des premières documentation que j'ai eu étant le site de Xtronical j'ai utilisé les libraies qu'il recommandait. Le résultat était correct mais à un écran de résolution 128×128 (toujours avec le chipset ST7735) apparassait du “junk”(ou du bruit, appelez ça comme vous voulez) sur la partie non adressé de l'écran (cf. image de droite). J'ai cru bon de modifier cette lib pour retrouver la résolution cible ce qui se traduisit par un échec cuisant.
  • J'ai ensuite répéré la librairie ESP32_TFT_library que je ne suis pas parvenu à intégrer dans un projet sur Arduino Ide.
  • J'ai enfin arrêté de faire pas comme les autres et me suis rabatu sur la lib d'Adafruit (la même que max). J'ai adapté les sorties GPIO pour correspondre au schéma ci-dessus:
#define TFT_CS         5
#define TFT_RST        4 // Or set to -1 and connect to Arduino RESET pin
#define TFT_DC         2
  • Le truc un peu foufou avec cette lib c'est qu'adafruit à repéré que selon le fournisseur ou le batch du module on tombait sur des dalles qui on des params différents. On peu donc en fonction de son matériel voir apparaitre du junk sur les brods de l'écran voir avoir l’adressage des couleurs inversé. La fonction initR(*) permet de charger le bon setup pour chaque écran. Dans mon cas j'ai utulisé le setup INITR_GREENTAB, ce qui correspond à la couleur de l'étiquette sur la protection écran, détail qui permet de différencier certains display. (astuce de ouf, je ne m'en suis toujours pas remis)
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
 
  tft.initR(INITR_BLACKTAB);      // Init ST7735S chip, black tab
  tft.initR(INITR_GREENTAB);      // Init ST7735S chip, green tab
  //  if using a 1.44" TFT:
  tft.initR(INITR_144GREENTAB); // Init ST7735R chip, green tab
  //if using a 0.96" 180x60 TFT:
  tft.initR(INITR_MINI160x80);  // Init ST7735S mini display
  // etc.

Notes

  • todo

Un tuto interessant au sujet de l'outillage pour construire des pages web en économisant l'espace mémoire : https://nathanmcminn.com/2018/09/23/a-modern-micro-web-stack-for-the-esp32/ On y parle notamment de SPIFFS le mini File System disponible pour ESP32. cf : https://github.com/ntmcminn/arduino-examples/blob/master/esp32-ap-mode/esp32-ap-mode.ino

  • esp32_devkit.txt
  • Dernière modification: 2019/02/28 18:08
  • par bigMax