How to Read and Write from Serial port using Raspberry Pi?

by Apr 14, 2020Raspberry Pi

Raspberry Pi has a plethora of applications and a huge range over which it can be put to use, for some of these applications we require to connect it to external sensors or devices. To do so, we need to first understand how to connect the Pi to read and write from the peripheral device. Using serial communication with your Raspberry Pi is a simple and efficient way to read and write from and to an external device. To do this, we use the GPIO pins provided on the board, and by the end of this article, you should be able to connect your Raspberry Pi to any serial device.

What is serial communication?

Serial communication is a widely used approach to transfer information between a system and peripherals connected to it. It is also a simple, yet effective method of communication and is easy to learn and master for beginners. Raspberry Pi uses UART (Universal Asynchronous Receiver/Transmitter) is a serial communication protocol in which data is transferred serially i.e. bit by bit. Asynchronous serial communication is widely used for byte oriented transmission.

Hardware requirements:

  1. Raspberry Pi with OS installed (available on the official website)
  2. Camera module
  3. Power cable
  4. Monitor
  5. HDMI connector
  6. USB or Bluetooth mouse
  7. USB or Bluetooth keyboard

Setup:

Hardware

The RS232 to TTL adapter will have four connections which will be labelled: GND (Ground power-supply pin), RX (Received Data), TX (Transmitted Data), and VCC (Power-supply pin). To connect pins to the Raspberry Pi board, you can use either female to female wires to directly connect them or use a breadboard as in this tutorial. The GPIO pins on the board are assigned as:

The connection between the wires should be given as below (you can also refer the diagram)

  • GND connects to Pin 6.
  • RX connects to Pin 10.
  • TX connects to Pin 8.
  • VCC connects to Pin 4.
Connection using breadboard
RPi pin layout

Software:

  1. First, open the terminal and use the following commands to update and upgrade your Pi:
sudo apt-get update
sudo apt-get upgrade

2. next, we use the raspi-config tool. This will allow us to enable and disable the serial input/output interface. To open the Raspberry Pi configuration tool type:

sudo raspi-config

3. This command will load up the Raspberry Pi configuration screen. For more details on this check out: https://iot4beginners.com/raspberry-pi-configuration-settings/ . Use the arrow keys to select ‘Interfacing Options’ and click enter

4. On the next screen, use the arrow keys again to select “Serial“, and hit enter

5. You will then be prompted to choose whether you want the login shell to be accessible over serial. Select No and press enter. Select Yes when prompted to make use of Serial Port Hardware and press enter.

6. Once the Raspberry Pi has made the changes, you should see the following text appear on your screen.

“The serial login shell is disabled
The serial interface is enabled“.

7. After this, make sure to restart the Raspberry Pi. To do so, you will either be prompted, or you can type

sudo reboot

Prerequisites

We will be using a RS232 to TTL Adapter to create a loop back to the Raspberry Pi. Have your USB-Serial adapter plugged into the RS232 adapter, and the USB end of the USB-Serial adapter to be plugged into your Raspberry Pi’s USB Ports. In a practical application, you will be connecting your serial connection to an actual device

1. Once you have connected your USB-Serial adapter up and it is plugged into the Raspberry Pi, type the following in the terminal

dmesg | grep tty

2. In the output of this command, take note the USB specified.

For example, my own converter was attached to ttyUSB0 as we have shown in our output below. Make a note of what your USB device was attached to as you will need this to complete the tutorial.

ch341-uart converter now attached to ttyUSB0

In the text above, it has been connected to ttyUSB0

Programming for Serial Write

The first line of code is there to tell the operating system what it should try running the file with. Otherwise, it will likely attempt to run it as a standard bash script. We then import the libraries needed to run the code

#!/usr/bin/env python
import time
import serial

We then define the serial class. Here, port defines the serial port that the object will read and write over. Baudrate is the rate at which information is transferred. Parity chooses whether we should be doing parity checking. Stopbits indicates the end of data transmission. Bytesize is the number of data bits. Timeout is the time that serial commands should wait for before timing out.

