Arduino et sketches Arduino

Architecture du firmware de sondes de température connectées au réseau, avec cartes Arduino et capteurs d’humidité.

Vue de dessus d’une carte microcontrôleur Arduino Uno bleue sur fond blanc
Les cartes compatibles Arduino exécutent le sketch qui interroge les sondes et publie le JSON. Photo : Wikimedia Commons contributor. CC0

Le matériel des sondes tourne sur des microcontrôleurs compatibles Arduino. Le firmware, qu’on appelle couramment un sketch, lit les capteurs à intervalle régulier, met les résultats au format JSON et les sert sur le réseau, pour que le site web et d’autres clients récupèrent les données en direct sans câble série.

Rôle du sketch

  1. Initialiser les bus des capteurs et l’écran LCD 16×2 local pour une lecture sur place.
  2. Lire chaque sonde DHT22, avec nouvelles tentatives en cas d’erreur passagère du bus.
  3. Calculer une moyenne des sondes en bon état, comme valeur de synthèse rapide dans le JSON.
  4. Répondre aux requêtes HTTP avec un document JSON compact via le shield Ethernet.
  5. En option, journaliser les erreurs sur le port série pour le débogage sur place.

Structure JSON type

Les clients attendent un objet temp au premier niveau, avec une clé numérique par sonde plus avg. L’humidité figure à côté de la température pour chaque sonde. Garder des clés stables compte plus qu’une mise en forme soignée : les correspondances du dashboard font directement référence à ces clés.

{
  "temp": {
    "0": { "f": 38.2, "c": 3.4, "h": 41.0 },
    "1": { "f": 36.8, "c": 2.7, "h": 43.5 },
    "avg": { "f": 37.5, "c": 3.1, "h": 42.2 }
  }
}

Pour l’ingestion push, le même objet sonde peut être envoyé à /api/ingest/<key>. Les champs optionnels de premier niveau battery (ou battery_pct) et rssi mettent à jour l’état de l’appareil sur la page Devices sans clé de capteur supplémentaire.

{
  "temp": {
    "0": { "f": 38.2, "c": 3.4, "h": 41.0 }
  },
  "battery": 87,
  "rssi": -62
}

Ingestion push depuis le shield Ethernet

La pile W5100 d’un Uno ne gère pas TLS : elle ne peut donc pas envoyer de POST directement à https://probeharbor.dev. Utilisez ethernet_dht22_ingest pour envoyer en HTTP le JSON temp classique (DHT22 sur A4/A5, JSON optionnel sur le port 80 pour une lecture depuis le LAN). Lancez push_https_forward.py sur un Raspberry Pi, un NAS ou un ordinateur portable pour que ces POST atteignent ProbeHarbor en HTTPS. Les exemples ESP32 en Wi‑Fi qui parlent TLS se trouvent dans sketches/.

Guides de câblage du matériel

Le montage utilise un Arduino Uno, un shield Ethernet W5100, une platine d’essai, un potentiomètre de contraste, un écran LCD 16×2 et deux capteurs DHT22. Trois pages associées détaillent les schémas et le brochage :

Choix de la pile réseau

Cette révision utilise un shield Ethernet en SPI. Le sketch gère le DHCP, les boucles de reconnexion et la diffusion du JSON pendant que l’écran LCD continue d’afficher les valeurs des sondes en direct. Quand TLS est trop lourd pour le MCU, un relais Python peut terminer le HTTPS : voir Scripts et flux Python. Pour l’ingestion push depuis le même shield, voir ethernet_dht22_ingest.

Arduino Uno relié à un capteur DHT de température et d’humidité par trois fils de liaison
Une première mise en route minimale MCU + capteur, avant le câblage Ethernet, LCD et double sonde. Photo : Wikimedia Commons contributor. CC BY-SA 4.0
Carte de sonde ProbeHarbor révision deux avec shield Ethernet, écran LCD et capteurs DHT22
ProbeHarbor révision deux : Ethernet, affichage LCD et deux entrées DHT22 dans un seul empilement.

Méthode de développement

Les sketches sont modifiés dans l’Arduino IDE ou PlatformIO, flashés en USB, puis vérifiés grâce aux journaux série avant de fixer la carte dans l’espace surveillé. Vérifiez la structure du JSON avec curl avant d’ajouter l’URL du flux au dashboard du site.

Des exemples prêts à adapter pour DS18B20, MAX31855, MAX6675 et Uno + Ethernet se trouvent dans ce dépôt, sous sketches/. Le Raspberry Pi Pico W / Pico 2 W utilise le même JSON d’ingestion avec CircuitPython ou MicroPython. Firmware complet Ethernet + DHT + LCD : arduino-network-json-temperature-sever.

Conseils de fiabilité

  • Les redémarrages par watchdog rattrapent les rares blocages réseau sans avoir à monter sur une échelle.
  • Séparez le bruit d’alimentation des capteurs de celle du MCU quand les câbles sont longs.
  • Versionnez votre schéma JSON dans la documentation quand vous ajoutez des champs.
  • Notez quelles broches GPIO correspondent à quelles étiquettes de sonde physiques ; voir le guide de câblage des broches.

FAQ

Où trouver des exemples de sketches Arduino ?
Dans le dépôt GitHub probeharbor, sous sketches/, ainsi que dans les guides Arduino de la section About. Les exemples ESP32 envoient directement en POST HTTPS. L’Uno + Ethernet W5100 utilise ethernet_dht22_ingest (JSON de température classique sur A4/A5) avec un relais HTTP→HTTPS sur le réseau local : le shield ne peut pas établir de connexion TLS avec probeharbor.dev.