Arduino Serial In

Posted on

Use Python to communicate between Arduino.

I started with an easy example. Serial.available & from arduino tutorial. I managed to use the But only for one figure number. How i'm gonna read the serial reply from the reader. The reply is AA BB 06 00 BF FF 01 01 00 40.

Receiving Serial Data in Arduino. We want to receive data on Arduino from a computer or another serial device. We have to send data from the computer or commands to Arduino. This is also the best use of Serial communication in Arduino. It’s easy to receive 8-bit values (chars and bytes) because the Serial function uses 8-bit values. Arduino is a development board which contains AVR microcontroller. It is designed to be easy-to-use and helpful for engineers, students or hobbyists in quick idea testing and prototyping.

  • 0 respects

Components and supplies

Apps and online services

Arduino IDE
Python IDLE
PySerial Library

About this project

In this tutorial, we are going to learn how we can install python on our computer and how to use it with Arduino, it allows us to send data between a computer though Arduino's serial.

Step 1: Install Python on Your Computer

You can skip this step if you have installed the Python IDLE already in your computer.

1. Go to the python website and download it (here).

2. Once you have done downloading, you can move on to installation by keeping the directory in which the python is getting installed by default.

Step 2: Install PySerial

PySerial is a Python API module which is used to read and write serial data to Arduino or any other Microcontroller. To install on Windows, simply visit PySerial's Download Page and following the steps bellow :

1. Download the PySerial from the link above or Open CMD and type


2. Install it by keeping the setting as the default. You should be sure that Pyserial worked correctly, To check this You can open IDLE and type in

If you are not getting any error, it means you installed it correct, else you can check your installation.

Step 3: Python Code

First up, we need a simple program to get the Python sending data over the serial port.

Step 4: Arduino Code

To initiate a connection with the Arduino from Python, we first have to figure out which COM Port the Arduino is on. We can simply see in which port our Arduino is on.



  • 4 projects
  • 1 follower

Published on

November 6, 2020
Write a comment
See similar projects
you might like

Table of contents

Write a comment

In the previous tutorial, we learned about serial communication in Arduino using the universal asynchronous receiver-transmitter (UART). We also discussed how Arduino can talk with a computer system using the UART protocol.

The UART is a dedicated circuit that implements serial communication according to its protocol. Arduino boards have one or more UART/USART. These UART/USART interfaces are available through the header of the Arduino boards. At least one UART (available at pins 0 and 1) is shared with the USB port of Arduino, which enables loading sketches to the board over a USB interface.

Arduino serial monitor

Apart from the UART hardware, it’s also possible to implement software serial on any digital I/O pin of Arduino. The software serial simply replicates the functionality of the UART hardware. This replication is done via the softwareSerial library.

The softwareSerial library is based on the NewSoftSeriallibrary by Mikal Hart. This library virtually implements the UART protocol on any digital I/O pin of Arduino. Multiple software serial ports can be defined in a user-program for full-duplex serial communication with several devices. Despite multiple software serial ports, however, only one port can be used at a time.

The software serial ports can communicate data at speeds as high as 115200 bps. The embedded sensors typically communicate data to the controllers or computers at low speeds. The software serial is sufficient enough to efficiently communicate data with most of the embedded sensors.

Arduino Serial Input Code

It’s also worth noting that the data reception through the software serial can only be implemented on those Arduino channels/pins that support change interrupts.

This table summarizes the pins on the different Arduino boards available for the software serial:

The softwareSerial library
To implement software serial in an Arduino sketch, the softwareSerial library can be used. This library can be imported in a sketch using this statement:

#include <SoftwareSerial.h>

The library contains these methods:

SoftwareSerial() used to create an instance of the softwareSerial class. Multiple instances can be created in a sketch, but only one instance can be used to receive/transmit data at a time. This method has this syntax:

SoftwareSerial <serialPortInstance>(rxPin, txPin, inverse_logic)

SoftwareSerial takes three parameters and the third one is optional.

  • The first parameter, RxPin, is the pin number assigned to receive the serial data.
  • The second parameter, TxPin, is the pin number assigned to transmit the serial data.
  • The third (optional) parameter is inverse_logic. If set to “True,” then the logical LOW at the RxPin is treated as bit 1 and the logical HIGH at the RxPin is treated as bit 0. By default, the inverse_logic parameter is set to “False.”

This is a valid example of this method:

SoftwareSerial portOne(2, 3);

softwareSerial.begin() sets the baud rate for the software serial communication. It must be called after creating a software serial instance. The supported baud rates are 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 31250, 38400, 57600, and 115200 bps. It has this syntax:


The method only takes one argument that’s the baud rate for the software serial communication. The baud rate is in bits-per-second (bps). Here’s a valid example of this method:


softwareSerial.available() returns the number of bytes available to read from the software serial port. It has this syntax:


This method requires no arguments. Here’s a valid example:

if (portOne.available()>0)

softwareSerial.listen() used to select a port to listen for incoming data. Only one software serial port can be selected at a time. When a port is selected to listen, it means the data has already arrived at the software serial ports and is rejected.

While a port is selected to listen for the serial data, incoming data from other software serial ports are also discarded. This method has this syntax:


And this is a valid example:


softwareSerial.isListening() – used to test if the requested software serial port is listening for the incoming data or not. If the requested port is active, the method returns True. Otherwise, it returns False. It has this syntax:


Here’s a valid example of this method:

if (portOne.isListening())
Serial.println(“Port One is listening!”);
} – returns a character received on the software serial port. If no data is available to read, then it returns -1. It has this syntax:

Here’s a valid example of this method:

char c =;

softwareSerial.peek() – returns a character received on the software serial port. It’s different from the read() because in subsequent calls, it returns the same character. It has this syntax:


Week mac

Here’s a valid example of this method:

char c = portOne.peek();

softwareSerial.write() – prints data to the TxPin of the selected software serial port. This data is printed as bytes. The method returns the number of bytes printed to the selected software serial port. It has this syntax:


The method takes the data to be printed as an argument. Here’s a valid example:


softwareSerial.print() – used to send ASCII characters to the serial port. This function needs a value or string as an argument. It returns the number of bytes written to the port, although reading that number is optional. It also accepts BIN, OCT, DEC, or HEX as optional arguments to specify the base format of the characters (either binary, octal, decimal, or hexadecimal).

If the value passed is a floating-point number, the number of decimal places can be passed as an argument. This method has this syntax:


This is a valid example:

portOne.print(“hello t”);

softwareSerial.println() – the same as the print() except that the sent ASCII characters are followed by a carriage return (‘r’) and a newline character(‘n’). This method has this syntax:


Here’s a valid example:


softwareSerial.overflow() – tests if the software serial overflow has occurred. The software serial buffer can only store 64 bytes.

On calling this method, the overflow flag is cleared. Therefore, a subsequent call to this method does not return True until the overflow occurs again. It has this syntax:


This is a valid example:

if (portOne.overflow())
Serial.println(“SoftwareSerial overflow!”);

Recipe: Reading data from the NEO-6MV2 GPS modem using softwareSerial
In this recipe, we connect the NEO-6MV2 GPS modem to Arduino’s software serial port at pins 2 and 3. Then, we observe the GPS data on Arduino IDE’s serial monitor of Arduino by connecting the Arduino UNO board to a computer via a USB.

Components required

1. Arduino UNO x1
2. NEO-6MV2 GPS modem x1
3. USB cable x1
4. Jumper wires or connecting wires

Circuit connections

  • Connect the Tx pin of the GPS modem to Arduino UNO’s pin 2
  • Connect the Rx pin of the GPS modem to Arduino UNO’s pin 3
  • Supply the 5V and ground to the NEO-6MV2 modem from Arduino
  • Connect Arduino to a computer via a USB cable and open the serial monitor from Arduino IDE

Arduino sketch
How the project works
The NEO-6MV2 GPS modem is connected to a software serial port of Arduino. The software serial port’s RxPin is assigned to pin 2. Its TxPin is assigned to Arduino UNO’s pin 3.

Arduino UNO is connected to a computer via a USB cable. The serial port of Arduino is shared with the USB interface and it communicates data to the computer via the UART hardware.

Arduino is programmed to read data at its software serial port from the GPS modem and transmit it to the serial port. From Arduino’s serial port, the GPS data is observed on Arduino IDE’s serial monitor.

Programming guide
The Arduino sketch begins by importing the softwareSerial library. In the setup() function, Arduino’s serial port is initialized to a 9600 baud rate and a message is printed on the serial port to convey that the GPS modem is connected to the software serial port.

An instance of the software serial port is defined with the name, ‘portOne,’ with Arduino UNO’s pin 2 assigned to the RxPin and Arduino UNO’s pin 3 assigned to the TxPin.

In the loop function, the data is read from the software serial port, ‘portOne,’ and transferred to Arduino’s serial port. The data from Arduino’s serial port is observed on Arduino IDE’s serial monitor.

Arduino Serial In Pwm Out

In the next tutorial, we’ll cover synchronous serial communication in Arduino by using the I2C protocol.