100% found this document useful (1 vote)
685 views100 pages

MagPi104 Raspberry Pi Magazine

MagPi104 The Official Raspberry Pi Magazine April 2021

Uploaded by

Benjamin Dover
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (1 vote)
685 views100 pages

MagPi104 Raspberry Pi Magazine

MagPi104 The Official Raspberry Pi Magazine April 2021

Uploaded by

Benjamin Dover
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 100

BUY IN PRINT WORLDWIDE MAGPI.

CC/STORE

Issue 104 April 2021 magpi.cc The official Raspberry Pi magazine

HOME OF THE FUTURE


Automate your home with Raspberry Pi

Upcycle
iPod Classic
with Spotify

magpi.cc/store
Build
an arcade
machine

48 PAGES OF PROJECTS & TUTORIALS


WELCOME

WELCOME
to The MagPi 104

W
elcome to the future. 2021 is a sci-fi year and science
promised us hoverboards, jet packs, and robot butlers.
We can’t do much about the first two (although we’re
keeping an eye out). But help around the home is definitely our
domain. In this issue we asked resident home automation expert PJ
Evans to design our home of the future with Raspberry Pi (page 34).
The result is a fabulous collection of widgets, projects, and gizmos to Lucy

EDITOR
Hattersley
help around the house. I’ve already talked Rosie into installing some
Lucy is editor of The
NeoPixel steps at home. MagPi magazine and
continues to bash
Meanwhile Rob has been looking how to take a Raspberry Pi her south London
home into shape.
project and turn it into a Pico project (page 72). KG has started to
@LucyHattersley
build an arcade machine (page 42). Nicola has been looking at an
autonomous home robot (page 20). Me? I’ve been playing around
with ARM assembly like the nerd I am (page 84).
This issue has been a huge amount of fun! And we particularly like
the illustration adorning this month’s cover. Thanks to Sam Alder GET A
for incredible drawing skills (and Sam Ribbits for laying it out). RASPBERRY PI
Enjoy this month’s edition and ZERO W KIT
let us know what you do with
your home.
PAGE 32

Lucy Hattersley Editor

magpi.cc 03
3 ISSUES FOR £10
+
FREE BOOK

magpi.cc/freebook
Subscribe to The MagPi, HackSpace magazine, or Custom PC. Your first three issues for £10, then our great value rolling subscription
afterwards. Includes a free voucher for one of five fantastic books at store.rpipress.cc/collections/latest-bookazines
UK only. Free delivery on everything.
CONTENTS

Contents
> Issue 104 > April 2021

Cover Feature

34 Home of the future 34

Regulars
92 Your Letters
97 Next Month
98 The Final Word

Project Showcases
08 iPod Classic Spotify player
14 Kay-Berlin Food Computer
18 POV Display
20 Autonomous Home Robot
22 Haptic navigation
24 CamChess 26
26 Automated drone lander
28 Smart Crust-Cutting Robot
30 Giant Hornet Detector

20

Autonomous Home Robot Automated drone lander

DISCLAIMER: Some of the tools and techniques shown in The MagPi magazine are dangerous unless used with skill, experience, and appropriate personal protection equipment. While
we attempt to guide the reader, ultimately you are responsible for your own safety and understanding the limits of yourself and your equipment. Children should be supervised. Raspberry
Pi (Trading) Ltd does not accept responsibility for any injuries, damage to equipment, or costs incurred from projects, tutorials or suggestions in The MagPi magazine. Laws and regulations
covering many of the topics in The MagPi magazine are different between countries, and are always subject to change. You are responsible for understanding the requirements in your
jurisdiction and ensuring that you comply with them. Some manufacturers place limits on the use of their hardware which some projects or suggestions in The MagPi magazine may go
beyond. It is your responsibility to understand the manufacturer’s limits.

magpi.cc 05
CONTENTS

Tutorials 46 64
42 Build an arcade machine – part 1
46 Set up Pi-hole
50 Create GUIs in Python – part 3
56 Code a Light Cycle game
58 Pico traffic light controller
64 Use Visual Studio Code Set up Pi-hole Use Visual Studio Code
68 Cheap Trills – part 3
80
The Big Feature
72

Pico Explorer Base


Pico-fy your projects
86
Reviews
78 IoT Crickets
80 Pico Explorer Base
82 10 Amazing: Maker tools
84 Learn ARM assembly

Community
86 Kevin Johnson interview
88 This Month in Raspberry Pi Kevin Johnson interview

WIN SMARTIPI TOUCH 95

1 OF 6 PRO CASES

06 magpi.cc
PROJECT SHOWCASE

iPod Classic
Spotify player
Recreating Apple’s iconic iPod Classic as a Spotify player may seem like
sacrilege, but it works surprisingly well. Rosie Hattersley listens in

W
hen the original iPod was launched, Guy’s career spans mobile phone app
the idea of using it to run anything development, software engineering, and time
other than iTunes seemed almost in recording studios in Boston as an audio
Guy Dupont
MAKER

blasphemous. The hardware remains a classic, engineer, so a music tech hack makes sense.
A software and but our loyalties are elsewhere with music services He first used Raspberry Pi for its static IP so he
mobile phone these days. If you still love the iPod but aren’t could log in remotely to his home network, and
developer, Guy wedded to Apple Music, Guy Dupont’s Spotify later as a means of monitoring his home during
enjoys acquiring
hack makes a lot of sense. “It’s empowering as a a renovation project. Guy likes using Raspberry
new skills
while tackling consumer to be able to make things work for me Pi when planning a specific task because he
tech projects. – no compromises,” he tells us. His iPod Classic can “program [it] to do one thing really well…
magpi.cc/ Spotify player project cost around $130, but you and then I can leave it somewhere forever”, in
ipodspotify could cut costs with a different streaming option. complete contrast to his day job.
“I wanted to explore what Apple’s (amazing)
original iPod user experience would feel like in Mighty micro
a world where we have instant access to tens of Guy seems amazed at having created a Spotify
millions of songs,” he says. “And, frankly, it was streaming client that lives inside, and can be
really fun to take products from two competitors controlled by, an old iPod case from 2004. He even
and make them interact in an unnatural way.” recreated the iPod’s user interface in software,

Warning!
Conductive
electricity
If you’re upcycling an
MP3 player with a metal
case, make sure you
tape off the conductive
components so you
don’t short-circuit them.

magpi.cc/
electricalsafety

This project streams


music using Spotify
using an API from
the music service’s
development page

08 magpi.cc iPod Classic Spotify player


PROJECT SHOWCASE

The 2004 iPod shell hides a


Raspberry Pi Zero W connected to a
Spotify Premium account

The display is a faithful


facsimile of the original
Apple iPod

Quick FACTS

> Guy hacked his


RV by adding a
Raspberry Pi
media server...

> …much to the


surprise of its
co‑owner (his dad!)

> He’s also Raspberry


Pi-enabled his
record player…

> ...it streams albums


Just like the iPod Classic, running a around the house
finger round the click wheel scrolls
through the list of tracks or artists > iPod was one of
the first devices to
use the VideoCore
processor found in
Raspberry Pi

iPod Classic Spotify player magpi.cc 09


PROJECT SHOWCASE

Guy managed to use a font for the music library that looks
almost exactly the same as Apple’s original

right down to the font. A ten-year-old article It’s really empowering as a consumer
about the click wheel provided some invaluable
functionality insights (magpi.cc/ipodclickwheel) to be able to make things work for me
and allowed him to write code to control it in C.
Guy was also delighted to discover an Adafruit – no compromises
display that’s the right size for the case, doesn’t
expose the bezels, and uses composite video input
so he could drive it directly from Raspberry Pi’s
composite out pins, using just two wires. “If you’re
not looking too closely, it’s not immediately obvious
that the device was physically modified,” he grins.
Guy’s retro iPod features a Raspberry Pi Zero W.
“I’m not sure there’s another single-board
computer this powerful that would have fit in this
case, let alone one that’s so affordable and readily
available,” he says. “Raspberry Pi did a miraculous
amount of work in this project.” The user interface
is a Python app, while Raspberry Pi streams music
from Spotify via Raspotify (magpi.cc/raspotify),
reads user input from the iPod’s click wheel, and
drives a haptic motor – all at once.
Most of the hardware for the project came from
Guy’s local electronics store, which has a good Guy previously used Raspberry Pi to stream albums around his home

10 magpi.cc iPod Classic Spotify player


RasPad 3
A Portable Raspberry Pi
Pad to Learn & Program
in Mins

Get it at raspad.com

Ethernet USB
GPIO SD Card Slot HDMI Audio
Power Button
Volume
Battery
PROJECT SHOWCASE

Music on the move

Carefully open up the MP3 player you’re


01 repurposing, remove its existing components,
retaining anything you’ll reuse, then check the
replacement parts will fit within the chassis.

Install the C-based haptic code on Raspberry


02 Pi Zero. Connect Raspberry Pi, display, headers,
and leads. Then power on and check the click wheel Impressively, the click wheel
scrolling mechanism works line in Raspberry Pi and Adafruit components. He
data is recognised and drives the haptic motor. just like the iPod Classic’s had a couple of attempts to get the right size of
haptic motor, but most things came together fairly
easily after a bit of online research. Help, when
he needed it, was freely given by the Raspberry Pi
community, which Guy describes as “incredible”.

Things just clicked


Part of the fun of this project was getting the
iPod to run a non-Apple streaming service, so
he’d also love to see versions of the iPod project
using different media players. You can follow his
instructions on GitHub (magpi.cc/ipodspotify).
Tape off any conductive elements in the case
Next, Guy intends to add a DAC (digital to
03 to prevent short-circuiting. Test Raspotify and analogue converter) for the headphone jack, but
install on Raspberry Pi Zero before mounting it in your Bluetooth works for now, even connecting from
new music player and powering it up. inside his jacket pocket, and he plans to get an
external USB DAC in time.

12 magpi.cc iPod Classic Spotify player


200 PAGES OF RASPBERRY PI
Get started with Raspberry Pi, Learn how to code and make
electronics, and more with our step-by-step tutorials

Be inspired by incredible Find out about the top kits and


projects made by other people accessories for your projects

Buy online: magpi.cc/store


PROJECT SHOWCASE

Kay-Berlin
Food Computer
Rob Zwetsloot talks to teacher Chris Regini about the incredible
project that his students are working on

W
hen we think of garden automation here capturing real-time and time-lapsed footage using a
at The MagPi, we often think of basic [Raspberry Pi] NoIR Camera Module in both daylight
measures like checking soil moisture and night-time growth periods.”
and temperature. The Kay-Berlin Food Computer, Everything can be controlled manually or set to
named after student creators Noah Kay and Noah be autonomous. This isn’t just keeping your garden
Berlin, does a lot more than that. A lot more. looking nice, this is the future of automated farming.
“It is a fully automated growth chamber that can
Noah Kay and monitor over a dozen atmospheric and root zone Seeds of knowledge
MAKER

Noah Berlin variables and post them to an online dashboard “The idea originated from the long-standing MIT
for remote viewing,” Chris Regini tells us. He’s food computer project and lots of open-source
Eighth grade supervising both Noahs in this project. “In addition collaboration in both the agriculture and Raspberry
students at West to collecting data, it is capable of adjusting fan Pi communities,” Chris explains. “We’ve always had
Hollow Middle
School in Long
speeds based on air temperature and humidity, the hopes of creating an automated growing system
Island, New dosing hydroponic reservoirs with pH adjustment that could collect long-term data for use in the ISS
York that are the and nutrient solutions via peristaltic pumps, dosing during space travel, or in terrestrial applications
leads on this
soil with water based on moisture sensor readings, where urbanisation or climate concerns required the
Food Computer.
adjusting light spectra and photoperiods, and growth of food indoors.”

At
 night, an IR LED floodlight allows Pumps
 control water flow,
for infrared camera monitoring via a along with other liquids
Raspberry Pi NoIR Camera Module designed to aid the plants

14 magpi.cc Kay-Berlin Food Computer


The grow lights
are controlled
by the system

A huge amount of
data is gathered
from the plants

Quick FACTS
> The project began
in late 2019

> An IR LED


illuminates the
farm at night
All the data is used for
automation, but it’s accessible
> The project makes
to students for manual control
use of a MARSfarm
classroom
greenhouse kit

> Chris has also


planned lessons
with the projects
website and
FutureLearn

> Calibration of
sensors can be
done remotely

Kay-Berlin Food Computer magpi.cc 15


PROJECT SHOWCASE

There are six plants in the box, allowing for a lot of data collection

With students doing a lot of learning from home in


the past year, having such a system accessible online
for interaction was important for Chris: “Adding
a layer that could keep students engaged in this
endeavour during remote learning was the catalyst
that truly spurred on our progress.”
This level of control and web accessibility is perfect
for Raspberry Pi, which Chris, his students, and his
Code Club have been using for years.
“The fact that we had access to the GPIOs
for sensors and actuators, as well as the ability
to capture photo and video was great for our
application,” Chris says. “Being able to serve the
collected data and images to the web, as well as
schedule subroutines via systemd, made it the
perfect fit for accessing our project remotely and
having it run time-sensitive programs.”
The computer has been in development for a
while, but the students working on it have a wide
range of skills that have made it possible.
“We have had a dedicated nucleus of students that
have spent time learning plant science, electronic
circuitry, Python, developing UIs, and creating
housings in CAD,” Chris explains. “They all started
as complete beginners and have benefited greatly
from the amazing tutorials available to them through
the Raspberry Pi Foundation website, as well as the
courses offered on FutureLearn.”

16 magpi.cc Kay-Berlin Food Computer


PROJECT SHOWCASE

Food science in action

“The entire system has a network of sensors…


01 which monitor atmospheric variables of air
temperature, humidity, CO2, O2, and air pressure.
Root zone variables include soil moisture by way
of capacitive resistance sensors, reservoir levels
by way of float switches, water/soil temperature,
water/soil pH, nutrient levels by way of EC,
dissolved oxygen, and water quality/root health by
way of ORP (oxidation reduction potential).”

C
 onstruction and
programming has occurred
in person and remotely

T he system does a fantastic job collecting


data and allowing us to visualise it via our
Adafruit IO+ dashboards
Grow beyond
The project is ongoing – although they’re already With this data, the computer controls an array
getting a lot of data that is being used for
02 of pumps that provide water, nutrients, and pH
adjustments. Grow lights are controlled and tweaked,
citizen science.
fans are adjusted, heating mats activated, and it even
“The system does a fantastic job collecting data
switches between day and night vision for the camera.
and allowing us to visualise it via our Adafruit
IO+ dashboards,” Chris says. “Upgrading our
sensors and actuators to more reliable and
accurate models has allowed the system to
produce research level data that we are currently
sharing in a citizen science project called Growing
Beyond Earth. It is funded by NASA and is
organised through Fairchild Botanical Gardens.
We have been guided along the way by industry
professionals in the field of hydroponics and have
also collaborated with St Louis-based MARSfarm “All data is viewable in real time and historically,
to upgrade the chamber housing, reflective
03 while all actuators are controllable via our
acrylic panels, and adjustable RGBW LED panel. Adafruit IO dashboard. Adjustment parameters like
RGBW light spectrum, photoperiod, fan speed, pH and
Linking our project with scientists, engineers,
temperature set points, and liquid dosing volumes can
researchers, and entrepreneurs has allowed it to be chosen here as well.”
really take off.”

Kay-Berlin Food Computer magpi.cc 17


PROJECT SHOWCASE

When the arm is spun rapidly, the


LEDs are blinked rapidly in a pattern
to display a still or moving image

POV Display
Putting Raspberry Pi Pico in a spin, this rotating LED arm can show
moving images. Phil King ponders whether seeing is believing

P
ersistence of vision (POV) is the optical The POV Display uses two different PIO state
phenomenon in which the illusion of machines (from the eight available on the chip) to
motion is created because the human brain control, in parallel, a pair of super-bright 24-LED
– which can only process 10–12 frames per second APA102 (aka DotStar) strips on its rotating arm. The
– interprets a rapid sequence of still pictures as arm is spun at high speed by a Mabuchi RS-540SH
a continuous moving image. It’s the basis of how motor, as commonly used in remote-control cars.
animation works, as well as film and TV in general. Each rotation is detected using a reflectance
By rotating a strip of LEDs at high speed and sensor on the arm and a small white marker
HomeMade
MAKER

syncing their blinking patterns, it’s possible to underneath. HomeMadeGarbage say that they
Garbage create the illusion of a still or moving image. This improved detection reliability by inserting “a filter
is just what Japan-based family team of makers and a Schmitt trigger between the reflectance
A family team of
two children and a HomeMadeGarbage have done for their POV Display sensor and Pico to prevent chattering.”
couple. They live on (magpi.cc/povdisplay), even spinning a Raspberry In the software, written in C, the time taken
a handmade basis. Pi Pico around with the LED strips. for one rotation is divided by 1000 to sync the
Dad is good at
electronic work,
Power of PIO
and mom is
good at music The makers tell us that, after creating a similar
T hey’ve managed to spin the
production and
web technology.
project using Sony’s considerably more expensive
Spresense board, they were inspired to try it with
arm at up to 960 rpm while
Children are good at
growing up well. Pico, as they were “very surprised at the parallel displaying an image at 1000
magpi.cc/garbage high-speed operation of PIO.” The latter is the
unique Programmable Input/Output feature of frames per rotation
Pico’s RP2040 chip that enables the use of custom
communication protocols in addition to the built-in blinking of LED patterns stored in a graphics
I2C and SPI. This offers a faster way of outputting array. “In order to leave a beautiful after-image,
bit-banged data (even video) to non-standard a speed of ten revolutions or more per second is
devices with a deeper level of control, without tying required,” reveal HomeMadeGarbage. Discovering
up the main processor. that “the I/O of Raspberry Pi Pico can run very

18 magpi.cc POV Display


Mounted on the other end of
the rotating arm, Raspberry
Pi Pico controls the LEDs

Two 24-LED APA102 strips


blink a synchronised
pattern to show an image
as the arm rotates

Quick FACTS
> The project
took four days
Power to Pico and the to complete
LEDs is supplied via a
wireless charging module > The LED pattern
is updated 1000
times per rotation

> The LED code


is based on
this example:
fast”, they’ve managed to spin the arm at up to underside of the arm centre. “5 V is supplied to the magpi.cc/
960 rpm while displaying an image at 1000 frames transmitting side of the wireless charging module, picoapa102code

per rotation. and the receiving side receives the voltage, [which]


> The arm spins
drives Pico, sensor, and LEDs.”
at anything up
Spinning around After posting a video of the POV Display in to 960 rpm
With everything, including Raspberry Pi Pico, action, HomeMadeGarbage found that people were
whizzing around at high speed, you may well “surprised at the high-speed operation.” They now > Everything is
be wondering how it’s powered without quickly plan to make an improved version with a narrower- powered using
causing a tangle of wires. The solution is the use of pitch LED bar. Also on the cards is a 3D POV Display a wireless
a wireless charging module, one of whose circular using Pico – we can’t wait to see that! charging module
coils sits on top of the motor, the other in the
The underside of the spinning
arm, revealing the reflectance
sensor and wireless charging coil

POV Display magpi.cc 19


PROJECT SHOWCASE

Autonomous
Home Robot
When Nick Baddorf decided he wanted to make a robot to help around the house, he
embarked on a very educational journey. Nicola King takes a look at a robotic work-in-progress

M
aking a robot from scratch, with no started as a tiny remote-controlled, self-balancing
instructions, and teaching yourself all robot,” says Nick. “Now it is a big robot that
the necessary programming and various navigates around the house!”
systems required is certainly no mean feat. So, let’s
applaud the tremendous efforts of Nick Baddorf, a Nuts and bolts
US-based teenager who has created a unique robot Nick’s robot basically consists of two sections:
completely under his own steam. the base and the head. “The base consists of a
“I have always loved robots,” Nick tells us. lidar laser scanner, Raspberry Pi, and Teensy,” he
Nick Baddorf
MAKER

“Building my own autonomous robot has been a goal reveals. “The lidar scanner, which is mounted on
Nick loves to build for me, as long as I can remember. I also wanted to a small auto-levelling platform, sends its range
autonomous robots, make my robot useful. I am always making things data to Raspberry Pi. The [latter] is the brain which
work on engines, but then end up taking them apart the next week takes in the lidar data and streams it over to a
and play with his
because they didn’t end up being useful. I challenged master computer for processing. Raspberry Pi also
dog Penny.
myself to make this robot useful, and help carry out sends drive messages to the Teensy, which handles
magpi.cc/
nickbrobot tasks around the house.” motor control.”
And so, several years ago, work on the In the head of the robot, Nick has positioned a
Autonomous Home Robot began and it’s fair to second Raspberry Pi, an Arduino, and a camera.
say that the project has evolved over that time. “It “Similarly to the base, Raspberry Pi streams the
camera feed over to the master computer, and sends
head movement commands to the Arduino,” he says.

