Tag Archives: tutorial

Using a SIM800L GSM module with the Raspberry Pi (no battery)

sim800l gsm module with raspberry pi

The SIM800L is a GSM/GPRS modem widely used in electronics due to its very low price and wide availability. It’s an affordable way to send SMS with a Raspberry Pi or an Arduino, to connect to 3G or to implement a GPS.

However, it is almost impossible to find satisfactory explanations on its use and in particular on its connection.

In this tutorial we will therefore see how to connect and power a SIM800L from a Raspberry Pi (note that this also works for an Arduino), without external power supply or battery!

Hardware

We will go into the details and explanations later in this tutorial, but be aware that to connect a SIM800L to a Raspberry some hardware is required. So, you will need:

  • SIM800L GSM Module
  • 100 µF capacitor or more
  • 1N4007 diode
  • Breadboard
  • Jumpers

Of course, you will also need a Raspberry with Raspbian installed and a SIM card with a subscription. Note, the SIM card must be in micro sim format. If yours is a smaller format (nano format), you will need an adapter.

How to use the SIM800L module with a Raspberry Pi?

The SIM800L is a modem. It is the responsible for registering with your operator’s network, etc. Overall it behaves like a phone that you could control directly from your Raspberry.

To be able to control the SIM800L, from the Raspberry, you will have to provide power to the first and physically and software connect the two using a TTL port, more often called a serial port or interface.

From there you can control the SIM800L by sending so-called Hayes commands to the serial port – we actually speak more often of AT commands – which are commands specific to the functions of a modem. For example, send an SMS, enter a PIN code, check the network status, and much more!

In theory, to use a SIM800L with the Raspberry Pi you must do like this:

  • VDD of the SIM800L to +5V on the Raspberry.
  • GND of the SIM800L to GND on the Raspberry.
  • TXD of the SIM800L to RXD of the Raspberry.
  • RXD of the SIM800L to TXD of the Raspberry.

Only here, all that is the theory, but you will see that in practice things are a little more complicated.

Why is so difficult to plug in a SIM800L?

If the theory seems simple, in reality, you will find quite a few tutorials on the internet explaining how to use the SIM800L with a Raspberry. Worse, you will essentially find incorrect tutorials which, at best, will make your installation completely unstable, why not, will damage your SIM800L.

But then, how come there are not more quality resources available for such a well-known module? Because the SIM800L is particularly difficult to power and sensitive.

1. SIM800L is designed for phones and batteries

Originally the SIM800L was designed for use in phones by manufacturers. Its use in consumer electronics is much more recent and was not considered at all by the manufacturer.

As a result of its use in telephones, the module is designed to be powered by lithium-ion batteries, which offer voltages of around 3.6 to 3.7 volts. This feature will pose a first problem for us, because in digital electronics we generally use 3.3 volts or 5 volts, but not 3.6 volts.

2. SIM800L is an energy-intensive module

The second problem, the SIM800L performs radio operations that require large, very punctual current peaks. Typically the operations involved are registering on the operator’s network, sending messages, etc. If during these phases the module does not obtain the necessary current, its behavior becomes completely unpredictable, ranging from the error message to the restart through the loss of network.

Unfortunately, the power supplies in general and the GPIO ports of the Raspberry Pi in particular have a hard time responding to this kind of consumption peaks.

In fact, the amount of energy consumed is so great and over such a short period of time that using power cables that are too long and too thin can be enough to crash the module! This is also typically the case if you connect several Dupont cables in series.

No worries, we will explain how to solve these two problems!

So, how to power a SIM800L directly from a Raspberry?

We have seen so far that two problems arise for us to power a SIM800L from a Raspberry: an incompatible voltage and peaks in power consumption.

To begin, we will tackle the tension problem.

1. Decrease the voltage supplied by the Raspberry Pi

If we read the datasheet (technical sheet) of the SIM800L, we can see that the manufacturer indicates a supply voltage between 3.4 and 4.4 volts, with an optimal voltage of 4 volts.

The Raspberry Pi have two outputs that can supply two voltages, 3.3 and 5 volts. So we should increase our tension a bit or decrease it.

