Ingesta en ensamblador AVR

Envía lecturas DS18B20 desde un ATmega328P en ensamblador GNU AVR con un shield W5100. avr-gcc, avrdude y el mismo relay HTTPS en la LAN que el Uno.

Primer plano de cables Ethernet Cat-5e blancos con conectores RJ45
El JSON de las sondas suele salir de la LAN por Ethernet o por un relay cercano, no directamente a internet. Foto: DiscDepotDundee.co.uk. CC BY-SA 4.0

Casi ninguna sonda antiheladas con Ethernet requiere ensamblador. PADAUK, PIC10F y ATtiny10 se programan sobre todo (o en la práctica solo) en ensamblador, pero no tienen pila TCP ni RAM suficiente para enviar JSON por POST. La opción que sí podemos soportar es ensamblador GNU AVR en un Arduino Uno / ATmega328P con un shield Ethernet W5100: el mismo hardware de garaje que Uno con Ethernet, sin Arduino C.

El W5100 no admite TLS. Este ejemplo usa el mismo relay HTTP→HTTPS en la LAN que Uno en C, STM32 Zephyr y CH32V WCHNET.

Componentes

Componentes para una sonda antiheladas en ensamblador AVR
Componente Para qué Comprar
Arduino Uno (ATmega328P) AVR a 16 MHz. Se programa con avr-gcc / avrdude, no con el Arduino IDE. Adafruit Uno · Amazon
Shield Ethernet W5100 Chip de sockets por SPI. El mismo shield que el ejemplo Arduino Ethernet DHT22. Adafruit Ethernet · Amazon
DS18B20 resistente al agua Datos en D7. No uses D4: el shield usa D4 como chip-select de la SD. Adafruit DS18B20 · Amazon
Resistencia de 4.7kΩ Pull-up de la línea de datos del DS18B20 a 5V (el Uno es una placa de 5V). Amazon 4.7k

Cableado

  • DS18B20 VDD → Uno 5V
  • DS18B20 GND → GND
  • Datos del DS18B20 → D7 (PD7), 4.7k a 5V
  • Shield Ethernet montado sobre el Uno. RJ45 → LAN. USB para grabar y para el puerto serie a 115200.

Compilar y grabar

  1. Abre Dashboard → Devices y descarga AVR main.S (con la ruta de ingesta ya incluida), o copia el fragmento ingest_path del recuadro de ingesta.
  2. En un equipo de la LAN:
    python3 sketches/relay/push_https_forward.py --listen 0.0.0.0:8080 \
      --upstream https://probeharbor.dev
  3. Configura ingest_ip / ingest_port y la cadena de la cabecera Host con los datos de ese equipo. La IP estática del Uno es 192.168.1.177 en net_cfg.
  4. cd sketches/avr/atmega328_w5100_ds18b20
    make flash PORT=/dev/ttyACM0
    O ensambla el main.S descargado con los mismos flags avr-gcc -mmcu=atmega328p -nostartfiles -nostdlib.
  5. Serie a 115200: link ok y después POST 200. La clave de sensor temp1 se importa con el primer POST (°F entero).

En el repositorio: sketches/avr/atmega328_w5100_ds18b20/ (main.S, Makefile).

Lo que no vamos a añadir

  • PADAUK / PIC10F / ATtiny4–10: pensados para ensamblador, pero sin Ethernet y con demasiada poca RAM para HTTP.
  • Parallax Propeller PASM / PASM2: tienen una auténtica cultura de ensamblador, pero los accesorios Ethernet varían y no hay un shield único para el garaje.
  • PIC18F67J60: Ethernet integrado, pero la pila TCP de Microchip está en C, no en MPASM.
  • Wi‑Fi de nRF / TI en ensamblador Thumb: los SDK están en C. Escribir TLS a mano en ensamblador no es camino para un kit antiheladas.

Relacionado

Los enlaces de compra de Amazon pueden incluir una etiqueta de afiliado (Associates). Los enlaces de Adafruit y otros vendedores son directos (Adafruit no tiene programa de afiliados). ProbeHarbor puede recibir una comisión por compras válidas en Amazon sin coste adicional para ti.

Preguntas frecuentes

¿Alguna placa de ProbeHarbor requiere lenguaje ensamblador?
Ninguna sonda de congelación Ethernet requiere ensamblador. PADAUK y PIC10F se programan sobre todo en ensamblador, pero no pueden hacer POST HTTP. La vía en ensamblador compatible es GNU AVR en un Uno + W5100: avr-gcc, sin C de Arduino, DS18B20 en D7, HTTP hacia el relé TLS de la red local. Guía: probeharbor.dev/about/avr-asm-ingest.

¿Por qué no poner el DS18B20 en D4 como en el ejemplo del ESP32?
El shield Ethernet W5100 usa D4 como selección de chip de la tarjeta SD. Este firmware mantiene D4 en alto y lee la sonda en D7.

¿Puedo seguir usando el sketch en C de Arduino Ethernet?
Sí. sketches/arduino/ethernet_dht22_ingest es la vía en C con el mismo shield (DHT22 en A4/A5). Usa ensamblador solo si quieres programar el 328P sin C de Arduino.