The Raspberry Pi is the perfect computer for learning. The Linux-based Raspbian OS has Python built in, making it a great first system for novice programmers. Its General Purpose Input/Output (GPIO) pins allow budding makers to experiment with electronic designs.
This is especially easy when you use code libraries that manage these pins, and the popular Python RPi.GPIO library is a great example of such a library. But is it the best way for beginners? Join us as we investigate.
What is GPIO Zero?
The GPIO Zero library is a Python library for working with GPIO pins. It was written by Raspberry Pi community manager Ben Nuttall. Aimed at being intuitive and «friendly», it optimizes Python code for most common Raspberry Pi use cases.
Combining simple naming techniques and descriptive features, GPIO Zero is more accessible to beginners. Even experienced users of the RPi.GPIO library may prefer it — and to see why, let’s see how RPi.GPIO compares to GPIO Zero.
What’s wrong with RPi.GPIO?
Nothing. Nothing at all RPi.GPIO was released in early 2012 by developer Ben Croston. This is a robust library that allows users to control GPIO pins from code. It is present in almost every project. we have already considered.
Despite widespread use, RPi.GPIO was never intended for end users. This is a testament to the good design of the RPi.GPIO that many beginners use.
What’s good about GPIO Zero?
When you study Python code, you will learn that it should be easy to read and as short as possible. GPIO Zero aims to cover both points. Based on RPi.GPIO as a front-end language wrapper, it makes it easy to set up and use the GPIO.
Consider the following example of setting up and turning on an LED:

The above code should be familiar to anyone who has used their pi’s to drive LEDs.
The RPi.GPIO library has been imported and the pin for the LED has been declared. Pinout type (BCM and BOARD modes are described in our GPIO manual.) and this pin is configured as an output. Then the pin is turned on.
This approach makes sense, but the GPIO Zero way of doing it is much easier:

GPIO Zero has a module for LEDs imported at startup. This means that you can declare a pin number code and call the method led.on() .
Why is the GPIO Zero approach better?
There are several reasons why this method of operation is an improvement on the RPi.GPIO.
First, it meets the requirement of «easy to read, as little as possible». While the RPi.GPIO setup statements are simple enough to understand, they are not needed. The LED will always be the output, so GPIO Zero makes the pins behind the scenes. The result is just three lines of code to set up, and then the LED lights up.
You may notice that there is no board mode setting in the GPIO Zero example. The library only uses Broadcom (BCM) numbering for pins. Library designer Ben Nuttall explains why in a 2015 RasPi.tv interview:
“The board numbering may seem simpler, but I would argue that it makes new users think that all the pins have a general purpose, which they do not. Connect an LED to pin 11, why not connect a few more to pins 1, 2, 3 and 4? Well 1 3V3. 2 and 4 5V. Lack of awareness of pin assignments can be dangerous.”
Speaking in this way, it makes sense to use BCM numbers. Given that GPIO Zero will be the standard in the Raspberry Pi documentation, it’s worth learning!
Is GPIO Zero really better?
While this seems simpler at first glance, does the new library have any issues? As with any new coding library, this is a matter of opinion. On the one hand, removing the installation code is great for both beginners and experienced programmers. Writing code is easier and faster.
On the other hand, knowing what is going on is important for learning. Take the button setup example from the GPIO Zero documentation:

Module buttons simplifies button setup. It knows that the buttons are input, so it uses the declared pin number to set it up. It’s also easier to check if a button is pressed, with .is_pressed to detect button presses.
We used this exact functionality in the tutorial this is a great way to familiarize yourself with the differences in the libraries.
Users of the RPi.GPIO library will notice that the Pi’s internal pull-down/pull-down resistors are not specified in the code. This raises an interesting question. Is it mandatory for beginners to know pull-up/pull-down resistors? Once again, Ben Nuttall has the answer to this question:
“You may argue that it is good to know about pull-ups and descents, and you would be right, but why should I teach it on the first day? […] If you want to teach electronics in more depth, there’s plenty of room to do so — but it shouldn’t be mandatory if you’re just starting out.»
All in all, the simple GPIO Zero approach is probably useful for beginners and veterans alike. Also, RPi.GPIO isn’t going anywhere. He will always be there to switch back if needed.
Is Python the only option?
Python is the language the Pi is known for, but it’s not the only option. If you are already familiar with C programming, then Wiring Pi will help you.
Also, if you’re already a JavaScript programmer, Node.js can be easily installed on the Pi. GPIO access is available through the rpi-gpio npm library. Ruby on Rails can also be installed on a Raspberry Pi, although the Pi might not be the best way to learn Rails!