ser = serial.Serial(
        port='/dev/ttyS0', #Replace ttyS0 with ttyAM0 for Pi1,Pi2,Pi0
        baudrate = 9600,
        parity=serial.PARITY_NONE,
        stopbits=serial.STOPBITS_ONE,
        bytesize=serial.EIGHTBITS,
        timeout=1
)
counter=0

We then write a loop to continually writing the text “Write Counter: n”. Where n is the current counter number to the serial port. It means that any device at the receiving end can display that text.

while 1: 
    ser.write('Write counter: %d \n'%(counter)) 
    time.sleep(1) 
    counter += 1

Programming for Serial Read

Programming for Serial Readis very similar to Serial Write, except for one difference – we use the port that we got a few steps ago, which in my case this was ttyUSB0.

!/usr/bin/env python
import time
import serial
ser = serial.Serial(
port='/dev/ttyUSB0',
baudrate = 9600,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS,
timeout=1
)

while 1:
x=ser.readline()
print x

This function reads a line until it hits a line that ends in \n. Anything after that will be omitted. Once it reads the value it stores it into our variable. We also print the value.

To view the output of your codes, open two terminals – in one run the serial write and in the other run the serial read. You will see the output in the serial read terminal, as the data will be written.

This will give you an insight into using the Raspberry Pi for Serial communication with peripheral devices and you can explore a wide range of applications using this!

Creating a multiplication Skill in Alexa using python

Written By Jyotsna Rajaraman

Hi! I'm Jyotsna, an electronics and communication undergrad who likes reading, writing, talking and learning. So when it comes to teaching, all my favorite things come together! I hope my articles have helped and taught you something. 🙂

RELATED POSTS

How to Setup an NGINX Server on Raspberry Pi ?

How to Setup an NGINX Server on Raspberry Pi ?

What is NGINX ? NGINX is a popular lightweight web server application you can install on the Raspberry Pi to allow it to serve web pages. In its initial release, it functioned for HTTP web serving. It is a web server that can also be used as...

FM Radio Transmitter with Raspberry Pi

FM Radio Transmitter with Raspberry Pi

We’ve all listened to the radio and sang along to the songs, atleast in the car. But have you ever found yourself switching through several channels because you couldn’t find even one song that YOU like? In this article we will learn how to build a FM radio...

Raspberry Pi Camera and its Variety

Raspberry Pi Camera and its Variety

Choosing a suitable raspberry pi camera for your projects can get really difficult. RPI camera v1, RPI camera v2, RPI NOIR camera, and the list continues. Each one has different properties and should be used according to them. They have been used in various fields and...

WiFi extender using Raspberry Pi

WiFi extender using Raspberry Pi

It is always useful to know how to use your Raspberry Pi in pet projects that are actually useful around the house. Especially when you aren’t building something new – using your dormant Raspberry Pi to build useful devices around the house is a fun idea. If you are...

Using Raspberry Pi as various Servers

Using Raspberry Pi as various Servers

Raspberry Pi is a widely popular SoC, that is versatile and easy to use for even beginners. If you are new and are unfamiliar with Pi, take a look at these articles. Regardless of the model of Raspberry Pi you have, I am sure you have discovered a plethora of projects...

SQLite Database on Raspberry Pi

Welcome to another tutorial on Raspberry Pi. In this tutorial, we will see how to use the SQLite Database on Raspberry Pi. Apart from the installation and a few basic commands, in the end, we shall look at a simple project to log sensor data into an SQLite database....

Mosquitto MQTT Broker on Raspberry Pi

This tutorial will show you what is Mosquitto MQTT Broker and how to install it on Raspberry Pi. Contents What is MQTT?Installing Mosquitto MQTT on Raspberry PiCreating an MQTT Broker on Raspberry PiSubscribe to a TopicPublish a message to a TopicSample...

Evolution of the Raspberry Pi – A Comparison

