Schéma de câblage — NodeMCU ESP8266 + OLED 0.96" intégré + DWM3000 (ANCRES UWB)

Variante ANCRE du projet UWB DW3000 : carte tout-en-un NodeMCU ESP8266 (ESP-12F) avec écran OLED 0.96" SSD1306 soudé sur le PCB (Micro-USB, CH340), + module DWM3000 (Qorvo, SPI) raccordé en externe. L'OLED affiche localement l'ID de l'ancre et la distance mesurée vers le Tag.

✓ Niveaux logiques compatibles. NodeMCU (ESP8266) et DWM3000 fonctionnent tous deux en 3.3 V — connexion directe, pas de level shifter. L'OLED est déjà pré-câblé en interne à l'ESP8266 sur le bus I²C — aucun fil à connecter pour l'écran. Seul le module DWM3000 nécessite un câblage externe (8 fils via le bus HSPI matériel D5/D6/D7/D8 + IRQ + RST).
⚠ Vérifier les broches I²C internes de l'OLED. Selon le fabricant, l'OLED intégré est généralement câblé sur GPIO4 (SDA = D2) et GPIO5 (SCL = D1), mais certaines variantes utilisent GPIO14/GPIO12. Conséquence importante : si le fabricant a utilisé D5/D6 (= HSPI SCK/MISO) pour l'OLED, il y a conflit avec le DWM3000 → vérifier la sérigraphie au dos du PCB ou la fiche AliExpress avant montage. Idéal : OLED sur D1/D2, DWM3000 sur D5–D8 (libres).
⚠ Adaptation firmware requise. La bibliothèque Makerfabs ESP32 UWB DW3000 utilisée dans le projet est écrite pour ESP32 (VSPI, FreeRTOS dual-core). Sur ESP8266 il faut : (a) remplacer les appels VSPI par HSPI, (b) adapter les timings DS-TWR sur cœur unique 80/160 MHz, (c) vérifier la pile WiFi (lwIP ESP8266 vs ESP32). Cette page documente uniquement le câblage matériel.

1. Schéma physique — NodeMCU LoLin V3 + DWM3000 + OLED

+3.3 V GND SCK MOSI MISO CS IRQ RST SDA (I²C interne) SCL (I²C interne) Pin libre
ESP-12E CE FCC ID: 2AHMR-ESP12E AI-Thinker PWR D4 (LED) AMS1117 CH340G FLASH RST Micro-USB ANCRE #1 d = 2.347 m RSSI -78 dBm OLED 0.96" SSD1306 (intégré, I²C 0x3C) NodeMCU ESP8266 + OLED (carte tout-en-un, 30 pins) A0 G VU (5V USB) SD3 SD2 SD1 CMD SD0 CLK GND 3V3 EN RST GND VIN (5V) D0 ★ RST (GPIO16) D1 → SCL OLED (interne) D2 → SDA OLED (interne) D3 ★ IRQ (GPIO0) D4 / LED (GPIO2) 3V3 GND D5 ★ SCK (GPIO14) D6 ★ MISO (GPIO12) D7 ★ MOSI (GPIO13) D8 ★ CS (GPIO15) RX (GPIO3) TX (GPIO1) GND ★ 3V3 ★ ← Micro-USB + boutons FLASH/RST (côté flashage) ← Antenne RF ESP-12E (côté opposé à l'USB) UWB DWM3000 Qorvo DW3000 module VCC (3.3V) GND SCK MOSI MISO CS IRQ RSTn 100 nF Logique I/O : 3.3 V — connexion directe Câblage 8 fils — DWM3000 uniquement (l'OLED est intégré, I²C interne)
📐 Orientation physique :
  • Tiens la carte avec le Micro-USB en bas, l'antenne PCB en haut. L'écran OLED est généralement positionné au-dessus du module ESP-12 ou sur un emplacement libre du PCB (voir représentation ci-dessus).
  • Côté gauche : A0 en haut → VIN en bas (broches utilitaires, non utilisées ici).
  • Côté droit : D0 en haut → 3V3 en bas — c'est là que partent les 8 fils du DWM3000.
  • D1 (SCL) et D2 (SDA) sont réservés à l'OLED interne — ne rien y connecter en externe.
  • Le DWM3000 utilise : 3V3+GND (en bas), D5/D6/D7/D8 (HSPI, milieu), D0+D3 (RST+IRQ, en haut).

2. Tableaux de correspondance

2.1 DWM3000 (SPI + IRQ + RST)