Let’s eliminate the first possibility which is too complicated to implement and look at the second. We are therefore looking for a reliable, simple and very inexpensive way to reduce a voltage by at least 0.6 volts, without reducing the intensity of the current (amperes). Luckily, it turns out that there is an electronic component that does exactly that, and that in addition this component is so widespread that absolutely all electronics technicians know it: the diode.

Diodes are primarily known for passing current in one direction only. But one of their characteristics is also to cause a voltage drop, which is estimated for silicon diodes at 0.7 volts.

So we just need to insert a silicon diode, we will take a 1N4007, between the 5 volt GPIO of our Pi and the VDD (power supply) PIN of our SIM800L. And here we have a voltage of 4.3 volts, MAGICAL RIGHT!!

2. Provide a power source that can meet consumption peaks

Now that we have solved our voltage problem, there remains our consumption peak problem. This time we would need a component allowing us to “store current” and provide it very quickly when the SIM800L needs it. Again, luckily, it exists and it’s called a capacitor!

Capacitors are used in many cases, but one of the most well-known uses is power supply stabilization. They charge when there is too much current and discharge when there is not enough. We will therefore insert an electrolytic capacitor (we will take at least a 100 µF 5 V, if we have more µF or volts no problem) in parallel with the VDD and GND pins of our SIM800L.

Schematics and wiring

Now that we’ve solved our problems, let’s see what our complete assembly looks like before testing everything by sending an SMS.

To hold all our components in place and connect them together we will use a breadboard and some jumpers.

Here is the final connection diagram, the red wire goes to the VDD, the black to the GND.

A few notes on assembly:

  • unplug the power supply of your Raspberry Pi while wiring. Only plug it in after checking everything and being sure that your circuit is good to go.
  • Connect the capacitor as close as possible to the VDD and GND pins of the SIM800L, ideally as shown in the diagram.
  • Capacitors are a polarized component, you must connect theme in a precise direction, anode on the VDD, cathode on the GND. The cathode is marked by a white band on the side.
  • Just like the capacitor, the diode is a polarized component. Again the cathode is marked by a white band.

Once the assembly is complete, you will be able to insert the SIM card into the slot provided on the SIM800L.

You must tuck the card on the contact side against the printed circuit, the corner cut at an angle towards the opening (it protrudes a little). If you insert the card upside down you will get a SIM not inserted type error when using the module.

Once the assembly is finished, turn on your Raspberry Pi, we will be able to test by sending an SMS!

Your first SMS from the Raspberry with a SIM800L

To finish this tutorial, we will send a first SMS to check that everything is working. We will not go further on the use of the SIM800L, but be aware that it offers many other features. For more advanced use, refer to the AT commands guide for the SIM800.

To begin, you will have to follow our tutorial to activate the serial port of the Raspberry Pi. Once you have finished activating the serial port we can connect to the SIM800L via the serial port.

To do this, open a connection to /dev/serial0 with minicom using the command line below:

sudo minicom -b 115000 -o -D /dev/serial0

Type the AT command (often the first line is not displayed when you type, this is normal) then make a line break to validate. You should get an OK response message.

Now we are going to check that the SIM card is unlocked (the PIN code is entered). To do this type the command AT+CPIN?. You should have an answer:

+CPIN: READY
OK

If you get an answer like the one below, you need to enter your card’s PIN code.

+CPIN: SIM PIN
OK

To do this, use the command AT+CPIN=0000 replacing 0000 with your own PIN code. You should then get a response of the form:

AT+CPIN=0000
OK
+CPIN: READY
SMS Ready
Call Ready

That’s it, you are connected to your operator’s network. All we have to do is send an SMS. To do this, use the commands AT+CMGF=1 to activate the text mode (it allows us to write the SMS in a format understandable for a human), then AT+CMGS="+213XXXXXXXXX" replacing +213XXXXXXXXX by the number to which you want to send the SMS.

A character > will appear, type your SMS then once you finish, press Ctrl+Z.

In the end you should have something like this:

AT+CMGF=1
OK
AT+CMGS="+213XXXXXXXXX"
> My Fist SMS with SIM800L using Raspberry Pi
+CMGS: 29

OK

There you go, you have sent your first SMS with a Raspberry Pi and a SIM800L! if you need to see more tutorials, check this link.

Programming Arduino with Visual Studio Code

program arduino with vscode

