pxt-maqueen sous-jacente.maqueen.ts — maqueen.ts — références DigitalPin.PXX et I2C 0x10 ligne par ligne, citées dans la section « Comment nous le savons » plus bas.maqueenIR.cpp — maqueenIR.cpp — wrapper C++ du récepteur IR. La broche est configurable par l'utilisateur via maqueenIR.initIR(pin) ; sur la Maqueen Lite v4 le récepteur IR embarqué est câblé sur P16.DigitalPin.PXX correspond à quel pad physique du connecteur de bord, et quels pads sont partagés avec la matrice LED.pxt-maqueen est l'extension MakeCode officielle de DFRobot pour la famille de robots éducatifs Maqueen (y compris la Maqueen Lite v4). Ajoute-la dans MakeCode via Extensions → recherche « maqueen » ou colle son URL GitHub. Elle expose un namespace maqueen qui enveloppe les opérations bas-niveau (broches, I2C) derrière des blocs adaptés aux enfants :
maqueen.motorRun(motor, dir, speed) — pilote le contrôleur moteur I2C à l'adresse 0x10.maqueen.motorStop(motor) — frein.maqueen.servoRun(servo, angle) — écrit dans les registres I2C 0x14 (S1) et 0x15 (S2).maqueen.writeLED(led, switch) — bascule les LEDs simples sur P8 (gauche) et P12 (droite).maqueen.readPatrol(sensor) — lit les capteurs de suivi de ligne sur P13 (gauche) et P14 (droite).maqueen.Ultrasonic(unit) — pilote P1 (trig) / P2 (echo) pour le SR04.maqueen.IR_read() — lit les codes NEC depuis le récepteur IR embarqué via le wrapper C++ maqueenIR.cpp.0x32 du même chip 0x10 — ce ne sont pas des NeoPixels standards.Le firmware v1 de Maqueen Lab (firmware/v1-maqueen-lib.ts) utilise ces appels maqueen.* directement. Le futur firmware v2 les remplacera par des appels bruts pins.* et I2C — même protocole filaire, même app web, code bas-niveau affiché côte à côte dans chaque Component Explorer pour une progression pédagogique.
| Broche | Utilisée par | Direction | Notes |
|---|---|---|---|
| P0 | Buzzer | Sortie (PWM) | Broche music par défaut ; aussi port Gravity — conflit en cas de réassignation |
| P1 | Ultrason TRIG | Sortie | Aussi port Gravity — conflit avec capteur externe |
| P2 | Ultrason ECHO | Entrée | Aussi port Gravity — conflit avec capteur externe |
| P3 | — | libre | Partagée avec col1 de la matrice LED (éviter en sortie numérique) |
| P4 | — | libre | Matrice LED col2 |
| P5 | Bouton A | Entrée | Intégré micro:bit |
| P6 | — | libre | Matrice LED col9 |
| P7 | — | libre | Matrice LED col8 |
| P8 | LED gauche (simple) | Sortie | Numérique ON/OFF |
| P9 | — | libre | Matrice LED col7 |
| P10 | — | libre | Matrice LED col3 |
| P11 | Bouton B | Entrée | Intégré micro:bit |
| P12 | LED droite (simple) | Sortie | Numérique ON/OFF |
| P13 | Capteur de ligne gauche | Entrée | Numérique 0/1 |
| P14 | Capteur de ligne droit | Entrée | Numérique 0/1 |
| P15 | — | libre | — |
| P16 | — | libre | — |
| P19 | I2C SCL | — | Pilote moteur + 4× RGB + servos S1/S2 (adresse 0x10) |
| P20 | I2C SDA | — | Même bus I2C |
| Composant | Broche / Adresse | Notes |
|---|---|---|
| Pilote moteur | I2C 0x10 | Reg 0x00 = M1, 0x02 = M2 (direction + vitesse) |
| 4× RGB d'ambiance | I2C 0x10, reg 0x32 | Ce n'est pas du NeoPixel standard — piloté par le chip via le contrôleur moteur |
| LED gauche (simple) | P8 numérique | ON/OFF |
| LED droite (simple) | P12 numérique | ON/OFF |
| Capteur de ligne gauche | P13 numérique | 0 / 1 |
| Capteur de ligne droit | P14 numérique | 0 / 1 |
| Ultrason TRIG | P1 | SR04 / SR04P |
| Ultrason ECHO | P2 | SR04 / SR04P |
| Buzzer | P0 | Sortie de la lib music par défaut du micro:bit |
| Servos S1 / S2 | I2C 0x10 (via extension) | Utiliser maqueen.servoRun(S1|S2, angle) |
| Récepteur IR | P16 (par défaut Maqueen Lite v4) | maqueenIR.initIR(Pins.P16) + onPressEvent(...) par bouton |
| Registre | Fonction |
|---|---|
0x00 | Moteur M1 (gauche) : direction + vitesse |
0x02 | Moteur M2 (droite) : direction + vitesse |
0x14 | Angle du servo S1 |
0x15 | Angle du servo S2 |
0x32 | Données des 4× LED RGB (16M de couleurs chacune) |
P3, P4, P6, P7, P9, P10, P15, P16
P3/P4/P6/P7/P9/P10 partagent la matrice d'affichage LED — désactiver l'affichage avant utilisation comme sortie numérique :
led.enable(false)
P0 = buzzer. Brancher quoi que ce soit d'autre sur le port Gravity P0 coupe le buzzer (et inversement).
P1 / P2 = ultrason. Brancher un capteur Gravity sur P1 ou P2 désactive l'ultrason. L'app prévient quand les deux sont utilisés.
Bus I2C (P19/P20) est partagé. Des add-ons à des adresses autres que 0x10 sont OK ; une collision d'adresses est fatale.
Chaque assignation de broche ci-dessous est extraite du code source de l'extension pxt-maqueen. Les numéros de ligne se réfèrent à maqueen.ts au moment de la rédaction.
| Broche / Adresse | Composant | Preuve |
|---|---|---|
P1 | Ultrason TRIG | maqueen.ts:164 — pins.digitalWritePin(DigitalPin.P1, 1) dans Ultrasonic() |
P2 | Ultrason ECHO | maqueen.ts:172 — d = pins.pulseIn(DigitalPin.P2, PulseValue.High, 500 * 58) |
P8 | LED gauche (simple) | maqueen.ts:287 — pins.digitalWritePin(DigitalPin.P8, ledswitch) dans writeLED(LEDLeft, ...) |
P12 | LED droite (simple) | maqueen.ts:289 — pins.digitalWritePin(DigitalPin.P12, ledswitch) dans writeLED(LEDRight, ...) |
P13 | Capteur de ligne gauche | maqueen.ts:267 — return pins.digitalReadPin(DigitalPin.P13) dans readPatrol(PatrolLeft) |
P14 | Capteur de ligne droit | maqueen.ts:269 — return pins.digitalReadPin(DigitalPin.P14) dans readPatrol(PatrolRight) |
I2C 0x10 | Chip moteur + RGB + servos | maqueen.ts:19 — const MOTER_ADDRESSS = 0x10, utilisé par pins.i2cWriteBuffer(0x10, buf) partout |
I2C 0x10 reg 0x14 | Angle servo S1 | maqueen.ts:308 — buf[0] = 0x14 puis pins.i2cWriteBuffer(0x10, buf) dans servoRun(S1, angle) |
I2C 0x10 reg 0x15 | Angle servo S2 | maqueen.ts:311 — buf[0] = 0x15 pour S2 |
I2C 0x10 reg 0x00 | Moteur M1 | maqueen.ts:202–205 — buf[0] = 0x00; ...; pins.i2cWriteBuffer(0x10, buf) dans motorRun(M1, ...) |
I2C 0x10 reg 0x02 | Moteur M2 | maqueen.ts:208–211 — buf[0] = 0x02 pour M2 |
I2C 0x10 reg 0x32 | 4× LED RGB d'ambiance | maqueen.ts:659 — pins.i2cWriteNumber(I2CADDR, 0x32, NumberFormat.Int8LE) dans le bloc d'écriture RGB |
| Récepteur IR (P16) | NEC IR | maqueenIR.cpp définit l'API mais ne code pas en dur de broche — l'utilisateur doit appeler maqueenIR.initIR(maqueenIR.Pins.P16). P16 est la convention pour la Maqueen Lite v4. |
P0 | Buzzer | Pas dans pxt-maqueen. La Maqueen Lite v4 câble le buzzer embarqué sur P0, sortie par défaut de la lib music du micro:bit. Confirmé par les exemples DFRobot sur le wiki, conforme au haut-parleur intégré du micro:bit V2. |
P19 / P20 | I2C SCL / SDA | Pas dans pxt-maqueen. Broches I2C standard du connecteur de bord micro:bit selon tech.microbit.org/hardware/edgeconnector ; les appels pins.i2c* dans pxt-maqueen les utilisent par défaut. |
P5 / P11 | Bouton A / B | Pas dans pxt-maqueen. Intégrés à la carte micro:bit elle-même, pas au support Maqueen. |
P3, P4, P6, P7, P9, P10 | Colonnes matrice LED | Pas dans pxt-maqueen. Appartiennent à l'afficheur LED 5×5 intégré du micro:bit ; utilisables comme E/S numériques uniquement après led.enable(false). |
Pour re-vérifier : cloner le dépôt et grep pour DigitalPin.P et 0x10 :
git clone https://github.com/DFRobot/pxt-maqueen
grep -nE "DigitalPin\.|0x10|0x14|0x15|0x32" pxt-maqueen/maqueen.ts
| Verbe (par BLE) | Code micro:bit |
|---|---|
M:L,R | maqueen.motorRun(M1, dir, |L|) + idem pour M2 |
STOP | maqueen.motorStop(All) |
LED:i,s | maqueen.writeLED(i, s) |
SRV:i,a | maqueen.servoRun(Si, a) |
BUZZ:f,ms | music.playTone(f, ms) |
LINE? | maqueen.readPatrol(L/R) → LINE:l,r |
DIST? | maqueen.Ultrasonic(cm) → DIST:cm |
IR? | maqueen.IR_read() → IR:code |
RGB:i,r,g,b | Écriture I2C sur 0x10 reg 0x32 |
| (auto) | input.acceleration(X/Y/Z) → ACC:x,y,z |
Voir firmware/v1-maqueen-lib.ts pour l'implémentation complète.
La phase 2 du firmware (firmware/v2-raw-pins.ts) remplacera les appels maqueen.* par des opérations directes pins.* et pins.i2cWriteBuffer(...) — même protocole filaire, code bas-niveau pour apprenants avancés. Les Component Explorers afficheront les deux versions côte à côte dans le panneau de code.