Challenges - How to Overcome Hardware and Software Limitations
The Arduino hardware is very powerful in the sense of provided functionality and bang for the buck. But, resources are pretty limited.
- 32kB of unmodifiable (at run-time) flash memory for the program
- 2kB of volatile SRAM memory for variables, and
- 1kB runtime-programmable, non-volatile EEPROM memory for data
That's it. Pretty much any icon on your Linux, Apple, or Windows desktop is bigger then the Arduino flash memory. This is a challenge already at compile time. It gets potentially worse at run time: Processing network data requires buffers, and buffer sizes may be variable.
Another thing is modifiable configuration (in example, WLAN credentials). If you want do to that without re-programming the chip, you need to use an interface of some kind (wireless, SPI/ I2C, or an SD card).
Updating the Firmware (OTA or Over the Air)
The Arduino itself does not provide a means to update its flash memory without some external help. But the ESP8266 or another Arduino (€2.50 from China) could do that.