Even [maurycyz] doesn’t think it is a good idea, but it is possible to use an AVR 8-bit CPU to serve web pages. Of course, it is a vastly simplified web server, but it does serve pages — OK, technically just one page — to the public Internet.
Working backward, it is fairly easy to get the microcontroller to note an HTTP request and then simply spit out a prerecorded HTTP response to provide the page. The hard part is connecting the little processor to the network. The server is dead simple, just a CPU and a scant number of components like filter caps and LEDs. The trick is to use SLIP, an ancient protocol used to connect dial-up modem terminals to the network.
Linux supports SLIP, so the MCU connects to a Linux computer via SLIP. Then the Linux computer uses WireGuard to network with the remote web server that serves [maurycyz’s] site. The SLIP implementation assumes that IP packets aren’t fragmented, which is normally true these days. TCP was a bit more complicated since you have to track the connection state and possibly re-transmit lost packets. Still, nothing the AVR with 8 K of RAM and 64 K of flash can’t handle.
Practical? No. Cool? Sort of. Funny that a disposable vape has more CPU power. Of course, something like an ESP32 is an obvious choice.

Hackaday partying like it’s 1999!
https://www.abc.net.au/science/news/stories/1999/43230.htm
haha, that’s a funny article. IoT before it was a buzz word and long before we had the frameworks to make it happen.
These tiny disposable web servers could be good for guerilla news campaigns, but the problem becomes how to find the news. ESP32s with AP/STA mode advertising what it is in the SSID would probably reach a larger audience over the life of such a signal and the freshness of the news itself.
geocache, my boy
Interesting! The mirror of demonstration page is available here (archived):
https://web.archive.org/web/20000817115709/http://www-ccs.cs.umass.edu/~shri/iPic/fs/
Btw, this reminds me of the PIC16F84 web server project of the 2000s.
It used an external EEPROM (32 KB?) to store website pages and connected via SLIP.
https://320volt.com/en/pic16f84-eeprom-basit-web-server-assembly-ccs-c/
That link just takes me to their homepage.
You could connect a Wiznet W5100 to the AVR to get an ethernet connection. That’s what I did with a weather station I built. It was quite a bit faster since it was connected over SPI at several mbps.
Love them Wiznets, these are affordable (not cheap) and just work.
Nut/OS ran on an Avr (Atmega) with a web server and both PPP and Ethernet support 20+ years ago. Multiple web pages that could be either static files on an external flash chip with a simple filesystem or code generated html. All while doing several other things as well. It was simple compared to other web servers, but it worked well enough.
Apples to oranges. From what I recall, it was vastly more complicated, it had separate chips for Ethernet, RS232, something like 512 kB of external SRAM and flash, etc. It seemed more like an attempt to build an SBC in the days before SBCs than an exercise in minimalism.
Correction: looks like it was 4 + 32 kB SRAM for v1, 512 kB for v2. But in both cases, eth and serial offloaded to other chips.
Just to clarify PC104 was alive and well 20+ years ago. SBC’s were certainly a thing.
If you want a neat one dig up a Vortex86.
Years before esp32 i used PIC18F97J60 for ethernet. It worked, but it takes lots off time to configure stack…
I wonder about using a handful of serial in serial out shift registers.
Let the microcontroller feed the bits in at it’s own pace, then swap the clock with something fast enough for ethernet and let the shift register but bang out the data.
bit^
sure.
I’ll be impressed when it has a TLS stack.
It’s been done…well:
https://green.bug-eyed.monster/uip-v0-9-keil-8051/
Now i wonder: is there a 1-piece chip with full TCP support in hardware (maybe FPGA), you can just send/receive data with to a pin-specified address?
I mean, why do we need to run a whole OS for a single task?
Wiznet chips do that. Wiznet shields for arduinos, but there are also W5500-EVB-PICO that’s rp2040 with the TCP/IP stack chip on the same board. (buy direct from the maker, other resellers charge three prices).
” Of course, it is a vastly simplified web server, but it does serve pages — OK, technically just one page — to the public Internet.”
“Then the Linux computer uses WireGuard to network with the remote web server that serves [maurycyz’s] site.”
So that’s what users of the public internet see. How is this a webserver? Physically it’s beautiful on that base.
This is no big deal. The iBoot by Dataprobe has an multiple page web server with authentication and everything. The original version was written all in assembly and used a NIC. What you have here is no big deal.