On the lower part of the robot is a 12 V 10 A power system for
the motors. A 5 V 16 A USB power brick is used for the two
Raspberry Pi boards

The lidar sensor is mounted on an auto-levelling


platform to counter the tilt of the robot on the floor
– this will really come into play when Nick makes
the robot self-balancing

20 magpi.cc Autonomous Home Robot


A Raspberry Pi in the head
streams the camera feed to a
master computer, and sends head
movement commands to an Arduino

The lidar sensor spins 360


degrees; its data is used by ROS
to create a map for navigation

The base contains another Raspberry


Pi running ROS, and a Teensy
microcontroller which controls the
motors on a four-wheel chassis

Quick FACTS
> The project took
around three years
to complete
(part-time)

I challenged myself to studying to set up the robot. Once I was motivated


enough to put in the time to really learn ROS,
> Nick won his first
Raspberry Pi from
make this robot useful, everything fell into place.”
Nick is the first to admit that his robot is an
a local group
that started a
and help carry out tasks ongoing project and is continually evolving, but coding program…
the potential is there for it to perhaps carry things
around the house around the home, act as a robotic companion, > …when he was ten
and more. He’s already made many finely tuned years old!
The robot navigates its way around the house modifications:“I have added many things to the
by using various systems that Nick has installed, initial design, like tilting laser scanners, tilting > His other projects
include a ‘mind’-
and it knows where it is in a room by using wheel cameras, a rotating head, and even the temporary
controlled
rotations (odometry). Nick elaborates, “This four-wheel drive base,”
smart light
odometry is then combined with the laser data to He also has plans for a lot more improvements,
make a map. On the map, I can specify a point that “including new motors, making the robot self- > He’s working
the robot will drive to, and the robot will make its balancing, Raspberry Pi 4s, and a big battery so that on a Raspberry
way there, while avoiding obstacles.” the robot can completely navigate on its own.” Pi-powered
Nick is clearly very self-motivated and has input autonomous
Robot research many hours of hard work to get to this point. “I mobile robotic arm!
There was a great deal of technical coding, along asked for feedback recently from my engineer friend
with languages and systems, to learn before Nick’s who encouraged me to focus on getting the core of
robot came into being, including Python, C, HTML, the robot working well and stop adding extraneous
and OpenCV. The hardest part was to learn Robot features. A combination of his help, along with many
Operating System (ROS). “It took a lot of reading and others’, have helped make this robot work!”

Autonomous Home Robot magpi.cc 21


PROJECT SHOWCASE

Haptic navigation
Satellite navigation may seem ubiquitous, but it doesn’t work for everyone.
Rob Zwetsloot finds out about a project that will make it truly accessible

A
ccessibility is an oft overlooked aspect of a conversation with Pete Cossaboon, who runs
modern technology development. Sukriti obstacle races as a blind athlete. I learned that
Chadha’s job is to not overlook it, and she’s he wanted to be more independent in navigating
become an advocate for accessibility in the process. the space he is in. Both of these problems could
This is exemplified by one of her recent projects. potentially be solved with a haptics-based
“For people with hearing impairments, solution, and this is the first version of it.”
walking on a busy street while looking at a Using Raspberry Pi made sense in this context
Sukriti Chadha phone screen can be a challenge, and maybe due to its low price and small size, and Sukriti found
MAKER

even dangerous,” she explains. In addition, it easier to work with too. “For me as a developer,
A product “while driving, they might not be able to
manager at Spotify effectively use voice navigation and take their
who works on
accessibility and eyes off the street to look at directions. For those
also helps develop with visual impairments, navigating indoor
the WCAG group’s spaces that are noisy, or experiences such as
guidelines for
museums, can be less enjoyable because of voice
accessibility online
and on mobile. navigation interruptions.”
There are other ways to relay the information,
magpi.cc/sukriti
though, such as how Sukriti has made use of touch:
“This open-source solution uses a Raspberry Pi
Zero W and a mobile phone to relay turn-by-turn
instructions with haptic feedback, more commonly
known as vibrations, over an SSH connection with
the mobile device.”

T his open-source solution uses a Raspberry


Pi Zero W and a mobile phone to relay turn-
by-turn instructions with haptic feedback
A running thread
Sukriti tells us that around 466 million people
worldwide have disabling hearing loss, 34 million
of whom are children. The WHO believes that this
number will double in the next 30 years.
“Having worked in the distracted navigation
space at a Tel Aviv startup in 2014, I was acutely
aware of the limitations of voice navigation for
those with hearing impairments,” she says.
“My interest in the space was reignited during

22 magpi.cc Haptic navigation


Quick FACTS
The sensors vibrate to
indicate the next direction > The entire setup
costs $20

> Sukriti has used it


attached to a leg
while driving…

A Raspberry Pi Zero W is > …and in a small


powered on by the phone messenger bag for
and connects via SSH on foot

> The vibrations are


Navigation is handled provided by two
by the phone as it 1.5 V motors
would be normally
> It can be powered
by a smartphone
that has USB-C

programming on Raspberry Pi is intuitive,


especially since I was looking for an interface
between a mobile phone and a physical device.”

Touch and go
The system currently works using Mapbox, a
third-party mapping and navigation service,
which provides the directions that are then
translated to vibrations on the device. It can be
extended to other frameworks with an API that
allows for HTTP requests to be sent to Raspberry
Pi, such as iOS and mobile web.
“It works really well in terms of navigation
… for people with hearing impairments,”
Sukriti reveals. “I can see its applications in VR
navigation as well. The solution would be even
more useful for visually impaired users with
proximity sensors to help avoid obstacles, in
addition to navigation outdoors.”
Work is ongoing with the project, with Sukriti
wanting to add more haptic sensors for different
navigation commands, proximity sensors, PWM
output for varying intensity, and more.
“I have tested the prototype with a couple
of people, and the feedback has been really
positive,” she says. “I have personally been using
You can rest it on your person it on runs, so my music is not interrupted if I go
The basic electronics are
while driving to get directions on unfamiliar paths.” quite simple

Haptic navigation magpi.cc 23


PROJECT SHOWCASE

CamChess is “100% Python”. It uses


OpenCV, NumPy, and python-chess
The setup uses a Raspberry Pi Zero
and Raspberry Pi 4B communicating
over Ethernet, although wireless LAN
could also be used

CamChess has a motion tracker that


detects moves made on a standard
chessboard with plastic pieces.
Bright lighting is needed to prevent
shadows obscuring the board

CamChess
Chess is in vogue, prompting a proficient player to finally create a version
based on a club-standard playing board. Rosie Hattersley learns how

G
eoff Fergusson is the former captain of After retiring 20 years ago from his job as a
a county chess team, so he knew exactly consultant for large-scale computing systems, Geoff
what to build with his Raspberry Pi. “It was has racked upt experience of building small-scale
natural that I should build a chess project,” explains projects. Despite a 30-year break from it, he can still
Geoff. “The Queen’s Gambit TV series has spurred an write code. “Python was a bit of a culture shock,” he
interest in the game, so the timing is right.” reveals, “but I soon adapted.” Geoff made full use of
Playing against an on-screen computer opponent standard Python modules, along with OpenCV and
just isn’t the same, says Geoff. “It loses the social NumPy for image processing, and Stockfish as the
Geoff
MAKER

aspect.” Furthermore, it takes time to adapt from chess engine.


Fergusson
on-screen diagrams to playing with a physical A Raspberry Pi Zero with an attached ZeroCam
Retired computing board and pieces – something he imagines more worked well for capturing images of the chess board.
consultant people doing now that the TV show has given chess Mounting the ZeroCam on a door-frame, using
Geoff’s last major
a moment in the spotlight. “The ideal practice is to some sticky tape high above the centre of the chess
professional
assignment train with the same board and pieces as you would board, helped minimise lens distortion. Raspberry
was designing use at the local club,” he says, but it’s prohibitively Pi Zero takes pictures on command and sends them
a battlefield expensive for schools and many clubs, which is back to another computer for analysis. Geoff used a
logistics system,
playing neatly to
where his CamChess project fits in. “I wanted Raspberry Pi 4 to do this, but says any “non-antique”
his chess-honed to build a system that would work with standard Linux, Windows, or Mac computer would work.
tactical strengths. plastic pieces on a standard vinyl board,” and also
magpi.cc/ record the moves. Match ready
camchess Due to congested WiFi channels where he lives, he
A canny move opted for Ethernet to connect Raspberry Pi 4 and
CamChess combines the best elements of an Raspberry Pi Zero and send images using the USB
electronic board with the ability to record moves, but cable that also powers the latter. These images
costs only around £50 ($70) excluding Raspberry Pi 4. tell the computer the latest chess move that has

24 magpi.cc CamChess
PROJECT SHOWCASE

A Raspberry Pi
Zero with ZeroCam
is fixed to the
ceiling above

I wanted to build a system Quick FACTS

that would work with > Geoff advises


wannabe makers

standard plastic pieces seek out similar


projects to theirs

been made, which python-chess then replicates > Emulating


on-screen. Having experimented with the image others’ code and
comparison method used by Realtime-OpenCV- methodology
provides a good
Chess, Geoff thrashed out a method that determines
head start
whether each chess square is empty or occupied,
and whether it’s a white piece or a black piece.
> Geoff had admired
It was a challenge to get the board to configure Vatsal Parsaniya’s
itself automatically, but Geoff eventually worked Realtime-OpenCV-
out how to do so using standard threshold Chess (magpi.cc/
optimisation techniques. CamChess now only needs opencvchess)
to be shown the start position, and works out its
internal settings from there. CamChess’s difficulty > …which deduces
level can be set to engage the hobbyist player and chess moves by
subtracting one
they can make moves for both sides until they reach
image from another
a position that is of interest to them.
While he’s largely happy with the existing build,
> CamChess was
Geoff hopes others will make their own versions also inspired by the
of CamChess and let him know how they get on. Raspberry Turk chess
We did ask him about his own next move, but he’s robot (magpi.cc/
The ZeroCam picks up moves on the
keeping mum. board and displays them on screen raspberryturk)

CamChess magpi.cc 25
PROJECT SHOWCASE

Automated Camera-Based
Drone Landing System
When Dr Chinthaka Premachandra and his team looked to autonomously land a drone using
our favourite computer, it was certainly no pie in the sky idea, as David Crookes discovers

G
ravity dictates that what goes up must an on-drone camera, but this image processing
eventually come down but, when flying needs to be implemented in real-time, generally
a drone, it helps if the landing is as less than 15 milliseconds.”
smooth as possible.
That’s doubly true for an unmanned drone since Be snappy
a crash will not only render it unusable, it could It’s this need for fast on-board processing that led
also potentially put lives at risk. Chinthaka to consider using Raspberry Pi. “The
As such, researchers have been looking at idea is that flight control is conducted as soon as
Dr Chinthaka
MAKER

ways to ensure autonomous aerial vehicles can the images are processed, so we not only needed
Premachandra identify and make use of a safe landing spot. a good, lightweight camera but a lightweight on-
Chinthaka is an “This is especially important when the drones drone computer too,” he reveals. “Raspberry Pi
Associate Professor are operating around disaster sites,” says Dr 3B+ is obviously lightweight and it can be easily
in the Department Chinthaka Premachandra from the Shibaura implemented within a drone. Raspberry Pi 4 can be
of Electronic
Engineering at the
Institute of Technology in Japan. used for this too.”
Graduate School of To do this, Chinthaka has been leading a team The camera was chosen because it has a wide
Engineering in the in using a standard radio-controlled quadrocopter angle. “It’s wider than the other cameras that are
Shibaura Institute
drone fitted with a Raspberry Pi 3B+ and a mini compatible with Raspberry Pi, so it can capture
of Technology.
camera. They’ve worked on an automatic landing a large area and this capturing ability makes it
magpi.cc/ system, allowing the drone to be brought down to easy to identify a landing spot,” says Chinthaka.
dronelander
the ground without mishap. A depth camera was also important. “During the
“Automatic landing is a kind of automatic flight drone landing, the ground object information can
T
 he drone looks for the
landing pad by monitoring towards a specific landing spot and to achieve this be easily recognised with a depth camera rather
captured images before with a drone it must find the landing spot itself,” than a 2D camera.”
moving to the landing spot,
hovering, and determining Chinthaka explains. “I believe that landing spots For optimal results, the camera lens is kept
that it’s safe to land can be recognised by processing the images from horizontal, even when the drone body is not in

T
 he wide-angle camera can
capture a large area to help
xxxxxxxxxxxx identify a landing spot

26 magpi.cc Automated Camera-Based Drone Landing System


Although the drone has been made to
land autonomously, if anything goes
wrong the quadrocopter can still be Warning!
controlled manually
Be careful: The spinning
blades on a drone can
cause injuries. Make sure
you fly your drone safely
and legally.

magpi.cc/dronecode
The high performance of Raspberry
Pi and the availability of libraries
such as OpenCV made the computer
a perfect fit for this project Random objects and uneven ground
can often make landing difficult, so the Quick FACTS
drone is fitted with a depth camera
> Raspberry Pi
controls the drone’s
safe landing

this position during the flight. “If the lens was > The drone is a
not always horizontal, then it would be difficult to standard radio
smoothly capture the landing spot during flight control model
because of the shaking of the drone,” Chinthaka
> It lands at the
explains. “We made our own lightweight
centre of a
gimbal to keep the camera lens horizontal but a
landing pad
commercially available gimbal may also be used
for this task.” > The height control
operates at 20Hz

 ome parts of the


S > Computing time
is down to three
software include OpenCV milliseconds

library functions
H marks the spot
The idea is that the drone looks out for an H-shaped
symbol placed on the ground at the landing
location. Using software created by the team, the
image is processed and converted into physical
co‑ordinates to generate a horizontal feedback.
“Some parts of the software include OpenCV
library functions,” says Chinthaka. “We also wrote
software for the landing process, but developing the
necessary algorithms to detect the landing spot in
real-time was the greatest challenge.”
Even so, the researchers were able to get the
image processing time down to three milliseconds.
This allows the drone to quickly fly over to the
landing spot, hover over it, and land vertically, all
controlled by Raspberry Pi. “It’s been a big success
and we expect it will have a wide number of future A
 gimbal was built by combining two servos with
3D-printed parts and this ensures the camera, which
uses,” Chinthaka concludes. sits at the very bottom of the setup, is stabilised

Automated Camera-Based Drone Landing System magpi.cc 27


PROJECT SHOWCASE

The Smart
Crust-Cutting Robot
This innovative invention by Andrew DeGonge is arguably the best thing
since sliced bread, as David Crookes discovers

T
here’s nothing quite like a good bread people have that doesn’t have an automated
debate to get people talking. Do you cut solution?’ I realised there was no way to
sandwiches into rectangles or triangles? automatically cut the crust off sandwiches so
Andrew Are you calling it a roll, bap, barm, or muffin? And decided to create one, just because I can.”
MAKER

DeGonge do you eat your crusts – thereby ‘guaranteeing’ Andrew spent ten hours creating a CAD
your hair will grow curly – or slice them off and drawing of the project, ensuring enough room
Andrew is a throw them away? For Andrew DeGonge, the for the necessary motors and knife. “I went with
computer engineer
in the med-device latter question has a clear-cut answer: crusts are stepper motors for the motion control and used
industry who has a to be chopped. Indeed, he’s so determined that V-slot extrusions and wheeled gantries for linear
passion for building the sides of bread are banished, he’s used his loaf motion,” he explains.
unique and
and created an automatic guillotine-like device to He also built a custom four-axis control board
over-engineered
robotics projects. do the hard work for him. “Crust in general isn’t (“the OSR, which controls all of the stepper
my main problem. Cheap bagged bread is,” he motors”) and he used a Raspberry Pi 4 paired with
magpi.cc/
smartcrust tells The MagPi. “It’s all so mushy and the crust a Camera Module V2. “Raspberry Pi is the easiest
is even more of a burnt, soggy mush. So, like any and cheapest way I know to integrate computer
reasonable adult, I prefer bagged bread without it vision into my projects,” he says.
to make it a bit more tolerable, although I do love As such, with the components sitting within
the crust on a good sourdough or Italian loaf.” a 3D-printed frame, Andrew envisaged placing
a sandwich on a rotating cutting board before
No crumby thought having the camera take images for analysis using
The idea for a crust-cutter rolled into Andrew’s OpenCV. “I spent 30 to 40 hours on the code, which
head when he was considering building a robot included all the OSR, computer vision, and Python
with computer vision. “I wanted it to be original segments,” he reveals. It was time to get chopping.
so I thought to myself, ‘what’s a problem many
Warning! Sticking the knife in
Sharp edges By comparing the current image frame to previous
Be very careful when ones, the device determines the shape and size of
using knives and never the bread. “I then feed the rotation of the rectangle
work on a device such
as this with the power to the stepper controlling the turntable cutting
switched on. area to align the sandwich with my knife,” Andrew
says. “Next, the knife moves horizontally in the
X-axis to a position that is a small offset in from
the edge of the bread, and finally the Z-stage
comes down and makes a cut. Then it’s a matter of
There are delays in key
points of the final routines, doing three more rotations and three more cuts to
and cutting board rotations remove the rest of the crust.”
are performed before a
chop to give advanced The main problem was figuring how to convert
warning before cutting
the camera’s pixel measurements into real-world

28 magpi.cc The Smart Crust-Cutting Robot


PROJECT SHOWCASE

Although a Raspberry Pi 4 is used for


the project, Andrew says a Raspberry
Pi Zero would have been more than
enough to handle the task

Trinamic stepper drivers are


integrated so that Andrew could
home each axis without requiring
additional sensors. The motor
drivers are quiet and smooth

The device includes a


plywood turntable which
ensures the bread is in the
correct position for cutting

Andrew’s own four-axis control board (dubbed the OSR control


board) communicates with Raspberry Pi via USB and controls
all the stepper motors

It’s now a seriously capable Quick FACTS


bot that cuts bread very > The device uses an

cleanly and accurately aluminium frame

> It also involves


measurements. “I ended up uniformly converting 3D-printed parts
the measurements because cutting food doesn’t
> Belts and stepper
need to have sub-millimetre accuracy,” he says. “I
motors move the
ran into some motor control issues which ended up
cutting board
being bugs in my stepper control loops, but it all
works pretty well.” > Computer vision
Now Andrew doesn’t worry about crusts, figures the position
especially now he’s using a sharper knife. “People of the cuts
criticised the bot for not cutting well enough, so I
redesigned the gantry to support a sharper knife > It cost a lot of
while using a pivoting knife mechanism and adding dough: around $200
a food-holding, spring-loaded platform. It’s now
a seriously capable bot that cuts bread very cleanly
And cut... the knife plunges down towards the bread, slicing
and accurately. It’s cool, if not a little scary.” the crusts clean off

The Smart Crust-Cutting Robot magpi.cc 29


PROJECT SHOWCASE

Giant Hornet
Detector
Massive marauding insects threaten native bee populations, so one techie
apiarist used Raspberry Pi to sniff them out. Rosie Hattersley hears how

M
urder hornets have become the stuff of Geolocation data of any affected hives is sent
tabloid hyperbole and alarming YouTube to a Microsoft Azure IoT Central dashboard.
video clips, but Asian giant hornets (as Washington’s Department of Agriculture can use
they’re more properly termed) aren’t all that this in their efforts to eradicate the invasive species.
common. However, they’ve been making inroads “Using Raspberry Pi 3, Arducam [camera], small
in the US state of Washington where maker and motion sensor, and 3D-printable case, I’m able to
long-term apiarist Sean Cusack lives. Keen to avoid classify an image in about two seconds,” says Sean.
seeing local bees’ nests destroyed, he set about However, keen to make this an easily and cheaply
Sean Cusack
MAKER

creating the Murder Hornet Detector, a citizen replicable project, he suggests a $5 Raspberry Pi
Bee-keeper, science project that identifies the invasive species Zero will work almost as well, with the caveat that
Microsoft engineer, and demonstrates a rather good use of Raspberry Pi. identification takes closer to a minute.
and Raspberry Pi
admirer Sean enjoys
Sean has been keeping bees for around seven Sharing the resulting images poses a problem,
finding “elegant years and began developing a small photo booth since many beehives are remotely located, but
technical solutions” – the HoneyBee Booth – that would use artificial Sean is hoping LoRaWAN (Long Range Wide Area
for monitoring
intelligence to detect and count Varroa mites, Network) will help. LoRaWAN is designed to work
the health of
his beehives. and notify him of the findings. He adapted it to with low-power devices over vast areas and will
detect other species on hearing about the murder work well in locations not covered by 3G or wireless
magpi.cc/
beetrackergit hornets’ arrival. LAN. “All the image classification takes place on
Raspberry Pi, leaving only the need to transmit
telemetry data, which should fit nicely within
packet size limitations that exist with LoRaWAN.”

