Ingestion en assembleur AVR

Envoyez des relevés DS18B20 depuis un ATmega328P en assembleur GNU AVR avec un shield W5100. avr-gcc, avrdude et le même relais HTTPS LAN que l’Uno.

Gros plan de câbles Ethernet Cat-5e blancs avec connecteurs RJ45
Le JSON des sondes quitte généralement le LAN par Ethernet ou via un relais proche, pas directement par Internet. Photo : DiscDepotDundee.co.uk. CC BY-SA 4.0

Presque aucune sonde antigel Ethernet n’exige l’assembleur. PADAUK, PIC10F et ATtiny10 se programment d’abord (voire uniquement, en pratique) en assembleur, mais ils n’ont ni pile TCP ni assez de RAM pour envoyer du JSON en POST. La voie que nous pouvons vraiment prendre en charge, c’est l’assembleur GNU AVR sur un Arduino Uno / ATmega328P avec un shield Ethernet W5100 : le même matériel de garage que Uno Ethernet, sans Arduino C.

Le W5100 ne gère pas TLS. Cet exemple utilise le même relais HTTP→HTTPS sur le LAN que Uno en C, STM32 Zephyr et CH32V WCHNET.

Composants

Composants pour une sonde antigel en assembleur AVR
Composant Rôle Acheter
Arduino Uno (ATmega328P) AVR à 16 MHz. Programmé avec avr-gcc / avrdude, pas avec l’Arduino IDE. Adafruit Uno · Amazon
Shield Ethernet W5100 Puce de sockets en SPI. Le même shield que l’exemple Arduino Ethernet DHT22. Adafruit Ethernet · Amazon
DS18B20 étanche Données sur D7. N’utilisez pas D4 : le shield s’en sert comme chip-select de la carte SD. Adafruit DS18B20 · Amazon
Résistance 4.7kΩ Pull-up de la ligne de données du DS18B20 vers 5V (l’Uno est une carte 5V). Amazon 4.7k

Câblage

  • DS18B20 VDD → Uno 5V
  • DS18B20 GND → GND
  • Données DS18B20 → D7 (PD7), 4.7k vers 5V
  • Shield Ethernet enfiché sur l’Uno. RJ45 → LAN. USB pour le flash et la liaison série à 115200.

Compiler et flasher

  1. Ouvrez Dashboard → Devices et téléchargez AVR main.S (chemin d’ingestion déjà renseigné), ou copiez l’extrait ingest_path depuis l’encadré d’ingestion.
  2. Sur une machine du LAN :
    python3 sketches/relay/push_https_forward.py --listen 0.0.0.0:8080 \
      --upstream https://probeharbor.dev
  3. Réglez ingest_ip / ingest_port et la chaîne de l’en-tête Host sur cette machine. L’IP statique de l’Uno est 192.168.1.177 dans net_cfg.
  4. cd sketches/avr/atmega328_w5100_ds18b20
    make flash PORT=/dev/ttyACM0
    Ou assemblez le main.S téléchargé avec les mêmes options avr-gcc -mmcu=atmega328p -nostartfiles -nostdlib.
  5. Série à 115200 : link ok, puis POST 200. La clé de capteur temp1 est importée au premier POST (°F entier).

Dans le dépôt : sketches/avr/atmega328_w5100_ds18b20/ (main.S, Makefile).

Ce que nous n’ajouterons pas

  • PADAUK / PIC10F / ATtiny4–10 : conçus pour l’assembleur, mais sans Ethernet et avec trop peu de RAM pour HTTP.
  • Parallax Propeller PASM / PASM2 : une vraie culture de l’assembleur, mais les extensions Ethernet varient et il n’existe pas de shield de référence pour le garage.
  • PIC18F67J60 : Ethernet intégré, mais la pile TCP de Microchip est en C, pas en MPASM.
  • Wi‑Fi nRF / TI en assembleur Thumb : les SDK sont en C. Écrire TLS à la main en assembleur n’a pas sa place dans un kit antigel.

À voir aussi

Les liens d’achat Amazon peuvent contenir un identifiant Partenaires (Associates). Les liens Adafruit et des autres vendeurs sont directs (Adafruit n’a pas de programme d’affiliation). ProbeHarbor peut toucher une commission sur les achats Amazon éligibles, sans surcoût pour vous.

FAQ

Certaines cartes ProbeHarbor exigent-elles de l’assembleur ?
Aucune sonde de gel Ethernet n’exige d’assembleur. Les PADAUK et PIC10F se programment avant tout en assembleur, mais ne peuvent pas envoyer de POST HTTP. La voie assembleur prise en charge est GNU AVR sur un Uno + W5100 : avr-gcc, sans C Arduino, DS18B20 sur D7, HTTP vers le relais TLS du réseau local. Guide : probeharbor.dev/about/avr-asm-ingest.

Pourquoi ne pas mettre le DS18B20 sur D4 comme dans l’exemple ESP32 ?
Le shield Ethernet W5100 utilise D4 comme sélection de puce de la carte SD. Ce firmware maintient D4 à l’état haut et lit la sonde sur D7.

Puis-je continuer à utiliser le sketch C Arduino Ethernet ?
Oui. sketches/arduino/ethernet_dht22_ingest est la voie en C sur le même shield (DHT22 sur A4/A5). N’utilisez l’assembleur que si vous voulez programmer le 328P sans C Arduino.