Initial release 1.2.2

This commit is contained in:
2026-05-24 13:05:18 +02:00
parent 87d33b41c7
commit b075d04706
28 changed files with 2022 additions and 124 deletions
+301
View File
@@ -0,0 +1,301 @@
# Spécifications — Wemos D1 R32 ESP32
## Microcontrôleur
![Vue de la carte Wemos D1 R32 ESP32](image/board2.png)
> Les images du dossier `image/` correspondent à une **Wemos D1 R32 ESP32**, au format Arduino UNO, et non à une D1 Mini compacte. Les indications de GPIO du firmware restent valables : c'est toujours le numéro GPIO ESP32 qui compte.
| Paramètre | Valeur |
|---|---|
| Module | ESP32-WROOM-32 |
| Puce détectée | ESP32-D0WDQ6 revision v1.0 |
| Famille Espressif | ESP32 classique / ESP32 original series |
| Architecture | Xtensa LX6 dual-core 32 bits |
| Fréquence CPU | jusqu'à 240 MHz (configurable : 80 / 160 / 240 MHz) |
Identification locale effectuée avec `esptool` sur `/dev/ttyUSB0` :
```text
Chip type: ESP32-D0WDQ6 (revision v1.0)
Features: Wi-Fi, BT, Dual Core + LP Core, 240MHz
Crystal frequency: 40MHz
USB-série: CH340, VID:PID=1A86:7523
```
Source constructeur : [Espressif — ESP32 Series Datasheet](https://documentation.espressif.com/esp32_datasheet_en.html) et [Espressif — ESP32-WROOM-32 Datasheet](https://documentation.espressif.com/esp32-wroom-32_datasheet_en.html). Le module ESP32-WROOM-32 embarque un **ESP32-D0WDQ6**, avec un microprocesseur **Xtensa dual-core 32-bit LX6** jusqu'à 240 MHz, WiFi 2,4 GHz et Bluetooth/BLE.
### Position par rapport aux autres familles ESP32
Sur Internet, on voit souvent les variantes `ESP32-C3`, `ESP32-C6`, `ESP32-S2`, `ESP32-S3`, `ESP32-H2`, etc. Ta carte **n'appartient à aucune de ces familles** : elle utilise la famille ESP32 historique.
| Famille | Architecture typique | Connectivité typique | Ta carte ? |
|---|---|---|---|
| ESP32 / ESP32-D0WDQ6 | Xtensa LX6 dual-core | WiFi + Bluetooth Classic + BLE | ✅ Oui |
| ESP32-C3 | RISC-V single-core | WiFi + BLE | Non |
| ESP32-C6 | RISC-V | WiFi 6 + BLE + 802.15.4 | Non |
| ESP32-S2 | Xtensa LX7 single-core | WiFi, pas Bluetooth classique | Non |
| ESP32-S3 | Xtensa LX7 dual-core | WiFi + BLE, orienté IA/vectoriel | Non |
| ESP32-H2 | RISC-V | BLE + 802.15.4, pas WiFi | Non |
Conséquence pratique : pour PlatformIO, le choix actuel `board = esp32dev` et `framework = arduino` est cohérent avec cette carte. Les guides ou pinouts spécifiques `C3`, `C6`, `S2`, `S3` ou `H2` ne doivent pas être appliqués directement à ton câblage.
## Mémoire
| Type | Capacité |
|---|---|
| Flash SPI (interne au module) | 4 MB |
| ROM | 448 KB |
| SRAM | 520 KB |
> GPIO611 réservés au bus Flash — ne jamais les utiliser.
## Dimensions
| Paramètre | Valeur |
|---|---|
| PCB | format Arduino UNO |
| Pas des broches | 2,54 mm |
| Compatibilité breadboard | Non directement, carte large type UNO |
| Compatibilité shields | Shields Arduino UNO, selon brochage et tensions |
## Add-on de câblage : screw shield
![Screw shield / proto shield à borniers](image/screwshield.png)
Le shield à borniers montré dans `image/screwshield.png` est un **screw shield / proto shield au format Arduino UNO**. Il est adapté à cette carte parce que la Wemos D1 R32 reprend l'empreinte mécanique Arduino UNO : le shield vient s'enficher sur les deux rangées latérales et expose les broches sur des borniers à vis.
### Compatibilité
| Point | Compatibilité | Commentaire |
|---|---|---|
| Format physique | ✅ Oui | La D1 R32 est au format Arduino UNO |
| Alimentation 3V3 / 5V / GND | ✅ Oui | Les borniers reprennent les broches d'alimentation |
| Signaux numériques | ✅ Oui | Utilisables si la correspondance GPIO est respectée |
| Zone de prototypage | ✅ Oui | Pratique pour la résistance pull-up 4,7 kΩ des DS18B20 |
| Shields Arduino 5 V | ⚠️ Prudence | L'ESP32 n'est pas tolérant 5 V sur ses GPIO |
### Point d'attention important
Le shield peut afficher des noms de broches **Arduino** (`A0`, `A1`, `D13`, etc.), alors que le firmware utilise les vrais numéros **ESP32 GPIO** (`GPIO4`, `GPIO27`, `GPIO21`, etc.).
Pour éviter une erreur de câblage :
1. Repérer la broche voulue sur le pinout D1 R32 ci-dessous.
2. Vérifier à quel bornier du screw shield elle correspond.
3. Câbler selon le numéro GPIO utilisé dans `include/config.h`.
Sur la D1 R32, **GPIO27 est exposé sur la broche Arduino `D6`**. Sur le screw shield, le bornier à utiliser pour le bus DS18B20 est donc **D6**. Il faut se fier à la table de correspondance ci-dessous, pas seulement au numéro GPIO écrit dans le firmware.
### Utilisation dans le projet esp_jardin
Dans ton cas, le screw shield sert surtout à fiabiliser le câblage extérieur des sondes DS18B20 :
- les trois fils `VCC` des sondes vont sur un bornier relié au `3V3`,
- les trois fils `GND` vont sur un bornier `GND`,
- les trois fils `DATA` vont sur le bornier **D6**, correspondant à `GPIO27`,
- la résistance **4,7 kΩ** peut être placée dans la zone de prototypage entre `3V3` et `DATA`.
## Alimentation
| Paramètre | Valeur |
|---|---|
| USB | 5 V Micro-USB |
| Broche VIN | 5 V 12 V (non régulé) |
| Sortie 3V3 | 3,3 V régulé (usage externe limité) |
| Régulateur | ME6211 (500 mA) ou AMS1117-3.3 (800 mA) selon version |
| Courant actif WiFi | ~80 mA pic |
| Deep sleep | < 10 µA |
### Réponse à la question d'alimentation
**L'USB suffit largement.**
Une batterie solaire avec sortie USB 5 V alimente parfaitement la carte via le port Micro-USB. Le régulateur embarqué gère la tension 5 V → 3,3 V. La broche VIN (5 V12 V) est une entrée alternative pour une alimentation sans connecteur USB (adaptateur secteur, alimentation industrielle, etc.) — elle n'est pas nécessaire ici.
Consommation typique du projet esp_jardin :
- ESP32 WiFi actif : ~80 mA
- 3 × DS18B20 : ~5 mA chacune
- **Total : ~95100 mA**, bien en dessous des 500 mA du régulateur.
Une batterie solaire USB standard de 10 000 mAh offre environ **4 jours d'autonomie** sans soleil.
## Connectivité sans fil
| Paramètre | Valeur |
|---|---|
| WiFi | 802.11 b/g/n — 2,4 GHz uniquement |
| Bluetooth | 4.2 (BR/EDR + BLE) |
| Antenne | PCB intégrée (version WROOM-32 standard) |
La version WROOM-32**U** dispose d'un connecteur U.FL pour antenne externe.
## GPIO disponibles
![Pinout Wemos D1 R32 ESP32](image/board.png)
> Pour le câblage, se fier aux étiquettes **GPIOxx** du pinout. Les libellés type `IO4`, `IO27`, `SDA`, `SCL` ou `RX/TX` sont des repères de connecteur, mais le firmware PlatformIO utilise les numéros GPIO ESP32.
### Synthèse RIOT-OS / ESP32
Source : [RIOT-OS — ESP32 SoC Series, Common Peripherals](https://api.riot-os.org/group__cpu__esp32.html#esp32_peripherals) et [RIOT-OS — ESP32 family](https://api.riot-os.org/group__cpu__esp32__esp32.html).
La documentation RIOT-OS confirme les points suivants pour l'ESP32 utilisé par la D1 R32 :
| Sujet | Synthèse utile pour esp_jardin |
|---|---|
| GPIO disponibles | L'ESP32 expose 34 GPIO, mais tous ne sont pas équivalents. Certains sont réservés, entrée seule ou liés au boot. |
| GPIO34 à GPIO39 | Entrée uniquement. Bons candidats pour de l'analogique, mais pas pour piloter un bus OneWire ou une sortie. |
| ADC1 | GPIO32 à GPIO39. C'est le bon choix pour de futures sondes analogiques, notamment humidité du sol. |
| ADC2 | GPIO0, 2, 4, 12 à 15, 25 à 27. À éviter pour l'analogique quand le WiFi est actif, car ADC2 est aussi utilisé par le WiFi. |
| GPIO4 | Utilisable en entrée/sortie numérique, mais laissé libre dans ce projet depuis le passage du bus DS18B20 sur GPIO27. |
| GPIO25 / GPIO26 | Sorties DAC matérielles disponibles. Utilisables aussi en numérique/PWM si le DAC n'est pas utilisé. |
| I2C par défaut | SDA=GPIO21, SCL=GPIO22. À réserver pour capteurs I2C futurs. |
| SPI général | VSPI utilise classiquement GPIO18/19/23/5. HSPI utilise GPIO14/12/13/15. |
| Flash interne | GPIO6 à GPIO11 sont liés à la flash SPI et ne doivent pas être utilisés pour le projet. |
| Bootstrapping | GPIO0, GPIO2, GPIO12 et GPIO15 ont des contraintes au démarrage. À éviter pour des signaux critiques ou tirés dans un état risqué. |
Conclusion pour le projet :
- `GPIO27 / D6` est utilisé pour les DS18B20 en **numérique OneWire**.
- `GPIO4 / A1` reste compatible en numérique, mais n'est plus utilisé pour éviter l'ambiguïté ADC2.
- Pour l'humidité du sol analogique, utiliser `GPIO32` ou `GPIO33`, pas `GPIO4`, `GPIO25`, `GPIO26` ou `GPIO27`.
- Ne jamais utiliser `GPIO6`, `GPIO7`, `GPIO8`, `GPIO9`, `GPIO10`, `GPIO11`.
### Correspondance Arduino UNO / GPIO ESP32
Cette table reprend la configuration de compatibilité Arduino UNO de la D1 R32. Elle est utile avec le screw shield, car les borniers sont souvent marqués avec les noms Arduino (`A1`, `D6`, `SDA`, etc.).
| Fonction | GPIO ESP32 | Broche Arduino | Remarque |
|---|---:|---|---|
| ADC_LINE(0) / LED | GPIO2 | A0 | LED intégrée, éviter pour signaux critiques |
| ADC_LINE(1) | GPIO4 | A1 | Libre, ancien choix DS18B20 |
| ADC_LINE(2) | GPIO35 | A2 | Entrée seule, ADC1 |
| ADC_LINE(3) | GPIO34 | A3 | Entrée seule, ADC1 |
| ADC_LINE(4) | GPIO36 | A4 | Entrée seule, ADC1 |
| ADC_LINE(5) | GPIO39 | A5 | Entrée seule, ADC1 |
| DAC_LINE(0) / PWM | GPIO25 | D3 | DAC1 |
| DAC_LINE(1) | GPIO26 | D2 | DAC2 |
| I2C SDA | GPIO21 | SDA | I2C futur |
| I2C SCL | GPIO22 | SCL | I2C futur |
| PWM | GPIO16 | D5 | Libre possible |
| PWM | GPIO27 | D6 | Bus DS18B20 actuel du projet |
| PWM | GPIO13 | D9 | ADC2, éviter pour analogique avec WiFi |
| SPI CS | GPIO5 | D10 | SPI VSPI CS |
| SPI MOSI | GPIO23 | D11 | SPI VSPI MOSI |
| SPI MISO | GPIO19 | D12 | SPI VSPI MISO |
| SPI CLK | GPIO18 | D13 | SPI VSPI CLK |
| UART0 TX | GPIO1 | D1 | USB/programming, éviter |
| UART0 RX | GPIO3 | D0 | USB/programming, éviter |
| UART1 TX | GPIO10 | D4 | Réservé flash sur ESP32-WROOM, ne pas utiliser |
| UART1 RX | GPIO9 | D5 | Réservé flash sur ESP32-WROOM, ne pas utiliser |
> La ligne `UART1 GPIO10/GPIO9` existe dans certaines configurations théoriques Arduino UNO, mais sur ESP32-WROOM les GPIO6 à GPIO11 sont utilisés par la flash interne. Pour ce projet, ils doivent rester interdits.
### Interfaces de communication
| Interface | GPIO |
|---|---|
| UART0 (USB/prog) | TX=GPIO1, RX=GPIO3 |
| UART2 possible | TX=GPIO17, RX=GPIO16 |
| I2C (défaut) | SDA=GPIO21, SCL=GPIO22 |
| SPI VSPI | MOSI=GPIO23, MISO=GPIO19, SCK=GPIO18, CS=GPIO5 |
| SPI HSPI | MOSI=GPIO13, MISO=GPIO12, SCK=GPIO14, CS=GPIO15 |
### ADC — contrainte WiFi critique
| ADC | GPIO | WiFi actif |
|---|---|---|
| **ADC1** | GPIO32, 33, 34, 35, 36, 39 | ✅ Utilisable |
| **ADC2** | GPIO0, 2, 4, 12, 13, 14, 15, 25, 26, 27 | ❌ Inutilisable en mode analogique |
> GPIO27 (OneWire DS18B20 du projet) appartient à ADC2 mais utilisé en numérique — pas de conflit.
> Pour les futures sondes sol (humidité analogique) : utiliser GPIO3239 (ADC1 uniquement).
### DAC
| Canal | GPIO |
|---|---|
| DAC1 | GPIO25 |
| DAC2 | GPIO26 |
### Broches strapping (contraintes au boot)
| GPIO | Contrainte |
|---|---|
| GPIO0 | HIGH = boot normal / LOW = mode flash (bouton BOOT) |
| GPIO2 | LED intégrée — éviter pour signaux critiques |
| GPIO12 | LOW au boot obligatoire |
| GPIO15 | Contrôle logs de boot |
## Interface USB
| Paramètre | Valeur |
|---|---|
| Puce USB-UART | CH340C (certains clones : CH9102X ou CP2104) |
| Connecteur | Micro-USB |
| Auto-reset | Oui (circuit DTR/RTS) |
## LED et boutons
| Composant | Détail |
|---|---|
| LED bleue | GPIO2 — logique inversée (LOW = allumée) |
| Bouton RST | Reset hardware |
| Bouton BOOT (IO0) | Maintenir + RST pour entrer en mode flash |
## Correspondance avec le projet esp_jardin
| Fonction | GPIO | Statut |
|---|---|---|
| OneWire DS18B20 | GPIO27 / D6 | ✅ Utilisé |
| I2C SDA (BH1750/SHT31) | GPIO21 | Réservé (futur) |
| I2C SCL | GPIO22 | Réservé (futur) |
| ADC sol (humidité) | GPIO32 ou GPIO33 | ADC1 — futur |
| Relais | GPIO25 / GPIO26 | Futur |
| Interruptions | GPIO14 | Futur |
### Branchement actuel des DS18B20
Les trois sondes DS18B20 se branchent en parallèle sur le même bus OneWire.
| Wemos D1 R32 | Screw shield | DS18B20 |
|---|---|---|
| 3V3 | 3V3 | VCC des 3 sondes |
| GND | GND | GND des 3 sondes |
| GPIO27 | D6 | DATA des 3 sondes |
Ajouter une résistance **4,7 kΩ** entre **3V3** et **D6 / GPIO27**.
```text
3V3 ─────┬──────── VCC sonde 1
├──────── VCC sonde 2
├──────── VCC sonde 3
└─[ 4.7 kΩ ]─┐
D6 / GPIO27 ───────────┼──────── DATA sonde 1
├──────── DATA sonde 2
└──────── DATA sonde 3
GND ─────┬──────── GND sonde 1
├──────── GND sonde 2
└──────── GND sonde 3
```
Couleurs fréquentes des sondes waterproof :
| Couleur | Signal |
|---|---|
| Rouge | VCC / 3V3 |
| Noir | GND |
| Jaune ou blanc | DATA / D6 / GPIO27 |
### Choix retenu
Le bus DS18B20 utilise désormais **GPIO27 / D6** :
```cpp
#define ONE_WIRE_BUS 27
```
Ce choix libère `A1 / GPIO4`, garde `GPIO21/22` pour l'I2C, et garde `GPIO32/33` pour les futures mesures analogiques.