Arduino Multiple Serial Ports
I have obtain 2 shield from Itead; GPS Shield & IComSat GSM Shield. I have a requirement todevelop an Arduino Uno prototype and used a serial interface to communicate with this two shield. My sketches using SoftwareSerial but it seem not working properly, is there any optimal way to combine these two shield?
This is a very detailed tutorial on how to use multiple Serial Ports in an Arduino Projects. In this tutorial we will making a Proteus simulation and demonstrate how we can use multiple serial ports.
Arduino GPS Shieldhttp://imall.iteadstudio.com/im120417017.html
IComSat GSM/GPRS Shieldhttp://imall.iteadstudio.com/im120417009.html
1 Answer
$begingroup$Are you running afoul of any of the restrictions of Software Serial?
- If using multiple software serial ports, only one can receive data at a time.
- Not all pins on the Mega and Mega 2560 support change interrupts, so only the following can be used for RX: 10, 11, 12, 13, 50, 51, 52, 53, 62, 63, 64, 65, 66, 67, 68, 69
- Not all pins on the Leonardo support change interrupts, so only the following can be used for RX: 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).
Given that you're using the shields, you'd have trouble with my favorite trick. Drivers ati mobility radeon x1600 windows 7. I've occasionally used relays, analog multiplexers, or transistors to switch the functionality of pins on-the-fly. By using one digital pin to select which serial device you want to talk to, you can have both of your communication pipelines taking place on pins 0 and 1. However, that's not an option with off-the-shelf shields.
Computer Serial Ports
Not the answer you're looking for? Browse other questions tagged arduinoserialgpsgsm or ask your own question.
Serial Ports Definition
MultiSerialMega
Sometimes, one serial port just isn't enough! When trying to communicate with multiple serial enabled devices, while also sending info back to the main serial window, a few extra RX/TX ports can be a welcomed thing. This example makes use of one of Arduino and Genuino Mega's 3 auxiliary serial ports, routing any incoming data read on that connection straight to the main TX line, and, in turn, to the main serial window for you to view.
Hardware Required
Arduino Nano Two Serial Ports
- Arduino or Genuino Mega Board
- Serial enabled device (a Xbee Radio, a Bluetooth module, or RFID reader, or another board, for instance).
Circuit
After checking the data sheet of whatever serial enabled device you choose to use for this example, make sure that it is both properly wired and powered. Connect the RX pin and TX pins of your device to the TX1 and RX1 pins of your Mega, as shown in the schematic below.
Make sure that your Mega is connected to your computer, via USB, to enable serial communication.
image developed using Fritzing. For more circuit examples, see the Fritzing project page
Schematic
Code
This sketch assumes that you connect your serial enabled device is attached to TX1 and RX1.

Multiple Serial test
Receives from the main serial port, sends to the others.
Receives from serial port 1, sends to the main serial (Serial 0).
This example works only with boards with more than one serial like Arduino Mega, Due, Zero etc.
The circuit:
- any serial device attached to Serial port 1
- Serial Monitor open on Serial port 0
created 30 Dec 2008
modified 20 May 2012
by Tom Igoe & Jed Roach
modified 27 Nov 2015
by Arturo Guadalupi
This example code is in the public domain.
*/
voidsetup(){
// initialize both serial ports:
Serial.begin(9600);
Serial1.begin(9600);
}
voidloop(){
// read from port 1, send to port 0:
if(Serial1.available()){
int inByte =Serial1.read();
Serial.write(inByte);
}
// read from port 0, send to port 1:
if(Serial.available()){
int inByte =Serial.read();
Serial1.write(inByte);
}
}
See Also
- serial.begin()
- serial.read()
- serial.available()
- if()
- ASCIITable - Demonstrates Arduino's advanced serial output functions.
- Dimmer - Move the mouse to change the brightness of an LED.
- Graph - Send data to the computer and graph it in Processing.
- Midi - Send MIDI note messages serially.
- PhysicalPixel - Turn a LED on and off by sending data to your board from Processing or Max/MSP.
- ReadASCIIString - Parse a comma-separated string of integers to fade an LED.
- SerialCallResponse - Send multiple variables using a call-and-response (handshaking) method.
- SerialCallResponseASCII - Send multiple variables using a call-and-response (handshaking) method, and ASCII-encode the values before sending.
- SerialEvent - Demonstrates the use of SerialEvent().
- VirtualColorMixer - Send multiple variables from Arduino to your computer and read them in Processing or Max/MSP.
Last revision 2015/07/29 by SM