Signal Sérigraphie GPIO Côté Position (USB en bas) DWM3000 Couleur fil
VCC3V3Droite1ère broche en bas (juste au-dessus de l'USB)VCCRouge
GNDGNDDroite2ème en basGNDNoir
SCKD5GPIO14Droite8ème depuis le basSCKOrange
MOSID7GPIO13Droite6ème depuis le basMOSIVert
MISOD6GPIO12Droite7ème depuis le basMISOBleu
CSD8GPIO15Droite5ème depuis le basCS_nViolet
IRQD3GPIO0Droite4ème depuis le hautIRQnRose
RSTD0GPIO16Droite1ère depuis le hautRSTnCyan

2.2 OLED 0.96" SSD1306 (I²C — pré-câblé en interne)

Aucun fil à connecter pour l'OLED — l'écran est soudé sur le PCB et son bus I²C est routé en interne vers l'ESP8266. Le tableau ci-dessous est informatif : il sert uniquement à savoir quels GPIO ne pas utiliser pour autre chose dans le code.
Signal OLED Sérigraphie ESP8266 GPIO Câblage Adresse I²C par défaut
SCLD1GPIO5Interne (piste PCB)0x3C
(parfois 0x3D)
SDAD2GPIO4Interne (piste PCB)
VCC / GNDAlimentés par le PCB depuis le rail 3V3 du régulateur AMS1117 — rien à faire.

⚠ À vérifier sur ta carte : certaines variantes du fabricant câblent l'OLED sur d'autres GPIO (par ex. GPIO14/GPIO12). Lance un I²C scanner dès la première mise sous tension : si rien n'est détecté sur D1/D2, essayer Wire.begin(SDA, SCL) avec des broches alternatives, ou consulter la sérigraphie au dos du PCB.

3. Configuration du code

Définitions de broches à adapter dans le firmware (ESP8266 / Arduino) :

// ============ DWM3000 (HSPI matériel) ============
#define PIN_SCK    14   // D5 — HSPI CLK
#define PIN_MOSI   13   // D7 — HSPI MOSI
#define PIN_MISO   12   // D6 — HSPI MISO
#define PIN_CS     15   // D8 — HSPI CS  (⚠ strap pin pull-down)
#define PIN_IRQ     0   // D3 — IRQ DW3000 (⚠ strap pin BOOT — pull-up 10 kΩ)
#define PIN_RST    16   // D0 — Reset DW3000 (GPIO16, pas d'IRQ mais sortie OK)

// ============ OLED SSD1306 (I²C) ============
#define OLED_SDA    4   // D2
#define OLED_SCL    5   // D1
#define OLED_ADDR   0x3C
#define OLED_W      128
#define OLED_H      64

Côté Arduino IDE :

Adaptation firmware nécessaire. Le code actuel dw3000_uwb_ranging.ino utilise la lib Makerfabs (ESP32). Pour ESP8266 il faudra :
  • Remplacer SPIClass(VSPI) par le SPI matériel ESP8266 (SPI.pins(14, 12, 13, 15)).
  • Vérifier que les fonctions delayMicroseconds() et timings DS-TWR (en UWB µs) restent valides à 160 MHz mono-cœur.
  • Adapter dw3000_trilat.h (WiFi UDP) → ESP8266WiFi.h + WiFiUdp.h (API très proche mais include différent).
  • Côté ANCRE seulement : la pile de mémoire (RAM ~50 kB libre) suffit largement pour la moyenne glissante + UDP.

4. Checklist montage

  • Condensateur de découplage 100 nF au plus près des broches VCC/GND du DWM3000 (rappel CLAUDE.md).
  • Masse commune entre NodeMCU, DWM3000 et OLED — vérifier au multimètre la continuité GND sur les 3 modules.
  • Câbles SPI les plus courts possibles (≤ 10 cm) pour ne pas dégrader l'horloge à 8 MHz.
  • Pour l'I²C OLED : résistances pull-up 4.7 kΩ sur SDA et SCL si la longueur de fil dépasse ~20 cm (la plupart des modules OLED en intègrent déjà 10 kΩ).
  • Antenne UWB du DWM3000 dégagée du blindage ESP-12E et de toute pièce métallique (≥ 2 cm).
  • Avant la première alim : vérifier au multimètre que le 3V3 sort bien 3.3 V ± 0.1 V.
  • Lancer un I²C scanner en premier pour confirmer l'adresse OLED (0x3C par défaut, parfois 0x3D).
⚠ Strap pins ESP8266 — précautions au boot :
  • D3 (GPIO0) = IRQ DW3000 : doit être HIGH au démarrage. Le DWM3000 met sa ligne IRQ à 0 par défaut → ajouter une résistance pull-up 10 kΩ entre D3 et 3V3, ou maintenir RST_DW3000 à 0 (DWM3000 désactivé) le temps du boot puis le relâcher dans setup().
  • D8 (GPIO15) = CS DW3000 : doit être LOW au boot. La carte LoLin a déjà un pull-down 12 kΩ ; le module DW3000 doit aussi être déconnecté du rail 3V3 ou en RST=0 pour ne pas tirer la ligne HIGH avant que l'ESP8266 démarre.
  • D4 (GPIO2) = LED bleue onboard : pas utilisée ici, mais ne pas y mettre un signal LOW au boot.
⛔ Broches à ne JAMAIS utiliser :
  • SD0-SD3, CMD, CLK (côté gauche, GPIO6-11) — connectées au flash SPI interne de l'ESP-12E. Les exposer est trompeur, ne jamais y câbler.
  • D0 (GPIO16) — n'a pas d'interruption, n'a pas de PWM, et conflit avec la fonction wake-from-deep-sleep. OK pour un GPIO de reset, pas pour autre chose.
  • RX/TX (GPIO3/GPIO1) — bus série USB ; câbler dessus rend le flashage impossible.
  • VU = 5 V brut depuis l'USB (post-diode) — utile pour alimenter du 5 V externe, mais jamais en sortie GPIO.

5. Mode flashage (download mode)

🔧 Paramètres Arduino IDE pour le chargement :
BoardNodeMCU 1.0 (ESP-12E Module)
Board packageesp8266 by ESP8266 Community (v3.1.2+)
URL gestionnaire de cartes : https://arduino.esp8266.com/stable/package_esp8266com_index.json
Upload Speed115200 baud (fiable). 921600 possible si le câble USB est court et de bonne qualité.
CPU Frequency160 MHz (recommandé pour DS-TWR)
Flash Size4MB (FS:2MB OTA:~1019KB)
Flash ModeDIO (par défaut, compatible LoLin V3)
Debug Port / LevelDisabled / None
lwIP Variantv2 Lower Memory (laisse plus de RAM pour DS-TWR)
Erase FlashOnly Sketch (utiliser All Flash Contents uniquement au premier flash ou en cas de bug WiFi)
PortCOM correspondant au CH340G (Windows : Gestionnaire de périphériques → « USB-SERIAL CH340 (COMx) »)

La LoLin V3 auto-reset via le CH340G. Si l'IDE bloque sur « espcomm sync failed » :

  1. Maintenir FLASH enfoncé (bouton à gauche)
  2. Appuyer brièvement sur RST (bouton à droite) puis le relâcher
  3. Relâcher FLASH — le NodeMCU est en mode download
  4. Lancer l'upload depuis l'IDE

Le mode flashage met automatiquement D8 (CS) à LOW et D3 (IRQ) à HIGH via le CH340 — c'est pour ça qu'il faut respecter les contraintes des strap pins ci-dessus.

6. Variantes de cartes ESP8266

CarteBrochesUSBSCK / MOSI / MISOCS / IRQ / RSTOLED SDA/SCLNotes
NodeMCU + OLED 0.96" intégré (réf. ce schéma)30Micro-USBD5 / D7 / D6D8 / D3 / D0D2 / D1 (interne)Carte tout-en-un AliExpress 1005006919941965. ESP-12F + OLED SSD1306 soudé. CH340G.
LoLin V3 (NodeMCU classique, sans OLED)30Micro-USBD5 / D7 / D6D8 / D3 / D0D2 / D1 (externe)Large PCB (~31 mm). CH340G. Double rail 3V3+GND. OLED à câbler séparément.
NodeMCU Amica V230Micro-USBD5 / D7 / D6D8 / D3 / D0D2 / D1Plus étroite (~25 mm), chip CP2102. Pinout identique.
Wemos D1 Mini16Micro-USBD5 / D7 / D6D8 / D3 / D0D2 / D1Compact (~25×35 mm). Mêmes alias de broches, breadboard friendly.
Wemos D1 R2 (forme Uno)Micro-USBD13 / D11 / D12D10 / D2 / D5D14 / D15Format Arduino Uno — alias de pin différents, vérifier la sérigraphie.
ESP-01 / ESP-01S8⚠ Trop peu de GPIO pour DWM3000 + OLED simultanément.

Schéma adapté à la variante ANCRE NodeMCU LoLin V3 + DWM3000 + OLED 0.96" — projet UWB DW3000 — 2026.