I’ve been toying with how to handle multiple peripherals that require Serial. Up until now I’ve used the Software Serial library on Arduino, and have resorted for my SD card logger to use the hardware serial.
But is there a better way…
Lets have a look at the comms options:-
|Part||Hard Serial||Soft Serial||SPI||I2C|
|ArduLogger V3||Y||NO||YES ||YES |
|GPS – GP635T||Y||Y||NO||NO|
|GPS – UBlox 6M module||Y||Y||NO||NO |
|LCD – Hitachi 44780||Y||Y||NO ||NO|
 ArduLog software only, not the SparkFun OpenLog software. Oh and you need to modify the code yourself to add support!
 The compass on the UBlox does have I2C SCL and SDA lines, but not the GPS
 It is possible to use a register to drive the LCD. May be possible to cleverly link this to an SPI interface
Hmmm… So maybe not then… Although of course nothing stopping me using interface circuitry to make all the above work, but it would probably add to the number of IO lines used, not reduce them!
Speaking of IO lines used, I’m currently using these:-
- ArduLogger – 2 (hardware serial)
- GP635T – 3 (2x soft serial, 1x power mosfet on/off)
- 3DR Radio – 3 (2x soft serial, 1x power mosfet on/off)
- LCD – 6
- TOTAL: 14 (Arduino Pro Mini V3 I use has 22 pins that can be used for digital IO – 4 of these are optionally SPI, and another two optionally I2C)
I’ll keep a watching brief on using SPI though – could potentially be useful, and allow me to ‘off board’ a lot of serial comms in future.
[UPDATE 26 MAY 2015]
You can buy ICs that act as an SPI to multiple UART convertors each with a 64 byte FIFO queue. The chip model for two output UARTs (up to 4MBit/s!) is
SC16IS752IBS and is documented at http://www.nxp.com/documents/leaflet/75015676.pdf. This product also has some GPIO ports, so could theoretically externalise all my IO (including LCD) if I really needed to.