Retour au journal
#étape 04

Développement : Firmware C Natif (RIP PC de Thomas)

Mise en place de la chaîne de compilation, mur pare-feu du lycée et deuil matériel.

programmationC natifReact NativeATMEGA328PScripts

Étape 4 : Défis de programmation et outillage intensif

Chaîne de compilation et scripts de la dernière chance

Au début, l'environnement Arduino, tout mignon tout rose, nous suffisait. Mais comme on est têtus, on voulait tout centraliser sous VSCode. L'absence de Makefile correct nous a doucement conduits vers l'écriture de scripts Batch sous Windows. Autant dire, écrire du .bat en 2026, c'est comme tailler un silex avec ses dents : c'est préhistorique mais ça marche. Résultat : une vraie chaîne de compilation (build) et de flashage (upload) de bourrins, customisée de A à Z.

Voici l'artefact (qui tient plus de la sorcellerie que du code) build.bat qui compile et flashe notre beau firmware :

@echo off
set TOOLCHAIN=C:\Users\tmoreau\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7\bin
set AVRDUDE_PATH=C:\Users\tmoreau\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17\bin
set MCU=atmega328p
set F_CPU=16000000UL
set PORT=COM9
set BAUD=115200

echo --- Compilation ---
"%TOOLCHAIN%\avr-gcc.exe" -Wall -Os -mmcu=%MCU% -DF_CPU=%F_CPU% -I./include -c src/main.c -o src/main.o
"%TOOLCHAIN%\avr-gcc.exe" -Wall -Os -mmcu=%MCU% -DF_CPU=%F_CPU% -I./include -c src/uart.c -o src/uart.o
"%TOOLCHAIN%\avr-gcc.exe" -Wall -Os -mmcu=%MCU% -DF_CPU=%F_CPU% -I./include -c src/adc.c -o src/adc.o
"%TOOLCHAIN%\avr-gcc.exe" -Wall -Os -mmcu=%MCU% -DF_CPU=%F_CPU% -I./include -c src/motor.c -o src/motor.o
"%TOOLCHAIN%\avr-gcc.exe" -Wall -Os -mmcu=%MCU% -DF_CPU=%F_CPU% -I./include -c src/eeprom_manager.c -o src/eeprom_manager.o

echo --- Linking ---
"%TOOLCHAIN%\avr-gcc.exe" -mmcu=%MCU% -o main.elf src/main.o src/uart.o src/adc.o src/motor.o src/eeprom_manager.o

echo --- Generation Hex ---
"%TOOLCHAIN%\avr-objcopy.exe" -O ihex -R .eeprom main.elf main.hex

if "%~1"=="flash" (
    echo --- Flashage sur %PORT% ---
    "%AVRDUDE_PATH%\avrdude.exe" -C "%AVRDUDE_PATH%\..\etc\avrdude.conf" -c arduino -p %MCU% -P %PORT% -b %BAUD% -U flash:w:main.hex:i
)

echo --- Termine ---
pause

Programmation de l'ATmega et configuration matérielle

Après avoir validé nos algos de base, le passage de la carte Arduino vers le mode autonome (standalone) s'est déroulé comme prévu : tout ne s'est pas passé comme prévu, et pour changer l'écriture a été purement et simplement bloquée. La cause ? Ce cher oscillateur, encore ! Oubliez la théorie : un mauvais paramétrage des fuse bits, alias le bouton d'auto-destruction du microcontrôleur, suffisait à bloquer le tout. Il a fallu recalibrer cela chirurgicalement pour forcer notre fréquence modeste mais héroïque de 8MHz.

On a ensuite réécrit tout le firmware en C natif. Pas de librairies Arduino , pas de Java, ce langage horrible qui traîne parmi les dépôts flutter qui propose de lagestion bluetooth. Non, ici, on parle en hexadécimal à la machine !

L'appli Mobile vs Le Pare-Feu Scolaire

Côté application mobile, on a opté pour du React Native via la plateforme Expo histoire d'itérer nos affichages un peu plus vite. Mais on avait sous-estimé notre adversaire principal : l'informatique du lycée.

Le réseau y est segmenté comme un bunker militaire pour empêcher les élèves de streamer Netflix (probablement ?) – le problème ? Le réseau sans fil est un réseau séparé. Nos outils de débogage à distance (ngrok ou le pont ADB d'Android) étaient kill. Essayer de debug du sans-fil via Expo en filaire coupé relève de l'impossible. Ne pouvant pas déployer un routeur Wifi personnel en pleine salle de cours, on va devoir s'organiser autrement pour les prochaines séances. Seule consolation : le firmware, lui, est bien flash sur la carte !

La loi de Murphy : Le sacrifice du PC

Comme dans tout bon projet technologique de cette envergure, il fallait un sacrifice matériel aux dieux de l'informatique. Minute de silence, s'il vous plaît : le PC de Thomas a rendu l'âme de manière spectaculaire, emportant dans sa fumée grise le code source entier de l'ancienne version de l'application mobile. Apparemment, l'ordinateur a préféré l'autodestruction qu'au code React de l’équipe (ça ne pouvait pas être si horrible ?).

Cette tragédie rappellera la première loi de la survie en ingénierie informatique : faire un push git après chaque ligne de code. Les joies du développement en équipe sur du matériel de la région !