A very cheap way to add WiFi to a project, is to use a WiFi router as WiFi hardware. The router needs to be not-so-new in order to be cheap, and must support
- Serial/USB or JTAG ports on board
- OpenWRT (DD-WRT may work too, but I haven't used DD-WRT for this purpose)
See OpenWRT supported hardware page for information on what hardware is supported (note that DD-WRT supports more hardware). Router firmware already has a web server (for serving and admin page), a linux kernel (usually Busybox), and most everything else you need to have a functional WiFi interface. Since OpenWRT is.. you know.. open, you can do whatever you want on the router side of the equation.
Many routers have USB connectors built in. Others have pads on the PCB that can be soldered to. This provides the router/microcontroller interface.
One solution is to get the router to do most of the interfacing for you (i.e. run a web server / web client, which the router/openWRT does already), and have your microcontroller just respond to get data requests or push data to the router via the serial/JTAG connection.
As an example the D-Link DIR-601 can be found bought for about $5, has a serial port pads (some soldering required) and supports OpenWRT, albeit the flash space is a bit tight. Low power and small form factor this device surely isn't, but you cannot beat the price.