Ingest in AVR-Assembler

DS18B20-Werte von einem ATmega328P in GNU-AVR-Assembler mit W5100-Shield senden. avr-gcc, avrdude und das gleiche LAN-HTTPS-Relay wie beim Uno.

Nahaufnahme weißer Cat-5e-Ethernet-Kabel mit RJ45-Steckern
Das Fühler-JSON verlässt das LAN meist über Ethernet oder ein nahes Relay, nicht direkt übers öffentliche Internet. Foto: DiscDepotDundee.co.uk. CC BY-SA 4.0

Kaum eine Ethernet-Frostsonde erfordert Assembler. PADAUK, PIC10F und ATtiny10 werden vorrangig (oder praktisch nur) in Assembler programmiert, haben aber weder einen TCP-Stack noch genug RAM, um JSON per POST zu senden. Was wir tatsächlich unterstützen können, ist GNU-AVR-Assembler auf einem Arduino Uno / ATmega328P mit einem W5100-Ethernet-Shield: dieselbe Garagenhardware wie bei Uno Ethernet, nur ohne Arduino-C.

Der W5100 beherrscht kein TLS. Dieses Beispiel nutzt dasselbe HTTP→HTTPS-Relay im LAN wie Uno in C, STM32 Zephyr und CH32V WCHNET.

Teile

Teile für eine Frostsonde in AVR-Assembler
Teil Wozu Kaufen
Arduino Uno (ATmega328P) AVR mit 16 MHz. Programmiert mit avr-gcc / avrdude, nicht mit der Arduino IDE. Adafruit Uno · Amazon
W5100-Ethernet-Shield Socket-Chip über SPI. Dasselbe Shield wie im Beispiel Arduino Ethernet DHT22. Adafruit Ethernet · Amazon
Wasserdichter DS18B20 Daten an D7. Nicht D4 verwenden: Das Shield nutzt D4 als Chip-Select für die SD-Karte. Adafruit DS18B20 · Amazon
4.7kΩ-Widerstand Pull-up von der DS18B20-Datenleitung auf 5V (der Uno ist ein 5V-Board). Amazon 4.7k

Verdrahtung

  • DS18B20 VDD → Uno 5V
  • DS18B20 GND → GND
  • DS18B20-Daten → D7 (PD7), 4.7k auf 5V
  • Ethernet-Shield auf den Uno gesteckt. RJ45 → LAN. USB zum Flashen und für die serielle Ausgabe mit 115200.

Bauen und flashen

  1. Öffne Dashboard → Devices und lade AVR main.S herunter (Ingest-Pfad bereits eingetragen), oder kopiere das ingest_path-Snippet aus dem Ingest-Hinweis.
  2. Auf einem Rechner im LAN:
    python3 sketches/relay/push_https_forward.py --listen 0.0.0.0:8080 \
      --upstream https://probeharbor.dev
  3. Setze ingest_ip / ingest_port und den Host-Header-String auf diesen Rechner. Die statische IP des Uno ist 192.168.1.177 in net_cfg.
  4. cd sketches/avr/atmega328_w5100_ds18b20
    make flash PORT=/dev/ttyACM0
    Oder assembliere die heruntergeladene main.S mit denselben Flags avr-gcc -mmcu=atmega328p -nostartfiles -nostdlib.
  5. Seriell mit 115200: link ok, dann POST 200. Der Sensorschlüssel temp1 wird beim ersten POST übernommen (ganzzahlige °F).

Im Repo: sketches/avr/atmega328_w5100_ds18b20/ (main.S, Makefile).

Was wir nicht aufnehmen

  • PADAUK / PIC10F / ATtiny4–10: auf Assembler ausgelegt, aber ohne Ethernet und mit zu wenig RAM für HTTP.
  • Parallax Propeller PASM / PASM2: echte Assembler-Kultur, aber Ethernet-Erweiterungen sind uneinheitlich, und es gibt nicht das eine Garagen-Shield.
  • PIC18F67J60: integriertes Ethernet, aber Microchips TCP-Stack ist in C geschrieben, nicht in MPASM.
  • nRF / TI WLAN in Thumb-Assembler: Die SDKs sind in C. Handgeschriebenes TLS in Assembler ist kein Weg für ein Frost-Kit.

Weiterlesen

Amazon-Kauflinks können ein Partner-Tag (Associates) enthalten. Links zu Adafruit und anderen Händlern sind direkt (Adafruit hat kein Partnerprogramm). ProbeHarbor erhält für qualifizierte Amazon-Käufe womöglich eine Provision – ohne Mehrkosten für dich.

Häufige Fragen

Erfordert irgendein Board für ProbeHarbor Assembler?
Kein Ethernet-Frostfühler erfordert Assembler. PADAUK und PIC10F setzen vorrangig auf Assembler, können aber keinen HTTP-POST senden. Der unterstützte Assembler-Weg ist GNU AVR auf einem Uno + W5100: avr-gcc, kein Arduino-C, DS18B20 an D7, HTTP an das TLS-Relay im LAN. Anleitung: probeharbor.dev/about/avr-asm-ingest.

Warum kommt der DS18B20 nicht wie im ESP32-Beispiel an D4?
Das W5100-Ethernet-Shield nutzt D4 als Chip-Select für die SD-Karte. Diese Firmware hält D4 auf High und liest den Fühler an D7.

Kann ich stattdessen weiter den Arduino-Ethernet-Sketch in C nutzen?
Ja. sketches/arduino/ethernet_dht22_ingest ist der C-Weg auf demselben Shield (DHT22 an A4/A5). Nutze Assembler nur, wenn du den 328P ohne Arduino-C programmieren möchtest.