Track and trace


Sean is keen to ensure others can replicate his
project, envisaging “a non-tech savvy bee-keeper”
putting one together and watching for Asian giant
hornets. Cost, open-source code, and a simple
build were therefore priorities. “I love the idea of a
community contributing to a large pool of images
that can be used to further train and improve the
learning models,” he says. It also means Raspberry Pi
Zero can be used, keeping all-important costs low.
He sketched and 3D-printed his own basic, but
weatherproof, case as the camera booth and to
house Raspberry Pi. There’s a hole on the top for
the LED, while the camera and wires for the motion
sensor were inserted via the booth door and attached
at the end. Sean enabled SSH and I2C using the
command prompt (see the setup instructions at
An as-yet-unresolved issue is how to photograph
magpi.cc/beetrackergit) so Raspberry Pi can be
booth visitors, such as this earwig, from the
bottom as well as the top to aid identification accessed remotely. A funnel added at the end helps

30 magpi.cc Giant Hornet Detector


Quick FACTS
> Sean needed
an Asian giant
hornet to train
his detector…

Using a Raspberry Pi 3, Sean’s > …So he got


setup was able to identify Washington’s
species in a few seconds Department of
Agriculture to send
him one!
Sean is experimenting with connectivity using
LoRaWAN, since many honeybee hives are well > Friends at a
out of range of 3G and wireless LAN coverage hackathon helped
Sean refine
the HoneyBee
Booth design

> Overcoming
motion blur was a
particular challenge

> Sean’s setup now


works really
well, “even on
The HoneyBee Booth began life as a tracker blurry images”
to detect and photograph Varroa mites –
another important threat to US honeybees.
Sean had to enlarge the booth’s entrance to
accommodate visiting Asian giant hornets

 urder hornets have


M
become the stuff of tabloid
hyperbole and alarming
YouTube video clips
ensure insects are hustled into the booth to be
photographed. Getting the camera focus right and
clear images of booth visitors was time-consuming
but, as Sean’s enthusiasm shows, the results have
proved rewarding.

Exciting sightings
Sean is excited about the possibilities of the
project based around a camera, motion sensor,
and a learning model. “Maybe you want to spot an
incoming locust migration, get up-close pictures of
a very rare insect species, [or] spot elephants on a
train track and alert the conductor or train station
to stop?” he enthuses. “I can’t wait to see what The booth can be fitted with a
people come up with!” weather protection cover

Giant Hornet Detector magpi.cc 31


SUBSCRIPTION

SUBSCRIBE TODAY
FROM ONLY £5

Subscriber Benefits
FREE Delivery
Get it fast and for FREE

Exclusive Offers
Great gifts, offers, and discounts

Great Savings
Save up to 35% compared to stores

Rolling Monthly Subscription


Low monthly cost (from £5)
Cancel at any time
Free delivery to your door
Available worldwide

Subscribe for 12 Months


£55 (UK) £90 (USA)
£80 (EU) £90 (Rest of World)
Free Raspberry Pi Zero W Kit with 12 Month upfront
subscription only (no Raspberry Pi Zero W Kit with
Rolling Monthly Subscription)

Subscribe by phone: 01293 312193


Subscribe online: magpi.cc/subscribe
Email: magpi@subscriptionhelpline.co.uk
32 magpi.cc
SUBSCRIPTION

JOIN FOR 12 MONTHS AND GET A

FREE Raspberry Pi
Zero W Starter Kit
WITH YOUR FIRST
12-MONTH SUBSCRIPTION

Subscribe in print
today and you’ll
receive all this:

Raspberry Pi Zero W
Raspberry Pi
Zero W case with
three covers
USB and HDMI
converter cables
Camera Module
connector
This is a limited offer. Not
included with renewals.
Offer subject to change or
withdrawal at any time.

Buy now: magpi.cc/subscribe

SUBSCRIBE
on app stores

magpi.cc 33
FEATURE

Automate your home


with Raspberry Pi
By PJ Evans

W
e love home improvement here at
The MagPi, and if there’s any excuse to
fit a new piece of kit around the house
we’ll jump at it. Raspberry Pi is the perfect tool
for smart home setups. It is easy to program,
small and unobtrusive, and the wireless LAN
networking and GPIO pins make it perfect for
chatting to, and controlling, smart devices around
the house.
In this feature we will look at how to install
smart lights, control central heating, pump
internet music throughout the home, keep tabs
on the critters in your garden with smart cameras,
cook with robotics, and much more.
It’s time to pay a visit to the home of the future.
So let’s get building.

34 magpi.cc Home of the future


FEATURE

Warning!
Electrical Safety
Please be careful when
working with electrical
projects around the
home. Especially if they
involve mains electricity.
magpi.cc/
electricalsafety

Home of the future magpi.cc 35


FEATURE

GETTING STARTED WITH


HOME AUTOMATION
Put a Raspberry Pi computer at the heart of your home

S
tarting out in home automation can be the conductor. It supports hundreds of different
a little overwhelming. There are many devices and allows you to control, group, and
competing standards, some devices are create rule sets that govern their behaviour.
harder to use than others, and there’s the issue of Best of all, it has a dedicated Raspberry Pi image
locked-down services demanding subscriptions available that makes setting it up and managing
and access to your data. The good news is there’s a the server very straightforward. Alternatives
massive community dedicated to open-source and include OpenHAB and cloud-based services
self-hosted solutions where you’re in control. like IFTTT. Check out our three-part guide to
We would struggle to find a better Home Assistant in The MagPi issues 99, 100, and
place to start than with Home Assistant 101 (magpi.cc/issues).
(magpi.cc/homeassistant). If you view all the
Home Assistant is
compatible with
various switches and sensors that make up your
home’s Internet of Things (IoT) as instruments
T here’s a massive
a huge range of
smart devices in an orchestra, then Home Assistant (HA) is community dedicated to
open-source and self-
hosted solutions
Once you have your ‘conductor’ in place,
it’s time to add the musicians. In the next few
pages we’re showcasing projects that have been
carefully selected to make the most of your home
without compromising your privacy.

Home Assistant can be used on mobiles, touchscreens, or


your desktop – from anywhere in the world

36 magpi.cc Home of the future


FEATURE

LIVEN UP YOUR
LIVING ROOM
Whether it’s music, TV or game time, tech can help

Install smart lighting


Most HA projects start with lighting. Being able to
switch lights on throughout the house, wherever
you are, or have them react to different sensors
or events is a great way to get started in this field.
There are a lot of options and the prices have
plummeted. Check out Ikea’s Trådfri range, or the
popular Philips Hue system.

Set up a smart sound system


If you’re after some sounds, check out our recent
tutorials on building the ultimate music server
using Raspberry Pi and Mopidy. Create your own
Sonos-rivalling system and have synced music
throughout the home. A Raspberry Pi Zero with an
inexpensive DAC (digital-to-analogue converter)
Build a home cinema HAT will give you excellent audio reproduction for
How about the ability to convert your living room a fraction of the commercial price. See issues 96,
into a cinema at the click of a button? Logitech’s 97, and 98 (magpi.cc/issues).
Harmony Hub (magpi.cc/harmonyhub) allows Build a
you to control your TV, amp, and game consoles magic mirror
from your phone or Home Assistant. You can A magic mirror
create complex scripts and also set lighting or Control your central heating places a screen
lower blinds. Popcorn optional. Need to be cosy? Need to control exactly how behind a semi-
cosy you are? Many solutions exist for remote transparent sheet.
Once framed,
control of central heating. We particularly like the
it gives the
motorised thermostats (magpi.cc/smartradiator)
impression of text
that can be quickly floating in the air
added to radiators that can display
as these give you your calendar,
precise control over the weather, or
anything else. To
every room and HA
find out how to
can use individual
make one, pick
temperature sensors up a copy of The
to get every room MagPi issue 90
just right. (magpi.cc/90).

Home of the future magpi.cc 37


FEATURE

AUTOMATE YOUR KITCHEN


Improve your kitchen gadgets with even more gadgets

Install
smart meters
The kitchen is the
heart of the home, so
it pays to keep an eye
on how much blood
it’s pumping. As
smart meters roll out,
it’s good to know that
many models such as
Honeywell’s AS302P
advertise their usage
to supplied displays. With a bit of help, these
transmissions can be captured by HA so you can
create your own dashboards or set alarms when
the cooker gets too greedy. Take a look at this
tutorial by Erik Schrama (magpi.cc/smartmeter).
Wire up a coffee machine
If you really want that fresh coffee in the morning
to be just right, how about automating your
 logical first step for
A
coffee machine? If your machine can start when the home automation
power is applied, then a simple WiFi power
switch will suffice. There are some ‘smart’ coffee fan is monitoring of
machines available such as Smarter Coffee
(magpi.cc/smartercoffee), but another option is the environment
to add a button-presser such as MicroBot Push
(magpi.cc/microbot) that’s controllable with HA. Discover sous-vide
This amazing technique cooks plastic-wrapped
food in a water bath using precise temperatures.
The result is tender and flavoursome meals that
Get smart about safety cook over hours not minutes. Sous-vides are
After lighting, a logical first step for the home typically expensive, but you can build your own
automation fan is monitoring of the environment. and monitor it using HA, such as this project
Smart smoke alarms and carbon monoxide (magpi.cc/sousvide). As ever, always be careful
detectors are available, but you may be mixing electricity and water.
interested in making open-source versions
so you can trigger alerts when things
don’t seem right. The Pi Hut sells an
MQ-135 Gas Sensor (magpi.cc/mq135)
which is great for experimenting with
home-built smoke detectors. Please
note that no DIY smart device is ever any
replacement for a proper certified smoke
alarm, such as those made by FireAngel
(fireangel.co.uk).

38 magpi.cc Home of the future


FEATURE

CREATE A COOL
KID’S ROOM
Use tech to brighten up your bedroom and keep unwanteds away

Set up a sibling alarm Fit a dinner


Brothers! Sisters! Boo! If your sibling is driving klaxon
you up the wall by messing with your stuff, then A really popular project
catch them in the act. Using a Raspberry Pi HQ from The MagPi issue 73
Camera and a cheap magnetic door sensor, you (magpi.cc/73), the
can take a photo or record video whenever the teenage klaxon is the
door opens, then send it straight to your phone. ultimate solution to
Busted! Take a look at this Room Guard project: yelling up the stairs
magpi.cc/roomguardproject. in frustration at a
headphone-clamped
offspring. Simply use the
web interface on your
phone to set the candle
light to green, amber, or
‘right, now you’re really
in trouble’.

Fit some fun lighting


If you really want to make an impression on your
friends, get some LED strips and power them with Back issues
a Raspberry Pi. You can start with single-colour Don’t miss out
5050-type LED strips or move up to individually on our earlier
controllable NeoPixel sets (magpi.cc/neopixels). issues. See our
A project like this can just build and build; how At Home with the
Internet of Things
about adding a microphone to create dancing
feature in The
lights? The Pi Hut has a great NeoPixels tutorial MagPi issue 93
(magpi.cc/usingneopixels). (magpi.cc/93)
and Home
Listen to internet radio Halloween Hacks
No kid’s sanctuary is complete without some (magpi.cc/98).
Our Home
sounds. Why not add to your home audio system
Assistant with
(see ‘Liven up your living room’, page 37) with
Raspberry Pi
another device or build an internet radio, capable tutorial series can
of reaching thousands of stations across the be found in issues
globe. We really like Pimoroni’s Pirate Radio 99, 100, and 101
(magpi.cc/pirateradio) as a great starter kit. (magpi.cc/issues).

Home of the future magpi.cc 39


FEATURE

DESIGN A HIGH-TECH
HOME OFFICE
Don’t work hard at home, work smart at home

Build a do-not-
disturb sign for
your office

I
n The MagPi issue 103 (magpi.cc/103) we If you’re working at home and have your
addressed one of the burning issues of the own working space, particles and gases (now,
day: how do I let my family know I’m on a now) can build up without proper ventilation.
Zoom call? We invented a ‘digital do-not-disturb Consider adding a Pimoroni Enviro+ to your
sign’ that can be remotely controlled by some arsenal (magpi.cc/enviroplus). This HAT with
buttons or an event detected by Home Assistant. optional add-on particle sensor monitors dust,
Display any message you want right outside your temperature, and other concerns, sending the
door and avoid those moments that could send data straight into Home Assistant.
you viral on social media. Home automation isn’t just about switching
lights on and off. There’s a wealth of information
 isplay any message you want right
D provided free-of-charge from the internet that
you can use to affect your environment. A great
outside your door example is the data that powers all the railway
station displays in the UK. This is freely available
and this great project by Chris Crocker-White
(magpi.cc/trainoled) allows you to make your own
home display.
Our newest member of the Raspberry Pi
family, Pico, can act as a keyboard over USB.
Pairing one with Pimoroni’s RGB Keypad Base
(magpi.cc/rgbkeypad) creates an inexpensive
macro keyboard. Create short cuts for your
common operations and program them into your
This miniature railway
Pico to speed up your day. No more fighting with
sign can make sure
you are on time the mouse to reach ‘Leave Meeting’.

40 magpi.cc Home of the future


FEATURE

TAKE YOUR SMART


TOYS OUTSIDE
Track wildlife, tend to the flowers, and keep
an eye on the world with these projects

Ring the smart doorbell The MagPi 70


Another stalwart of the home automation scene, We featured a
smart doorbells are becoming commonplace on range of smart
our roads. Systems like Ring’s video doorbell home hacks in
(ring.com) provide video to your smartphone and The MagPi issue
even the ability to talk with the person at your 70 (magpi.cc/70).

door from anywhere in the world. If you would


prefer a more DIY approach, check out our smart
door feature (magpi.cc/smartdoor).

Install solar panels Power sockets


If you’ve got solar panels, chances are the inverter
Control cheap
(the device that converts DC electricity to mains AC) power sockets
is producing vast amounts of information that HA using radio
and other services such as PVOutput (pvoutput.org) commands with
can consume. Some have USB connectors, but many the Energenie
HAT. Full house
more have Bluetooth connections, making it easy
coverage and
and safe to link a Raspberry Pi to keep track of all
simple to set up.
that lovely sunlight powering your house.
Doors and
doorbells
Creating internet-
Watch the wildlife connected door
sensors and
A Raspberry Pi wildlife camera (such as
doorbells can
Naturebytes’, naturebytes.org) is just the be surprisingly
thing for keeping an eye on various visitors to simple and
your garden or window box. This can be a great inexpensive. Get
evolving project. Start with a camera trained on a heads-up when
your garden (consider a Raspberry Pi NoIR camera the door opens
behind you.
for night vision), then
add motion triggering
Smart fish tank
Plant monitoring and even machine When an
A smart garden is a better garden. Keep track learning to identify aquarium heater’s
of moisture levels using sensors coupled with different birds. Take thermistor fails,
devices like the IoT Cricket (reviewed this issue) a look at this Watch it tends to heat
the tank too
to relay our soil condition to HA. You can then Wildlife tutorial that
much. Get an
create rules to alert you when your favourite first appeared in
alert with this
plants need a drink. More advanced tinkerers can HackSpace magazine straightforward
add irrigation systems controlled by HA. Check issue 33: magpi.cc/ monitoring
out Pimoroni’s Grow range (magpi.cc/grow). watchwildlife. project.

Home of the future magpi.cc 41


TUTORIAL

Build an arcade machine:


Part 01

Get the parts


If you’ve ever wanted to build your own arcade machine, here’s your guide.
This month: the parts you’ll need, how to choose them, and where to buy them

O
Big screen glamour?
ver the coming months, we’ll go
through the process of sourcing,
02 The size of your screen dictates the size of your
K.G. building, connecting, and installing a cabinet, and vice versa. Before you start shopping,
MAKER

Orphanides Raspberry Pi-based arcade cabinet. work out where you want the cabinet to live, and take
While you can restore and convert a former height, width, and depth measurements.
K.G. is a writer, JAMMA cabinet for use with Raspberry Pi, If you’re working with a 19-inch monitor,
maker of
odd games,
or build a cab entirely from scratch, we’ll be you’ll likely get a bartop cab that’s a little under
and software taking the flat-pack route. This lets you build 50 cm wide. This is the most practical choice
preservation the cabinet of your dreams relatively easily, if available space is limited. A 22-inch screen
enthusiast. Their
somewhat cheaply, and without recourse to translates to a cabinet of a little under 60 cm, and
family fully
supports the idea of full-on home woodworking. a 24- or 25-inch screen means a cabinet width
an arcade machine This tutorial series will use an LCD screen of a bit under 65 cm. You’re generally fine fitting
in the living room. due to the inconvenience of sourcing and a smaller screen in a larger cabinet, but the end
@KGOrphanides potential issues with installing a CRT model, result won’t look quite so polished.
which carries the risk of a dangerous electric Check the internal measurements of the cabinet
shock if not correctly discharged. against those of the monitor, including its bezel.

Choose your cabinet style


01 If you’re after a classic upright one- or
two-player cabinet, then you’ll want either an all-
in-one model or a ‘bartop’ cabinet with a pedestal
or stand. Bartop cabinets can also be bought
without the optional stand and placed on a table.
Flat ‘cocktail’ or ‘coffee table’ style cabinets
are available in models for between one and four
seated players and often use a vertically oriented
screen, which can be split by software into two
horizontal views for multiplayer games.
Other models include seated upright cabinets
(often designed to take very large screens),
angular tabletop models, and mini-bartops with
10-inch displays for those short on space.

42 magpi.cc Build an arcade machine: Get the parts


TUTORIAL

This Omniretro bartop kit is


drilled for Japanese-style
30 mm buttons, but US-style
28 mm button holes are also an
option from most suppliers

Top Tip
Button
positioning

You’ll need a monitor with VESA mount We’re going


points: 75×75 mm and 100×100 mm are with a six-button
the most common. When your cab is Japanese-style
finished, you’ll probably want to apply a layout. Check
out magpi.cc/
vinyl bezel graphic surround to hide the
joysticklayout
monitor bezel and fittings
to see some
alternatives.

A good fit Finish and decoration


03 Depending on the era of games you want
05 Regardless of the materials used, you’ll
to play, a large 1920×1080 widescreen display probably want some plastic edging strip. This
may not be the most authentic choice, but it is plastic trim helps to protect the edges of your
the most flexible, and modern emulators handle cabinet, makes it easier to clean, and looks a lot
HD displays well. more professional than exposed MDF edges.
Most cabinets have a VESA mount, usually in the Two types are popular. T-Molding is more
form of a monitor support bar drilled for 75×75 and secure but requires a slot to be cut for it to clip Y
 ou can get kits
100×100 mount points. Make sure your monitor into – some DIY kits have ready-cut slots for this containing all the
joysticks, buttons, and
has mounting points that match. purpose, but budget models frequently do not. connectors you’ll need;
just make sure your
Finally, ensure that your monitor will work with U-Molding just clips over the edge. Cabinet
button and cabinet
Raspberry Pi: anything with a standard HDMI input makers will usually tell you how much moulding hole sizes match
should be fine, but older DVI and VGA displays
require inconvenient adapter arrangements.

Materials
04 Self-assembly cabinets are usually made in
MDF, but laminate, melamine, and veneer finishes
are also widely available.
MDF swells badly if exposed to water, so if you’re
going to have drinks anywhere near your cabinet,
a water-resistant finish is strongly recommended.
If you buy an untreated MDF kit, apply and sand
down between multiple coats of an MDF-specific
solvent-based primer, then paint it to your heart’s
content, ideally with oil-based paint.
18 mm MDF is common, but you’ll find cabinets
in anything down to 10 mm for budget models.
18 mm or thicker construction materials may
require a longer shaft or extender for your joystick.
If in doubt, talk to the kit’s supplier.

Build an arcade machine: Get the parts magpi.cc 43


TUTORIAL

Sample shopping list


Here is an illustrative price list. The prices include VAT
but not shipping or additional costs.

Item Price

24-inch LCD monitor £125.00

Bartop cabinet £170.00

Bartop stand £100.00

10 m T-Molding £25.00

Acrylic control
£25.00
panel guard

Two-player USB joystick +


£70.00
button kit

Amp, speaker & cover kit £25.00

Amp power supply £12.00


A
 variety of compact their kit will need and can usually supply the
bus- and mains-
powered amp and required quantity and type of edging. Printed marquee £6.00
speaker kits are Many arcade cabinet suppliers also sell a range
available: this one
takes power from the of decorative and protective graphical vinyl sticker LED strip lighting £15.00
USB port and audio wraps. These should be applied with care to an
from the 3.5 mm port
appropriately finished surface (check with the Molex power adapter
£15.00
sticker manufacturer for any finish requirements). for LEDs

5-way plug bar £15.00

