Faire monter de niveau le badge de NorthSec 2024
Les badges matériels sont vraiment cool quand ils clignotent à fond! Cependant, à NorthSec, on vous donne un badge avec peu de puissance de clignotement au départ. Voyez-vous, un élément clé du design #badgelife récent de NorthSec est que vous devez socialiser en vous connectant à d’autres badges pour monter de niveau et obtenir plus de patterns de clignotement avec les DEL du badge. Sauf qu’une fois l’événement terminé, on a moins d’opportunités pour améliorer notre badge. Cet article vise à corriger cela.

Un passionné de badge à ShmooCon 2025 à qui je viens juste de donner un badge NorthSec 2024
Alors, voici quelques notes simples sur la façon de monter le badge NorthSec 2024 à un niveau supérieur.
Il y a plusieurs approches pour améliorer le badge. Étant une personne occupée, j’ai pris le chemin le plus direct : modifier des constantes dans le code, recompiler et reflasher mon badge. Des méthodes alternatives sans accès au code source seraient intéressantes à documenter, faites-moi signe si ça existe, je mettrai un lien ici.
C’est parti!
D’abord, le code du badge de NorthSec a toujours été open source, donc on peut cloner ce répo. Assurez-vous de prendre la branche 2024!
$ git clone https://github.com/nsec/nsec-badge.git
$ cd nsec-badge/
$ git switch -c 2024 origin/2024
En fouillant un peu dans le code, j’ai trouvé un ensemble de paramètres de configuration intéressants dans le fichier components/utils/config.hpp:
namespace nsec::config::social
{
constexpr uint8_t initial_level = 0;
constexpr uint8_t max_level = 200;
constexpr uint8_t multiple_badges_discovered_simultaneously_multiplier = 2;
} // namespace nsec::config::social
Et si on définissait notre initial_level à quelque chose comme 185?
Voici à quoi devrait ressembler ce fichier après cette modification :
namespace nsec::config::social
{
// OB: override default level
//constexpr uint8_t initial_level = 0;
constexpr uint8_t initial_level = 185;
constexpr uint8_t max_level = 200;
constexpr uint8_t multiple_badges_discovered_simultaneously_multiplier = 2;
} // namespace nsec::config::social
J’ai fait une patch si vous préférez.
Appliquez-la avec patch -p1 < increase-default-level.diff.
Maintenant, construisons le firmware et flashons-le sur notre badge en suivant les instructions :
> virtualenv .venv
> . .venv/bin/activate.fish # retirez le suffixe .fish si vous utilisez bash
> pip install platformio
> pio run -e conference
J’ai eu des erreurs concernant un binaire pip manquant, mais après avoir installé python3-venv et réessayé, ça a fonctionné.
[...]
Building .pio/build/conference/firmware.bin
esptool.py v4.5.1
Creating esp32s3 image...
Merged 2 ELF sections
Successfully created esp32s3 image.
[...]
Branchez le badge et allumez-le. Puis, flashez-le :
> pio run -t upload -e conference
[...]
Writing at 0x000a97f2... (84 %)
Writing at 0x000b2b62... (88 %)
Writing at 0x000b9836... (92 %)
Writing at 0x000bef31... (96 %)
Writing at 0x000c49ef... (100 %)
Wrote 750400 bytes (400464 compressed) at 0x00010000 in 4.7 seconds (effective 1289.5 kbit/s)...
Hash of data verified.
Leaving...
Hard resetting via RTS pin...
[...]
Voici une vidéo où je flashe un badge :
Si vous suivez ces instructions, vous réaliserez que même si vous définissez le niveau initial à 185, le badge reste au niveau 1.
En regardant le code, cela se produit parce qu’il lit la valeur du niveau depuis la configuration et flasher le badge n’efface pas la section de configuration.
Faisons un bon vieux factory reset (remettre la configuration d’usine).
Le Makefile a une commande pour ça :
factory_reset:
esptool.py --chip esp32s3 --port /dev/ttyACM0 erase_region 0x310000 0x100000
Essayons :
> make factory_reset
esptool.py --chip esp32s3 --port /dev/ttyACM0 erase_region 0x310000 0x100000
make: esptool.py: No such file or directory
make: *** [Makefile:38: factory_reset] Error 127
Il nous manque esptool.py, disponible via pip.
Réessayons après avoir installé Esptool :
> pip install esptool
[...]
> make factory_reset
esptool.py --chip esp32s3 --port /dev/ttyACM0 erase_region 0x310000 0x100000
esptool.py v4.8.1
Serial port /dev/ttyACM0
Connecting...
Chip is ESP32-S3 (QFN56) (revision v0.2)
Features: WiFi, BLE, Embedded PSRAM 8MB (AP_3v3)
Crystal is 40MHz
MAC: dc:da:0c:58:05:f0
Uploading stub...
Running stub...
Stub running...
Erasing region (may be slow depending on size)...
Erase completed successfully in 0.6 seconds.
Hard resetting via RTS pin...
Et le badge commence à briller instantanément! Voyez une vidéo du résultat en action, incluant un jumelage bonus juste pour le plaisir :
Maintenant, votre badge NorthSec peut exhiber plusieurs motifs de clignotement avec ses nombreuses DEL. Profitez du #badgelife!