Every hobbyist generally start programming on Arduino using its official IDE. For advanced programmers, it may be interesting to change the code editor to have access to a larger number of features. In this article, you will learn how to program your Arduino using of the Visual Studio Code software which is a nice alternative to the Arduino IDE.

Introducing Visual Studio Code

Visual Studio Code is an extensible and lightweight code editor developed by Microsoft. VSCode brings many features compared to the Arduino IDE:

  • Auto-completion.
  • Syntax highlighting.
  • Debug functionality.
  • Programming in several languages (C++, C#, Java, Python, PHP, etc.).
  • Project management.
  • Git repository management.

It is open source and available on Windows, Linux and MacOS platforms.

Installing Visual Studio Code

Go to the Visual Studio Code download page and download the latest version corresponding to your OS. Launch the installer and follow the usual steps.

Communicating with Arduino

To be able to communicate with Arduino, you must install the corresponding extension.

Click on the “Extensions” icon it the left of your screen or use the shortcut (Ctrl+Shift+X).

Then search for Arduino and select “Arduino for Visual Studio Code”.

install it then Restart VSCode.

Setting up VSCode for Arduino

Click on the Manage icon (gear icon on the bottom left) and select “Command Palette”. You can use the shortcut (Ctrl+Shift+P).

Search for Arduino, then you have access to several commands related to Arduino.

Select Arduino Board Config then select board type.

At the bottom right, click on Select Serial Port, then select the serial port corresponding to the Arduino (here, COM5).

At the bottom right, click on Select Programmer then select “AVRISP mkII”.

Code compilation and upload

In the command palette (Ctrl+Shift+P), search for “Arduino: Examples” then choose “Blink” or another example.

You can then upload the code by pressing “Upload” in the top right.

The console indicates if the code is loading and you can verify that the code is loaded on the Arduino board by looking at the status of the LED.

By modifying the code a bit we send text to the serial monitor.

int led = 13;

// the setup routine runs once when you press reset:
void setup() {
  Serial.begin(115200);
  // initialize the digital pin as an output.
  pinMode(led, OUTPUT);
}

// the loop routine runs over and over again forever:
void loop() {
  digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
  Serial.println("Led is High");
  delay(1000);               // wait for a second
  digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
  Serial.println("Led is Low");

  delay(1000);               // wait for a second
}

Upload the modified code to the Arduino board.

To open the serial monitor, press the Serial Monitor icon just to the right of the board type at the bottom right.

You can then select the desired Baudrate in the Arduino board configuration bar at the bottom right (115200).

Send commands to the serial monitor

Just like the Arduino IDE, it is possible to send commands via the Serial port.

In the Arduino command palette, search for “Send text to Serial Port”. An input bar appears.

It is possible to create a keyboard shortcut to open this command more easily. Press the gear icon to the right of the control.

Under the Keybinding tab, you can customize your shortcut.

Now you are ready to use use VSCode with your Arduino boards. Try this tutorial of the 16×02 LCD using VSCODE.

The 16×02 LCD with Arduino

LCD 16x02 with Arduino

It is often useful to display numerical or textual information produced by an Arduino board (a measurement made by a sensor, for example). As long as the Arduino is plugged into a computer, we can use the serial monitor built into the IDE to display this information. But if we want to develop a stand-alone device that can work away from the computer, a liquid crystal display (or LCD) is a practical and relatively simple solution. In this tutorial, we will learn how to use the 16×02 LCD with the Arduino board.

Equipment

  • Arduino UNO.
  • USB cable to connect the Arduino to the computer.
  • 16×2 LCD screen.
  • 220 Ohms resistor.
  • 1k Ohms potentiometer.
  • Jumpers.

What is a 16×2 LCD ?

Liquid crystal displays (LCD) use the light modulating property of liquid crystals. Liquid crystal displays are composed of two layers of polarizers, with perpendicular polarization directions,. These displays contain two glass plates between which the liquid crystals are placed. On the glass plates is an array of electrodes for each pixel. A voltage applied between the electrodes of a pixel causes a change in orientation of the molecules and therefore the transparency of the pixel which can then let, or not, pass the light of the backlight.

Wiring and explanations

Pins 1 and 2 are used to power the display:

  • Pin1 of the display — GND of the Arduino board.
  • Pin2 of the display — 5 V of the Arduino board.

Pin3 is used to adjust the contrast of the display: it is connected to a 10 kΩ potentiometer which allows its voltage to be adjusted to a value between 0 and 5 V.

  • Pin3 of the display — Cursor of the 1k Ohms potentiometer whose two other pins are connected respectively to GND and to 5 V.
  • Pin4 “RS” of the display — Pin12 of the Arduino
  • Pin5 “R/W” of the display — GND of the Arduino
  • Pin6 “Enable” of the display — Pin11 of the Arduino

Pins 7, 8, 9 and 10 of the display are not connected, because we will use the display in 4-bit mode rather than in 8-bit mode (which saves the inputs/outputs of the Arduino ).

  • Pin11 “D4” of the display — Pin5 of the Arduino.
  • Pin12 “D5” of the display — Pin4 of the Arduino.
  • Pin13 “D6” of the display — Pin3 of the Arduino.
  • Pin14 “D7” of the display — Pin2 of the Arduino.

Pins 15 and 16 are used to power the backlight. On some display models, the backlight is not essential (except to read the display in the dark), while for other models the display is unreadable if the backlight is not activated.

  • Pin15 from display — 5 V from Arduino through a 220 Ohms resistor.
  • Pin16 of the display — GND of the Arduino.

The Liquid Crystal Library

To display the information on the display, we will use the “LiquidCrystal” library, which was specially designed for this purpose. No need to install it, since it comes with the IDE.

To quickly check that your display is indeed functional, download the “Hello World” example to your Arduino. You should see the message “Hello, world!” appear on the first line of the display, while on the second line a counter is incremented every second.
If nothing is displayed, don’t panic! Turn the potentiometer knob that controls the contrast. Or you might need recheck your wiring.

To display a text, we use the “print” command. The text always starts at the cursor position. When you write something, the cursor automatically moves to the position immediately following the displayed text.

The position of the cursor is set using the “setCursor(column, row)” command. It is important to note that the first line at the top has the number 0, and the first column on the left has the number 0. The instruction “lcd.setCursor(0,0)” will therefore position the cursor at the top left.

If you want the user to enter text that will appear on the display, it may be useful to show a blinking symbol that indicates the cursor position, using the “blink” command.

Example code

Once your module is correctly connected, you can modify the following code to obtain the desired functionality. In the following example, we are creating a countdown timer.

As mentioned before, to manage the 16×2 LCD screen in the program, you can use the LiquidCrystal.h library.

  • LiquidCrystal lcd(rs, en, d4, d5, d6, d7): set 4bit i2c communication
  • lcd. begin(16, 2): displays text on both lines.
  • lcd.print(): display a character string in ASCII.
  • lcd.write(): display data, one byte at a time.
  • lcd.setCursor(x, y): set cursor (column x: 0-16, row y:0-2).
  • lcd.clear(): clear what is displayed on the screen
/*
The Liquid Cristal counter
www.bekyelectronics.com/
*/

// Library
#include <LiquidCrystal.h>

// Library initialization
const int rs = 2, en = 3, d4 = 4, d5 = 5, d6 = 6, d7 = 7;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

long timeInit = 0; //min
int timeHour = 1;
int timeMin = 26;
int timeSec = 35;

void setup() {
 // set up the LCD's number of columns and rows: 
 lcd.begin(16, 2);
 analogWrite(8, 15);

 // Display a message
 lcd.print("Next alarm in: ");
 timeInit=timeToCount(timeHour, timeMin, timeSec);
}

void loop() {
 // Digital time display
 countTo(timeInit);
 
 // places the cursor at the 1st character of the 2nd line
 lcd.setCursor(0, 1);

 lcd.print(timeHour);
 lcd.print(" h");  
 lcd.print(timeMin);  
 lcd.print(" m");
 lcd.print(timeSec);
 lcd.print(" s");
 
 // Wait 1 second
 delay(1000); 

 timeInit=timeInit - 1;
}

void countTo(long cntr){
 timeHour=(cntr / 3600);
 timeMin= (cntr % 3600) / 60;
 timeSec = ((cntr % 3600) % 60);
}

int timeToCount(int h,int m,int s){
 return h * 3600 + m * 60 + s;
}

Congratulations, you just made your first clock.

If you want to see more of our tutorials, make sure to visit this link.

You may be interested in this article which shows how to use IMU MPU6050 with the Raspberry Pi Pico.

Twister: the brilliant OS for Raspberry Pi

Twister: the brilliant OS for Raspberry Pi

Since 2012, Raspberry Pi OS, formerly Raspbian, has been the go-to operating system for Raspberry Pi enthusiasts. Raspberry Pi OS is not the only operating system and a recent addition is Twister OS, which is based on Raspberry Pi OS, but it offers a larger selection of pre-installed apps and a choice of themes, some of which provide a Windows/macOS experience for the humble Pi.

In this tutorial, we will install Twister OS on a Raspberry Pi 4, then change the theme to suit Windows 10 and macOS. We’ll also take a look at the additional features of this excellent operating system, such as streaming media (Netflix, Amazon Prime, Hulu, Disney+) and games.

You can also use this OS with the Raspberry Pi 3B+. But for best performance, we recommend using a Raspberry Pi 4.

How to install Twister OS on the raspberry pi?

  • Download the latest version of Twister OS from this link which at the time of writing this article is v2.1.2.
  • Download balenaEtcher from here and install it.
  • Insert a micro SD card into your computer to install the OS on it.
  • Open balenaEtcher, select the Twister OS image, select the microSD card then click Flash to write the image.
  • Now, you can boot your Raspberry Pi from the microSD card.

On the first boot, you will see the Twister OS in all its glory. Stunning wallpaper and aesthetics that use the XFCE window manager to great effect. Twister OS is based on the latest version of Raspberry Pi OS (formerly Raspbian) and features all the applications found in a typical Raspberry Pi OS installation. Additional applications and themes provided by Twister OS are maintained and fixed by the Twister OS team.

Screenshot of the twister OS

Updating Twister OS

  • Check your internet connectivity.
  • From the main menu, select System >> Twister OS Patcher.
  • Follow the instructions to update and restart your Raspberry Pi.

Add a Windows or MacOS theme to your Twister OS

Twister OS is a chameleon, it can change its appearance in just a few clicks. If you want your OS to look like a Windows or Apple device, you can. The themes offered are of superb quality and really give the impression that we are using this OS.

To change the theme of your Twister OS just follow these steps:

  • On your desktop, Double-click on ThemeTwister.
  • Click Next to enter the theme selection screen.
  • Click the button below each theme to select it. A terminal window will appear and ask you to press Enter to restart.

Play with your Twister OS

Twister OS comes with a lot of gaming options. One can play classic PC games using DOSBOX x86Box, installable through PiKiss. Steam support is built into Twister OS, but don’t expect to rip demons in Doom Eternal, prefer simple 2D indie games.

Retro game players can play their game collections using RetroPie.

  • Install all the ROMs you have in /home/pi/RetroPie/roms selecting the correct system for each of the ROMs.
  • Connect a USB/Bluetooth gamepad
  • Double-click the RetroPie desktop icon and follow the on-screen instructions to set up your controller.
  • Choose the system for which you installed ROMs, and press the B button on your gamepad to select it.
  • Browse the game list and press B to play.

You can install the listed games in the Games Menu using PiKISS. Try AM2R: Return of Samus, an original game based on the Metroid series.

Play media files

There are several options for playing the videos and audio files. VLC and Parole media players allow playback through the desktop.

Kodi comes pre-installed on Twister OS and works exactly as you expect. Now enjoy loading up your media and streaming services on the big screen.

If you use streaming services like Amazon Prime Video, Netflix, Hulu, you can use the Chromium (Media Edition) version in the Internet menu to watch your favorite shows.

Control your Android device

The scrcpy app provides a way to interact with your Android device via USB debugging and it works remarkably well. It gives you the ability to control the device using a mouse and keyboard.

To set this up, follow these steps:

  • On your Android device, go to Settings >> About Phone and tap on Build Number until you enable the Developer Mode.
  • In Settings, find USB Debugging and select the first option.
  • Use the slider to enable USB debugging.
  • In Twister OS, click on the My Android icon. This will trigger a query on your Android device. Allow the request and your Android device will appear on the screen.

Using the keyboard and mouse, you can interact with the device now.

for other uses of the Raspberry Pi, check this link.