Ingestão em assembly AVR

Envie leituras do DS18B20 a partir de um ATmega328P em assembly GNU AVR com shield W5100. avr-gcc, avrdude e o mesmo relay HTTPS local do Uno.

Close de cabos Ethernet Cat-5e brancos com conectores RJ45
O JSON das sondas normalmente sai da rede local por Ethernet ou por um relay próximo, não direto pela internet pública. Foto: DiscDepotDundee.co.uk. CC BY-SA 4.0

Quase nenhuma sonda contra congelamento com Ethernet exige assembly. PADAUK, PIC10F e ATtiny10 são programados principalmente (ou, na prática, apenas) em assembly, mas não têm pilha TCP nem RAM para enviar JSON por POST. O caminho que realmente conseguimos suportar é assembly GNU AVR em um Arduino Uno / ATmega328P com um shield Ethernet W5100: o mesmo hardware de garagem do Uno com Ethernet, sem Arduino C.

O W5100 não suporta TLS. Este exemplo usa o mesmo relay HTTP→HTTPS na LAN que o Uno em C, o STM32 Zephyr e o CH32V WCHNET.

Peças

Peças para uma sonda contra congelamento em assembly AVR
Peça Para quê Comprar
Arduino Uno (ATmega328P) AVR de 16 MHz. Programado com avr-gcc / avrdude, não com o Arduino IDE. Adafruit Uno · Amazon
Shield Ethernet W5100 Chip de sockets via SPI. O mesmo shield do exemplo Arduino Ethernet DHT22. Adafruit Ethernet · Amazon
DS18B20 à prova d’água Dados no D7. Não use o D4: o shield usa o D4 como chip-select do cartão SD. Adafruit DS18B20 · Amazon
Resistor de 4.7kΩ Pull-up da linha de dados do DS18B20 para 5V (o Uno é uma placa de 5V). Amazon 4.7k

Ligação

  • DS18B20 VDD → Uno 5V
  • DS18B20 GND → GND
  • Dados do DS18B20 → D7 (PD7), 4.7k para 5V
  • Shield Ethernet encaixado no Uno. RJ45 → LAN. USB para gravação e serial a 115200.

Compilar e gravar

  1. Abra Dashboard → Devices e baixe AVR main.S (com o caminho de ingestão preenchido), ou copie o trecho ingest_path do quadro de ingestão.
  2. Em uma máquina da LAN:
    python3 sketches/relay/push_https_forward.py --listen 0.0.0.0:8080 \
      --upstream https://probeharbor.dev
  3. Defina ingest_ip / ingest_port e a string do cabeçalho Host com os dados dessa máquina. O IP estático do Uno é 192.168.1.177 em net_cfg.
  4. cd sketches/avr/atmega328_w5100_ds18b20
    make flash PORT=/dev/ttyACM0
    Ou monte o main.S baixado com as mesmas flags avr-gcc -mmcu=atmega328p -nostartfiles -nostdlib.
  5. Serial a 115200: link ok e depois POST 200. A chave de sensor temp1 é importada no primeiro POST (°F inteiro).

No repositório: sketches/avr/atmega328_w5100_ds18b20/ (main.S, Makefile).

O que não vamos adicionar

  • PADAUK / PIC10F / ATtiny4–10: feitos para assembly, mas sem Ethernet e com RAM pouca demais para HTTP.
  • Parallax Propeller PASM / PASM2: uma verdadeira cultura de assembly, mas os complementos Ethernet variam e não existe um shield padrão para a garagem.
  • PIC18F67J60: Ethernet integrada, mas a pilha TCP da Microchip é em C, não em MPASM.
  • Wi‑Fi nRF / TI em assembly Thumb: os SDKs são em C. Escrever TLS à mão em assembly não é caminho para um kit contra congelamento.

Veja também

Os links de compra da Amazon podem incluir uma tag de Associados. Os links da Adafruit e de outras lojas são diretos (a Adafruit não tem programa de afiliados). O ProbeHarbor pode receber uma comissão por compras qualificadas na Amazon, sem custo extra para você.

Perguntas frequentes

Alguma placa do ProbeHarbor exige linguagem assembly?
Nenhuma sonda de congelamento Ethernet exige assembly. PADAUK e PIC10F são voltados a assembly, mas não conseguem fazer POST HTTP. O caminho em assembly suportado é GNU AVR em um Uno + W5100: avr-gcc, sem C do Arduino, DS18B20 no D7, HTTP para o relay TLS na rede local. Guia: probeharbor.dev/about/avr-asm-ingest.

Por que não colocar o DS18B20 no D4, como no exemplo do ESP32?
O shield Ethernet W5100 usa o D4 como chip-select do cartão SD. Este firmware mantém o D4 em nível alto e lê a sonda no D7.

Posso continuar usando o sketch Ethernet em C do Arduino?
Sim. sketches/arduino/ethernet_dht22_ingest é o caminho em C no mesmo shield (DHT22 em A4/A5). Use assembly só se quiser programar o 328P sem o C do Arduino.