Evolution of the Raspberry Pi – A Comparison

The Raspberry Pi is an inexpensive credit card-sized micro-computer. The Raspberry Pi was originally designed as a way to teach how computers work and the rest of computer science in general. It was originally developed in the UK by a team that included Eben Upton,...

Recording audio on your Raspberry Pi

Recording audio on your Raspberry Pi

Raspberry Pi can record and playback fairly good quality audio through its USB 2.0 ports. For recording audio and playback we need two peripheral devices, a USB microphone, and a speaker. You can choose to use a USB speaker, or a speaker with a 3.5mm sound jack....

Tutorial: Dropbox with Raspberry Pi

Tutorial: Dropbox with Raspberry Pi

Many Raspberry Pi projects require synchronization of files over more than just one device. Dropbox, which is a popular file-hosting service, can be used for this with ease. Synchronizing data between different devices may seem a little tricky, especially since the...

VIDEOS – FOLLOW US ON YOUTUBE

EXPLORE OUR IOT PROJECTS

IoT Smart Gardening System – ESP8266, MQTT, Adafruit IO

Gardening is always a very calming pastime. However, our gardens' plants may not always receive the care they require due to our active lifestyles. What if we could remotely keep an eye on their health and provide them with the attention they require? In this article,...

How to Simulate IoT projects using Cisco Packet Tracer

In this tutorial, let's learn how to simulate the IoT project using the Cisco packet tracer. As an example, we shall build a simple Home Automation project to control and monitor devices. Introduction Firstly, let's quickly look at the overview of the software. Packet...

All you need to know about integrating NodeMCU with Ubidots over MQTT

In this tutorial, let's discuss Integrating NodeMCU and Ubidots IoT platform. As an illustration, we shall interface the DHT11 sensor to monitor temperature and Humidity. Additionally, an led bulb is controlled using the dashboard. Besides, the implementation will be...

All you need to know about integrating NodeMCU with Ubidots over Https

In this tutorial, let's discuss Integrating NodeMCU and Ubidots IoT platform. As an illustration, we shall interface the DHT11 sensor to monitor temperature and Humidity. Additionally, an led bulb is controlled using the dashboard. Besides, the implementation will be...

How to design a Wireless Blind Stick using nRF24L01 Module?

Introduction Let's learn to design a low-cost wireless blind stick using the nRF24L01 transceiver module. So the complete project is divided into the transmitter part and receiver part. Thus, the Transmitter part consists of an Arduino Nano microcontroller, ultrasonic...

Sending Temperature data to ThingSpeak Cloud and Visualize

In this article, we are going to learn “How to send temperature data to ThingSpeak Cloud?”. We can then visualize the temperature data uploaded to ThingSpeak Cloud anywhere in the world. But "What is ThingSpeak?” ThingSpeak is an open-source IoT platform that allows...

Amaze your friend with latest tricks of Raspberry Pi and Firebase

Introduction to our Raspberry Pi and Firebase trick Let me introduce you to the latest trick of Raspberry Pi and Firebase we'll be using to fool them. It begins with a small circuit to connect a temperature sensor and an Infrared sensor with Raspberry Pi. The circuit...

How to implement Machine Learning on IoT based Data?

Introduction The industrial scope for the convergence of the Internet of Things(IoT) and Machine learning(ML) is wide and informative. IoT renders an enormous amount of data from various sensors. On the other hand, ML opens up insight hidden in the acquired data....

Smart Display Board based on IoT and Google Firebase

Introduction In this tutorial, we are going to build a Smart Display Board based on IoT and Google Firebase by using NodeMCU8266 (or you can even use NodeMCU32) and LCD. Generally, in shops, hotels, offices, railway stations, notice/ display boards are used. They are...

Smart Gardening System – GO GREEN Project

Automation of farm activities can transform agricultural domain from being manual into a dynamic field to yield higher production with less human intervention. The project Green is developed to manage farms using modern information and communication technologies....