Note: Although it's sometime possible to use the chip directly on a breadboard, I've focused on breakout boards only here. Breakout boards are a bit more expensive (sometimes not by much) but are way easier to use.
About libraries: I'm not listing all libraries available for each module, just random ones I found. Use the Library Manager in Arduino IDE to help you find more libs.
Arduinos have a limited amount of pins, and sometimes they are not enough, especially an small boards like the Pro Micro.
I/O expanders allow you to add more pins to the Arduino (12, 16 and more), while needing only 2 or 3 on the arduino itself.
- I2C interface
- 16 channels (digital in/out) and PWM
- Not that cheap ($4-5)
- 3.3V max (GPIO are 5V tolerant)
- 4 possible addresses (0x3E, 0x3F, 0x70, 0x71) - depends on the breakout board
- SparkFun_SX1509_Arduino_Library - Requires Wire library for I2C. Uses 4458 bytes of program storage space (15% on a Leonardo).
- I2C interface
- PCF8574 8 channels, PCF8575/PCF8575C 16 channels
- $2-3
- 5V max
- address 0x20 (some breakout boards allow to change it)
Sparkfun PCF8575 breakout board repo (with schematics, firmware...) - Sparkfun recommends the SX1509 as a replacement
PCF8575 and PCF8575C are very similar. Not sure if libraries can be used for both. PCF8575C seems to be a bit rare on breakout boards.
- pcf8574_arduino_library from skywodd for PCF8574 / PCF8575
- PCF8575C - Requires Wire library for I2C. Uses 4960 bytes of program storage space
- I2C interface
- 16 channels
- crazy cheap $1
- 5.5V max
- address 0x20
- adafruit library for MCP23017 - Requires Wire library for I2C. Uses 4442 bytes of program storage space
- arduino-mcp23017 - Requires Wire library for I2C. Uses 4458 bytes of program storage space
I found 2 cheap SD card readers (one for SD, one for micro SD). They both connect via SPI.
Arduino has a library included for SD card stuff (Lib on Github).
There's also SdFat that seems nice. Not sure what the difference is between the 2, beside supporting soft SPI pins.