TOTAL £603.00
A giant screen protector
06 To protect your screen and create a
flush finish, you can – and should – opt for an While you’re at it, you may wish to get acrylic
acrylic (polymethyl methacrylate, also known or metal panels to surround your buttons and
as plexiglass) screen protector. Again, this is joystick. These can be decorated, and protect your
something most self-assembly kits are designed cabinet’s surface, as well as providing a smoother
to take and the majority of retailers will happily feel. Button layouts tend to be standard, but these
sell you one as either a standard part of the kit should ideally be bought from the same supplier as
or an optional extra. Make sure you do opt in, as your kit for the best fit.
cutting your own plexiglass to precise dimensions
can be a pain. Toughened glass and UV-resistant
polycarbonate can also be used. You may need to
Raid the button tin
add some standoffs to stop front monitor buttons
being pressed by the screen protector.
08 We’ll be building a cabinet with an eight-
way joystick and six 30 mm buttons, plus Start
and Select buttons, for each player. A variety of
alternative sizes and brands are available, with
The marquee club
07 Also included in kits as a matter of routine
Sanwa perhaps being the most recognisable.
You can order a cabinet with holes for extra side
is a strip of acrylic for your cabinet’s top marquee. buttons if you’re into digital pinball.
You’ll probably want to get a backlight-ready An easy cross-platform connection solution is a
vinyl marquee (available from print shops, arcade USB arcade encoder. Models by Zero Delay and Xin-
suppliers, and on Etsy) to stick to this, but you Mo are popular, but the I-PAC 2 keyboard encoder
could also decorate your own. has slightly lower latency.

44 magpi.cc Build an arcade machine: Get the parts


TUTORIAL

Where to buy
There are a number of UK and EU retailers
specialising in self-assembly arcade cabinets and
components. While it’s easiest to get everything in
one place, you have to mix and match for specialist
components such as GPIO-compatible wiring looms.
• Arcade World UK – arcadeworlduk.com – supplies a
wide range of kits and components; discount codes
available for most non-furniture items
• Bitcade – magpi.cc/bitcadekits – UK arcade
Warning!
machine maker that also supplies kits
Paint and dust
• Omnireto – omniretro.com – Spanish firm with a
notable budget range When sanding, sawing,
If you want to use USB, the Ultimarc I-PAC 2 encoder is a • Rockstar Print – rockstarprint.co.uk – custom or painting, be sure to
popular choice that’ll work with most computers. Check out use appropriate eye and
marquee and wrap printer
magpi.cc/ultimarcgit for advanced configuration breathing protection in a
• SmallCab – smallcab.net – French supplier of arcade well-ventilated space.
kits and hardware including GPIO-friendly wiring
Pick a driver
09
magpi.cc/diysafety

You can connect controls to


Raspberry Pi’s GPIO, using either the Adafruit LED strip lighting is a popular choice for marquee
Retrogame (magpi.cc/adaretrogame) or panels, but you’ll need to buy a Molex power adapter
mk_arcade_joystick_rpi (magpi.cc/mkjoystick) to go with it, or repurpose a PC power supply. You
drivers – we’ll be using the latter. can run a plug lead out of the back or optionally
Arcade joysticks generally use a five-pin JST install an external power socket and switch, if you’re
connector, while non-illuminated buttons each have comfortable with simple electrical wiring.
a pair of quick-connect spade connector fittings, one
of which must go to ground. Spade to DuPont GPIO
cables are uncommon, but can be bought either
Room to build
individually or as part of a kit from specialist retailers
such as SmallCab. Illuminated button kits are
12 Before you start ordering, consider not only
available with an extra external PSU. the space you have to house your cabinet, but also
how much room you have to build in. Don’t get an
untreated MDF cabinet unless you have a large,
L ED strip lighting is ventilated (and paint-resistant!) space where you Y
 ou’ll want to source
durable joysticks
can apply primer to each part, as well as appropriate
a popular choice for eye and breathing protection.
and buttons for your
arcade machine

marquee panels
The sound of success
10 It’s a good idea to order your cabinet with a
couple of pre-drilled speaker holes and covers to go
over them. The most common option for audio is an
externally powered stereo amp, connected to Raspberry
Pi’s 3.5 mm port, and 10 cm/4-inch speakers, but USB-
powered kits are also available. If you have one lying
around, you could also consider mounting a compact
USB sound bar behind your speaker grilles.

More power, Igor!


11 A major advantage of this kind of arcade
machine build is that there are no internal power
supplies to bother with. There’s enough space to
mount a plug bar inside most cabinets, and you can
use this to power the monitor, Raspberry Pi, and any
extra transformers required for lights or speakers.

Build an arcade machine: Get the parts magpi.cc 45


TUTORIAL

Set up Pi-hole
Part 01

with Raspberry Pi
Pi-hole blocks ads, cookies – and whole sites if you choose – from your
home network so you can browse more quickly and securely

P
i-hole is a free web filtering tool that runs a new IP address. To ensure your other devices can
on a Raspberry Pi on your network. By always find it, we’re going to give your Raspberry Pi a
Nik Rawlinson connecting your other computers, tablets static IP address. Open a Terminal window by clicking
MAKER

– and even your smartphone – to Raspberry Pi, the icon on the Raspberry Pi menu bar and enter:
Esperanto- rather than directly to your router, Pi-hole will
speaking, pencil-
interrogate their internet traffic and strip out hostname -I
wielding, single-
board computing unwanted content. With built-in lists for ad
fan who likes servers, its primary use is to block advertising, but This will tell you which IP address is currently
hyphens and you can just as easily bar social media and other assigned to your Raspberry Pi. Ours is
remembers what
that icon on the
sites you find distracting or objectionable. In this 192.168.1.148. Make a note of this number.
save button depicts. tutorial, we’ll show you how to set up Pi-hole
nikrawlinson.com on a Raspberry Pi and connect to it from another
device on your network.
Get your router’s IP address
02 Now do the same for your router’s IP
address (the ‘default gateway’). Enter this
Locate Raspberry Pi
01 Start with a fresh installation of Raspberry Pi
command in Terminal:

OS connected to your local network (via an Ethernet ip r


cable or wireless LAN). Pi-hole only works if the
other computers on your network know where to Press ENTER, and note the first four sets of digits
Make sure Pi-hole is
set to filter content on find it. Most routers assign IP (internet protocol) after ‘default via’. Ours is ‘192.168.1.1’. This is your
the interface through
addresses dynamically, and there’s a chance your router’s address.
which it’s connected
to your network Raspberry Pi might move around the network and get

Update your configuration file


03 We’re going to add this info to our
configuration file so it never changes. Open
Terminal and enter:

sudo nano /etc/dhcpcd.conf

At the bottom of the dhcpcd.conf file you will see


an example of a static IP configuration. Delete the
hashtags (‘#’) at the start to uncomment the ‘static
IP address’ and ‘static IP routers’ lines. Replace the
example IP address with the number from Step 1 and
your router address from Step 2. See the dhcpcd.conf

46 magpi.cc Set up Pi-hole with Raspberry Pi


TUTORIAL

Top Tip
Almost 90,000 domains are Change
blocked, keeping us safe from password
We’re protecting four machines on malicious sites and removing ads
You can change
our local network through a single
your password
Raspberry Pi running Pi-hole
at the command
prompt with the
command:
sudo pihole
-a -p

code listing for an example of how our configuration  i-hole uses an external
P
looks (but don’t forget to use your own IP and
router addresses). DNS provider to locate
If your Raspberry Pi is connected to the router via
an Ethernet cable, remove the comment ‘#’ before authorised resources
interface eth0. If you are connecting Raspberry Pi
to your network with wireless LAN, replace it with blocker”. Press ENTER on each of the first three
interface wlan0. screens. On the ‘Choose an interface’ screen, use
Press CTRL+O to save your file (‘O’ stands for the arrows and SPACE bar to select either eth0
output) and CTRL+X to quit Nano, then enter or wlan0 for a wired or wireless connection, as
sudo reboot and press ENTER to restart. appropriate to your setup. Press TAB to select OK
and hit ENTER.

Download the Pi-hole installer


04 Choose a DNS provider
When it’s up and running again, you’re ready
to install Pi-hole. First, download a copy of the latest
06 Any internet resources, like images, text
build. Open a new Terminal window and enter: and code, that don’t trip Pi-hole’s safeguards
will be retrieved from the servers where they’re
wget -O basic-install.sh stored and fed back to the device that requested
https://install.pi-hole.net them. Pi-hole uses an external DNS provider to
sudo bash ./basic-install.sh locate these authorised resources, and gives you a
choice of nine to pick from, plus a custom option
This will start the Pi-hole installation script. It for business users running their own DNS server.
will check which packages are already installed, If you’re happy to stick with the default, which is
and install the ones you need. Follow the Google, press TAB to select OK, then press ENTER.
instructions in the installation while reading If not, select an alternative from the list, press TAB
through the following steps. to select OK, then ENTER to move to the next page.

You’ll Need

Specify your interface Confirm your block list > Raspberry Pi


05 After some preliminary configuration,
07 To save you specifying every server that > Pi-hole installer
the splash screen for the Pi-hole automated should be blocked, Pi-hole is configured to use a pre- pi-hole.net
installer will appear, explaining that it’s about to compiled list (‘StevenBlack’) to which you can add > Your router details
“transform your device into a network-wide ad your own entries once it’s up and running. Leave the

Set up Pi-hole with Raspberry Pi magpi.cc 47


TUTORIAL

They’re useful if you want to look back and see


what’s been requested and blocked on your
network, but not critical to the effective running
of Pi-hole. If you want to save space on your
Raspberry Pi’s microSD card, or reduce the
number of times your Raspberry Pi writes to it
(media cards can sustain a generous but limited
number of write and wipe operations before they
start to fail), you can turn off this option. We’re
going to leave it on.
When you’ve finished existing list selected by pressing TAB to select OK and
setting up Pi-hole,
make a note of the press ENTER. Ensure both IPv4 and IPv6 are selected
IPv4 address and on the ‘Select Protocols’ screen, and select OK.
password for later use
Select a privacy mode
At this point, the installer checks that you’re
happy with the numeric (IP) address Raspberry Pi
10 How much do you want to know about what’s
is using. Check that the IP address and Gateway happening on your network? Pi-hole next asks what
match your IP address and router’s address. As level of detail it should record in its stats. Level 0,
we configured this in Step 3, and set it to remain the default, logs everything, with higher numbers
fixed, step through the next two screens without anonymising more and more data. If you’re never
worrying too much over the warnings that static going to need to know what other users on your
addresses might cause conflicts. network are up to, you can set it to 3, but sticking
with level 0 can be useful if you suspect processes
installed somewhere on your network might be
sending your personal information to remote servers,
Install the web interface
08 You can use Pi-hole’s web interface to
as you can trawl the logs for unfamiliar hosts.

monitor your web traffic and temporarily deactivate


web filtering when you need to access resources
Specify your interface
Top Tip that would otherwise have been blocked. It’s also
where you’ll add entries to and remove them from
11 Pi-hole has all the information it needs
the block list. Make sure ‘On’ is selected when asked to complete the setup process, the remainder of
Permanently if you want to install the web admin interface, then which is automated.
powered press TAB to select OK and press ENTER. Do the When it’s completed, take a note of the IPv4
same on any following screens to install the lighttpd address displayed on the final screen, and the
Keep the
Raspberry Pi web server that will host the web interface, and the Admin login password. Quit the installer and
running Pi‑hole PHP modules that it relies on. reboot Raspberry Pi with:
switched on.
If not, your sudo reboot
connected
devices will resort
To log or not to log
to the fallback
DNS server.
09 When you reach the ‘log queries’ screen,
At this point you might want to remove the screen,
keyboard, and mouse. Locate your Raspberry Pi
decide whether you want to log queries or not. near your router if using wireless LAN or keep it
connected via the Ethernet cable. From now on, we
will access it via the local network.

dhcpcd.conf DOWNLOAD
THE FULL CODE:
Using Pi-hole
> Language: Bash magpi.cc/github 12 Now switch to another computer on your
network. It can be another Raspberry Pi, or a Mac or
001. interface wlan0 # use eth0 for wired Ethernet PC (or even a smartphone or tablet). You will need
002. static ip_address=192.168.1.148/24 # Use your Raspberry Pi's IP address
to change the network settings on every device you
003. static routers=192.168.1.254 # Use your Router's IP address
004. static domain_name_servers=192.168.1.254 8.8.8.8 want to filter through Pi-hole so it accesses your
Raspberry Pi rather than your router directly.

48 magpi.cc Set up Pi-hole with Raspberry Pi


TUTORIAL

Specifying a second
Manually configure each DNS address gives
your computer a

device for Pi-hole fallback that it will


use if it can’t reach
your Pi-hole device

Configure a Windows device


On a Windows computer, open Control Panel and
click ‘View network status and tasks’. Click the
hyperlink of your network connection (Ethernet
or WiFi, followed by Properties. Double-click
‘Internet Protocol Version 4 (TCP/IPv4)’. Click the
radio button beside ‘Use the following DNS server
address’ and, in the box beside ‘Preferred DNS
server’, enter the IP address of your Raspberry Pi
running Pi-hole. as a fallback in the case of problems. Select the
In the ‘Alternative DNS server’ box, enter either addresses of any existing DNS servers in the left-
your router address, if you want to fall back on your hand box, and click ‘-’ to delete them.
ISP’s DNS server should there be any problem with
Pi-hole, or 8.8.8.8 if you want to use Google’s DNS
server instead.
Set up Linux
Top Tip
Make sure Pi-hole is set to filter content on the interface through
To set up another Raspberry Pi to use Pi-hole as
which it’s connected to your network Beware
its DNS server, switch to that Raspberry Pi, open changing
Terminal and type: networks

sudo nano /etc/dhcpcd.conf When you move


your computer
to a different
Move your cursor to the bottom of the file and add
network, you’ll
the following, replacing [ip address] with the bypass Pi-hole.
numeric address of the device running Pi-hole: Change your DNS
settings for every
static domain_name_servers=[ip address] network you use.

Press CTRL+X to exit and confirm that you want to


save the file when asked. Now restart the dhcpcd
service by typing:

sudo service dhcpcd restart

On a Linux PC running the Gnome interface, launch


the Settings app and click Wi-Fi in the sidebar,
followed by the cog beside your active network name.
Click the IPv4 tab, then turn off the switch beside
Automatic to the right of DNS. Enter the numeric
address of your Pi-hole device in the field below,
then click Apply.
Set up macOS
Open System Preferences and choose Network. Run Pi-hole on your
Raspberry Pi and
Choose the network interface from the sidebar enjoy the worldwide
web without all those
(typically Wi-Fi or Ethernet) and click ‘Advanced’.
annoying ads
Choose the DNS tab and click the ‘+’ (Add a DNS
Server icon). Type the address of your Raspberry Pi
running Pi-hole in the line that appears. You can
optionally add another server, like your router’s
IP address or 8.8.8.8 to use Google’s DNS server

magpi.cc 49
TUTORIAL

Create GUIs
Part 04

with Python:
World’s worst GUI
Learn good GUI design by doing it all wrong first!

I
t’s time to really go to town with your GUIs run a function every second, you can make your
Laura Sach
MAKER

and experiment with different widgets, text hide and show itself and appear to flash.
Laura leads the colours, fonts, and features. Like most Create a function which will hide the text if it’s
A Level team at experiments, it’s likely that you won’t get it right visible and show it if it’s not:
the Raspberry first time! In fact, you are going to explore the
Pi Foundation,
creating resources
wrong way to approach creating your GUI. def flash_text():
for students if title.visible:
to learn about It’s hard to read title.hide()
Computer Science.
The right choice of GUI colour and font are else:
@CodeBoom important. It’s important that the contrast title.show()
between background and text colour ensure that
your GUI is easily readable. What you shouldn't Before the app is displayed, use repeat to
do is use two very similar colours. make the flash_text function run every 1000
Import the widgets at the top of the code: milliseconds (1 second).

from guizero import App, Text app.repeat(1000, flash_text)

Create an app with a title: app.display()

Martin
MAKER

app = App("it's all gone wrong") Your code should now look like worst2.py. Test
O’Hanlon
title = Text(app, text="Some hard to read your app: the title text should flash, appearing and
Martin works in text") disappearing once every second.
the learning team
at the Raspberry
Pi Foundation,
app.display() The wrong widget
where he creates Using an appropriate widget can be the
online courses, Experiment by changing the colours, font, and difference between a great GUI and one which is
projects, and text size (see worst1.py listing). Our choices are completely unusable.
learning resources.
not the best!
@martinohanlon
app = App("it's all gone wrong", bg="dark
green")
title = Text(app, text="Some hard-to-
read text", size="14", font="Comic Sans",
color="green")

It’s important that text on a GUI also stays around


long enough to be read. It certainly shouldn’t
disappear or start flashing.
All widgets in guizero can be made invisible
(or visible again) using the hide() and show()
Figure 1 A slider to
set date and time functions. Using the repeat function in guizero to
Figure 1

50 magpi.cc Create GUIs with Python


TUTORIAL

Which widget would you use to enter a date? A


DOWNLOAD
TextBox? Multiple Combos? A TextBox would be
more flexible but would require validation and
worst1.py THE FULL CODE:
formatting. Multiple Combos for year, month,
> Language: Python 3 magpi.cc/guizerocode
and day wouldn’t require validating but would be
slower to use.
Using a Slider to set a date and time (Figure 1), 001. # Imports ---------------
002.
as in the worst3.py code example, is not a great 003. from guizero import App, Text
idea, though. 004.
The Slider widget returns a number between 0 005.
006. # App -------------------
and 999,999,999. This is the number of seconds 007.
since 1 January 1970. The function ctime() is 008. app = App("it's all gone wrong", bg="dark green")
009.
used to turn this number into a date and time.
010. title = Text(app, text="Hard to read", size="14", font="Comic
Getting text from your user is simple: a TextBox 011. Sans", color="green")
or a multi-line TextBox should fulfil all your 012.
013. app.display()
needs. Is it too simple, though? Does this require
too much typing?
What about the user who just wants to use
a mouse? Perhaps a series of Combos each
containing all the letters in the alphabet would be
better (Figure 2)? Start by importing the guizero
widgets and ascii_letters.

from guizero import App, Combo


from string import ascii_letters

ascii_letters is a list containing all the


‘printable’ ASCII characters which you can use as
Figure 2
the options for the Combo. Figure 2 Combos to choose letters

Create a single Combo which contains all the


letters and displays the app.

a_letter = Combo(app, options=" " + ascii_


worst2.py
letters, align="left")
> Language: Python 3
app.display()
001. # Imports ---------------
002.
Your program should now resemble worst4.py. 003. from guizero import App, Text
Running it, you will see a single Combo which 004.
005.
contains all the letters plus a space and is aligned 006. # Functions -------------
to the left of the window. 007.
008. def flash_text():
To get a line of letters together, you could
009. if title.visible:
continually add Combo widgets to your app, e.g.: 010. title.hide()
011. else:
012. title.show()
a_letter = Combo(app, options=" " + ascii_ 013.
letters, align="left") 014.
b_letter = Combo(app, options=" " + ascii_ 015. # App -------------------
016.
letters, align="left") 017. app = App("it's all gone wrong", bg="dark green")
c_letter = Combo(app, options=" " + ascii_ 018.
019. title = Text(app, text="Hard to read", size="14", font="Comic
letters, align="left")
020. Sans", color="green")
021.
By aligning each Combo widget to the left, the 022. app.repeat(1000, flash_text)
023.
widgets are displayed next to each other against 024. app.display()
the left edge.

Create GUIs with Python magpi.cc 51


THE BEST-SELLING MAG FOR PC HARDWARE, OVERCLOCKING, GAMING & MODDING

PC HARDWARE
ENTHUSIASTS

ISSUE 212 OUT NOW


VISIT CUSTOMPC.CO.UK TO LEARN MORE
TUTORIAL

worst3.py Window widget


> Language: Python 3 Pop-up boxes can be used to ask users questions, but
they are really simple.
If you want to do show additional information or ask
001. # Imports ---------------
for supplementary data, you could use the Window
002.
003. from guizero import App, Slider, Text widget to create multiple windows.
004. from time import ctime Window is used in a similar way to App and has
005. many of the same functions.
006.
007. # Functions -------------
from guizero import App, Window
008.
009. def update_date():
010. the_date.value = ctime(date_slider.value) app = App("Main window")
011. window = Window(app, "2nd Window")
012.
013. # App ------------------- app.display()
014.
015. app = App("Set the date with the slider")
016. the_date = Text(app) You can control whether a Window is on screen using
017. date_slider = Slider(app, start=0, end=999999999, the show() and hide() methods.
018. command=update_date)
019. window.show()
020. app.display()
window.hide()

An app can be made to wait for a window to be closed

worst4.py
after it has been shown, by passing True to the wait
parameter of show. For example:

window.show(wait=True)
> Language: Python 3
You can find out more about how to use multiple
001. # Imports --------------- windows in the guizero documentation:
002. from guizero import App, Combo lawsie.github.io/guizero/multiple_windows.
003. from string import ascii_letters
004.
005.
006. # App ------------------- Alternatively, you could use a for loop, create a
007.
008. app = App("Enter your name") list of letters, and append each letter to the list, as
009. shown in worst5.py.
010. a_letter = Combo(app, options=" " + ascii_letters, align="left")
Try both these approaches and see which you
011.
012. app.display() prefer. The for loop is more flexible as it allows you
to create as many letters as you like.

Figure 3 Pop-ups
Pointless pop-up No terrible GUI would be complete without a
pop-up box. guizero contains a number of pop-
up boxes, which can be used to let users know
something important or gather useful information.
They can also be used to irritate and annoy users!
First, create an application which pops up a
pointless box at the start to let you know the
application has started.

from guizero import App

app = App(title="pointless pop-ups")

Figure 3 app.info("Application started", "Well done

Create GUIs with Python magpi.cc 53


TUTORIAL

Figure 4

worst5.py
> Language: Python 3
Figure 4 Yes, we're sure!
001. # Imports ---------------
002.
003. from guizero import App, Combo you started the application")
004. from string import ascii_letters
005.
006. app.display()
007. # App -------------------
008. Running your application, you will see that an
009. app = App("Enter your name")
010. ‘info’ box appears (Figure 3). The first parameter
011. name_letters = [] passed to info is the title of the window; the second
012. for count in range(10):
parameter is the message.
013. a_letter = Combo(app, options=" " + ascii_letters,
014. align="left") You can change the style of this simple pop-up
015. name_letters.append(a_letter) by using warn or error instead of info.
016.
017. app.display() Pop-up boxes can also be used to get
information from the user. The simplest is a yesno
which will ask the user a question and get a True or
False response. This is useful if you want a user to
confirm before doing something, such as deleting
05-worlds-worst-gui.py a file. Perhaps not every time that they press a
button, though! Import the PushButton widget into
your application:
> Language: Python 3
from guizero import App, PushButton
001. from guizero import App, PushButton
002.
003. def are_you_sure(): Create a function which uses the yesno pop-up to
004. if app.yesno("Confirmation", "Are you sure?"): ask for confirmation.
005. app.info("Thanks", "Button pressed")
006. else:
007. app.error("Ok", "Cancelling") def are_you_sure():
008. if app.yesno("Confirmation", "Are you
009. app = App(title="pointless pop-ups")
010. sure?"):
011. button = PushButton(app, command=are_you_sure) app.info("Thanks", "Button
012. pressed")
013. app.info("Application started", "Well done you started the
014. application") else:
015. app.error("Ok", "Cancelling")
016. app.display()

Add the button to your GUI which calls the


function when it is pressed.

Create Graphical User button = PushButton(app, command=are_you_


Interfaces with Python sure)
For further tutorials on how
to make your own GUIs with Your code should now resemble 05-worlds-worst-
guizero, take a look at our gui.py. When you run the application and press
book, Create Graphical User the button, you will see a pop-up asking to you
Interfaces with Python. Its confirm with a Yes or No (Figure 4).
156 pages are packed with
You can find out more about the pop-up boxes in
essential info and a range of
exciting projects.
guizero at lawsie.github.io/guizero/alerts.
magpi.cc/pythongui How about combining all of these ‘features’ into
one great GUI?

54 magpi.cc Create GUIs with Python


Create Graphical
User Interfaces
with Python
✓ Create games and fun Python programs
✓ Learn how to create your own graphical
user interfaces
✓ Use windows, text boxes, buttons,
images, and more
✓ Learn about event-based programming
✓ Explore good (and bad) user
interface design

Buy online: magpi.cc/pythongui


The TRON cab had

two game controllers:


a rotary wheel and
a joystick.

 Battle against AI
enemies in the original
arcade classic. Source Code

Code a Light Cycle


AUTHOR
arcade minigame
MARK VANSTONE Speed around an arena, avoiding walls and deadly trails

A
t the beginning of the 1980s, the Light Cycle section of the movie, where screen. There are various ways to code this
Disney made plans for an players speed around an arena on high- with Pygame Zero. In this sample, we’ll focus
entirely new kind of animated tech motorbikes, which leave a deadly trail on the movement of the player Light Cycle
movie that used cutting- of light in their wake. If competitors hit any and creating the trails that are left behind as
edge computer graphics. walls or cross the path of any trails, then it moves around the screen. We could use
The resulting film was 1982’s TRON, and it’s game over. Players progress through line drawing functions for the trail behind
it inevitably sparked one of the earliest the twelve levels which were all named the bike, or go for a system like Snake, where
tie-in arcade machines. The game featured after programming languages. In the Light blocks are added to the trail as the player
several minigames, including one based on Cycle game, the players compete against moves. In this example, though, we’re going
AI players who drive yellow Light Cycles to use a two-dimensional list as a matrix of
around the arena. As the levels progress, positions on the screen. This means that
more AI Players are added. wherever the player moves on the screen,
The TRON game, distributed by Bally we can set the position as visited or check
Midway, was well-received in arcades, and to see if it’s been visited before and, if so,
even won Electronic Games Magazine’s trigger an end-game event.
(presumably) coveted Coin-operated Game For the main draw() function, we first blit
of the Year gong. Although the arcade game our background image, which is the cross-
wasn’t ported to home computers at the hatched arena, then we iterate through our
time, several similar games – and outright two-dimensional list of screen positions
clones – emerged, such as the unsubtly (each 10 pixels square) displaying a square
named Light Cycle for the BBC Micro, Oric, anywhere the Cycle has been. The Cycle is
and ZX Spectrum. then drawn and we can add a display of the
The Light Cycle minigame is essentially a score. The update() function contains code to
Our homage to the
variation on Snake, with the player leaving a move the Cycle and check for collisions. We

TRON Light Cycle


classic arcade game. trail behind them as they move around the use a list of directions in degrees to control

56 magpi.cc Code a Light Cycle arcade minigame


TUTORIAL

Light Cycles in Python Download


the code
from GitHub:
Here’s Mark’s code for a Light Cycle minigame straight out of TRON. To get it wfmag.cc/
working on your system, you’ll need to install Pygame Zero – full instructions are wfmag47
available at wfmag.cc/pgzero.

# TRON

speed = 3
dirs = [0,90,180,270]
moves = [(0,-1),(-1,0),(0,1),(1,0)]

def draw():
Wireframe screen.blit("background", (0, 0))
This tutorial first appeared in Wireframe, our for x in range(0, 79):
sister magazine that lifts the lid on the world for y in range(0, 59):
of video games. Every issue includes tutorials if matrix[x][y] > 0:
and in‑depth interviews, along with news and matrix[x][y] += 1
reviews of the latest indie and triple-A games. screen.blit("dot",((x*10)-5,(y*10)-5))
To find out more, visit their website at wfmag.cc.
bike.draw()
screen.draw.text("SCORE : "+ str(score), center=(400, 588), owidth=0.5,
Check out their subscription offers at
ocolor=(0,255,255), color=(0,0,255) , fontsize=28)
wfmag.cc/subscribe.
def update():
global matrix,gamestate,score
if gamestate == 0:
the angle the player is pointing, and another bike.angle = dirs[bike.direction]
list of x and y increments for each direction. bike.x += moves[bike.direction][0]*speed
Each update, we add x and y co-ordinates bike.y += moves[bike.direction][1]*speed
score += 10
to the Cycle actor to move it in the direction
if matrix[int(bike.x/10)][int(bike.y/10)] < 15 :
that it’s pointing, multiplied by our speed
matrix[int(bike.x/10)][int(bike.y/10)] += 1
variable. We have an on_key_down() function else:
defined to handle changing the direction of gamestate = 1
the Cycle actor with the arrow keys. if bike.x < 60 or bike.x > 750 or bike.y < 110 or bike.y > 525:
We need to wait a while before checking gamestate = 1
for collisions on the current position, as the else:
if gamestate < 18:
Cycle won’t have moved away for several
bike.image = "bike"+str(int(gamestate/2))
updates, so each screen position in the bike.angle = dirs[bike.direction]
matrix is actually a counter of how many gamestate += 1
updates it’s been there for. We can then test
to see if 15 updates have happened before def on_key_down(key):
testing the square for collisions, which gives if key == keys.LEFT:
bike.direction += 1
our Cycle enough time to clear the area.
snapBike()
If we do detect a collision, then we can if bike.direction == 4 : bike.direction = 0
start the game-end sequence. We set the if key == keys.RIGHT:
gamestate variable to 1, which then means bike.direction -= 1
the update() function uses that variable snapBike()
as a counter to run through the frames of if bike.direction == -1 : bike.direction = 3
if key == keys.SPACE and gamestate == 18:
animation for the Cycle’s explosion. Once it
init()
reaches the end of the sequence, the game
stops. We have a key press defined (the def snapBike():
SPACE bar) in the on_key_down() function to bike.x = int(bike.x/10)*10
call our init() function, which will not only bike.y = int(bike.y/10)*10
set up variables when the game starts, but
sets things back to their starting state. def init():
global bike,matrix,gamestate,score
So, that’s the fundamentals of the
bike = Actor('bike1', center=(400, 500))
player Light Cycle movement and collision bike.direction = 0
checking. To make it more like the original matrix = [[0 for y in range(60)] for x in range(80)]
arcade game, why not try experimenting gamestate = score = 0
with the code and adding a few computer-
controlled rivals? init()

Code a Light Cycle arcade minigame magpi.cc 57


TUTORIAL

Raspberry Pi Pico
Gareth
traffic light controller
MAKER

Halfacree Create your own mini pedestrian crossing system using


With a passion a Raspberry Pi Pico, multiple LEDs, and a push-button
for open-source
software and

M
hardware, Gareth
was an early adopter icrocontrollers can be found in almost all LED; three 330 Ω resistors; an active piezoelectric
of the Raspberry the electronic items you use on a daily basis buzzer; and a selection of male-to-male (M2M)
Pi platform and – including traffic lights. A traffic light jumper wires. You’ll also need a micro USB cable, and
has written several
controller is a specially built system which changes to connect your Pico to your Raspberry Pi or other
publications on
its capabilities the lights on a timer, watches for pedestrians looking computer running the Thonny MicroPython IDE.
and flexibility. to cross, and can even adjust the timing of the lights
@ghalfacree depending on how much traffic there is – talking A simple traffic light
to nearby traffic light systems to ensure the whole Start by building a simple traffic light system, as
traffic network keeps flowing smoothly. shown in Figure 1. Take your red LED and insert it
While building a large-scale traffic management into the breadboard so it straddles the centre divide.
system is a pretty advanced project, it’s simplicity Use one of the 330 Ω resistors, and a jumper wire if
itself to build a miniature simulator powered by your you need to make a longer connection, to connect the
Raspberry Pi Pico. With this project, you’ll see how longer leg – the anode – of the LED to the pin at the
to control multiple LEDs, set different timings, and bottom-left of your Pico as seen from the top with
how to monitor a push-button input while the rest the micro USB cable uppermost, GP15. If you’re using
of the program continues to run using a technique a numbered breadboard and have your Pico inserted
known as threading. at the very top, this will be breadboard row 20.
Figure 1 A basic
For this project, you’ll need your Pico; a Take a jumper wire and connect the shorter leg –
three-light traffic
light system breadboard; a red, a yellow or amber, and a green the cathode – of the red LED to your breadboard’s

Figure 1

58 magpi.cc Raspberry Pi Pico traffic light controller


TUTORIAL

ground rail. Take another, and connect the ground Real traffic lights don’t run through once and stop
rail to one of your Pico’s ground (GND) pins – in – they keep going, even when there’s no traffic there
Figure 1, we’ve used the ground pin on row three of and everyone’s asleep. So that your program does the
the breadboard. same, you’ll need to set up an infinite loop:
You’ve now got one LED connected to your Pico,
but a real traffic light has at least two more for a while True:
total of three: a red light to tell the traffic to stop, an
amber or yellow light to tell the traffic the light is Each of the lines beneath this need to be indented by
about to change, and a green LED to tell the traffic it four spaces, so MicroPython knows they form part of
can go again. the loop; when you press the ENTER key Thonny will
Take your amber or yellow LED and wire it to your automatically indent the lines for you.
Pico in the same way as the red LED, making sure the
shorter leg is the one connecting to the ground rail of led_red.value(1)
the breadboard and that you’ve got the 330 Ω resistor utime.sleep(5)
in place to protect it. This time, though, wire the led_amber.value(1)
longer leg – via the resistor – to the pin next to the utime.sleep(2)
one to which you wired the red LED, GP14. led_red.value(0)
Finally, take the green LED and wire it up the same led_amber.value(0)
way again – remembering the 330 Ω resistor – to led_green.value(1)
pin GP13. This isn’t the pin right next to pin GP14, utime.sleep(5)
though – that pin is a ground (GND) pin, which you led_green.value(0)
can see if you look closely at your Pico: the ground led_amber.value(1)
pins all have a square shape to their pads, while the utime.sleep(5)
Get Started with
other pins are round. led_amber.value(0)
MicroPython
When you’ve finished, your circuit should match
on Raspberry
Figure 1: a red, a yellow or amber, and a green LED, Click the Run icon and save your program to your
Pi Pico
all wired to different GPIO pins on your Pico via Pico as Traffic_Lights.py. Watch the LEDs: first the
individual 330 Ω resistors and connected to a shared red LED will light up, telling the traffic to stop; next, For more physical
ground pin via your breadboard’s ground rail. the amber LED will come on to warn drivers the computing
To program your traffic lights, connect your lights are about to change; next both LEDs switch projects to try on
Pico to your Raspberry Pi (or other computer) and off and the green LED comes on to let traffic know it your Raspberry
Pi Pico, grab a
load Thonny. Create a new program, and start by can pass; then the green LED goes off and the amber
copy of the new
importing the machine library so you can control one comes on to warn drivers the lights are about to
book, Get Started
your Pico’s GPIO pins: change again; finally, the amber LED goes off – and with MicroPython
the loop restarts from the beginning, with the red on Raspberry Pi
import machine LED coming on. Pico. As well as
learning how to
use Raspberry
You’ll also need to import the utime library, so you
can add delays between the lights going on and off: T he pattern will loop until Pi Pico’s pins
as inputs and

import utime you press Stop, because it outputs, you’ll


build a simple

As with any program using your Pico’s GPIO pins,


forms an infinite loop game, measure
temperatures,
you’ll need to set each pin up before you can save and load
data to your
control it: The pattern will loop until you press the Stop
Pico’s file system,
button, because it forms an infinite loop. It’s based and even make
led_red = machine.Pin(15, machine.Pin.OUT) on the traffic light pattern used in real-world traffic a burglar alarm
led_amber = machine.Pin(14, machine.Pin.OUT) control systems in the UK and Ireland, but sped up for your room.
led_green = machine.Pin(13, machine.Pin.OUT) – giving cars just five seconds to pass through the Get Started with
lights wouldn’t let the traffic flow very freely! MicroPython on
Raspberry Pi Pico
These lines set pins GP15, GP14, and GP13 up as Real traffic lights aren’t just there for road
is available now
outputs, and each is given a descriptive name to vehicles, though: they are also there to protect
from magpi.cc/
make it easier to read the code: ‘led’, so you know the pedestrians, giving them an opportunity to cross a picobook.
pins control an LED, and then the colour of the LED. busy road safely. In the UK, the most common type

Raspberry Pi Pico traffic light controller magpi.cc 59


TUTORIAL

Figure 2 of these lights are known as pedestrian-operated For a basic set of traffic lights, that’s enough; for
user-friendly intelligent crossings or puffin crossings. a puffin crossing, though, your program needs to be
Figure 2 A puffin
To turn your traffic lights into a puffin crossing, able to record whether the button has been pressed
crossing traffic
light system you’ll need two things: a push-button switch, so in a way that doesn’t interrupt the traffic lights. To
the pedestrian can ask the lights to let them cross make that work, you’ll need a new library: _thread.
the road; and a buzzer, so the pedestrian knows Go back to the section of your program where you
when it’s their turn to cross. Wire those into your import the machine and utime libraries, and import
breadboard as in Figure 2, with the switch wired to the _thread library:
pin GP16 and the 3V3 rail of your breadboard, and
the buzzer wired to pin GP12 and the ground rail of import _thread
your breadboard.
If you run your program again, you’ll find the A thread or thread of execution is, effectively, a
button and buzzer do nothing. That’s because you small and partially independent program. You can
haven’t yet told your program how to use them. In think of the loop you wrote earlier, which controls
Thonny, go back to the lines where you set up your the lights, as the main thread of your program –
LEDs and add the following two new lines below: and using the _thread library you can create an
additional thread, running at the same time.
button = machine.Pin(16, machine.Pin.IN, An easy way to visualise threads is to think of
machine.Pin.PULL_DOWN) each one as a separate worker in a kitchen: while
buzzer = machine.Pin(12, machine.Pin.OUT) the chef is preparing the main dish, someone else is
working on a sauce. At the moment, your program
This sets the button on pin GP16 up as an has only one thread – the one which controls the
input, and the buzzer on pin GP12 as an output. traffic lights. The RP2040 microcontroller which
Remember, your Raspberry Pi Pico has built-in powers your Pico, however, has two processing
programmable resistors for its inputs, which we cores – meaning, like the chef and the sous chef in
are setting to pull-down mode for this project. This the kitchen, you can run two threads at the same
means that the pin’s voltage is pulled down to 0 V time to get more work done.
(and its logic level is 0), unless it is connected to Before you can make another thread, you’ll need
3.3 V power (in which case its logic level will be 1 a way for the new thread to pass information back
until disconnected). to the main thread – and you can do this using
Next, you need a way for your program to global variables. The variables you’ve been working
constantly monitor the value of the button. In the with prior to this are known as local variables, and
last two issues’ Pico tutorials, all your programs only work in one section of your program; a global
have worked step-by-step through a list of variable works everywhere, meaning one thread
instructions – only ever doing one thing at a time. can change the value and another can check to see
Your traffic light program is no different: as it if it has been changed.
runs, MicroPython walks through your instructions To start, you need to create a global variable.
step-by-step, turning the LEDs on and off. Below your buzzer = line, add the following:

60 magpi.cc Raspberry Pi Pico traffic light controller


TUTORIAL

global button_pressed button_pressed variable to True, letting the rest of


button_pressed = False your program know the button has been pushed.
Finally, we add a very short (0.01 second) delay to
This sets up button_pressed as a global variable, and prevent the while loop running too fast.
gives it a default value of False – meaning when the You might notice there’s nothing in the thread
program starts, the button hasn’t yet been pushed. to reset the button_pressed variable back to False Warning!
The next step is to define your thread, by adding the when the button is released after being pushed.
Always remember that
following lines directly below – adding a blank line, There’s a reason for that: while you can push the an LED needs a current-
if you want, to make your program more readable: button of a puffin crossing at any time during the limiting resistor before
it can be connected
traffic light cycle, it only takes effect when the to your Pico. If you
def button_reader_thread(): light has gone red and it’s safe for you to cross. connect an LED without
a current-limiting
global button_pressed All your new thread needs to do is to change the resistor in place, the best
while True: variable when the button has been pushed; your outcome is the LED will
burn out and no longer
if button.value() == 1: main thread will handle resetting it back to False work; the worst outcome
is it could do the same to
button_pressed = True when the pedestrian has safely crossed the road. your Pico.
utime.sleep(0.01) Defining a thread doesn’t set it running: it’s
possible to start a thread at any point in your
The first line you’ve added defines your thread and program, and you’ll need to specifically tell the
gives it a descriptive name: it’s a thread to read the _thread library when you want to launch the
button input. Like when writing a loop, MicroPython thread. Unlike running a normal line of code,
needs everything contained within the thread to running the thread doesn’t stop the rest of the
be indented by four spaces – so it knows where the program: when the thread starts, MicroPython
thread begins and ends. will carry on and run the next line of your program
The next line lets MicroPython know you will be even as it runs the first line of your new thread.
changing the value of the global button_pressed Create a new line below your thread, deleting all
variable. If you only want to check the value, you of the indentation Thonny has automatically added
wouldn’t need this line – but without it you can’t for you, which reads:
make any changes to the variable.
_thread.start_new_thread(button_reader_
thread, ())
 nly when the button is
O
This tells the _thread library to start the thread you
pressed will the final line of defined earlier. At this point, the thread will start

your thread run to run and quickly enter its loop – checking the
button thousands of times a second to see if it’s been
pressed yet. The main thread, meanwhile, will carry
Next, you’ve set up a new loop – which means a on with the main part of your program.
new four-space indent needs to follow, for eight Click the Run button now. You’ll see the traffic
in total, so MicroPython knows both that the loop lights carry on their pattern exactly as before, with
is part of the thread and the code below is part of no delay or pauses. If you press the button, though,
the loop. This nesting of code in multiple levels nothing will happen – because you haven’t added the
of indentation is very common in MicroPython, code to actually react to the button yet.
and Thonny will do its best to help you by Go to the start of your main loop, directly
automatically adding a new level each time it’s underneath the line while True:, and add the
needed – but it’s up to you to remember to delete following code – remembering to pay attention to
the spaces it adds when you’re finished with a the nested indentation, and deleting the indentation
particular section of the program. Thonny has added when it’s no longer required:
The next line is a conditional which checks to
see if the value of the button is 1. Because your if button_pressed == True:
Pico is using an internal pull-down resistor, when led_red.value(1)
the button isn’t being pressed the value read is for i in range(10):
0 – meaning the code under the conditional never buzzer.value(1)
runs. Only when the button is pressed will the utime.sleep(0.2)
final line of your thread run: a line which sets the buzzer.value(0)

Raspberry Pi Pico traffic light controller magpi.cc 61


TUTORIAL

traffic_light_controller.py
> Language: MicroPython utime.sleep(0.2)
global button_pressed
001. import machine button_pressed = False
002. import utime
003. import _thread This chunk of code checks the button_pressed
004. global variable to see if the push-button switch
005. led_red = machine.Pin(15, machine.Pin.OUT) has been pressed at any time since the loop last
006. led_amber = machine.Pin(14, machine.Pin.OUT) ran. If it has, as reported by the button reading
007. led_green = machine.Pin(13, machine.Pin.OUT) thread you made earlier, it begins running a
008. button = machine.Pin(16, machine.Pin.IN, machine.Pin. section of code which starts by turning the red
PULL_DOWN) LED on to stop traffic and then beeps the buzzer
009. buzzer = machine.Pin(12, machine.Pin.OUT) ten times – letting the pedestrian know it’s
010. time to cross.
011. global button_pressed Finally, the last two lines reset the button
012. button_pressed = False pressed variable back to False – so the next time
013. the loop runs it won’t trigger the pedestrian
014. def button_reader_thread(): crossing code unless the button has been pushed
015. global button_pressed again. You’ll see you didn’t need the line global
016. while True: button_pressed to check the status of the variable
017. if button.value() == 1: in the conditional; it’s only needed when you
018. button_pressed = True want to change the variable and have that change
019. utime.sleep(0.01) affect other parts of your program.
020. _thread.start_new_thread(button_reader_thread, ()) Your program should look like the code in
021. traffic_light_controller.py. Click Run. At first,
022. while True: the program will run as normal: the traffic lights
023. if button_pressed == True: will go on and off in the usual pattern. Press the
024. led_red.value(1) push-button switch: if the program is currently
025. for i in range(10): in the middle of its loop, nothing will happen
026. buzzer.value(1) until it reaches the end and loops back around
027. utime.sleep(0.2) again – at which point the light will go red and
028. buzzer.value(0) the buzzer will beep to let you know it’s safe to
029. utime.sleep(0.2) cross the road. The conditional section of code for
030. global button_pressed crossing the road runs before the code you wrote
031. button_pressed = False earlier for turning the lights on and off in a cyclic
032. led_red.value(1) pattern: after it’s finished, the pattern will begin
033. utime.sleep(5) as usual with the red LED staying lit for a further
034. led_amber.value(1) five seconds on top of the time it was lit while the
035. utime.sleep(2) buzzer was going. This mimics how a real puffin
036. led_red.value(0) crossing works: the red light remains lit even
037. led_amber.value(0) after the buzzer has stopped sounding, so anyone
038. led_green.value(1) who started to cross the road while the buzzer was
039. utime.sleep(5) DOWNLOAD going has time to reach the other side before the
040.
041.
led_green.value(0)
led_amber.value(1)
THE FULL CODE: traffic is allowed to go.
Let the traffic lights loop through their cycle a
042. utime.sleep(5) magpi.cc/github few more times, then press the button again to
043. led_amber.value(0) trigger another crossing. Congratulations: you’ve
built your own puffin crossing!

62 magpi.cc Raspberry Pi Pico traffic light controller


Get started with
MicroPython
on Raspberry Pi Pico
Learn how to use your new
Raspberry Pi Pico microcontroller
board and program it using
MicroPython. Connect hardware
to make your Pico interact with
the world around it. Create
your own electro-mechanical
projects, whether for fun or to
make your life easier.

Set up your Raspberry Pi


Pico and start using it

Start writing programs


using MicroPython

Control and sense


electronic components

Discover how to use Pico’s


unique Programmable IO

Available now: magpi.cc/picobook


38
TUTORIAL

Use Visual
Studio Code with
Raspberry Pi
Install and use Microsoft’s development environment

W
e love Microsoft’s Visual Studio Click the Raspberry Pi applications menu and
Code. It’s an excellent programming choose Programming > Visual Studio Code to
environment that Microsoft has made open the program.
available for free. Installing Visual Studio Code If you’re looking to use Visual Studio Code along
is just an apt command away, and once installed with the C/C++ SDK for Raspberry Pi Pico then it is
Lucy
MAKER

it’s a joy to use. best to use the Pico installation script (see ‘Install
Hattersley It’s powerful too. While Raspberry Pi with Pico’). This installs Visual Studio Code along
Lucy is editor of The OS’s default IDEs (integrated development with the extensions needed to debug Pico.
MagPi and loves environments) Thonny and Geany are both
it when her code beginner-friendly, Visual Studio Code is the
works. Although
recommended environment if you want to debug
not the very first
Explore Visual Studio Code
time. That’s just a
bit weird.
your code with a graphical interface.
Visual Studio Code has deep integration with
02 When Visual Studio Code first opens, you
magpi.cc all the programming languages you are likely to will see the Welcome screen. This has quick links
use. Having support for everything from HTML, for creating a new file, opening a file, and links to
through to Python, and up to C++ ensures that you various Help documents (including a cheat sheet).
only have to learn one tool. In the bottom-left you will see a ‘Show welcome
Git support is baked in, so you can push and pull
remotely without having to switch to the Terminal.
There’s a vast extensions marketplace offering
a huge range of features, including code syntax
extensions and code completions.
All this makes it our go-to IDE for coding on
Raspberry Pi. In this tutorial, we’re going to show
you how to install Visual Studio Code and set it up
for coding with Raspberry Pi and Pico.

Install Visual Studio Code


01 Visual Studio Code is now available in
The Explorer in the the default apt packages in Raspberry Pi OS.
Activity Bar makes it This means you can install it with just a simple
easy to navigate code
and files, while the Terminal command.
code preview makes
it easy to scan long
files. Here we are sudo apt update
playing Boing from
Code The Classics
sudo apt install code -y

64 magpi.cc Use Visual Studio Code with Raspberry Pi


The main area displays the welcome
screen when you first open Visual Studio
Code, along with links to useful resources

The Activity Bar in the left enables you


to switch between the Explorer, Search,
Source Control, Run and Debug, and
Extensions sidebars. Click the icon to
reveal the sidebar; click it again to hide it

Top Tip
page on startup’ option. Keep it ticked for now. the extension details will appear in the Editor
On the left of the screen is the Activity Bar. Click area. You will see the details and installation
the icons and a sidebar will appear; click the same instructions. At the top are the number of times
icon again to get rid of it. The Activity Bar is used to the extension has been installed (over 32 million Install with
navigate most of the features of Visual Studio Code at the time of writing) and a star rating from Pico
while you code in the main window. other Visual Studio Code users (four-and-a-half
If you have set
stars). These can give you an idea of how useful an
up Raspberry Pi
extension will be. Pico with C/C++
Note that we are not installing Python itself development,
Install the Python extension
03 We have no code to play with at the moment.
into Raspberry Pi OS. You will already have Python
installed there. We are installing support for it in
you may already
have Visual Studio
So let’s set up Visual Studio Code for use with Python Visual Studio Code. Click the blue Install button. Code installed
(magpi.cc/picoc).
and create the classic Hello World program.
Click on the Extensions icon at the bottom of the
Activity Bar. The Extensions sidebar will appear.
Create a Python file
From here you can install a wide range of features
that expand Visual Studio Code.
04 Now let’s create a Python file. Close the
Extensions sidebar by clicking the Extensions
icon and choose File > New File from the menu. A
T here’s a vast extensions second tab will appear with Untitled-1. Choose File
> Save As and name the file hello.py.
marketplace offering a Visual Studio Code will automatically detect you

huge range of features are working on a Python program and will load the
Python extension from Step 3.
On the first run, the Python Extension window
Click the ‘Search extensions’ box, enter will appear in the Editor, along with a notification in
‘python’, and press ENTER. Because Python is the bottom-right corner that ‘Linter pylint is You’ll Need
such a popular language, hundreds of extensions not installed’. Pylint is a code analysis tool that
> Raspberry Pi
will appear. Below each extension will be a short checks your code against the PEP-8 style guide
description and the name of the maker. We’re (magpi.cc/pylint). It’s handy to have around, but > Raspberry Pi OS
looking for the one made by ‘Microsoft’. It will we’re not going to use it here. Close the notification. > Internet connection
almost certainly be the first result. Click on it and Click on the hello.py file to switch back to it.

Use Visual Studio Code with Raspberry Pi magpi.cc 65


TUTORIAL

Visual Studio Code


has extensions for all
major programming
languages. The
Python extension
provides features
such as colour
code syntax and
IntelliSense
code completion

Top Tip
IntelliSense
Microsoft’s
code-completion
is known as
‘IntelliSense’
(magpi.cc/
intellisense) and
you can expand
code by pressing
Run Hello World
the TAB key. It’s
a great way to
05 Enter the classic Hello World program in
Hover the mouse to the left of the ‘p’ on line 2
and a small red dot will appear. Click it to set a
get parameter the editor window: breakpoint on line 2. Click Run and Debug in the
information, and Activity Bar and click Run and Debug. A list of
to list members of print("Hello World") configurations will appear at the top of the screen.
objects (when you Choose ‘Python File’ and press ENTER.
use dot notation).
As you start to type the ‘pr’ in ‘print’, IntelliSense The program will run line 1 and stop on line 2
It’s really helpful
when coding.
will display options for Code Completion. You can (with our breakpoint). The sidebar will display the
carry on typing the code outt, or use the arrows to Variables in your program (in this instance just
select a command from the list. Select ‘print’ and ‘message’ with a value of ‘Hello World’).
press ENTER. At the top of the screen, a debug toolbar will
Before running the program, we should pick appear with Continue, Step Over, Step Into, Step
the right interpreter. By default Visual Studio Out, Restart, and Stop options. Choose Continue to
Code is set to use Python 2.7, whereas we want to run line 2 of the program.
code in Python 3.7
Click on ‘Python 2.7.16 32-bit’ in the bottom-
left corner (the version number may have
REPL and Debug Console
updated) and a list of interpreters will appear at
the top. Choose ‘Python 3.7.3 32-bit’ from the
07 You can use REPL (Read-Eval-Print-Loop)
/usr/bin/python3 folder. in Visual Studio Code by choosing it from the

Blog To run the program, click the small green play


icon in the top-right corner (hover the mouse on
Command Palette. Choose View > Command Palette
(press CTRL+SHIFT+P) and enter ‘repl’. Choose
it to see ‘Run Python file in Terminal’. There are ‘Python: Start REPL’ from the command list.
Microsoft’s Jim numerous other ways to run programs in Visual A REPL instance will appear in the Panel. You can
Bennett has written Studio code, including the Run and Debug option now enter Python programs a line at a time.
two blogs on Visual
in the Activity Bar and the Run menu. You can’t, however, interact with your Hello
Studio Code for
Raspberry Pi. Both A Terminal window will appear at the bottom World program from REPL. A better approach is
are well worth and you will see ‘Hello World’ as the output. to use the Debug Console. Click Run and Debug
taking a look at. again. The program should halt on line 2 with the
breakpoint you set in step 6.
Visual Studio Code Now click on Debug Console in the console
on Raspberry Pi
Debug
magpi.cc/ 06 Now you’ve got the basics of Visual Studio
window. At the bottom of the screen is an
interactive Debug Console REPL. Enter ‘message’
vscodeblog
Code, let’s split Hello World onto two lines: in it to see the contents of your message variable.
Code Remotely The Debug console will say ‘Hello World’.
magpi.cc/ message = "Hello World" You can adjust variables from the Debug
vscoderemotely print(message) Console REPL. Enter:

66 magpi.cc Use Visual Studio Code with Raspberry Pi


message = "Hello from The MagPi"

Notice that the message variable in the Run


and Debug window changes to display the new
variable contents.
You can interact with the contents of the code
using breakpoints, the Debug Console, and the
debug toolbar. Click the Continue button to carry
on running the program, and click on Terminal in
the console to see the output message.

GitHub integration
08 Now that you have got the basics of coding
and debugging, let’s get some code. We’re going to
download some games from the Code The Classics
book (magpi.cc/codetheclassics).
Click on Source Control in the Activity Bar and
click Clone Repository. Enter the following URL
into the text field that appears.

https://github.com/Wireframe-Magazine/Code-
the-Classics.git

A window will appear so you can choose a location


for the files. Select the Documents folder and click

Add a touch of style to your


Select Repository Location.
The files will be downloaded and a notification
will appear saying ‘Would you like to open the
cloned repository?’ Click Open. next design
Fully configurable universal case

Looking at detailed code system the perfect fit for all your
09 The Explorer sidebar will display all the application needs.
folders for the five games used in Code The
Every panel on the UCS enclosure range
Classics. Open Boing Master and click on boing.py.
Notice that the right of the screen now displays can be customised enabling you to create
a preview of all the code. You can use this to your own individual stylish design easily.
quickly zoom around the code. Click the Split
Editor Right button in the top-right corner. This
With optional wall, desk and DIN rail
splits the window in half and enables you to view mounting adaptors the range is available
different parts of the code at the same time. You in two colours, four sizes & two heights
can continue to split the code into three, or more,
ensuring you’ll find the right enclosure
views. Any changes you make will appear in all
windows. Click the close icon on any view. for your next project.
The Explorer sidebar also presents folders for
images, music, sounds, and other components. You
can view the images in the Editor window.
Press Run to play a game of Boing. Being able For additional information call 01952 681700 or visit
to view all the code and files in Visual Studio phoenixcontact.co.uk/UCS
Code will make it much easier to understand the
code construction.
TUTORIAL

Cheap Trills for all


Part 03

Make a Trill Guitar that is so easy to play you won’t believe it

H
The concept
aving seen how to read the Trill sensors
in Python, we are now going to show
02 The idea is that we use the square Trill
you how to make a standalone Trill MIDI sensor as the guitar strings to strum or pluck, and
guitar using a Pico Pi Controller. Here, we show the Trill bar sensor to change the chords, so you
you how to make it, and next month how the don’t have to learn the finger patterns for each
software makes it play. chord. Then these touches are converted into
MIDI note on and note off messages, and sent
out to a MIDI sound generator, like the one we
Mike Cook
MAKER

made in our MIDI sound box project in The MagPi


How to play the flute
Veteran magazine
author from the old
01 In a satire of the long-running Blue Peter
#63 (magpi.cc/63). You could even combine this
project with an amplifier and speaker for an all-
days, writer of the children’s program, Monty Python once famously in-one instrument if you like.
Body Build series, told viewers how to play a flute, by blowing
plus co-author of
Raspberry Pi for down one end and moving your fingers over the
Dummies, Raspberry keys. That is a bit complex compared to how
Pi Projects, and The design
Raspberry Pi Projects
for Dummies.
you can play our Trill Guitar. A Trill bar with
a square below it looks like a guitar already.
03 The big advantage in using a Pico over
We had planned to make one when we started something like Raspberry Pi Zero is that it consumes
magpi.cc/mikecook
our look at the Trill sensors, but the arrival of way less power, and you don’t have to be careful
Raspberry Pi Pico changed the direction of our about turning it off, just disconnect the power. It
design completely. also has zero boot time. A Pico design can run off
three AA batteries; this project draws only 30 mA, so
Figure 1 Figure 1 Schematic of the Trill Guitar
you should get around 65 hours of continuous play
from a single set. Finally, adding an OLED display
allows you to customise how the guitar works when
you are away from your computer, and show you
what chord you are playing.

I2C buses
04 As Pico has two I2C buses, we used Bus 1 for
the Trill sensors, and Bus 0 for the OLED display.
Changing the I2C speed on the Pico is simple,
so we could run the Trill sensors at 400kHz and
run the OLED display at 1MHz for a quick screen
refresh rate. We chose one of those two-colour
OLED displays, the sort that has a built-in filter
over sections of the screen. We thought the
yellow top line, with the rest in blue, looked good;
however, any colour will work without modifying
any code or hardware.

68 magpi.cc Cheap Trills for all


TUTORIAL

Change the chord using the long bar

Here you can see what


you are playing

Strum the guitar where


you normally would

DOWNLOAD
THE FULL CODE:
magpi.cc/pibakery

Schematic Construction
05 The schematic for our project is shown
07 The circuit is built on a piece of stripboard
You’ll Need
in Figure 1, and is quite simple. Perhaps the 25 rows by 20 holes. For mounting, four 3 mm holes > Trill Bar and
most involved part is the MIDI output circuit are drilled in each corner. Figure 2 shows the back Square sensor
in the lower right corner. We used a BC212 of the stripboard, and you should cut the tracks at magpi.cc/trill
PNP transistor, but any general-purpose PNP the places shown with the grey squares over the > OLED 128×64 I2C
transistor will do. The two I2C buses each need holes, or grey bars between the holes. The front of display SSD 1306
their own set of pull-up resistors; when using the board is shown in Figure 3. This Pico has had yellow/blue
magpi.cc/trilloled
a Raspberry Pi computer, you do not need these
because they are built into the hardware of the > Raspberry Pi Pico
board for Bus 1. We put a decoupling capacitor magpi.cc/pico

on the power and ground feeds out to the three


I2C devices.

Switches
06 There are two change-over switches; we
used slider switches, but any sort should work.
One controls the power from the batteries, and the
Warning!
other controls the guitar’s mode: either playing Sharp tools
or configuring the guitar. If the USB is connected
to Pico for programming, then that will power Many cutting tools are
used in this tutorial. Take
the system, and the battery power should not be necessary precautions
switched on, otherwise the USB’s voltage will when using them.

be applied to the batteries. As connecting a USB


lead is not the normal way to use the project,
we thought it not worth adding protection
Figure 2 F
 igure 2 The
components if this were to happen. stripboard tracks to cut

Cheap Trills for all magpi.cc 69


TUTORIAL

Figure 4 Three sides


added to the base
Figure 4

The sides
downward-pointing pins soldered to it and plugs
into two rows of sockets, making it stand tall from
09 The top and the base were taped together,
the board. You can miss out the sockets if you want and the holes drilled through them both to ensure
to solder your Pico directly onto the board. they aligned exactly. These holes are used for the
pillars that hold the top and bottom apart, and
should be countersunk on the outside. The sides of

Top Tip The guitar body


the guitar should be glued on one at a time to the

08 The guitar body is constricted from 3 mm


bottom. We used superglue, and a small engineer’s
set square to make sure they were vertical. Figure 4
Mounting the
plywood; the drawings can be found on our GitHub shows when three sides had been added. The sides
Trill sensors
page (magpi.cc/pibakery). We printed these out around the display need to be bevelled to fit, but all
Pass the cables on a piece of paper, and used spray mount glue to the other sides are butt joints.
through the top of stick this temporarily to the wood sheets. Then,
the case, and fix we used a combination of a tabletop saw and
them in to the top fretsaw (scroll-saw) to cut them out. Of the three
with some small
Finishing the case
strips of double-
sided sticky tape.
large holes in the top, only the display’s needs to
be neat, as the other two are covered by the Trill
10 As more sides are glued in place, the
sensors. Be sure to measure your OLED display structure becomes more solid. To finish off, we
because there are two slightly different sizes; the put a fillet of wood filler on the inside, as well as
Figure 3 The front of
the board assembly drawings are for the larger one. in the gaps where the bevelled edges did not meet
exactly. Then the circuit board should be placed

Figure 5

Figure 3 Figure 5 Wires soldered


direct to the Trill sensors

70 magpi.cc Cheap Trills for all


TUTORIAL

Figure 6

than the sides in order to provide room for a bit of


tension to be applied. The battery pack is held in Top Tip
place with adhesive foam pads.
BC212
Note there are
variants of the
Software
13 Next month we will look at the software to
BC212 transistor
with different pin
turn this into a fully-fledged instrument. To get configurations. The
good results is not as simple as you might think, BC212L is not the
but the complexity is all hidden from the user. We same as the BC212.

Figure 6 Angle pins will use the two-dimensional reporting of a touch


fitted to the display on the square sensor to not only pick which string
is being plucked, but also the velocity (volume) of
in line with the USB hole and 3 mm holes drilled the MIDI note settings, so that you can play loud or
through into the base of the guitar. Following soft depending on where you strum. The bar sensor
this, the board should be mounted on 3 mm nylon can also be used in two modes, either defining the
standoff spacers, and the USB socket should be in chord that is played or as feedback while modifying
the middle of the hole. Remove the board, sand off, how the guitar plays.
and paint the whole case; we used red.
Figure 7 All parts
Figure 7 assembled, now put
the top on
The sides around the
display need to be
bevelled to fit

I2C peripherals
11 We soldered wires direct to the Trill
sensors (Figure 5) rather than using the supplied
connector, to reduce the height needed for a
socket. Instead, we used pin headers on the
board for all I2C connectors, and made up leads
accordingly. With the OLED display, we removed
the straight connector by inserting the blunt end
of a Stanley knife between the PCB and plastic,
and left the plastic pin holders off the board. This
allowed the pins to be unsoldered one at a time,
and a right-angled pin header fitted instead, as
shown in Figure 6.

Final assembly
12 Note that the clock and data of the display
were swapped over compared to the Trill sensors,
so we kept the same board layout and just
compensated for that in the lead from the display
to the board. Figure 7 shows the whole assembly
prior to fitting the top. The top and bottom of the
box are held together using pillars; the trick is to
have the pillars just a millimetre or two shorter

Cheap Trills for all magpi.cc 71


FEATURE

Pico-fied
Raspberry Pi projects
Raspberry Pi Pico is already making waves as a cheaper, smaller
alternative for traditional Raspberry Pi projects. By Rob Zwetsloot

W
hen we first heard about Raspberry
Pi Zero, our minds raced with how
the tiny version of Raspberry Pi could
be used in similar ways to its credit-card-
sized siblings, yet fit into even tinier spaces.
Raspberry Pi Pico was no different; however, as it
was now a microcontroller, different ways of using
it sparked our imagination.
While we knew it may be better suited to some
classic Raspberry Pi projects than an actual
Raspberry Pi, we did not consider the number of
ways people would Pico-fy their projects. Here’s
what people have made, and here are some ideas for
you to pursue…

72 magpi.cc Pico-fied Raspberry Pi projects


FEATURE

Motor controller
A way to control robot motor control boards
designed for Raspberry Pi with Raspberry Pi Pico –
it’s different enough that you need a solution!

How it works:
We don’t want to say that this is cheating – it’s
not – but it is an adapter for a board designed with
Raspberry Pi Zero in mind. GPIO functions are
programmable to be similar enough to work. This
will possibly also be for sale at some point.

Maker:
Neil Lambeth (@NeilRedRobotics)

Radio receiver
Listen to the radio, or at least tune into the right
frequency, using this Raspberry Pi Pico project.
Case to come.

How it works:
A TEA5767 module is used as an FM receiver
and hooked up to a Pico. A tiny little LCD screen
shows the frequency that Pico is currently tuned
in to, using a little variable resistor to change the
frequency just like on an older radio. Raspberry Pi
Pico also has the ability to output sound, so with
some extra tweaks you could probably upcycle an
old radio or create your own.

Maker:
tkraspilabs (@tkraspilabs)

Ideas to try
Physical games and board games that
have a little bit of electronics can be
easily made or upgraded with a Pico.
While someone has already made a
Simon, we’ve not seen a dice roller or
a Monopoly money system that allows
for less cheating. With some motion
sensors, they could easily be used to
control open drones and such as well.

Pico-fied Raspberry Pi projects magpi.cc 73


FEATURE

Music and MIDI


generation
Whether it’s simple beeps or harmonic piano,
it seems like Pico has extraordinary audio
capabilities, as long as you can find them.

How it works:
Simon says game The MagPi regular Mike Cook has made use of Pico’s
PIO (Programmable Input/Output) to generate
simple tones by toggling a pin, based on one of
Like the Simon toy of old, this Pico will flash the Pico code examples: magpi.cc/pio1hz. Kevin
specific LEDs in a sequence and you have to attached some audio gear to Pico and programmed
remember it, with each sequence getting longer it in MicroPython to produce MIDI notes, in this
and, in theory, harder. case some Bach: magpi.cc/picomidi.

How it works: Maker:


A simple script which lights an LED, stores what Mike Cooke (@Wee_Grumphie) and Kevin
that was, and then waits for player input. Like (magpi.cc/diyelectro)
much game code, it involves a lot of lists and
checking of lists. You can find out more here on the
website for it: magpi.cc/picosimon.

Maker:
GeekDude (@geektechstuff)

Amazing uses –
OS installation
If you want to run an operating system on Pico, look
no further than FUZIX. It’s a very small version of
UNIX. It very likely won’t replace, well, any of your
main computers now, but it’s a remarkable feat to
port it to RP2040. You can find out more about how it
works, and how to experiment it with yourself, on this
Raspberry Pi blog post: magpi.cc/fuzix.

74 magpi.cc Pico-fied Raspberry Pi projects


FEATURE

Temperature
logger
Keep track of the temperature in a given location,
and display the results on a graph. This is great
for smart thermostats or manually setting times.

How it works:
Taking temperature data from a thermistor is
fairly simple with Python – all you then need
to do is store that data, preferably in a text
file. The data from that file is then plotted on
a graph and displayed on a Pico Display, which
you can find out how to use from Pimoroni’s
GitHub: magpi.cc/picodisplay.
Auxiliary
Maker:
David Booth (@Worlds6440) keyboard
Perfectly described by Airton himself: “A mini
keyboard with Raspberry Pi Pico, it will be my
hotkey to mute and unmute Zoom, even when I’m
not on Zoom window.”

How it works:
Pico can function as a USB keyboard using C
and TinyUSB (magpi.cc/tinyusb), or by using
MicroPython (magpi.cc/mpkeyb). It works
great with custom keys like Airton used, or with
something like a Pimoroni RGB Keypad.

Maker:
Airton Zanon (@airtonzanon)

Pico-fied Raspberry Pi projects magpi.cc 75


FEATURE

Sprite rendering
The Sega Mega Drive did not have Mode-7 style
graphical rotation and scaling like the Super
Nintendo, but that hasn’t stopped James from

Ideas to try implementing it on a Pico with Pico Display.


With the transparency, it also goes into Game Boy
Advance territory.
Home automation is something Raspberry Pi is great
at, and we expect to see amazing homes powered
by Raspberry Pi Pico in the near future. Even if it’s
How it works:
working with a Raspberry Pi that powers the whole Manipulating sprites like this is far easier than it
system, Picos can be strategically placed to control was in 1991, especially with Python. You can have it
individual lights and curtains and garage doors. create a scene that is updated at a specified fraction
of a second, with different sprites’ position,
rotation, and transparency updated each time,
using some simple maths to make it animated.

Maker:
Hydrometer James Sutherland (@jamessutherland)

Check the temperature and humidity with Raspberry


Pi Pico. Perfect for green houses, planters, or rooms
you need to environmentally control.

How it works:
This is one is very simple, and in some ways
slightly easier than with Raspberry Pi, as Pico
allows for analogue inputs. With a bit of standard
code and a nice LCD screen, you can easily convert
the data coming from a sensor into something you
can read, like in the photo.

Maker:
Caroline Dunn (@thecarolinedunn)

76 magpi.cc Pico-fied Raspberry Pi projects


FEATURE

Pico robotics
Using a Pico as the controller for motors in a robot
means you can skip the motor controller step, and
reduce down on parts and power.

How it works:
Pico supports analogue on some of its pins, so
with the right code and tweaking you can get it to
supply the right power to the motors for specific
tasks. This one is a bit of trial and error, though,
and we would recommend making use of a motor
controller until we can get some good code and
tutorials for this kind of usage.

Maker:
Kevin McAleer (@kevsmac)

Amazing uses –
Pico collaboration
Disco lights
Friend of the magazine Stewart Watkiss has been
doing a lot of work with getting Raspberry Pi
and Pico to work together – similar to how we’ve
written about using Arduino with Raspberry Pi in
Using a MOSFET switch to power lights that the past! In fact, he’s managed to get Raspberry Pi,
require much more power than something like a Pico, and an Arduino working together, as you can
Pico can provide, all in the name of funk. see in this video: magpi.cc/picoi2c.

How it works:
A MOSFET is able to control larger currents using
a small input signal, like how a car starter motor
works. In this case, for quite powerful lights that
a Pico, Raspberry Pi, or other microcontroller
would not be able to power themselves. This
requires a bit of electronics engineering to get
right, along with code to activate the right parts
of the circuit, and Stewart goes into it with his
video: magpi.cc/picodisco.

Maker:
Stewart Watkiss (@stewartwatkiss)

Pico-fied Raspberry Pi projects magpi.cc 77


REVIEW

IoT Cricket
SPECS Things On Edge magpi.cc/wificricket £16 / $22

INPUTS:
1 × digital, This new British-designed device aims to make building the Internet of
1 × digital or
analogue (8‑bit Things as easy as a few clicks. PJ Evans checks out the no-code approach
resolution),
wake-up trigger,
on-board
temperature
sensor

DIMENSIONS:
37.2 × 16.4 ×
4 mm

WIRELESS
RANGE:
Up to 100
metres

WIFI:
2.4GHz 802.11
b/g/n WPA /
WPA2

OPERATING
VOLTAGE:
1 V–3.5 V The Cricket doesn’t feature a wide range of inputs like other
ESP-class devices, but the size and power consumption make it
CHIPSET: perfect for all kinds of projects
ESP8266EX

T
32‑bit @160MHz here’s been a lot of talk recently about on Arduino-compatible ESP devices. In fact, the
microcontrollers, and Raspberry Pi has IoT Cricket boasts a total of one digital and one
recently entered the field with Raspberry Pi analogue input and a 3.3 V output. This simplistic
Pico (we’re sure we’ve mentioned it). approach and some clever design solves one of the
Microcontrollers have many different use great headaches of ESP-based IoT devices: power.
cases, and this new gizmo from Cambridge-based By combining a real-time clock into the design
Things On Edge is squarely targeting the Internet to control wake-ups as well as a ‘wake up’ line,
of Things (IoT) market. The IoT Cricket is a small it draws true 0 A when idle. It can also operate on
package based on the ubiquitous ESP8266 chipset, voltages from 1 V up to 3.3 V. This means you can
popular for its solid wireless LAN support. ESP power it from a single AAA battery for potentially
microcontrollers are widely available and some can months, even years, depending on activity.
be had for just a couple of pounds, so it may come
as a surprise to see a British-designed and made Zero-code configuration
product introduced to an already saturated market. You can’t write code for the IoT Cricket.
Turns out there are a few things that make this Everything is configured using an on-board web
device different from the rest. interface (there is also an over-the-air solution).
The IoT Cricket appears to have been designed Placing it into configuration mode (using the
around the philosophy of ‘do one thing and do it smallest button we’ve ever seen) starts a wireless
well’. At first glance it may not seem like a good hot spot that allows you to set the behaviour of
deal. It’s more expensive than many similar the device. Options include using the RTC to wake
controllers and lacks a full range of inputs as seen the device at given intervals, how to read inputs,

78 magpi.cc IoT Cricket


REVIEW

The IoT Cricket is small,


elegant, and perfect
for single-purpose use

T he IoT Cricket appears to You can configure the


IoT Cricket through its
web interface, even

have been designed around remotely using its


OTA feature

the philosophy of ‘do one


thing and do it well’ Verdict
If you’re not
and also what to do with the data. IoT Crickets into coding, or
support MQTT and HTTP GET or POST actions, are looking for
making them instantly compatible with a huge devices that
could truly
range of monitoring and alerting services. Things
last years on
On Edge even provides a free MQTT broker if you batteries, this
don’t want to set up your own. might be the
Programming microcontrollers is not for smoothest route
everyone (especially if you’re using C), so this novel detection, and more. There is also considerable to your own IoT
approach of configuring the IoT Cricket places the documentation on integrating with services such as utopia. Cheaper
options are
Internet of Things within the reach of a much wider IFTTT and Home Assistant. They’ve even included
available, but
audience. Even if you are accustomed to coding ESP an on-board temperature sensor (TMP1075DSG) so
none is this easy
devices, getting a simple project up and running you can get started with no soldering. The online

9
to use.
with this approach is much quicker. documentation can be a little hard to wade through,
Things On Edge has provided several examples but seems to be constantly improving. All in all,

/10
of projects using the IoT Cricket, including it’s a very impressive device if you want ultra-low
door sensors, wireless light controllers, motion power consumption and very easy setup.

IoT Cricket magpi.cc 79


REVIEW

Pico Explorer Base


Pimoroni magpi.cc/picoexplorer £22 / $26
SPECS

DISPLAY:: Experiment with electronics and a mini display with this


1.54-inch IPS
LCD screen, add-on board for Raspberry Pi Pico. By Phil King
240×240 pixels

T
FEATURES:
170-point he launch of Raspberry Pi Pico saw a whole may prove a little cramped for some projects, you
breadboard; raft of add-ons created for the tiny, but could always just use a separate breadboard to
breakout powerful, microcontroller board. The house extra components. Note that no electronic
header
Pico Explorer Base is one of the most interesting components are supplied with the board, so it’s
including
I2C, SPI, ADC; offerings, enabling you to plug and play with up to you to source your own LEDs, buttons,
dual H-bridge standard electronic components to explore sensors, etc., along with the male-to-male
DW8833 physical computing more easily. It also has the jumper wires to connect them.
motor driver; bonus of a mini LCD display, dual H-bridge motor Rather than wiring components to Pico’s pins
2 × Breakout
driver, and a couple of breakout slots. directly, a selection of its pins are broken out
Garden I2C
sockets; 4 × To use the Explorer Base, your Pico will need via two 12-pin female headers. These are clearly
tactile buttons to have male pin headers soldered, facing labelled and include I2C, SPI, ADC, and seven
downwards – if you don’t fancy doing this standard GP pins. While there are two GND
DIMENSIONS: yourself, it’s possible to buy Pico boards with pre- connections, the only power option is 3V3, so this
117×63×20 mm
soldered pins. It’s then just a case of mounting rules out any components requiring 5 V power,
your Pico in the dual female headers; a helpful such as NeoPixels. An Audio pin is connected to
‘landing area’ graphic on the Explorer Base the on-board piezo speaker.
indicates which way round to place it. The remaining four breakout pins are allocated
to motor connections. Making use of a DRV8833
Making connections dual H-bridge motor driver chip, these can
On the left side of the Explorer Base is a mini deliver 1.5 A RMS current output to control two
green breadboard with 170 points. While this

Connect a jumper wire


from a GP female pin to
the Audio pin to send
sound to the on-board
piezo speaker

80 magpi.cc Pico Explorer Base


REVIEW

 lug and play with standard


P
electronic components to
explore physical computing
more easily
DC motors (or other power-hungry devices Pimoroni tells us more will be made available Packed with features,
the Pico Explorer
such as bright LEDs) – there’s even a handy soon. With a great deal of jiggery-pokery, and Base is billed as
overcurrent warning LED next to them. the help of a CircuitPython bus conversion an ‘electronic
adventure playground’
library (magpi.cc/cpbusdevice) created by Ben
Mini display Everard from our sister magazine HackSpace –
One of the highlights of the Explorer Base is the we managed to get a BME680 breakout sensor
mini LCD screen on its right-hand side. This 1.54- working in MicroPython. Note that you’ll also
inch, 240×240 IPS display is vibrant and useful need to flash Pimoroni’s custom UF2 firmware to
for showing data such as sensor readings, as well Pico to use the Explorer Base with MicroPython.
graphs, text, and colourful graphics. Like most Driving the LCD display and reading its
of Pimoroni’s mini displays, it features four tiny buttons is made fairly simple by a MicroPython
tactile buttons around the outside for user input. module. This enables you to set pixels, create
You could even use them to play simple games. filled rectangles and circles, change pen colours,
Above the screen are a couple of five-pin and display text strings and characters (using
I2C-based breakout slots that are compatible a preset upper-case font). With a bit of effort,
with Pimoroni’s large range of Breakout Garden it’s possible to create some more advanced
boards. Making use of them isn’t quite so simple, effects, such as lines, hollow shapes, and even Connect components
however, since the Explorer Base’s supporting scrolling text on a path – as demonstrated by on the breadboard to
the clearly labelled
software libraries – for C and MicroPython – are Tony Goodhew in his excellent Instructable female breakout
still a work in progress at the time of writing, (magpi.cc/explorerworkout), which shows the headers. Pico’s USB
connection also powers
and only include drivers for a few breakouts. power of the display and Pico itself. the Explorer Base

Verdict
While the software
library support and
documentation is
currently lacking,
and may prove
befuddling for
beginners, the
Pico Explorer Base
packs in a lot of
functionality to
explore physical
computing

8
with Pico.

/10
Pico Explorer Base magpi.cc 81
REVIEW

10 Amazing:
Maker 3D printer

tools
Print your dreams
A quite expensive item for sure, but one that has endless possibilities. Thanks
to online modelling communities and easy access to basic CAD software, you
can quickly prototype and test designs for projects, or create that part you can’t
get elsewhere.
Help make your dreams a reality
with the right set of tools
Wire stripper
P
ractice and experience is generally more
important than the tools you have for the job.
No knife required
However, the right tools can make it easier,
whatever your level of experience. A well-stocked Snipping wires to length is easy; removing the plastic
workshop can really help bring your projects to life – insulation to reveal the actual conductive wire
underneath can be a little tricky. We recommend a
here are ten tools we think you should have.
good wire stripper, especially when you get past the
breadboard prototyping phase.

Glue gun
Hot fusion
Easy to apply, quick to set, strong, and
insulating? Glue guns are a maker’s best
friend. Always make sure to get one with at
least two settings, though. And don’t rely
on just one for all your gluing needs. You
can even get sealing wax sticks for them,
as well.

Cutting mat
Helping hands Precision slicing
While you can cut on the surface of a
wooden workbench in a pinch (and with
Handy holders
permission), a cutting mat is definitely the
Due to various reasons, humans have two hands. Sometimes preferred method. It won’t dull the blade
less. Balancing wires and solder and a (very hot) soldering iron, as much, they self-heal, and they usually
or holding a small piece steady painting, can be tricky even for come with angles and measuring tools
the most dextrous. With movable clamps and a magnifying glass, built onto the surface so you can have a
helping hands make it easier for everyone. better visual guide.

82 magpi.cc 10 Amazing: Maker tools


REVIEW

Rotary multi-tool
Spinning trimmer Soldering iron
Otherwise known as a Dremel, which is a brand of tool maker that makes
popular rotary tools, they’re great for small projects. You can sand, buff, cut, Create circuits
drill, shave, and more by switching out the different tool heads. It’s great for
makers as they’re small and cover a lot of bases. An essential tool for electronics, a soldering iron is basically a
very hot metal pen that allows you to melt specially treated, soft
metal that allows for wires and circuits to be connected and have
electricity run through them. Make sure to tin the tip before using,
though: magpi.cc/tin.

Directional light
See your project
It’s easy to find little USB LED lights
on a goose neck these days. They’re
bright, low energy, can be clamped to
a table, and moved around however
you wish. For finer work, good
illumination is key, and they’re a bit
more flexible than a head torch.

Needle-nose pliers Clamps/vice


Grab small things
Steady on
You never realise just how much you need a slim pair of pliers until you really
Vital for a lot of wood- and metalwork – even some painting! A
need them and all you have are tweezers or heavy-duty pliers bigger than a
clamp can keep your projects sturdy so that drilling or cutting
Raspberry Pi. Of course, a good set of tweezers and regular-sized pliers are
won’t go awry, or make sure glue will dry firmly, or even make
great to have as well.
sure metal is aligned for welding. Got a miniature with a base? You
can lightly clamp it in one to keep it steady too.

Safety gear!
Every good maker knows they need safety equipment. Dust
masks, goggles, welding mask, sturdy gloves, and even a
good set of coveralls are a good idea as well. Before you do
any making, make sure you’re doing it as safely as possible.

10 Amazing: Maker tools magpi.cc 83


RESOURCES

Learn ARM assembly


with Raspberry Pi
Get down to the metal by learning ARM assembly language. By Lucy Hattersley

Introduction to ARM
assembly basics
Maria Assembly is a low-level metal programming as you are
AUTHOR

Markstedter, language sitting just next to likely to get. It’s cryptic in nature
Azeria Labs machine code. It’s also known and you’re unlikely to ever create
as ‘symbolic machine code’ an app, web service, or even
Price:
Free
because assembly statements are useful program in assembly.
typically translated directly into Instead, this is all about the
magpi.cc/
azeriaassembly their machine code counterparts. purity of learning.
Assembly is more readable Azeria Labs’ website has a
than entering pure hexadecimal starter course in ARM assembly
or binary code, and you get as a preparation for a much the ARM-based assembly
the benefit of comments and more detailed course on exploits. environment, data types,
symbolic jump locations. Even Created by Maria Markstedter registers, the instruction set, load
so, it’s not for the faint of heart. (@Fox0x01), the course is split and store, conditional executions,
Assembly is as close to bare- into seven parts, and covers stack, and functions.

Hello Assembler
These tutorials will help you get started
ARM ASSEMBLY you through writing and compiling
HELLO WORLD binary code on Raspberry Pi and
The classic doing introduction creating a ‘makefile’.
is covered in this online tutorial. magpi.cc/thinkingeek
Discover how to write and compile
‘Hello World’ in ARM assembly. PROGRAM IN ARM6 ASSEMBLY
magpi.cc/helloarm LANGUAGE ON A RASPBERRY PI
This great tutorial by Marty Kalin
ARM ASSEMBLER IN features a walkthrough of the
RASPBERRY PI hailstone function, first in C and then
Think in Geek’s tutorial is worth in ARM assembly.
bookmarking, but Chapter 1 takes magpi.cc/programarm6

84 magpi.cc Learn ARM assembly with Raspberry Pi


RESOURCES

ARM Assembly Language Also of


Fundamentals interest...
William Hohl, Hohl and Hinds’s book is a with an overview of computer Bookmark these
AUTHOR

Christopher widely regarded classic on architecture and history. resources


Hinds the subject of ARM assembly This is a complete
language. It’s also a good introduction to assembly ARM DEVELOPER
Price: introduction to computing in language over 18 chapters. There ARM has a wealth of
£85 / $110
a broader context, starting are detailed introductions to documentation available,
magpi.cc/
the instruction sets, assembler including programmers’
assemblyfundamentals
rules, loads, constants, logic and guides and reference
arithmetic. It works into more documentation. It can be a
detailed areas, such as floating little detailed for the beginner,
point instructions, exception but bookmark it for when you
handling, and memory mapped start asking questions.
peripherals. The final chapter developer.arm.com
shows you how to mix C and
assembly together. The sticking RASPBERRY PI SOC
point is the retail price of the DATASHEETS
book: quality costs. However, Raspberry Pi’s system-on-chip
you can pick up a digital edition datasheets are a good way to
for less, and we have found it on understand how Raspberry
sale at various outlets. Or, you Pi hardware implements with
can pick up a second-hand copy ARM SoC.
for roughly half the price. magpi.cc/socdatasheets

ARM REFERENCE CARD


This ARMv7 cheat sheet from

Introduction to Computer the ARM documentation


website is a great PDF to

Organization download and print out..


magpi.cc/armcheatsheet

Robert G Robert G Plantz’s book, one of the most detailed courses


AUTHOR

Plantz available for free on the Sonoma around, and the bonus that it is
State University website, is a written directly for Raspberry Pi
Price: solid overview of ARM assembly ensures you are likely to stay on
Free
language, interspersed with point. And getting it all for free
magpi.cc/
exercises to flex your mental is remarkable.
introcomporg
muscles. Each exercise has hints
and full solutions to help you
keep moving along.
The course covers data,
arithmetic, algebra, logic gates,
circuits, and a crash course in
CPU architecture before you
even start on ARM assembly. At
which point you get a thorough
grounding in compiling assembly
language and in an in-depth
analysis of every feature. This is

Learn ARM assembly with Raspberry Pi magpi.cc 85


INTERVIEW

Kevin Johnson
A man of many talents, Kevin helps to organise
official Raspberry Pi events and produce free resources

> Name Kevin Johnson > Occupation Coding club liaison


> Community role Event runner > URL @KJberrypi

I
f you’re part of the I help develop engagement in, I try to maintain our
community for Raspberry Pi strategies and also implement presence on social media, and a
in North America, and have them to keep our youth bunch of other things. I’m truly
been to one of the many events programs community (Code a wearer of many hats!”
the Raspberry Pi Foundation Club, CoderDojo, Coolest
North America (RPFNA) has Projects) in the USA fully What did you know about
organised, you’ve likely got immersed in all of the free Raspberry Pi before joining?
Kevin Johnson to thank. If resources we have. It involves Full transparency, I did not
you’ve ever met him, you’ll a lot of writing, which I love know much about Raspberry Pi
know he loves doing it, and we because my background is in prior to joining the Foundation
love him for it. creative writing, so I write because my introduction to tech
“So my official title is Club monthly newsletters and blogs, was mainly focused in Adobe
Kevin’s job is to make sure
this mission statement is
Programs Coordinator,” Kevin I design seasonal competitions Creative Suite programs like
made reality tells us. “What that means is for young people to participate Photoshop, Illustrator, Premier
Pro, etc. I was in a multimedia
academy (CMMA) in high
school, so I dabbled a little bit
with coding, but not enough
to know about the different
hardware out there. My
knowledge of Raspberry Pi came
when I discovered the job listing
and after reading through
the Code Club and CoderDojo
blogs, I was immediately
hooked. To see such a small
device have such a large impact
on people all over the world,
especially people from different
socioeconomic backgrounds,
I had to have the job. Fast-
forward two years and here I
am, still loving every minute!

86 magpi.cc Kevin Johnson


INTERVIEW

Kevin
 helps Code Clubs and Coolest Projects USA is a
CoderDojos around the country to huge event which Kevin not
make sure they’re up-to-date with only co-hosted, but he was
all the latest projects also one of the organisers

What are some of your other cultures, connecting with


favourite moments with the colleagues on a more personal
Raspberry Pi community? level is just amazing. It means
I had a blast co-hosting last the world to me to work for
year’s Coolest Projects USA a global organisation that
event that we held in Santa Ana, finds importance in bringing
CA at the Discovery Cube Orange its employees together not
County! I love the energy that just to work, but to also play
young people bring to any space and have fun.
and in that space the energy
was at an all-time high. Also, What are some of your
favourite moments with the

I had a blast Raspberry Pi community?


We’re really excited about this
co-hosting last year’s Coolest Projects event,
especially because this will be
year’s Coolest a global event where we will
hold one event for all of our
Projects USA participating regions. Here
in the USA, we were lucky
who hasn’t dreamed of being a to be able to have the event
talk show host?! If you can get in-person right before the
on a stage and keep a group of lockdowns started last year, so
You’ll see Kevin helping out at just about every
young people entertained and while we did get to experience event in the US, and some elsewhere in the world!
laughing, it’s a great sign that that, we did not get to
you’re doing alright in life. I experience the event online like
have to also mention the few everyone else. Collaborating Share your stories
trips our team here in the USA with the global team on the
have taken to Cambridge to visit upcoming Coolest Projects “As a storyteller, I love telling stories of my own, but I
also love sharing the stories of others, so please connect
the Foundation headquarters; Online has birthed some really
with me on Twitter at @KJberryPi or through email at
those have been some of awesome ideas that we can’t kevin.johnson@raspberrypi.org if you have a story that you’d
the greatest moments of my wait to share with everyone like to share! Community is everything to me, so it brings me
life! Being part of a global come early June when this so much joy to share the stories of our global community!”
community, learning about year’s showcase happens!

Kevin Johnson magpi.cc 87


THIS MONTH IN RASPBERRY PI

This Month in
Raspberry Pi
#MonthOfMaking
on Mondays 01
Amazing projects direct from our Twitter!

E
very Monday we ask the question: have you
made something with a Raspberry Pi over
the weekend? Every Monday, our followers
send us amazing photos and videos of the things
they’ve made, especially during #MonthOfMaking.
Here’s a selection of some of the awesome
things we got sent this month – and remember to
follow along at the hashtag #MagPiMonday!

01. 
Smart glasses are very cool, and we’re
looking forward to seeing what Arjit does
02. A nice little fitness tracker
03. 
A skill that many of us on the mag
would like to learn 02
04. Load up Xanadu on the fake vinyl 02
05. 
#MonthOfMaking is for more than just
Raspberry Pi stuff, as Alex shows here!
06. We’re not 100% sure this watering can
would work well with water
07. Ambient info/art is a cool idea. Ours
would frown depending how close to
deadline we are!
08. We like seeing Jitesh’s robot
develop further!
09. Easy, yet a cool thing to learn thanks to
a bit of clever Python code
10. A very fast robot indeed, and custom
as well!

88 magpi.cc #MonthOfMaking on Mondays


THIS MONTH IN RASPBERRY PI

03 05

04

06
08

07

09

10

#MonthOfMaking on Mondays magpi.cc 89


THIS MONTH IN RASPBERRY PI

Coolest
Projects online!
Submit your projects for the next Coolest Projects
online showcase before Monday 3 May!

L
ast year, Coolest Projects went online like
a lot of other events. It went so well it’s
happening again this year, and you can take
part! No matter where you live, as long as you’re 18
or under, you can apply! Here’s what CoderDojo has
to say about it…
“We welcome all projects, all experience levels,
and all kinds of projects, from the very first Scratch
animation to a robot with machine learning
capacity! The beauty of Coolest Projects is in the
diversity of what the young tech creators make.
“Young people can register projects in six
categories: Hardware, Scratch, Mobile Apps, Thinking about entering but not sure how?
Websites, Games, and Advanced Programming. There’s a fantastic video (magpi.cc/cpregistervid)
Projects need to be fully registered by Monday 3 May and even a worksheet (magpi.cc/cpworksheet) that
2021, but they don’t need to be finished then — at will get you ready for it.
Coolest Projects we celebrate works in progress just Once you’ve figured out a project, head over to
as much as finished creations!” magpi.cc/coolestprojects21 to register. Good luck!

90 magpi.cc Coolest Projects online!


THIS MONTH IN RASPBERRY PI

Crowdfund this! Raspberry Pi projects you


can crowdfund this month

CROWD
A PROFJUNDING
If you
ECT?
’ve
launc
Raspb hed a
erry P
projec i-relate
t, let u d
CarPlay and Android Auto magp
i@ raspb
s know
errypi.
!
com
on Raspberry Pi 128 Opto-isolated Inputs
If you have a car that hooks up to your phone for better
plus RS485
navigation and a car-friendly UI, you’ll know how good it
can be. This Kickstarter is to help develop further some If you need to read a lot of digital inputs on a Raspberry
software called OpenAuto Pro so that it can plug into Pi, and the GPIO pins just aren’t enough, this big HAT-
the Apple CarPlay and Android Auto API so you use it on style add-on might be the solution. It has already hit
Raspberry Pi. A very interesting prospect. its funding goal, so is definitely worth a look.

kck.st/3k6KDVa kck.st/3aA2T6j

Best of the rest!


Other amazing things from the community

AUTOMATIC WATER DISPENSER RASPBERRY PI 3D SCAN ANALOGUE BANDWIDTH GAUGE


We’ve seen computer vision used before to A 3D model of a Raspberry Pi that was An old DC voltmeter has been upcycled with a
grade cucumbers, but to make sure a water created by a 3D scanner powered by a Raspberry Pi Zero W to show the bandwidth in
bottle is safely filled with the right amount of Raspberry Pi. This is an amazing result, user jllauser’s home network. It’s very fancy.
water is excellent. We like the little light display and we’re glad to see 3D scanners have
that speeds up as the bottle is nearly full. improved so much over the last few years.

magpi.cc/awdispenser magpi.cc/diy3dscan magpi.cc/bwgauge

Best of the rest! magpi.cc 91


YOUR LETTERS

Your
Letters
Rafa used an old notebook as a screen for a desktop Raspberry Pi setup
Pi Day
I donated to the Raspberry Pi Foundation for Pi Day
and I learned later that my name might end up in the
magazine. Which issue should I be looking out for? I’ve
read your magazine for years and would love seeing my
name in it!
Sylvia via Facebook

Due to the timing of how The MagPi is produced,


unfortunately we couldn’t make it happen in this issue.
However, we’ll be making sure it gets printed in issue 105
– check out page 97 to see when it comes out.

#MonthOfMaking email
I emailed you details and photos of my #MonthOfMaking project,
but just read in the magazine that they should be posted on
Instagram and Twitter. I don’t have either of those. Will my
project not be counted?
Rafa via email
It still counts! You still made something, and we will put it in the
magazine when we do a full #MonthOfMaking roundup next issue.
We think it’s great to post it on social media so other folks might be
inspired to make something.
If you have a project you’d like to share with us, you can always
The Raspberry Pi Foundation is a non-profit charity, so every little helps email us any time of year.

92 magpi.cc Your Letters


YOUR LETTERS

Y
 ou can get PDFs of all our issues from magpi.cc/issues
GitHub repos
I was looking at your GitHub and noticed not all the
code is available in repositories, some of it is in a zip
file. Why not just have the code in the issue repo?

Daniel via GitHub

There are a couple of different reasons for why this is:


when we started putting code on GitHub, it only included
the code that would only live on that repository. All the
repos are linked from The MagPi article they appear in, so
Mike Cook’s work appears on his Pi Bakery GitHub.
Someone asked us if we could provide all of this code
for the mag as a zip as well, so we started doing that and
uploading it with any other code that needed a repo.
We have now started to provide a link to the other
repositories in each issue’s repo now. As we figured
people would be going from the article to the repo, it
didn’t occur to us to put a link there. Now they are!

Out of stock books


I was looking over the list of books you’ve released and noticed
that some that I wanted were out of stock. When will they return to
the store?
Ibs via email

Some books take a little longer to restock than others, although some
may not see a print run again. However, all the books we’ve released
are available as a free PDF which you can print (or get printed)
yourself if you need a physical copy.
There are probably some knocking around on eBay as well.
Need a hub for all the code in an issue?
Our GitHub will have it

Contact us!
> Twitter @TheMagPi
> Facebook magpi.cc/facebook
> Email magpi@raspberrypi.com
> Online raspberrypi.org/forums

Your Letters magpi.cc 93


SUBSCRIBE AND

SAVEUP
TO

35%
on the cover price

ISSUE #41

OUT NOW
hsmag.cc
COMPETITION

WIN ONE OF SIX


SMARTIPI TOUCH
PRO CASES!
IN ASSOCIATION
WITH
We reviewed the SmartiPi Touch Pro in
the last issue of The MagPi and gave it a
phenomenal 9/10. If you’re still not sure if
you want one, maybe we can tempt you
with a competition to win your very own?

Head here to enter: magpi.cc/win Learn more: magpi.cc/smartipi

Terms & Conditions


Competition opens on 24 March 2021 and closes on 29 April 2021. Prize is offered to participants worldwide aged 13 or over, except employees of the Raspberry Pi Foundation, the
prize supplier, their families, or friends. Winners will be notified by email no more than 30 days after the competition closes. By entering the competition, the winner consents to any
publicity generated from the competition, in print and online. Participants agree to receive occasional newsletters from The MagPi magazine. We don’t like spam: participants’ details
will remain strictly confidential and won’t be shared with third parties. Prizes are non-negotiable and no cash alternative will be offered. Winners will be contacted by email to arrange
delivery. Any winners who have not responded 60 days after the initial email is sent will have their prize revoked. This promotion is in no way sponsored, endorsed or administered by,
or associated with, Instagram or Facebook.

Competition magpi.cc 95
Join us as we lift the lid
on video games

Visit wfmag.cc to learn more


NEXT MONTH EDITORIAL
Editor
Lucy Hattersley
lucy@raspberrypi.com

Features Editor
Rob Zwetsloot
rob@raspberrypi.com

Sub Editors
Phil King and Nicola King

ADVERTISING
Charlotte Milligan

RASPBERRY PI
charlotte.milligan@raspberrypi.com
+44 (0)7725 368887

DESIGN

TIPS & TRICKS


criticalmedia.co.uk

Head of Design
Lee Allen

Designers
Lucy Cowan, Sam Ribbits

Illustrator
Sam Alder

ESSENTIAL KNOW-HOW CONTRIBUTORS


FOR RASPBERRY PI FANS Mike Cook, David Crookes, PJ
Evans, Gareth Halfacree, Martin
O’Hanlon, Rosemary Hattersley,
Nicola King, KG Orphanides,
Nik Rawlinson, Laura Sach,
Mark Vanstone

PUBLISHING
Publishing Director
Russell Barnes
russell@raspberrypi.com

Director of Communications
Liz Upton

CEO
Eben Upton

DISTRIBUTION
Seymour Distribution Ltd
2 East Poultry Ave,
London EC1A 9PT
+44 (0)207 429 4000

SUBSCRIPTIONS
Unit 6 The Enterprise Centre
Kelvin Lane, Manor Royal,
Crawley, West Sussex, RH10 9PE
+44 (0)1293 312193
magpi.cc/subscribe
magpi@subscriptionhelpline.co.uk

THE MAGPI #105


ON SALE 29 APRIL This magazine is printed on paper sourced
from sustainable forests and the printer
operates an environmental management

Plus!
system which has been assessed as
conforming to ISO 14001.

DON’T MISS OUT! The MagPi magazine is published by


Raspberry Pi (Trading) Ltd., Maurice Wilkes
Star Wars
magpi.cc/subscribe
Building, St. John’s Innovation Park, Cowley

arcade cabinet
Road, Cambridge, CB4 0DS. The publisher,
editor, and contributors accept no
responsibility in respect of any omissions

Portable Raspberry @TheMagPi


or errors relating to goods, products, or
services referred to or advertised in the

Pi projects magazine. Except where otherwise noted,


content in this magazine is licensed under
fb.com/MagPiMagazine a Creative Commons Attribution-
Grove Starter Kit NonCommercial-ShareAlike

for Pico
3.0 Unported
magpi@raspberrypi.com (CC BY-NC-SA 3.0).
ISSN: 2051-9982.
THE FINAL WORD

Running up that hill


How patience can be its own reward. By Lucy Hattersley

C
omputers are truly wonderful it has been tough going. It requires a know what’s going on when I switch on
inventions. The miracle of the clear head and a steady concentration. my Raspberry Pi. (Always handy when
modern age, as some would I’ve also learned a new level of you do that for a living.)
say. But it’s fair to say they can also meaning to the word ‘perseverance’. I’ve been using a Raspberry Pi 400
be opaque. While it’s easy to look at This isn’t the first time I’ve tried to work through the course materials,
a clock or a steam train and see the to understand low-level computing. and the experience is surprisingly
moving parts, the ‘micro’ part of a I first got the coding bug when I was similar to the ZX Spectrum of my
microcomputer means you have to use very young: introduced to a ZX-81 in youth – although the keyboard is
a very powerful microscope – or, more pre-school and then working my way infinitely better, as is the operating
likely, your imagination – to see the
moving parts.
There are billions of bits shifting
L earning computer architecture is a task
thousands of times per second. The worthy of Sisyphus, only you are carrying a
act of teaching a rock to think is
rather overwhelming for our small rock that frequently crashes
simian brains.
Learning computer architecture is a through the BBC Micro at school and system. I’ve also got a new Raspberry
task worthy of Sisyphus, only you are a ZX Spectrum (then Commodore 64) Pi Pico hooked up to the back, just like
carrying a rock that frequently crashes at home. an expansion card.
and stalls as you carry it up to the For all the coding tricks I’ve learned Hopefully, I’ll carry this Nand2Tetris
mountain of understanding. Advances over the years, it’s always saddened rock to the top of the hill. And I
in artificial intelligence ensure that it’ll me that I didn’t quite get the hang of suspect I will roll it down at the
be soon giving you lip on the way up. Z80 machine code when I was young. end and reveal something new to
For some reason, I just couldn’t get learn. There’s always a shiny new
Carry on coding any of my Z80 code to work and technological concept waiting to be
Let’s look on the bright side. One way eventually I moved on. discovered. Onwards and upwards!
in which the last few months have Lately, I’ve been working my way
been positive for me is regarding through the Nand2Tetris course
Lucy Hattersley
AUTHOR

concentration. With everything (nand2tetris.org), partly as an attempt


closed, I’ve been able to sit down and to get back to those binary and machine
Lucy is editor of The MagPi and recently
focus on a few things. code roots so that I can at least get my learned how to burst a water pipe with a
Learning about low-level head around Z80 coding as a present to drill. Look carefully, kids. Look, then drill. In
computing, right down at the my younger self. Also, to get a better that order. Every day is a school day!

mechanical level is one of them. And understanding of ARM architecture so I magpi.cc

98 magpi.cc Running up that hill


Robotics & rapid prototyping
with your Raspberry Pi
Power your projects with computer vision and applied AI
pi-top [4] Robotics Kit comes with electronic components such as a wide-angle
camera, servos and motors, all of which plug and play with the pi-top [4]
Complete or pi-top [4] DIY Edition†.
pi-top Robotics Kit with Expansion Plate
187.90 / $199.90

Gesture Obstacle Autonomous


Control Avoidance Driving

Object Emotion Line


Recognition Mapping Recognition

Integrated
with Microsoft

Face
Interaction
Tracking

pi-top.com/MagPi
Raspberry Pi is a trademark of the Raspberry Pi Foundation. †pi-top [4] and Robotics Kit with Expansion Plate sold separately. © CEED Ltd. 2021

Raspberry Pi made simple, robust and modular.

You might also like