YOUR OFFICIAL RASPBERRY PI MAGAZINE Issue 39 • Nov 2015 Win! 10 RasPi Model A+s Thanks to MODMYPI.COM

100 pages of hacking & making Issue 39 November 2015 raspberrypi.org/magpi

TIME-LAPSE INTRODUCING GPIO ZERO PHOTOGRAPHY Controlling your Make the most of the electronics has Pi Camera Module never been easier

ASTRO PI 3D PRINTED UPDATE GAME BOY T-minus one Play your retro month and games in style counting! 30:00 MINUTE PROJECTS PIXEL ART BUILD A WITH THE Amazing ideas made in moments PINGOMETER SENSE HAT How to visualise your Amazing old-school internet connection graphics made easy

Also inside: > MAKE GAMES WITH RASPBERRY PI > MASTER PIMORONI’S SKYWRITER HAT Everything you > CREATE AMAZING MUSIC WITH SONIC PI need to know to > REVIEWED: SCRATCH, RASPBIAN & MORE get started today

THE ONLY MAGAZINE WRITTEN BY THE COMMUNITY, FOR THE COMMUNITY

Welcom

PROUD WELCOME TO SUPPORTERS OF: THE OFFICIAL PI MAGAZINE! ime is often our enemy. There never seems to be enough of it. I’m often frustrated T that, after a long day at work, I rarely get more than an hour to pursue my hobbies before it’s time to climb the wooden stairs to Bedfordshire. Since I’m in charge around here, it’s only fair that you indulge me this month’s cover feature about Raspberry Pi projects I can complete in 0 minutes from start to finish. It doesn’t matter if you’re a beginner, a seasoned pro, or you’re simply looking for a project that holds the attention of the most demanding ospring we’ve got something for you. Get started today with our feature on page 16 – please let us know if you’ve got a 30-minute project of your own, too. By the way, do you have an Android or Apple smartphone or tablet? If you do, you might be interested to know that you can now download all THIS MONTH: 30 original issues of The MagPi in our app, as well as get the chance to subscribe to automagically 16 MAKE QUICK-FIRE PI PROJECTS receive every new issue for as little as £20 for a Got half an hour spare this weekend? Here’s an idea… year. Just search for us in your store of choice or find out more on page 0. nce you’ve downloaded 6 RASPBIAN GETS RELOADED Learn more on page 6 and read our verdict on page 78 the app, you’ll also find the first in a new range of The MagPi’s Essential e-book range: learn to love the GPIO HACKING IS NOW CHILD’S PLAY command line with the help of our resident Bash 12 We speak to Ben Nuttall about GPIO Zero, a new way to hack epert, Richard medley. ou can find out more about his e-book on page . 42 MASTER THE PI TOUCHSCREEN Russell Barnes Our eight-page special feature shows you how

FIND US ONLINE raspberrypi.org/magpi GET IN TOUCH [email protected]

EDITORIAL DESIGN PUBLISHING Managing Editor: Russell Barnes Critical Media: criticalmedia.co.uk For advertising & licensing: [email protected] +44 (0)7904 766523 Head of Design: Dougal Matthews [email protected] +44 (0)7904 766523 Features Editor: Rob Zwetsloot Designers: Lee Allen, Mike Kay Publisher: Liz Upton Technical Editor: David Whale Illustrator: Sam Alder CEO: Eben Upton Sub Editors: Laura Clay, Phil King, Lorna Lynch DISTRIBUTION SUBSCRIPTIONS CONTRIBUTORS Seymour Distribution Ltd Select Publisher Services Ltd Sam Aaron, Mike Cook, Gareth Halfacree, 2 East Poultry Ave PO Box 6337 Lucy Hattersley, Richard Hayler, Jasper Hayler- London Bournemouth Goodall, Phil King, Simon Monk, Matt Richardson, EC1A 9PT | +44 (0)207 429 4000 BH1 9EH | +44 (0)1202 586 848 James Singleton, Richard Smedley & Sean Tracey.

This magazine is printed on paper sourced from The MagPi magazine is published by Raspberry Pi (Trading) Ltd., Mount Pleasant House, Cambridge, CB3 0RN. The sustainable forests and the printer operates an publisher, editor and contributors accept no responsibility in respect of any omissions or errors relating to goods, products environmental management system which has or services referred to or advertised in the magazine. Except where otherwise noted, content in this magazine is licensed been assessed as conforming to ISO 14001. under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported (CC BY-NC-SA 3.0). ISSN: 2051-9982. raspberrypi.org/magpi NovemberMarch 2015 3

Contentraspberrypi.org/magpi Issue 39 November 2015 Featur 30-MINUTE PROJECTS LUCY HATTERSLEY A technology writer and accomplished magazine editor, Lucy is well versed in all sorts of areas in the tech sector. about.me/lucyhattersley TUTORIALS COVER FEATURE @lucyhattersley > BUILD A PINGOMETER 50 Join Dr Simon Monk for more Everyday Engineering fun CONNECT YOUR PI TO YOUR SMARTPHONE AND WATCH > MAKE MAGIC PRESENTATIONS 54 Add Pushbullet to your Pi and get pings right on your wrist Use Pimoroni’s Skywriter to baffle & amaze your audience!

INFO CARD project overview > TIME-LAPSE PHOTOGRAPHY 56 ou can set up Pushbullet on your Make incredible videos using cleverly captured pictures iculty phone and smartwatch, and use it Medium to get your alerts from your Pi. The full Pushbullet PI reuires Type coding in Ruby, but we found it a Programming lot easier to build a script in Uni > MIKE’S PI BAKERY: AMAZE 58 that sends the alert, and then Requirements use the module in your Python How the Pi can help you navigate a tricky maze iPhone or Android phone programs to run the script. (optional Apple Watch The Pushbullet PI works by or Google Watch), using the curl command, along Pushbullet account with your ccess Token, to call the > Pushbullet service. our ccess PIXEL ART WITH THE SENSE HAT 64 Token is a uniue number that How to put stunning 8×8 retro imagery up in lights One neat trick we links the Pushbullet service with recently discovered Pushbullet apps installed on your is how to hook up a devices. ou can learn more about Raspberry Pi to an Apple the PI at docs.pushbullet.com, but Watch. You do this using a we’ll walk you through it and16 show > SONIC PI: CREATE AMAZING BASS 66 service called Pushbullet, which you how easy it is. normally syncs notifications from Dr Sam Aaron continues his series. This month: the TB-303 your desktop computer, but handily Installing Pushbullet comes with an API for the Raspberry Pi. tart by installing the free It’s simple to set up and comes in useful for Pushbullet app on your ndroid all kinds of projects. phone or iPhone. hen you first > launch Pushbullet, you’ll need to GAMES WITH PYTHON: PART 9 68 30-MINUTE PROJECTSHook up a Pushbullet is an app for the iPhone in their programs. This is great Raspberry Pi to sign up with a oogle or acebook and ndroid that enables you to because it turns out you can easily your Apple Watch account enter your email and In his penultimate piece, Sean starts making a space shooter At a loose end? Grab your toolkit and give one ofto theseget alerts from quick-fire projects a try send notifications from your P create a script that sends you an your programs password for that and tap ign In. directly on or ac to your mobile device. It’s alert with a custom message. nd your wrist That’s it for your phone and pple mainly designed so people can sync your Pi can easily call the script. atch everything else needs to be alerts from their main computer to hy we really love this is because done on the Raspberry Pi. an iPhone or ndroid phone, and Pushbullet has support for the new get notifications on their phone smartwatches, such as the pple The Access Token from their computer. atch and oogle atch. ith a bit ooking your Pi up to the app you’ve IN THE NEWS A BRIEFowever, there is an HISTORYPI for of tinkering, you can get alerts sent ust installed reuires an ccess Pushbullet that developers can use from your Raspberry Pi directly to Token. This is a long alphanumerical OFto include ASTRO support for the service PI your wrist. ow cool is that key that is uniue to your account. 20 November 2015 raspberrypi.org/magpi12

6 016-027_MPi#39_30MinsProjects_v2-PK-LC-RB-LA.indd 20 22/10/2015 09:56

INTRODUCING GPIO ZERO RASPBIAN UPGRADES 10 Ben Nuttall tells us all about his TO DEBIAN 8 JESSIE Find out what’s been happening with new easy-to-use package for Raspberry Pi’s own Simon Long gives us the the incredible space mission that’ll see talking to the GPIO pins on your lowdown on the latest tweaks and changes two Pis taken to the ISS this December Raspberry Pi

4 November 2015 raspberrypi.org/magpi Content

THE BIG FEATURE

91

A STRONGER FOUNDATION

Get started with the official touchscreen for Raspberry Pi with our eight-page special feature 42 We speak to the new CEO of The Raspberry Pi 14 Foundation about plans for 2016 and beyond

YOUR PROJECTS REGULARS > NEWS 6 Keep up to date with the biggest stories from the world of Pi > TECHNICAL FAQS 76 Got a problem? Our experts answer all your questions > BOOK REVIEWS 86 The latest computer books reviewed and rated > THE FINAL WORD 96 30 Matt Richardson welcomes the Pi going mainstream

MINI MAC PI COMMUNITY Adafruit’s Ruiz brothers do it again, this time bringing back the 128kB glory days > EVENTS 88 Mason Jar 32 Find a community gathering near you in the coming weeks Matt Reed shows us how to preserve digital > SKYCADEMY UPDATE 92 memories in style, with this amazing project Schoolkids launch a Pi balloon up into the stratosphere > LETTERS 94 RaftBerry 34 Have your say on the magazine and the community A Raspberry Pi-powered raft, perfect for a picnic on the lake next summer… REVIEWS Super GameGirl 36 > RASPBIAN 78 The latest image brings some new features to the fore It’s smaller than the original Game Boy and plays just about any classic game you can mention > SCRATCH 80 Scratch is evolving – find out what we think of the new build CNC Machine 38 How do you combine a passion for beautiful > MEDIA PI PLUS 82 woodworking with an interest in electronics? We check out a new multimedia case and remote for the Raspberry Pi

raspberrypi.org/magpi November 2015 5 New FEATURE RASPBIAN UPGRADES TO JESSIE Move from penguin to cowgirl as Raspbian sees some upgrades under the hood and a few more to the interface

or over three years now, 7.0 ‘Wheezy’ as its base; at the Raspberry Pis around the time, it was the testing branch of F world have been running Debian, getting rolling updates as Raspbian, the official operating they came and allowing for uick system for the Pi. tarting o updates and upgrades to fi bugs merely as a version of Debian and such. ince then, not only has that was optimised for the Debian 7.0 gone stable, the two- Pi, it’s since grown to include year development cycle for this more and more Pi software, Linux distribution has been and along with an interface overhaul gone, and heey was replaced by Above The new config menu is much nicer and easier to use last year and other smaller the stable version of Debian 8.0, improvements unique to the or Jessie, earlier this year. JESSIE SUDOES WHAT Raspberry Pi. What made Raspbian This brings us to now essie WHEEZY SUDON’T so special was the way it worked is the newer, shinier version of more naturally on the R chip Debian, with updates to a lot of One of the changes that will have a small yet that powers the Raspberry Pi software along with a few new significant eect on i users is the ability to access known as hard oat), rather than pieces. The Pi community has the pins without having to use sudo on some other operating systems been asking for essie for a while, ython or other scripts. pening a normal that tried to get it working with and at the very end of September from the menus and trying to run a script that software or soft oat). asically, the Raspberry Pi Foundation accesses them will automatically do so this now it’s easier to work with the delivered a new Raspbian works from cratch as well, so even novices can hardware naturally than to try based on Debian 8.0. do some physical proects. ts also well timed, and emulate working with it Hopefully, by the time you’re now that ero is out check out our news everything runs a lot smoother on reading this, you’ve got it installed feature on that page 3 for more information hard oat. and set up on your Raspberry Pi. on why it makes easier to use. For the last three years, s you may have noticed, there’s a Raspbian has been using Debian bit more to Jessie than just a name

6 November 2015 raspberrypi.org/magpi RASPBIAN JESSIE New

change and a number increment. as a computer in its own right a ery minor, but e spoke to imon ong, the computer that could be used as a nonetheless a great engineer responsible for user low-budget replacement to those addition, the panel now has an eect menu interface design at Raspberry Pi, who need it, whether it’s low- to make sure storage to talk about all the changes he’s income communities or poorer is properly unmounted from aspbian before been working on. countries. is ob is to work you remove it from its physical slot There’s a bit more to Jessie The ibrece suite is now installed by default, and than just a name change works ust fine on even the older aspberry i models. This version has been around and a number increment for a bit, but has seen some upgrades for the essie release

“I wanted Raspbian to be on how the user eperience on something I’d want to use,” Raspbian is the best it can be, so The raspiconfig settings menu now Simon tells us, explaining his that the education side’s ob can has its own dedicated graphical tool reasoning behind the direction be done much better. that performs the same task. ts much neater, cleaner, and easier to of Raspbian over the past year. This leads onto the first use than before I spent a year hacking about somewhat controversial change to at the desktop, which before I Raspbian the switch to desktop started had very little attention by default. oot to the command The program menu has some minor paid to it.” line makes your computer look aesthetic tweaks but works the same imon and ben Upton, co- like a machine from , way. The ther category is only hidden now, rather than fully removed, and will creator of the Raspberry Pi, Simon explains, telling us appear if a program installs to it wanted the Pi to also function further that this was a change raspberrypi.org/magpi November 2015 7 New FEATURE

OFFICE PI ibrece is in aspbian essie by default but why now

ibrece has been available for imon has been working on bundling The whole thing came together in a while for aspbian. ome work the i version of ibrece with a pre time so the entire suite was bundled has been done on accelerating this existing plugin called ibrece T, in essie. rite documents with for the aspberry i and a few other which allows ibrece to emulate riter, create and edit spreadsheets places, although that wasnt actually the look of a T desktop, the kind in alc, and put on presentations with done here. That was done by others of desktop aspbian uses. t needed mpress. t all works with icrosoft in the past. This is a ioptimised some updates made to it first, which ce files as well, so theres no need version, though. imon worked on. to do any conversions.

the educational team were keen one, but there’s been a big change in desktop environment was written on. To them, it shows kids that the the technology that runs it. in GTK+ 2. Things slowly seem Raspberry Pi is a computer like any “The biggest Jessie-related to be moving to GTK+ 3, so I’ve other, and you can do the same change that I’ve made is if you look customised our theme enough that Below ot much has changed with computing tasks with it as you at a window, aesthetics appear a it falls in line with GTK+ 3, and what the browser that would with your home desktop. little dierent, imon shows us. I’ve done is made the GTK+ 2 theme you can tell, but the tech behind it has The desktop itself doesn’t look a “What’s happened is all of the match very closely onto the default been updated whole lot dierent to the previous desktop stu the panel, the TK theme. The appearance is tending more towards the newer technology and theme. Just browse through the desktop and you’ll notice little changes in the colours, spacing and fonts nothing maor, ust changes to make it work with GTK+ 3 and give Raspbian a slightly better visual aesthetic overall. few new programs come along with that change. irst o, there’s the now-traditional U storage device manager on the top panel from here you can safely eect U sticks, ust like you can on a ac or Windows PC. “That was an plug-in that I hacked about a bit to work properly, imon mentions. The original raspi-config tool the blue screen you got when you first turned on Raspbian has now been given its own graphical utility. “In theory, most people shouldn’t need to change a huge amount of the stu that’s in here, imon

8 November 2015 raspberrypi.org/magpi RASPBIAN JESSIE New

Above imon is proud that the keyboard settings are easier to use, and treat the user as if they know what theyre doing

Left The themes have been hacked around to work on both T and T 3

NEW IDES

eplains, but he likes that it’s now version of piphany on here works in a reasonably nice, tabbed thing’ eactly the same as before same so that if you do have to access it, UI, same look and feel, and should you don’t always have to Google the be the same from the user’s point right terminal command to get into of view.” it. verclocking options now know ther little changes have been what kind of Raspberry Pi you have, made here and there. Pressing ALT keyboard options are much smarter will bring up the button accelerators The appearance is tending aspberry i has always been the home of ython more towards the newer and ython learning. hile versions and 3 of the language are remaining in essie with some technology and theme tweaked names to make them easier to locate, aspbian now contains a couple of brand new ava s. These new s, lue and reenfoot, are and better organised, and auto-login the little lines below items in the products of a collaboration between the niversity can be turned on and o for the toolbar that signify which key to of ent and racle. They oer a dierent way to desktop and I individually. h, then press to access them without create and organise classes that allows for a more and if you do really miss booting to the mouse. The thers’ category visual representation of how youre building code, CLI, that’s still an option as well. in the program menu also returns, and is a feasible next step for budding coders to The Epiphany web browser has although it’s hidden until software expand beyond ython. seen a minor update, not that you that uses it is installed. Pygame may notice. The new version looks Zero, the Python module, is also eactly like the old version for the now included by default. the way a lot of it looks and feels. time being. Epiphany is moving Jessie’s upgrade, then, is all about Raspbian Jessie is now available between ebKit and ebKit usability and aesthetics a newer to download from the Raspberry Pi and we’re about halfway between base with all the website, in , or on its own via that. This is still ebKit -based advantages that brings, updated raspberrypi.org/downloads. the ebKit bit is still a work in software across the board some nd don’t forget to look in the progress as we didn’t have time with a special Raspberry Pi touch to elp category of oftware enu to to get it working on essie. o the make it etra special), and tweaks to see a link to our lovely new website! raspberrypi.org/magpi November 2015 9 New FEATURE

A BRIEF HISTORYOF ASTRO PI The Astro Pis have been handed over to astronaut Tim Peake in preparation for the launch. How did we get here?

n 15 December 2015, British Your code, in space! “Competition entries will O astronaut Tim Peake will In ecember 04, the Raspberry be udged on their creativity, blast o to the International Pi Foundation joined forces with originality, practicality, and Space Station, orbiting the Earth the European Space Agency (ESA), usefulness… get those intergalactic at an altitude of 400km, where he UK Space Agency and UK Space hats on, and let’s get coding! will spend five months performing Trade Association to launch the eperiments. rriving there on Astro Pi competition: a chance Hardware preparation an earlier ight due to cargo to send ritish schoolkids’ code It’s all well and good for the UK’s overbooking on Tim’s will be up to the International pace talented young programmers two special Raspberry Pis: known Station to perform experiments to provide some great pieces of as stro Pis, they are fitted with using the Raspberry Pi. This was code, but vital to stro Pi was the Sense HAT sensor expansion in conjunction with Principia, a making it space certified. ithout board and encased in a special mission to send the first ritish authorisation from the ESA, it spaceworthy case. efore they’ve astronaut up to the I to spend wouldn’t be allowed in space and even left the ground, however, the five months doing ero- and the whole eercise would have

Below An Astro Pi stro Pis have had an incredible micro-gravity eperiments. The been a waste of time. The process in its metal case journey to get where they are now. competition period lasted until for this began in September 2014, July 2015, and was introduced by a long before the competition was video from Tim even announced. The competition that gives you verything had to be taken into the chance to devise and code your account. hat was the safest way own program to run on a special to power the Raspberry Pi? Could version of a Raspberry Pi called an permission be granted for the stro Pi. That’s right your code, Pi to run o a laptop in certain in space!” situations as the battery for There were five themes that the the real-time clock RT) able entrants were to keep in mind: to survive in space There were measurements using the SENSE special coatings needed for circuit at’s environmental sensors boards, vibration tests, tests for (temperature, air pressure, and any noious fumes, and even a humidity) use of the movement special fondling of the case to and motion sensors; satellite make sure it wasn’t too sharp. The imaging and remote sensing; data particulars of each of these and fusion (i.e. using sensor input to more tests to Astro Pi are included create a conditional response); in a lengthy post on the Raspberry and space radiation sensing. Pi blog: bit.ly/1jCyeYD.

10 November 2015 raspberrypi.org/magpi A BRIEF HISTORY OF ASTRO PI New Image: ESA

Top left Tim Peake is the first ritish It’s all well and good for the UK’s talented young astronaut in 20 years, so it only makes sense he uses a Raspberry programmers to provide some great pieces of code, Pi in some of his experiments

but vital to Astro Pi was making it space certified Above Introducing the competition was a cartoon All the testing and poking and Reaction ames’ is designed to next step is to be loaded onto the version of Tim refining paid o, though, as on test an astronaut’s reactions and ygnus spacecraft that’ll carry them Left ‘Visualisations ctober 0, over a year since alertness after extended periods on up to the I on ecember. in Minecraft’ is one of the winning the process began, the Astro Pi was board the I, using little games. or now, the stro Pi’s trip is entries for the approved for space ight. Radiation’ uses the amera odule complete. From inception to sitting Astro Pi contest as a radiation detector. ‘Sweaty in a spaceship, it’s been a long Competition results stronaut’ will determine whether road, although maybe not as long hortly after the final deadline for someone entering the I module as the several-hundred-kilometre competition entries passed at the will create enough of a rise in voyage it will have to make up to beginning of uly, the final four humidity to be detected. nd finally, space. Its five-month mission to winners from the secondary school inecraft’ will visualise movement perform new eperiments and find category were announced, joining and environment readings out whether astronauts are really the three winning primary school in a Minecraft world. sweaty. To go where no Pi has gone entries. These seven programs All of these experiments will be before. ook out for The MagPi in each have a codename and do very run between the two Astro Pis that anuary for our first report on the Below An Astro Pi unit is tested in an dierent things. are sent up to the I. intrepid Pi’s adventures throughout ISS simulator here lags’ uses telemetry data on the cosmos and low-arth orbit. on Earth whatever country the I is currently The handover orbiting over to display that nation’s The final step was laser-etching the ag on the ense T’s display. cases to have a few snay logos, as ission ontrol’ constantly checks well as plenty of labels so that each and displays the environmental port and sensor could be explained data on the I, and will sound an without needing prior knowledge alarm if certain thresholds are met. of how the Pi works. Once this was Trees’ will take special IR images complete, the stro Pis were sent o of the arth as the I orbits, to to Italy at the end of eptember for ascertain the health of trees once their final tests, which resulted in the pictures are returned to Earth. the certificate being awarded. Their raspberrypi.org/magpi November 2015 11 New FEATURE GPIO ZERO NOW PUBLIC The GPIO Zero beta was made public in early October, but what is it and why should you be paying attention to it?

Above Ben Nuttall ne of the big new things “Looking at ‘Hello World’ in Java, is an education Proof of concept developer O that’s coming out this it’s about five, si, seven lines long What Ben has ended up creating advocate at month is GPIO Zero, a and there’s lots of stu that you is a new set of Python classes Raspberry Pi, and the creator new way to interact with the GPIO wouldn’t really explain; you just that automatically do the legwork of GPIO Zero ports on your Raspberry Pi. At the have to write it. That’s something in preparing the software and time of writing it’s now in public you don’t get with the ‘Hello hardware to use an electronic beta, but what exactly is GPIO World’ of Python, but you do if component attached to the Pi. Zero? We spoke to Ben Nuttall, you’re trying to make an ash. In the LED example, you simply the man behind it. Rather than import GPIO and set import the LED class from “GPIO Zero provides a simple up and set mode and all this sort gpiozero, create an LED object, interface to everyday GPIO of thing, it should just be that you providing the GPIO pin, and tell components,” Ben tells us. have an LED and you turn it on.” it to turn on, like so: GPIO ZERO CHEAT SHEET

Here’s a rundown of the interfaces you MOTION SENSOR BUZZER can see in GPIO Zero, and how to use PIR motion sensors detect heat A buzzer component makes a beep them. For a full list, including add-on dierences, so that it can tell when when triggered. Like LED, you can use boards, visit bit.ly/1NOAFEq a relatively warm body (e.g. you and on(), off(), toggle(), and blink(). your cat, but not Robert Redford in Can you think of a better name for INPUTS Sneakers) is close by. It can be used with blinking a buzzer? Let Ben know! two functions: wait_for_motion(), BUTTON which halts the program until motion is RGBLED To be used with a push button in a circuit. detected, or wait_for_no_motion() A bit more advanced than the standard The button can be configured to a pull for the opposite eect. LED interface, it requires three pin down circuit, but pull up is the default. numbers for red, green, and blue parts Use wait_for_press() to wait until the TEMPERATURE SENSOR of the LED. As well as using the standard button is pressed to continue with some Use this function to return the on(), off(), toggle() and blink(), code, or wait_for_release() to run temperature detected by a temperature you can set each to a specific code when the button is let go. There’s sensor or thermistor as a value in brightness to create a unique colour. also when_pressed, which causes a degrees Celsius. GPIO Zero action or custom function to LIGHT SENSOR run whenever the button is pressed. OUTPUTS Similar to the motion sensor, the light sensor uses a light- MOTOR LED dependent resistor , so changes Depending on the motor, you may This one you know: it controls LEDs in the amount of light detected instead make use of a motor board’s wired up to the GPIO pins. As well as result in altered resistance. The libraries, but the tech is available in on() and off(), you can toggle it on or methods wait_for_light() and GPIO Zero. It makes use of forward(), o with toggle(), and have it ash on wait_for_dark() halt the program backward(), and stop(). and o with blink(). in the same way the motion sensor does.

12 November 2015 raspberrypi.org/magpi GPIO ZERO NOW PUBLIC New

Above The documentation is currently being filled with diagrams to easily explain how to wire up components to the Raspberry Pi

from gpiozero import LED led = LED(2) led.on() in Python – but I was saying imagine ust for the everyday stu. I added in Above For comprehensive Note that the bracketed ‘2’ you had a board with three LEDs on some boards, whatever I had lying documentation in this case relates to the GPIO it and, for instance, you might create around, like Fish Dish which I’m for all interfaces, including examples pin numbering scheme. an interface that wrapped around the sure is not really used any more, but and recipes to GPIO Zero also has functions for GPIO library meaning that you could it’s basically in there as a point of get started, visit pythonhosted.org/ buttons, motors, motion sensors turn your s on and o. ooking concept as a Fish Dish object.” gpiozero and more. The idea for this toolset at that, I thought maybe I should At the time of writing, GPIO and its development hasn’t been teach teachers how they can create Zero can be installed using pip, the the usual year-long task, either. simple interfaces like this, and then Python packaging system, with: It only took about a month sudo pip-3.2 install gpiozero …although you may need to check before Ben was able to release the GitHub (bit.ly/1Gkt65k) to see if you require any extra dependencies. a public beta of the new library The plan is to have it packaged with the next release of Raspbian Jessie, though, either included as Humble beginnings I went a step further and said well one of the default packages or in the Ben relates the origin story: “I gave a why teach everybody to do it when it main package system so that it can talk at the CamJam at the beginning could just be there?” be installed with apt-get. You can of September on how to create APIs It only took about a month before read the full documentation for the for Raspberry Pi hardware. Say Ben was able to release a public beta library at: bit.ly/1NOAFEq. you’ve got some hardware and want of the new library, named in a slight to create a way to pip install the homage to Pygame Zero, a minimal software and libraries and be able boilerplate game framework for HELPING HANDS to use it. The same way Pimoroni education with a similar aim. It would be remiss of us if we didn’t mention provide software interfaces to some of the other people involved with GPIO all their products… the talk was Teach a man to fish Zero. Firstly, it’s built on top of RPi.GPIO, a library basically how to do that. The talk While there are about a dozen or developed by Ben Croston, without which GPIO wasn’t so much about the code; it so component interfaces provided ero wouldnt be able to exist in the first place. was about the methods of uploading in GPIO Zero and probably a few There is some special code to handle analogue to the Python packaging index and more on the way, Ben doesn’t really input signals that was created with the help of that kind of thing. I used trivial expect there to be functions added Martin O’Hanlon. Finally, Dave Jones, who created examples in my slides – and as we constantly to the library: the Raspberry Pi camera libraries, also helped Ben weren’t looking at the code, I wasn’t “I don’t really anticipate adding with the development of GPIO Zero. trying to teach people how to write loads and loads of things; it’s really raspberrypi.org/magpi November 2015 13 New INTERVIEW PHILIP COLLIGAN BUILDING A STRONGER FOUNDATION We chat with the new CEO of the Raspberry Pi Foundation about the organisation’s aims and its plans for the next twelve months…

ur mission is about putting ways, first and foremost by Pi in space “O the power of computing inventing and selling low-cost, A major part of Philip’s and digital making in high-powered computers… we typical day at the Foundation the hands of people all over the don’t want price to be a barrier involves meetings with partner world,” says Philip Colligan, CEO to learning about computing organisations: “One of the things of the Raspberry Pi Foundation. and digital making.” that’s interesting about our role is “We do that in a number of As well as helping people we exist in an ecosystem of other to learn about computers by people who share our mission, producing online resources and and one of our goals is to try and SKYCADEMY training teachers, one area upon support them as much as we can.” Featured last issue, the inaugural Skycademy which he wants the Foundation to Of course, one of the most showed 24 teachers how to launch a Raspberry focus is to “make computing and exciting partner projects is the Astro Pi (equipped with a camera and GPS) into the digital making more relevant and Pi, due to be launched into space stratosphere using a high-altitude balloon. While accessible to people. So we want to in December. “We’re ridiculously Philip tells us the team hope to run a couple more work with people on projects that excited… It’s such a privilege to be teacher-training events next year, for now they’re get more kids involved in this field part of it. We’ve got a team focused focusing on monitoring and partnering with the who wouldn’t otherwise think it on a whole programme of outreach teacher attendees, who have been given the was for them.” and educational activities happening equipment needed to run their own Skycademy Philip tells us that while he’s between now and December, but events in their schools. While Skycademy is currently still settling into his new role, he’s we’ll be carrying that on till the UK-only, Philip reveals, “We’re also thinking about already impressed by the “open end of June/July next year. We’re how it works in other parts of the world.” and generous” Pi community and planning some big events around would like it to help shape the the launch, which will be a really development of the Foundation. special moment.” “The Raspberry Pi computer Two Astro Pis, equipped with has been so successful because sensors and running experiments it’s supported by an amazing designed by UK schoolchildren, will community of educators, hackers, be taken aboard the International makers, and businesses who share Space Station by British ESA its goal. I’m keen that people give astronaut Tim Peake. “Obviously, us their ideas of what we should it’s super-cool to have a British be doing, give us feedback, and astronaut,” enthuses Philip, help us figure out where we can “but the fact that a British-made, add most value in the world.” British-manufactured piece of

14 November 2015 raspberrypi.org/magpi PHILIP COLLIGAN New

Picademy has already trained many teachers and is set to go international next year FROZEN PI

While stressing the technology is going into space and to reach many more teachers importance of the it’s at a price that we can give kids with that, so we’re thinking about Foundation producing the same technology [the Sense how we partner with dierent online resources to encourage parents to do HAT] and get them to mirror the organisations to reach not hundreds projects with their children, Philip reveals he’s experiments that are happening in [but] thousands of teachers… tens been working on a project with his eight-year-old space… it’s amazing.” Asked how of thousands even.” As well as son, Dylan. Upon being given a Sense HAT with they could possibly top that, he launching Picademy in the USA, a variety of sensors, including temperature, the ponders, ell, you know, the first the team is in conversation with first idea ylan had was to put it in a bucket of Raspberry Pi on the Moon?” the Kerala state government in ice ithin a couple of hours, hed figured out a “But seriously,” he continues, India: “We want to send our teacher way, with a battery pack inside a bag, to put the “there’s loads of projects on Earth training there and we have to think Raspberry Pi into a freezer for three hours. He that we think are really exciting how we do that with a very small was learning how you capture the temperature too… I had a great session with team in the UK.” data, write it to a file, and then use that to [James Bowthorpe] who’s running Rolling out the Pi weather create a graph… He was just thrilled at the idea the Hudson River Project, where station project (as featured in that a computer he owns, he’s allowed to stick in he is going to sail down the e i #32) also requires a great a freezer and see whether or not he can break it.” whole length of the river with a deal of logistical planning. “We Fortunately, although it reached -14°C, it was all Raspberry Pi-powered sensor that are about to send a thousand Pi- fine and still working when it came out. assesses the quality of the water… powered weather stations to schools We were talking to them about all over the planet… one in every what would it be like to create a country in the world. And that’s learn about computing. We want to low-cost water-quality tester that not trivial, so we’re having to learn create something like a Raspberry you could use all over the world a lot about how we mail things to Pi curriculum, which any kid who to understand whether or not dierent parts of the world and is excited about tinkering away in there’s pollution happening in how we create instructions and their bedroom can follow… there the immediate environment.” lesson plans that teachers, wherever will be clear text and lesson guides they’re based, can use.” and practical how-tos that they Plans for 2016 Finally, Philip says there will be can work through. A lot of those Philip tells us there’s a lot of a major focus on producing more projects are coming from the planning going on at the moment online learning resources in 2016. community, so we spot teachers or for what the Foundation will be “Part of what we’re doing now hobbyists creating something and doing next year, including the is creating projects that people we reach out to them and turn that expansion of the Picademy teacher- can do at home or in classrooms, into an education resource which training programme. “We want giving them a really fun way to others can benefit from. raspberrypi.org/magpi November 2015 15 Feature 30-MINUTE PROJECTS

MINUTE PROJECTS Have a bit of spare time this Saturday? Why not make something quick and fun with your Raspberry Pi?

s a Raspberry Pi owner with a Raspberry Pi, or want A wanting to do something something quick to do with your fun, your choices are near kids that’ll keep them interested limitless. Whether you’re leafing long enough to see the results, through loads of little projects in we’ve got a little project just for the pages of The MagPi, or seeing you. With a mixture of hardware projects around the internet and software projects (and one that look interesting, the only using spoons), each with its own constraints are time and money. shopping list, you can get yourself Some projects can last months, set up in advance to tackle a while others take hours or days, project in one sitting, in the same but why not try a project that you amount of time it takes to order START Timer could complete in half an hour? a pizza – which, incidentally, is a Whether you have a bit of time fine reward for completing your in the evening to hack around Raspberry Pi project!

16 November 2015 raspberrypi.org/magpi Feature

CONTENTS

High-speed photography

Create slow-motion video with an adjustable frame rate, and at a much higher resolution, with just a Raspberry Pi, the Camera Module, and some clever code

Connect Pi to a watch

Get alerts from your Raspberry Pi sent straight to your wrist, or smartphone, thanks to a little hacking with Pushbullet

Minecraft TNT run

Create a Minecraft mini-game that tests your speed and reaction times as you outrun deadly virtual explosions

Video tripwire

Troll your friends with a motion-sensing Rickroll, or just continue watching a playlist of interesting documen-nah… Rickroll

Spoon-o-phone

A custom Stylophone-style musical instrument made using a Raspberry Pi, some paper clips, and a teaspoon among other less amusing components

raspberrypi.org/magpi November 2015 17 Feature 30-MINUTE PROJECTS RICHARD HAYTER Richard is a mentor at CoderDojo Ham, and his school Code Club was one of the winning teams in the Primary Astro Pi competition. richardhayler.blogspot.co.uk / @rdhayler / coderdojoham.org HIGH-SPEED PHOTOGRAPHY WITH THE RASPBERRY PI CAMERA

All you need to make dazzling slow-motion clips of exciting events is your Pi and the Camera Module!

INFO CARD

Difficulty Easy

Type Programming/Making

Requirements Raspberry Pi & Camera Module

You’ve probably seen great clips on YouTube of water-filled balloons bursting in slow motion, and imagined you’d need really expensive camera equipment to capture anything similar. Not so! Your humble Raspberry Pi with a Camera Module is surprisingly capable when it comes to high-speed photography. Loads of everyday events look cool is slo-mo, but how about recording some dramatic crashes with toys?

At first glance it seems counter- typically recorded at 24 frames intuitive, but in order to create per second (fps), with video a smooth slow-motion movie, frame rates varying between 25 you need a high-speed camera. and 29fps depending on which Essentially, a movie is just a format/region is involved. So collection of still photos, or if you record at 50fps and play frames, all played one after the back at 25fps, the action will other at a speed that matches the appear to be taking place at half original action. A slow-motion the original speed. It’s actually clip is produced by recording more more complicated than that with frames than are normally needed the use of interlaced frames, but and then playing them back at you don’t really need to consider a reduced speed. Normal film is them here.

18 November 2015 Feature

Clips can now be reflections if the camera is recorded at up to 90fps positioned close to an object CAPTURING THE CLIP The original software for the Pi (e.g. a wall of Lego bricks). You camera was limited in terms of the can just block it off with a blob frame rates it could cope with, but of Plasticine, or you can turn it a subsequent update in 2014 added off completely by adding the line new functionality so that clips can disable_camera_led=1 to your now be recorded at up to 90fps. /boot/config.txt file. There is one slight limitation: the The command for capturing high frame rates are achieved by video with the Raspberry Pi combining pixels from the camera camera is raspivid, and this is sensor, so you have to sacrifice best run from the terminal. There resolution. So, although the Pi are a number of command options camera can record at a resolution that you need to specify: of 2592×1944, a high-speed -fps sets the frame rate. STEP 1 mode of 90fps is only possible at -w and -h specify the width Lights 640×480. This is still good enough and height of the frames. For the Get your scene lined up and test how it looks using the to capture decent-quality images, fastest frame rates, set this to 640 camera preview mode for 5 seconds: and perfect for sharing online. and 480 respectively. A quick way of getting started -t allows you to set how long raspistill -w 640 -h 480 -t 5000 is to pick some everyday objects to record for. If you’re working and record them in motion. How by yourself, the easiest way to about a dropped egg hitting a table avoid missing any of the action is top? A pull-back toy car crashing to begin filming for a predefined through some Lego blocks? Or period, giving yourself plenty of even the old favourite of a water time to start things off manually. balloon bursting (best to do this -o specifies the file name to use one outside)? for the saved movie. -n disables preview mode. Pick some everyday So, putting that all together, objects and record them the following commands would in motion capture a 5-second clip at 60fps STEP 2 Once you’ve chosen your subject, and save the resulting movie in Camera you’ll need a way of holding and the file test.h264: Type the command, ready for execution (but don’t angling the camera, and some raspivid -n -w 640 -h 480 press ENTER yet): way of lighting the scene. Neither -fps 60 -t 5000 -o test.h264 needs to be sophisticated: a normal Right - now that you’ve raspivid -w 640 -h 480 -fps 90 -t 7000 desk lamp works fine for extra recorded your movie clip, how can -o myvid1.h264 illumination indoors, while a you play it back? One easy way is Once triggered, this will capture a 7-second clip. ‘helping-hand’ work aid is brilliant to use the free VLC Player, which for keeping the camera stable at you can install with: tricky angles. You might also want sudo apt-get install vlc to invest in a longer cable for the The Pi version has some handy camera. You can get a 30cm ribbon features which can be accessed by cable for less than £2 or if you want checking the ‘Advanced Controls’ to go even longer, a set of special option under the View menu. adaptors allows you to extend These include the extremely useful using a standard HDMI cable. ‘Frame by Frame’ button . You can also alter the playback speed to A ‘helping-hand’ work aid slow things down even further. is brilliant for keeping To extend the project, how the camera stable at about connecting a break-beam IR STEP 3 tricky angles sensor pair via the GPIO pins and Action The standard mode of operation using these to trigger the camera When everything is ready, hit ENTER and then release for the Raspberry Pi camera is recording? The Python Picamera the car/drop the egg/burst the balloon. You’ll have that a small red LED illuminates library provides full access to the footage before and after the event, which can be when recording is taking place. camera’s functions and could be trimmed with some post-production editing. This can cause some undesirable used with your code. raspberrypi.org/magpi November 2015 19 Feature 30-MINUTE PROJECTS LUCY HATTERSLEY A technology writer and accomplished magazine editor, Lucy is well versed in all sorts of areas in the tech sector. about.me/lucyhattersley @lucyhattersley CONNECT YOUR PI TO YOUR SMARTPHONE AND WATCH

Add Pushbullet to your Pi and get pings right on your wrist

INFO CARD project overview You can set up Pushbullet on your Difficulty phone and smartwatch, and use it Medium to get your alerts from your Pi. The full Pushbullet API requires Type coding in Ruby, but we found it a Programming lot easier to build a script in that sends the alert, and then Requirements use the OS module in your Python iPhone or Android phone programs to run the script. (optional Apple Watch The Pushbullet API works by or Google Watch), using the curl command, along Pushbullet account with your Access Token, to call the Pushbullet service. Your Access Token is a unique number that One neat trick we links the Pushbullet service with recently discovered Pushbullet apps installed on your is how to hook up a devices. You can learn more about Raspberry Pi to an Apple the API at docs.pushbullet.com, but Watch. You do this using a we’ll walk you through it and show service called Pushbullet, which you how easy it is. normally syncs notifications from your desktop computer, but handily Installing Pushbullet comes with an API for the Raspberry Pi. Start by installing the free It’s simple to set up and comes in useful for Pushbullet app on your Android all kinds of projects. phone or iPhone. When you first launch Pushbullet, you’ll need to Hook up a Pushbullet is an app for the iPhone in their programs. This is great Raspberry Pi to sign up with a Google or Facebook and Android that enables you to because it turns out you can easily your Apple Watch account – enter your email and to get alerts from send notifications from your PC create a script that sends you an your programs password for that and tap Sign In. directly on or Mac to your mobile device. It’s alert with a custom message. And your wrist That’s it for your phone and Apple mainly designed so people can sync your Pi can easily call the script. Watch; everything else needs to be alerts from their main computer to Why we really love this is because done on the Raspberry Pi. an iPhone or Android phone, and Pushbullet has support for the new get notifications on their phone smartwatches, such as the Apple The Access Token from their computer. Watch and Google Watch. With a bit Hooking your Pi up to the app you’ve However, there is an API for of tinkering, you can get alerts sent just installed requires an Access Pushbullet that developers can use from your Raspberry Pi directly to Token. This is a long alphanumerical to include support for the service your wrist. How cool is that? key that is unique to your account.

20 November 2015 raspberrypi.org/magpi Feature

pushalert.py and pushbullet.sh Language CONNECTING PUSHBULLET >UNIX SCRIPT import os >PYTHON buttonpush = raw_input(“Press Enter to send DOWNLOAD: alert...”) github.com/lucy- hattersley/push- os.system(‘/usr/bin/pushbullet.sh “Alert from your bullet-RPi.git Raspberry Pi”’)

#/bin/bash

# replace [your access token] with the code from Pushbullet.com # make sure this file is executable # move file to /usr/bin STEP 1

API=”[Access Token]” Getting your Access Token First, install the Pushbullet app on your smartphone. MSG=”$1” Now, open the Epiphany web browser and visit curl -u $API: https://api.pushbullet.com/v2/pushes -d type=note -d pushbullet.com. Log in and choose Settings>Account, title=”Raspberry Pi” -d body=”$MSG” and scroll down to find your Access Token.

You’ll need it to ensure that your 755 pushbullet.sh and move it alerts are sent to the right person. to your /usr/bin folder (sudo mv Open the Epiphany web browser pushbullet.sh /usr/bin). and visit pushbullet.com. Log in Do a quick test to make sure using the same details as on your everything worked. Enter /usr/ Android phone or iPhone. Now bin/pushbullet.sh “Testing choose Settings>Account and scroll Testing” and you should get an down to find the Access Token. You alert saying ‘Testing Testing’. All should test that this works before good? From now on, this script will going any further (see ‘Connecting ping you any message you include in Pushbullet’ boxout). the quotation marks. STEP 2 The Raspberry Pi will connect to Test that it works the Pushbullet API and send the Running the script Test that your Access Token works correctly, using alert. You should see a long message from Python curl -u [your access token] https:// in the terminal, starting with Now you have the script ready, you’ll api.pushbullet.com/v2/pushes -d “active”:true, and receive a test want to incorporate it into your type=note -d title=”Raspberry Pi” -d notification on your smartphone. programs. It’s easy enough to do body=’Testing Testing’. Press RETURN and Open the Pushbullet app on your this in Python using the OS module. enter your Pushbullet password. device to see the alert. Enter import OS at the start of your program and os.system Creating the Script (‘/usr/bin/pushbullet.sh If the test alert worked, you should “[Your Alert]”’) to call the script create a script to send an alert from inside your program. whenever you want it. Your Access We’ve created a simple Python Token won’t change, so you can program to demonstrate how create one script that accepts it works. Enter the code from a custom alert as a command- pushalert.py and use python STEP 3 line argument. pushalert.py to run it. Now press Action Enter touch pushbullet.sh and ENTER and you’ll get an alert sent Create a script called pushbullet.sh that makes the API enter the code (above), replacing to your iPhone or Android phone call to Pushbullet (use the code we’ve provided with [Access Token] with your own (and connected smartwatch). your Access Token). Use sudo chmod 755 /usr/ code. You can also download it And that’s how easy it is to get bin/pushbullet.sh to make it executable and from GitHub (bit.ly/1LKCgJ1), but alerts on your wrist from your sudo mv pushbullet.sh /usr/bin to place it remember to edit it to insert your Raspberry Pi. Now you can include in your bin folder. Now you can call it from inside your Access Token. The script needs to the OS call in any of your programs Python programs. be executable, so enter sudo chmod and get alerts whenever you want. raspberrypi.org/magpi November 2015 21 Feature 30-MINUTE PROJECTS JASPER HAYLER-GOODALL The brains behind one of the winning Astro Pi entries, and a regular helper at CoderDojo Ham and Code Club. He’s ten. coderdojoham.org TNT RUN! Can you outrun an explosion? Test your speed with this marvellous Minecraft mini-game!

INFO CARD

Difficulty Medium

Type Programming

Requirements Bash the first block Latest edition of Raspbian One of the many amazing things about Raspberry Pis is that they have to trigger the chain their own edition of Minecraft for free! And what’s even better, you can reaction along the TNT code it in Python using the Minecraft API! In the next 30 minutes you will create a game called TNT RUN, in which you start at one end of a long line of TNT and have to make it to the safe area without the TNT exploding in your face.

The Minecraft API gives us need to look directly into the complete control over many invisible bedrock. elements of the game. This TNT also behaves differently in includes teleporting players the Pi edition. Whereas in other around the world and displaying editions you set off TNT with helpful messages to the screen. flint and steel, a fire charge or a We are also able to place blocks flaming arrow, in the Pi edition automatically – not just one at a you just need to hit it a couple of time, but as a three-dimensional times with anything. However, collection of blocks. you can’t just do this with any old This game will also include a TNT block: first, we need to set its block which is unique to Pi and block data value to an odd number Pocket editions: invisible bedrock. (1, 3, 5, 7, or 9). Most blocks have a We use this block to keep the block data value and by changing TNT from falling to the ground this, it will alter the block’s when lit, and as an invisible path behaviour. For example, when you leading to the safe area. You may set Nether Reactor Core’s block find something strange about data value to 1, it appears in a red this block when you place it next colour; if you set it to 2 then it will to a non-invisible block, so try come out as a dark blue colour. We experimenting with that - you use these cool-looking blocks to

22 November 2015 raspberrypi.org/magpi Feature

Language How to TNTRUN.py >PYTHON 2.7 play:

# import all the necessary modules pos.z-88,pos.x,pos.y-7,pos.z-88, DOWNLOAD: > The start of the github.com/ from mcpi.minecraft import Minecraft block.BEDROCK_INVISIBLE.id) TNT line will snake48/TNTRUN from mcpi import block mc.setBlocks(pos.x+1, appear directly import time pos.y-1,pos.z-88,pos.x, underneath you. pos.y-7,pos.z-88,block.BEDROCK_INVISIBLE.id) > The TNT won’t # connect with the Minecraft world mc.setBlocks(pos.x,pos.y,pos.z,pos.x, just light itself; you need to mc=Minecraft.create() pos.y-7,pos.z-92,block.BEDROCK_INVISIBLE.id) detonate the first block of TNT by # get the player’s position # build the bomb hitting it a couple of times. pos=mc.player.getTilePos() mc.setBlocks(pos.x,pos.y,pos.z,pos.x,pos.y, pos.z-88,block.TNT.id,1) > Once you’ve lit it (you’ll know # check if the end of the world will engulf your when it starts #creation & then move you if you’re too close # build the end podium flashing white), if pos.z<-40: mc.setBlocks(pos.x-2,pos.y,pos.z-93, turn around and then run for mc.postToChat( pos.x+2,pos.y,pos.z-97,block.GLOWING_OBSIDIAN.id) your life! 'teleporting to safer distance in progress!') mc.setBlocks(pos.x-1,pos.y+1,pos.z-94,pos.x+1, > Try to get to the mc.player.setPos(pos.x,pos.y,-40) pos.y+1,pos.z-96,block.NETHER_REACTOR_CORE.id,1) teleporter, as it pos=mc.player.getTilePos() mc.setBlock(pos.x,pos.y+2,pos.z-95, will give you an block.REDSTONE_ORE.id) 18-block boost. # mark where the teleport is > If the TNT catches up with zpos=pos.z-40 # set how many teleports you have you, you will get teleport=1 flung up into the # create the valley by hollowing it out with air air and lose. mc.setBlocks(pos.x-1,pos.y+3,pos.z,pos.x+1,pos.y- # build the display teleport signal block 7,pos.z-88,block.AIR.id) mc.setBlock(pos.x+1,pos.y+1,pos.z-44, block.NETHER_REACTOR_CORE.id,2) #build the invisible bedrock support mc.setBlock(pos.x-1,pos.y+1,pos.z-44, mc.setBlocks(pos.x,pos.y-1,pos.z,pos.x, block.NETHER_REACTOR_CORE.id,2) pos.y-7,pos.z,block.BEDROCK_INVISIBLE.id) mc.setBlocks(pos.x-1,pos.y-1,pos.z,pos.x, pos.y-7,pos.z,block.BEDROCK_INVISIBLE.id) # teleport player when at a certain position mc.setBlocks(pos.x+1,pos.y-1,pos.z,pos.x, while teleport ==1: pos.y-7,pos.z,block.BEDROCK_INVISIBLE.id) pos=mc.player.getTilePos() mc.setBlocks(pos.x,pos.y-1,pos.z-88,pos.x-1,pos.y- if pos.z==zpos: 7,pos.z-88,block.BEDROCK_INVISIBLE.id) mc.player.setPos(pos.x,pos.y,pos.z-24) mc.setBlocks(pos.x-1,pos.y-1, teleport=0

mark where the teleporter is and point. When you run the code, as a part of the end podium. The make sure Minecraft is running, teleporter function in the code is otherwise your code will give you a designed so that if you manage connection error. This is the safe area to get to a certain point along the Once you have finished the you need to run to. If you make it there, line of TNT, it gives you a boost project, you can customise your you’ve won and teleports you forward. own version of the TNT Run game When you create your Minecraft by adding changes like making world, fly around it and find a cool the row of TNT longer, or creating location to create your TNT course a fancier safe area. Also, when (i.e. not when you are near a cliff you’re connected to a network or the end of the world). Your with other Raspberry Pis, you can code takes the player’s position join someone else’s world, create and constructs the TNT course, two lines of TNT and race to the using this location as the starting safe areas simultaneously! The dark blue Nether Reactor Core marks the location of the teleporter raspberrypi.org/magpi November 2015 23 Feature 30-MINUTE PROJECTS LUCY HATTERSLEY A technology writer and accomplished magazine editor, Lucy is well versed in all sorts of areas in the tech sector. about.me/lucyhattersley @lucyhattersley INFRARED VIDEO ALARM

Use a PIR motion sensor to play a video clip when it detects an intruder

INFO CARD

Difficulty Easy

Type Making

Requirements PIR motion sensor, breadboard, 10kΩ resistor, MP4 video clip

PIR motion sensors are a common type of security device. Standing for ‘passive infrared’, these sensors normally lurk in the corner of a room and A PIR motion sensor detects movement and sometimes light up as you walk past. During the day can be used to trigger they don’t tend to do anything, but sneak around at an action on your Raspberry Pi night and they may well set off the security alarm. In this project we’ll be hooking a PIR sensor up to the Raspberry Pi to trigger a Rickroll whenever someone walks past! using sensors Which cable is power, ground Connecting the PIR Sensor Smaller PIR motion sensors are and alarm will vary on each You could hook up the PIR sensor an easily available component device. On our PIR unit, if you directly to your Raspberry Pi, but that can be attached to the Pi. In look at the dome with the wires it’s a good idea to connect it via a this project we used one (Product pointing towards you, the middle breadboard. Connect the live to the Code: 312) from Cool Components wire is ground, the right wire is positive rail and the ground to the (coolcomponents.co.uk). alarm, and the left is live. The negative rail, and place the alarm PIR sensors come with three colours can vary but typically they cable into any spare pin. wires. You attach one to the will be red (live), black (ground), Now connect the breadboard power, one to ground, and one to and brown (alarm). Check the to the Raspberry Pi. Use a black a GPIO pin. When you power up instructions to find out which jumper wire to connect GPIO GND the PIR sensor, it takes a couple of layout your model is using. (pin 6) to the negative rail, and a seconds to get a snapshot of the Speaking of the dome, that’s red jumper wire to connect GPIO 5V default levels in the room. Then, a Fresnel lens. This is used (pin 2) to the positive rail. Connect if anything changes the infrared to magnify the infrared light GPIO 17 (pin 11) to the same rail as levels because a person has moved and make the PIR sensor more the alarm cable. in front of the sensor, the alarm effective. The actual infrared So that’s our trigger set up: the pin will go low. sensor is beneath it. PIR sensor will power up, set its

24 November 2015 raspberrypi.org/magpi Feature piralarm.py Language BUILDING A >PYTHON # detects motion sensor from PIR Sensor Module RICKROLL ALARM attached to GPIO 17. DOWNLOAD: # change [MediaFile] in path to name of media file github.com/ lucyhattersley/ in Music folder. piralarm.git import os import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)

GPIO.setup(17, GPIO.IN) while True: if GPIO.input(17): os.system(“omxplayer -o hdmi /home/pi/Music/ STEP 1 [Media File].m4v”) Connect the PIR First, you need to connect a PIR sensor to your Raspberry Pi. There are three wires. Connect live to 5V, levels to the current room, and work without this, but it’s best to neutral to GND, and alarm to GPIO 17. monitor for any change. When it include it just in case. detects one, it will drop the input The video should start playing in on GPIO 17 to low. a full-screen window on top of your What we need now is a means to desktop, or full-screen if you are play our video clip. in the command line. Omxplayer is a handy tool to have, and you can Getting a video roll use it as a regular media player. You can play any video clip you Press P or SPACE to pause the want, or even use the Camera video (and again to resume it), and Module to record your own use the + and - keys to increase or message, but we decided to go decrease the volume so your alarm with Rick Astley’s Never Gonna is at the level you want. Press ESC Give You Up and build an automatic when you’ve had enough of the STEP 2 Rickroll alarm. We’re using a video video. Incidentally, you can use Get the code in MP4 format that we bought from omxplayer -k to view all of the Transfer a video clip to the Raspberry Pi and create a file the iTunes Store; this is DRM-free shortcut keys. containing the Python code. Make sure the piralarm.py and we transferred it to the Music Now use mkdir to create a folder code links to the full path of your video clip. folder on our Raspberry Pi using a for the code, and use touch to USB thumb drive. create a file called piralarm.py. We’re going to play this file Use a text editor to add the code using omxplayer. You should have supplied, or clone it using the omxplayer installed as default in GitHub link provided. Make sure Raspbian Jessie – enter omxplayer you change the [Media File] part --version to check it’s installed. to the name of your video clip. If not, enter sudo apt-get Enter python piralarm.py to update and then sudo apt-get arm and set your alarm. Now, when install omxplayer. a person moves, they will trigger Move into the folder with the the code and play your video. video clip; we’ve placed ours in You’ll probably find the PIR STEP 3 the Music folder as it’s a music sensor too effective at first. Some Video (Rick)roll video, but you can put yours into PIR motion sensors come with a Once the code is running, the PIR motion sensor detects any folder. Now enter omxplayer potentiometer that can be used to any movement, and then triggers the video to play. -o hdmi [filename] to play the adjust the sensitivity of the device. We’re using the Rickroll video as a demo, but you can video clip. The -o hdmi option One it’s set to the correct level, you use any video clip you want. ensures that the audio is outputted can leave it to trigger whenever through the HDMI output; it may anybody walks into your room. raspberrypi.org/magpi November 2015 25 Feature 30-MINUTE PROJECTS MIKE COOK Veteran magazine author from the old days and writer of the Body Build series. Co-author of Raspberry Pi for Dummies, Raspberry Pi Projects, and Raspberry Pi Projects for Dummies. bit.ly/1aQqu15 THE SPOON-O-PHONE

Make your own version of the famous Stylophone, but this time play it with a teaspoon

INFO CARD

Difficulty Medium

Type Making

Requirements B+ or Model 2 Raspberry Pi 20× large plain metal paper clips this, it will trigger the playing of Once the keyboard is finished and The Spoon-o-phone (32mm long) connected to your a sample for that note. Like the tested, tuck all the wires under the Raspberry Pi. Play the Teaspoon notes by touching original Stylophone, the Spoon-o- cardboard and make a sandwich by the paper clips with M3 nut and bolt phone has a vibrato effect, turned hot-melt-gluing another piece of the teaspoon 22× jumpers with crimped female on and off with a mouse click in cardboard to the underside. headers the small on-screen window. With 4× 10-way header shell the vibrato effect on, a different Software set of samples are selected. You Get the sound samples from 2× pieces of cardboard 170×70mm need a Model 2 or B+ Pi for this bit.ly/1LnvTtK or the GitHub. The project as it needs 20 input pins, code is written in Pygame, but but you could make it with older Pi uses a music system designed for Create your own version of the models if you cut down the range continuous background audio: as classic Stylophone, without or omitted black notes. the Stylophone samples are very the need for any electronic short, they must be looped so a components or soldering. Materials used note can be played for as long as The ‘Make your own Cable Kit’ you hold the spoon on a clip. How it works (bit.ly/1NTIGb7) was used for The GPIO pins used are in the list The paper clips are wired directly the crimped wires and shells, pinList and can be shuffled about to some GPIO pins, and the spoon but any other method will do just if you get your wiring wrong. The to a ground pin. The software sets fine. The cardboard back of an notes list contains the names of the GPIO pins to be inputs, with A4 writing pad is ideal; it has to the sample files for each note, with the internal pull-up resistors be thin enough to take the paper a ‘v’ appended for vibrato. They all enabled; they will normally read clips. Make sure the holes on the sit in a stylo_smpl directory at the back as a logic 1. However, if the shells are on the outside so you can same level as the main program. grounded spoon touches a paper change the wires over if you make a Small time.sleep delays are used clip, that input will now read as mistake. Fix the ground wire to the to minimise any contact bounce a logic low. When the code sees teaspoon with an M3 nut and bolt. effects on the input pins.

26 November 2015 raspberrypi.org/magpi Feature

Language spoon_o_play.py >PYTHON 2.7

#!/usr/bin/python def initGPIO(): DOWNLOAD: # Spoon-o-phone - Stylophone emulator By Mike Cook - Sept 2015 try : github.com/ import pygame, time, os io.wiringPiSetupGpio() Grumpy-Mike/ import wiringpi2 as io except : Mikes-Pi-Bakery/ print”start IDLE with ‘gksudo idle’ tree/master pygame.init() from command line” os.environ[‘SDL_VIDEO_WINDOW_POS’] = ‘center’ os._exit(1) pygame.display.set_caption(“Stylophone”) for pin in range (0,len(pinList)): screen = pygame.display.set_mode([190,40],0,32) io.pinMode(pinList[pin],0) # make pin into an input pygame.mixer.quit() io.pullUpDnControl(pinList[pin],2) # enable pull-up pygame.mixer.init( frequency=22050, size=-16, channels=2, buffer=512) def drawWords(words,x,y) : pygame.event.set_allowed(None) textSurface = pygame.Surface((len(words)*12,36)) pygame.event.set_allowed( textRect = textSurface.get_rect() [pygame.MOUSEBUTTONDOWN,pygame.KEYDOWN,pygame.QUIT]) textRect.left = x ; textRect.top = y font = pygame.font.Font(None, 36) ; vibrato = False pygame.draw.rect(screen,(0,0,0), pinList = [21,26,20,19,16,13,6,12,5,11,7,8,9,25,10,24, (x,y,len(words)*12,26), 0) 22,23,27,18] # GPIO pins textSurface = font.render( notes = [“a2”,”a#2”,”b2”,”c3”,”c#3”,”d3”,”d#3”,”e3”,”f3”, words, True, (255,255,255), (0,0,0)) ”f#3”,”g3”,”g#3”,“a3”,”a#3”,”b3”,”c4”,”c#4”,”d4”,”d#4”,”e4”] screen.blit(textSurface, textRect) pygame.display.update() def main(): initGPIO() def terminate(): # close down the program print”Stylophone - By Mike Cook” pygame.mixer.quit() ; pygame.quit() drawWords(“vibrato off”,36,6) os._exit(1) while True: checkForEvent() def checkForEvent(): # keyboard commands for pin in range (0,len(pinList)): global vibrato if io.digitalRead(pinList[pin]) == 0: event = pygame.event.poll() sound = getSample(pin) if event.type == pygame.MOUSEBUTTONDOWN: pygame.mixer.music.load(“stylo_smpl/”+sound+”.wav”) vibrato = not vibrato pygame.mixer.music.set_volume(1.0) if vibrato: pygame.mixer.music.play(-1,0.0) drawWords(“vibrato on “,36,6) time.sleep(0.030) else: while io.digitalRead(pinList[pin]) == 0: drawWords(“vibrato off”,36,6) pass if event.type == pygame.QUIT : pygame.mixer.music.fadeout(100) terminate() time.sleep(0.030) # debounce time if event.type == pygame.KEYDOWN : if event.key == pygame.K_ESCAPE : def getSample(number): terminate() sample = notes[number] if vibrato : # Main program logic: sample +=”v” if __name__ == ‘__main__’: return sample main()

BUILDING THE SPOON-O-PHONE STEP 3 STEP 4 Wire up the paper clips Wire up to the Pi Turn the board over and push Make the connections between STEP 1 STEP 2 the crimped connectors into the the paper clips and the GPIO The keyboard layout Fitting the paper clips end of the paper clips. Fix them header shells. Push them into an Mark out a piece of paper with Once the layout is ready, fit the with hot-melt glue after testing unpowered Pi and hot-melt glue the lines separating each key, paper clips. Make sure they are the finished board. all the shells together so they and also shading for the black all the same way round, with the align correctly. notes. You can draw this or, if long side to the front of the card. you like, print out the keyboard PDF file found in our GitHub repository. Stick this onto a piece of cardboard with white stick glue.

raspberrypi.org/magpi November 2015 27 SUBSCRIBE TODAY! Subscribe to the Official Raspberry Pi mag today for a whole host of benefits

Subscription benefits Save up to 25% on the price Free delivery to your door Never miss a single issue NEW US SUBS OFFER! imsnews.com/magpi

SAVE UP TO 25%

28 November 2015 raspberrypi.org/magpi

SUBSCRIPTION FORM YES! I’d like to subscribe to The MagPi magazine &Tutoria save money This subscription is n For me n A gift for someone ag

YOUR DETAILS r n rs n iss n s n Pricing First name Surname Address

Get six issues: ostcode mail

aytime phone obile £30 *If giving The agi as a gift, please complete both your own details (above) and the recipient’s (below).

GIFT RECIPIENT’S DETAILS ONLY r n rs n iss n s n £45 First name Surname Address $69 S ostcode mail £50 est of orld PAYMEN T OP T IONS 1 DIRECT DEBIT PAYMENT eery issues only Instruction to your bank or building society to pay by Direct Debit

lease ll in the form and send to The agi Select ublisher Serices td Serice user number Subscribe for a year: o ournemouth H H ame and full postal address of your bank or building society £55 To The anager ankbuilding society Address £80 ostcode $129 S ames of account holders ranch sort code n n n n n n Account number n n n n n n n n

n n n n n n n n n n n n n n n n n cial use only £90 est of orld eference Instruction to your bank or building society lease pay Select ublisher Serices td irect ebits from the account detailed in this instruction subect to the safeguards assured by the irect ebit uarantee understand that this instruction may remain with Select ublisher Serices td and if so details will be passed electronically to my Direct Debit bankbuilding society Signature ate n n n nn n £12.99 (quarterly) anks and building societies may not accept irect ebit instructions for some types of account

SUBSCRIPTION PRICING WHEN PAYING BY CHEQUE OR CREDIT/DEBIT CARD

6 ISSUES n n urope n est of world

12 ISSUES n n urope n est of world

2 CHEQUE How to subscribe: enclose a cheue for made payable to Select ublisher Serices td

3 CREDIT/DEBIT CARD n isa n asterard n aestro n Switch bit.ly/MagPiSubs (UK - ROW) ard number n n n n n n n n n n n n n n n n

piry date n n n n alid from n n n n if shown

imsnews.com/magpi (US) ssue number n n if shown Security number n n n last digits on the back of the card

all Signature ate n n n nn n

se the form to the right

would like my subscription to begin from issue month year

RETURN THIS FORM TO: MagPi Magazine Subscriptions Select ublisher Serices td o ournemouth H H lease tick this bo if you T want to receie any other information from Select ublisher Serices td lease tick this bo if you T want to receie any other information from other companies lease tick this bo if you T want to subscribe to The agi newsletter

raspberrypi.org/magpi November 2015 29 Project SHOWCASE MAC MINI PI Arguably the smallest, cutest classic Mac-inspired project, the Mac Mini Pi is actually much more than a swanky case for your Raspberry Pi…

30 November 2015 raspberrypi.org/magpi MAC MINI PI Project

Above The CAD design of the Mac Classic-style chassis itself. You could send the design o to a 3 printing service or pop into your local makerspace to get it printed

dafruit knows a thing A or two about building impressive Raspberry Pi projects, and the Ruiz brothers’ Mac Mini Pi – originally inspired by RetroMacCast’s John Badger – is certainly no exception. Besides being an unashamedly cute design, this tiny Mac is much more than a fancy case for your Raspberry Pi – it’s a fully functioning emulator, so you can relive those Mac OS 7 glory days (or experience them for the first time). The software used for emulation is a avour of ini vMac (minivmac.sourceforge.net) that perfectly emulates early Above nsurprisingly, all the components you Macs that ran Motorola’s 680x0 need are easily picked up from adafruit.com. ts going to cost you around 80 before 3 printing microprocessor. The software runs happily alongside Raspbian, too. Adafruit.com’s guide includes everything you need to build the project yourself, including detailed instructions and the files you need for the 3D print (you can use a 3D printing service if you lack a printer of your own). Under the hood, the project uses a standard Raspberry Pi odel , the 040 . PiTT screen, a 3.7V lithium-ion battery, and a simple audio amp, among other things. Some basic soldering skills are a must and you can expect to spend most of the weekend on the build itself it’s fiddly!). You can check out this amazing project in its entirety at: learn.adafruit.com/mini-mac-pi Above nce the electronics are sorted, putting the chassis together is uite fiddly it definitely reuires a steady hand

raspberrypi.org/magpi November 2015 31 Project SHOWCASE MATT REED Matt Reed lives in Nashville, The Raspberry Tennessee, and is a creative Pi is housed technologist at RedPepper. vertically inside mcreed.com the Mason jar

The lights ash in time with BitTorrent sync activity to produce the red glowing eect when the i is preserving files

The lid is connected to the wooden base, and holes are drilled in it for the LEDs and cables

Quic Fact

> The Mason jar MASON JAR was invented in 1858 by tinsmith John L Mason

> You can buy Mason Jars in PRESERVE the UK from Kilner – Matt Reed backs up his family photos in a Mason jar. He tells kilnerjar.co.uk

> Don’t overclock Lucy Hattersley how to preserve digital memories in style the Raspberry Pi, as it could att Reed, a professional were originally used at home But rather than preserve tasty overheat web developer and maker to preserve foods throughout foodstus, att’s ason ar > The only M from West Virginia, has the winter,” says Matt. “Mason preserves Matt’s family memories. storage created this amazing project. The jars allowed for foods that were limitation is what you Raspberry Pi-powered Mason harvested in the summer Canning a Raspberry Pi attach to the Jar Preserve is the most stylish to last all year round. Who doesn’t The idea came to Matt at work: “I Raspberry Pi backup solution we’ve ever seen. want tasty fried okra in February? had a few various-sized Mason > Matt used At this point, The MagPi’s non- “In my great-grandmother’s jars sitting around. One day I just Node.js to get US readers might be wondering basement, there were shelves and grabbed the largest jar and slid the LEDs to work in time what on earth a Mason jar is. shelves of various-sied ars filled the Pi inside. It fit, even with a with BitTorrent “They are industrial-grade with everything from pickled little room to spare!” Building glass jars with a sealable lid that beets to you-name-it preserves.” the Mason Jar Preserve was fairly

32 November 2015 raspberrypi.org/magpi MASON JAR PRESERVE Project

PRESERVING YOUR PI

>STEP-01 >STEP-02 >STEP-03 Building the base Put a lid on it Putting it together The Raspberry Pi fits inside the Mason The lid of the Mason jar has a hole drilled in The BitTorrent software is installed jar, but it needs to be held upright. For the centre. This is used to secure it with a and set up to back up a folder on other this, Matt cut a six-inch base. He then nut and washer. Then four more holes are local computers. Finally, the Mason jar sanded it so it had round edges drilled to house the LED lights. The power and is screwed on top of the lid and is lit up (reminiscent of an Apple TV). Ethernet cables are run through another hole. by the LEDs.

straightforward: “I used a saw to private. “Whenever you create a cut the base into a square, a sander sync folder, it gets a unique string to round it o, and a drill to make of letters and numbers,” explains the LED, Ethernet, and power att. This key uniuely identifies holes. A few trips to Home Depot it over the BitTorrent sync for antique drawer pulls, some protocol. Keys can provide either rubber feet, brackets and screws, read/write access or read-only and that was it.” access to anyone you give it to. You ome furniture fittings from ome epot Matt’s Mason Jar Preserve generally want to keep them safe. were used to embellish the design connects via Ethernet, but you If I shared that key publicly, then could use WiFi. “I am still curious I’d have a public file-sharing seed how much glass would aect similar to the BitTorrent everyone the signal,” he tells us. “In the knows and loves.” end I chose Ethernet for transfer Matt uses his the Mason Jar speed, availability, simplicity, and Preserve to back up family photos reliability. Also, because I was low and videos. “I really just wanted on USB WiFi dongles. Like, zero.” one more layer of redundant backup of things like the birth Powered by BitTorrent of our kids, wedding photos, and Matt used BitTorrent to create the various family-related media. It backup software. “It’s similar to uses the Raspberry Pi’s SD card Dropbox,” he says, “but instead of for storage. Therefore, the larger a centralised server in the cloud, the SD card you put in your Pi, the you connect two or more of your more you can store.” own devices directly together We think the end result is over the BitTorrent protocol. glorious. When the Mason Jar Just like Dropbox, connected Preserve is syncing, it animates BitTorrent sync machines all the LEDs using the Node.js script, sync up a specified folder on their BitTorrent Sync API, and the GPIO system. So basically, it’s free and pins. When it sits idle, they glow the storage is only limited to the red. “I wanted it to look like the connected storage.” ar was filled with red raspberry The ason ar looks especially good in low Unlike itTorrent file sharing, preserves,” says Matt. “It light when its s are illuminated Matt’s system is completely especially looks great at night.” raspberrypi.org/magpi November 2015 33 Project SHOWCASE YVES DAIGLE n aerospace engineering officer for the Royal Canadian ir Force whose obis currently to design and build flight simulators. github.com/whyvas/raftBerry

For a watercraft, this is quite a simple selection of controls to get it work, all hooked to the Pi

Cruise in style, with music and DVDs to keep you entertained out on the water

The most important part about such a craft is that it floats. And it does

Quic Fact > The raftBerry RAFTBERRY had been planned Escape a desert island with your volleyball BFF in style, or just pootle for about twoyears around a lake with some pals, with this Raspberry Pi-powered raft

> ves hasn’t icnics are fun. ou fish our lake, ves tells us. s you can mode select switch. ach motor is programmed since university a cooler bag from the see from the resulting picture of independently controlled by five P back of a cupboard along ves and some friends enoying a automotive relays, three of which > The raftBerry has all the with some half-forgotten freeer meal on the oating dock, the idea are used to set the speed, and reuired blocks from the ice tray and fit has come to fruition. the remaining two are used in an boating safety in as many sandwiches, sausage As an aerospace engineer -bridge configuration to set the euipment rolls, and cans of soda as you can. serving in the anadian ir orce, motors in forward or reverse. The > ves wants fter grabbing some family or ves is used to creating comple PI output pins control a small to add crazy lighting friends, you find a nice spot and euipment, so it’s no surprise that eight-channel relay board, which in and ‘look to eat outside. onderful, aside from this side-proect is not eactly turn controls these ten automotive steer’systems the inevitable invasion by ants, but simple as well: relays. The whole system, from > For the still great. hat if you could take The control system has motors to control panel, is designed military, ves ants out of the euation, though two available modes that can to be removed from the dock after has used 22 RaspberryPis ou could if you were somehow be selected via a switch on the every trip, using a hand truck. able to have a picnic out in the console: manual or autonomous. The whole thing took him a middle of a lake. eet ves aigle The dock uses two static motors for month to finish after he started and his rafterry proect propulsion that can also steer the to properly work on it and also The idea is to create a fully dock via dierential thrust. includes a player, a table, autonomous electrically propelled The Pi reads inputs via the seating, and a camping stove. oating dock, controlled by a PI from the arcade oystick, ess of a picnic, then, and more a Raspberry Pi, to drive us around emergency shutdown button, and oating campsite.

34 November 2015 raspberrypi.org/magpi RAFTBERRY Project

A oating picnic for everyone, thanks to a little hacking AUTOMATICALLY DRIVING MR DAIGLE

>STEP-01 Plan a route uto mode should work by allowing you to first create a custom map in oogle Maps, then exporting the map to a .kml file the raftBerry can use.

>STEP-02 Start to navigate The raftBerry uses P data to compare your location to the first waypoint, and produces a method to move to the waypoint. This is updated once per second.

It looks like a phone cabinet, but everything within each subsection is quite simple

“Manual mode works watercraft, he’s been using them awlessly, ves eplains. in his ob e have of them The relays do get uite hot and performing various tasks at the full speed appears to not be as moment. I’ve found that Pis powerful as it was with the original are several orders of magnitude control head. I suspect the relays more cost-eective than are nearing ma load and are commercial alternatives. aving causing some voltage drops. I plan tapayer dollars is something I to acuire larger relays. The motors take uite seriously. >STEP-03 may be a little underpowered. If you want to see some of the Enjoy the ride utomatic mode doesn’t uite build, along with the rafterry The raftBerry waits until you’re within ten metres of the work right now, but ves is in action, you can check out the waypoint before calculating the route to the next one. working on it. As well as using video of it on ouTube eep an eye out for anything in your path, though Raspberry Pis at home and on youtu.be/FZvU3U1wZWo raspberrypi.org/magpi November 2015 35 Projects SHOWCASE CHRIS DUERDEN A mechanical engineer with a fresh law degree, and experience of a lot of electronic projects and systems. imgur.com/a/8uO6E

If you’re sick of bad Super Mario Bros 3 levels in Super Mario Maker, try out the original on this 3.5˝ screen with many other games

There are enough buttons to play all major home consoles up to SUPER the PlayStation

A mixture of old and new: a GBA volume control and USB GAMEGIRL input for loading ROMs Want a better handheld games console? The answer may be Quick to make one yourself with a Raspberry Pi and a 3D printer

Facts ver the past few issues, “My project is a Raspberry case full of game cartridges or AA we’ve covered a handful Pi 2-powered Game Boy-looking batteries with me everywhere, and > This was Chris’s O first Raspberry of retro gaming projects thing,” Chris tells us. “It runs wanted it all-in-one and easy to use Pi project of varying types: a refurbished RetroPie, so it can play games for anyone that would play it.”

> The volume SNES, a 3D-printed NES, a Power from a lot of different systems. The idea came to him after wheel is from Glove running games, and so on. The goal was to have enough learning about RetroPie, and he a Game Boy While these are all definitely cool buttons to support PlayStation began to tinker with the Raspberry Advance projects, you know what’s really games, have a 3.5˝ screen, and Pi. The whole thing is custom- > Chris created cool? A portable retro gaming enough battery life for seven hours made, and it starts with a Raspberry custom PCBs for this project machine! In the past, this spot of play while being smaller than Pi 2 and a 3D-printed case. The has typically been taken up by the the original Game Boy!” case takes the Game Boy as its > Unfortunately, it doesn’t run very hackable Sony PSP, but Chris The seven hours requirement is base inspiration, adding more face Nintendo 64 Duerden made the decision to go so it can survive a long plane trip, buttons as well as shoulder buttons games well down a much more homebrew something modern handhelds to accommodate PlayStation (and > Chris’s favourite route by making his machine from can’t quite handle. “I love retro other console) games. There’s a game to play scratch using the same Raspberry gaming and wanted something to 3.5˝ screen, a 6000mAh portable on it is Super Mario Bros 3 Pi that powers those other retro do while travelling,” Chris explains. battery, amps, speakers, jacks, gaming projects. “I didn’t want to have to bring a LEDs, and various buttons and

36 November 2015 raspberrypi.org/magpi SUPERGAMEGIRL Project

THE MECHANICAL PROCESS

>STEP-01 On standby The power switch is controlled by an Ttiny chip that stays in sleep mode until the power is switched on, which then wakes it up so it starts to provide power to the screen.

The buttons on the rear are very basic, but Chris is unsure how to improve them >STEP-02 While it’s on The Raspberry Pi has a piece of code that lets the Ttiny know that it is on, and it boots straight to RetroPie. The Enough battery life for seven hours power switch begins a shutdown procedure. of play while being smaller than the original Game Boy! switches cannibalised from a NES The result works well enough and several Game Boys. for hris, with power on and o “It was complex to get switches, games loading from a USB everything to fit and work port on the side, and the ability to together,” Chris admits. charge the battery from the bottom “I designed the housing in of the case with a micro-USB cable. SolidWorks, wrote programs for Right now, Chris is making a the Pi in Python, programmed second one for his girlfriend and the AVR in C, designed custom will eventually write up a full >STEP-03 circuit boards, lots of breadboard rundown on how to make your Turning off time, some talking to Adafruit to own, including slightly improved When the Ttiny is told the Pi is shutting down, it turns see what their products can and plans for the circuit boards. Soon off the screen and grounds the power, turning off the can’t do, etc. But it was relatively you’ll be able to make long trips regulator before going back into sleep mode. easy to build.” much more interesting. raspberrypi.org/magpi November 2015 37 Project SHOWCASE MARK BUTTLE Mark is a software engineer from Shropshire with a passion for woodworking and electronics – combining both in this project. bit.ly/1hZFUmu

Quic Fact PI-POWERED > The project started as a challenge from a colleague > This was Mark’s CNC MACHINE first Pi proect How do you combine a passion for beautiful woodworking with an interest > The controller wires terminate in electronics? Mark Buttle did it with a Pi-powered CNC machine... in aircraft connectors ural Shropshire, one of the as a traditional red telephone box Mark began looking into building > The power coldest and wettest parts of (naturally, there are plans for a a Computer Numerated Control supply comes R from an LED England, is home to many familiar blue police telephone (CNC) machine for woodworking. lighting set makers and inveterate tinkerers, box, too). But Mark is a software It soon became apparent that the

> buffer with plenty of time holed up in engineer by day, and also interested Arduino, while ideal for controlling prevents the maker shed, allowing genius in electronics, so is happy to the stepper motors, would need leakage current to ponder and grow. In fact, the mix technology with traditional some extra help, and Mark certainly triggering end- stop relays county has a history of makers and crafting skills. didn’t have time to write all of the thinkers, being the place of origin Mark had originally bought an software himself. Research online both of Charles Darwin, and of the Arduino as a birthday present turned up both Grbl – the open- industrial cradle of Ironbridge. for a colleague and, intrigued source controller code that runs on Mark Buttle is an engineer who by the board’s possibilities, had the Arduino – and the Zapmaker loves to work with wood. His then bought one for himself. controller software, which is home is full of lovingly handmade The colleague set a challenge, to written for the Raspberry Pi. furniture, as well as quirky items see who could come up with the “I’d wanted a Pi for a while,” like a fridge-freezer masquerading most interesting project, and ark tells us. This is the first

38 November 2015 raspberrypi.org/magpi PI-POWERED CNC MACHINE Project

An LCD screen in the controller box shows Mark RASPBERRY PI the current position of the machine, and overall CNC IN ACTION progress of the cut

>STEP-01 At the drawing board The first task is to work through the design in your choice of CAD software, then let it generate the G-code needed. FreeCAD users will need a CAM plug-in or HeeksCNC.

The Arduino controller runs Grbl software to A Pi 2 runs the open- turn the G-code into source Zapmaker instructions for the software to send G-code three stepper motors via to the controller board the motor drivers

thing that I’ve done with it. It With 200 steps per revolution brings together my passion for (on the current setting), the electronics and for woodworking.” motors allow precision control of movement. One revolution The build moves the cutting tool 2mm, so >STEP-02 “I’ve made the complete CNC out one step is just 10 micrometres! Grbl of marine ply, all handcrafted, and – with one thou (a thousandth of Mark uses AutoCAD, which enables him to select mounted a DeWalt router to do the an inch), the traditional measure the tool bit used, as well as plan the cutting path. cutting,” Mark reveals, “using the of fine tolerances in engineering, The recently open-sourced Blender CAM is one Raspberry Pi 2 as the controller, equalling circa 25 micrometres, possible alternative for this. which runs a bit of software called this is extremely precise for CNC Zapmaker, which passes woodcutting. Theoretically re- the instructions in G-code to an gearing the stepper motors could Arduino Uno. This runs a version improve this again, but that fine a of Grbl controller, which has a CNC level of detail would be lost against shield connected to it that drives the size of the grain of the wood. the three X Y Z stepper motors.” The stepper motors – around £12 “This is just an overview,” each from China – have a power admits Mark. “The controller and of 107oz holding torque; add in machine took about two months Mark’s use of trapezoid rods and to build: mainly evenings.” In that heavy-duty fiing bars, rather than time, Mark also had to build the the threaded rod and drawer rails physical apparatus of the cutting used in budget CNC home-builds, >STEP-03 machine – a 1000mm long, 500mm and we have a strongly engineered MagPi meets timber wide, 700mm high framework, machine that’s built to last. Yet, The Pi creates the rbl code used by the rduino, with tracks for clamping the wood, including all the electronics as which handles putting the router in the correct trapezoidal bars for the stepper well as the other hardware, the places to turn our 3D design into a sculpted or motors to drive across each axis, build price was around £400. A carved piece of wood. and a lot of cabling. decade ago, you’d find similar raspberrypi.org/magpi November 2015 39 Project SHOWCASE

The frame holds everything together commercial machines costing well Eagle-eyed readers will have into five figures these are great spotted the extra board between the times for makers. Indeed some Arduino and the controller shield – of those obsolescent commercial this is a buer board installed after CNCs are being repurposed with the early prototype kept switching homebrew controllers by those o omeone said you need a without the time to follow Mark’s filter between the rduino and the total DIY route. CNC controller board,” says Mark. filtering board stops current In control bleeding through from the motors In the controller, a touchscreen to the relays for the end stops and interfaces to the CNC controller, switching o the device. This has running on a Pi 2 with Zapmaker fied the problem I’ve checked the software: on screen, the control voltage drop now on the end stops; software’s grey, pleasingly it stays at a constant 5 volts.” industrial panel complements the electrical box used as a casing. The Making the cut Pi communicates with an Arduino Before use, G-code is needed to give Uno board, which uses Grbl to the coordinates for cutting. The logo control the stepper motors. The in the pictures was converted into Grbl handling of the Arduino is quite a black and white image, then into sophisticated – you can send a one- vectors – as well as optimising the line command such as ‘a circle to cutting path, and the correct cutting here, of this diameter,’ and it will head. FreeCAD is used by many work out the cuts for you. CNC makers, but needs some form The power supply is a heavy-duty of CAM plug-in to generate the 24V unit from some LED lights. 12V G-code and the cutting path. and 5V step-down transformers The G-code is just lines of provide power for the LCD screen, coordinates. The CAD/CAM Raspberry Pi, stepper motors, software has the job of generating Arduino, and shields. The shield it, together with the cutting path controlling the motors can become that makes the most sense – a CNC very hot, and so a small fan is used machine’s version of computing’s to cool it. famous travelling salesman

BUILDING A PI CNC MACHINE

>STEP-01 >STEP-02 >STEP-03 Stepper motors In the frame Arduino Stepper motors – dividing each 2mm and-cut from 18mm () marine ply, the An Arduino Uno runs Grbl software to revolution of the trapezoidal bars into 200 frame rigidly holds the trapezoidal bars, accept cutting instructions in G-code and steps – position a DeWalt router in the stepper motors, and router, as well as turn them into electrical pulses to control X, Y, and Z planes, with an accuracy of keeping the work in place with clamps the stepper motors and position the 10micrometres. in the built-in tracks. router precisely in three planes.

40 November 2015 raspberrypi.org/magpi PI-POWERED CNC MACHINE Project

problem to find the optimal route There are also tripper switches at between multiple destinations. the end of each trapezoidal guiding Mark is a long-time user of bar, to stop the router should it ever AutoCAD. While it’s an expensive be sent to the end of the bar. These option for anyone buying just for were what was being tripped by the a CNC machine, it readily provides current leak before the buer board everything you need if you’re was added to the Arduino. already a user: “On my Mac, I The controller box has four design any shape or carving and buttons by the screen ono, convert the 2D or 3D model into panic!, restart, and emergency G-code, then Wi-Fi it or USB-stick stop. It can cut into a 60mm depth WHAT NEXT? it to the Raspberry Pi. Using the of wood. As an alternative to a Mark tells us he did much of the CNC machine’s touchscreen, I start the controller complete cut, you can optionally design ad hoc: “I hand-cut the frames, testing out up and o it goes. set up the controller to leave tabs sizes as I went.” This is apparently a contrast to his usual way of working. “Normally I like to have everything carefully thought out from the start.” It brings together my passion for Should he wish to build another, “Now I can electronics and for woodworking do a template for it to cut a new version of itself.” Future plans may include alternatives to Zapmaker: “There are other things I’d like it to do Well, not quite: safety features in, to make it easier to lift out with it. I just like to try things my way.” There’s also are an essential part of any CNC pieces together from the bench. the possibility of similar mechanics and controlling machine. After lining up the cutting Looking at The MagPi logo in the apparatus for a dierent head: powering a 3 tool to the wood block, locking the photo (and on Mark’s YouTube printer, possibly, or to rig up to a Blu-ray laser to wood in with retaining bolts set into channel – bit.ly/1hZFUmu), you try as a cutter (suitably shielded, of course). the tracks, and manually correcting may be able to see the grooves on “I like to build,” says Mark, which seems to the height, the safety must be the side, matching dierent depths sum things up quite well for many in the maker clicked on the controller. There’s of cut. This was cut in three passes, movement. Having seen some of Mark’s other also an emergency stop button taking around five minutes, to builds – from oak drawers that convert into a Sony on the front of the machine’s allow for the quality of the router 3 racing car controller, to the famous telephone base. Any powered cutting tool bit, which cost only £1.20. Given a box refrigerator – we’re sure that whatever follows must be built with ways to quickly better bit, the logo could have been will be an interesting project, as well as something stop it, just in case of something cut in one pass, taking less than extremely well engineered. going wrong. a minute-and-a-half.

>STEP-04 >STEP-05 >STEP-06 On the Pi Raspbian Grbl controller Zapmaker’s Gbrl controller software was Zapmaker’s CNC software runs on a Put it all together and the screen originally optimised for a Pentium with standard Raspbian install, and the shows the cut to be made, waiting for 256MB of RAM, and readily made the zapmaker.org website has full instructions you to hit the Start button after you’ve transition to the Pi Model B, hardly troubling for those new to the wonderful world of secured the block of wood safely the Pi 2 in Mark’s CNC controller box. Raspberry Pi, as well as rbl information. in place.

raspberrypi.org/magpi November 2015 41 Featur SCREEN TEST SCREEN TEST GET TO GRIPS WITH THE OFFICIAL 7-INCH TOUCHSCREEN DISPLAY n this eightpage special we look at how to get started with the ocial aspberry i touchscreen before trying out iy and eploring possibilities for proects

[1] The touchscreen features two ribbon cables that must be connected to its video board

[2] This board converts the Pi’s DSI video signal to a DPI one for the touchscreen

[3] The white ribbon cable is used to connect the screen’s video board to the Pi’s DSI port

[4] Jumper cables are supplied, which can be used to power the Pi from the board via irst mooted over two years ago, the official new orders to be shipped by the official Raspberry Pi Ppins F Raspberry Pi touchscreen display has wag tore bit.ly/1LZNCaA). finally arrived. I honestly believed it would If you’re lucky enough to get your hands on one, [5] Four only take us si months from start to end, says you’ll soon see why. ut of some impressive tech standoffs and ordon ollingworth, the oundation’s director of specs, most noteworthy is support for ten-point touch screws are engineering, but there were a number of issues we input, which allows for actions such as drag-and- used to attach met. ot to mention being diverted by other products dropping, rotating, and pinching to oom. The build the board and such as several new models of the Raspberry Pi itself, of uality is eually remarkable ordon tells us that this Pi to the rear course. till, it’s been well worth the wait and the new is a highly durable industrial-uality display made of the screen -inch screen is already proving a huge sales success by Inelco unter) that can withstand serious vibration at the time of writing, there’s a three-week wait for and operate in temperatures ranging from -0 to

42 November 2015 raspberrypi.org/magpi SCREEN TEST Featur

[6] The 7-inch LCD display features an 800×480 resolution and 140° horizontal viewing angle

[7] The latest version of Raspbian includes drivers for the screen to enable ten- point touch input

[8] This screen is mounted in Pimoroni’s optional stand, which comes in a range ofcolours

[9] The Raspberry Pi is stacked on the rear of the video board, screwed into the standoffs

[10] The screen is powered via a micro-USB port on its video board, so it can use a standard Pi power supply

[11] The Pi can The screen comes as a two-part kit comprising be powered separately the LCD display itself and a daughter video board or share the screen’s 0. It’s also the first touchscreen to make use of the video board fits on the display’s rear metal backplate supply via a Pi’s I display serial interface) port this frees up with four standos, to which the Raspberry Pi itself USB cable or the PI header and I port, so the latter can be can be attached. The assembly process see asy jumper leads used by certain applications for eternal video output. assembly’ bo on page 40) is very straightforward, (as shown in The screen comes as a two-part kit comprising the however, merely reuiring a trio of ribbon cables to this photo) display itself and a daughter video board. The be attached between the display, video board, and Pi.

raspberrypi.org/magpi November 2015 43 Featur SCREEN TEST

EASY ASSEMBLY Here’s a quick guide to assembling the screen and connecting the Raspberry Pi. Note that the original Pi Models A and B are not currently supported. See bit.ly/1KOPxi2 for more detailed step-by-step instructions. Note: To easily insert ribbon cables, first pull out the plastic protector Connect the screen’s wide Lie the board on the back of from the port; once the cable is inserted, close the plastic ribbon cable to the port on the display and connect the protector again to secure it. the rear of the video board. small ribbon to the J4 port. SCREEN TEST nce assembly is complete, there are three possibilities for powering the screen and attached Raspberry Pi

1. TWO SEPARATE POWER SUPPLIES ou can power the screen and Pi separately via their micro-U ports, using two mains power supplies to ensure you get ample uice for each. PORTABLE PI Pimoroni is now selling a splitter cable to route power from a single mains supply to both micro-U ports bit.ly/1VWsr1c). or a portable Pi, you’ll need battery power. or this, we’d recommend using one of the many power banks’ 2. JUMPER LEADS TO GPIO available for powering smartphones and tablets. ou’ll Using two umper cables, you can need one with at least a U output for a shared power the Pi from the screen’s video power supply, or two outputs such as the i Power board by connecting its and ank 6000mh mi.com/en/pb16000/) to power PI pins. The downside is that this the screen and Pi separately. attery power opens up prevents a T add-on board from the possibilities for creating a PiPad’ tablet device, being attached. ou’ll need a good although you’ll want to enclose the rear electronics mains supply such as the official somehow it’s possible to build a Pibow case around one) connected to the screen. the Pi, although you’ll still need something to protect the video board. lternatively, you could go for a more 3. USB TO MICRO-USB CABLE radical solution see Reverse mounting’ bo). hile this is possibly the most convenient method, you’ll need a 4 cable used to charge tablet devices and larger phones), since it has thicker power wires than the more common type. s with method two, a good main supply is reuired.

44 November 2015 raspberrypi.org/magpi SCREEN TEST Featur

crew the four standos Attach the supplied white Screw the Raspberry Pi to the Choose a power method to intnto the metal backplate: ribbon cable to the port at standos, then attach the supply the touchscreen and be careful not to overtighten! the side of the video board. ribbon cable to the DSI port. Pi and you’re ready to roll. TAKE A STAND Unless you’re fitting the touchscreen into a bo or case for a proect, you’ll want a stand for it. Pimoroni sells an easily assembled stand in a choice of colours bit.ly/1VrmIuR). ome generic tablet stands may also be compatible. lternatively, you could opt to -print your own designs already available include le ames’s raspberry-shaped stand thingiverse.com/thing:995394) and hristopher asto’s wall bracket thingiverse.com/thing:1034194). r, if you’re good at I, follow the eample of immy ugent bit.ly/1O8xBRD) and craft a wooden stand!

REVERSE MOUNTING pon electing to use an old 3.5 external hard drive case to enclose his screen setup, the Foundation’s Clive Beale discovered that it wouldn’t uite fit. is solution was to reverse-mount the Pi (bit.ly/1L5Uh45). After a little tweaking, and twisting the DSI cable, it fitted apart from a small overlap of the screen bezel. Sadly, when Clive tried to trim it with a glass cutter, it cracked! Still, as long as you’re careful, reverse- mounting is a good way to radically reduce the depth (to just under 20mm) so you can use a custom case to create a tablet-style device.

raspberrypi.org/magpi November 2015 45 Featur SCREEN TEST STARTING UP ow youe got your touchscreen assembled connected and powered its time to start using it

irst o, you’ll need to update the Pi’s ccess menu, while atchbo appears under F Raspbian operating system to ensure the ccessories, as Keyboard’ if it doesn’t appear reuired touchscreen drivers are installed. straight away, try rebooting. ou may want to add a ote that while the screen will work with the new menu shortcut to toggle it on and o bit.ly/1VVTcgQ). Raspbian essie edition, we came across a couple of ither keyboard can be easily repositioned and resied issues regarding the lorence on-screen keyboard and by dragging the top bar or bottom-right corner right-click emulation. o, for now, it may be best to respectively. y default, lorence is always shown on stick with Raspbian heey. nce you have logged in, top of anything else on screen to set this option for you’ll need to update its packages with the following atchbo, tap the top-left bo, then ayerlways on two commands top. oth can also be rolled down when not needed, to free up screen real estate. sudo apt-get update f the two, lorence has the greater range of sudo apt-get upgrade settings, including a choice of colour schemes, shapes, and fonts. owever, as noted, we had problems using Then reboot the Pi lorence in Raspbian essie every time we pressed a key, it disappeared. lorence works fine in heey, sudo reboot though, albeit with some keys missing labels.

nother thing you’ll want to do when using Audio and video heey is to get it to boot straight to the indow hen it comes to audio, the official touchscreen lacks UI desktop. To do this, go to the raspi-config menu built-in speakers, so you’ll need to use the Raspberry suo raspiconfig) and select option nable Pi’s .mm ack on odels , , and ) to oot to esktopcratch at the net screen, select output audio to some eternal P speakers or a hi-fi esktop og in as user pi’ at the graphical desktop’. system. ne thing to note is that the Pi’s ack is wired hoose to Reboot and the Pi should now boot straight dierently from some, so you may find that leftright to the desktop when switched on. channels are swapped. ince the touchscreen driver outputs both standard ne intriguing possibility is the potential to mouse events and full multi-touch events, and simultaneously output video to a T or monitor via the therefore can work with as a mouse, you should now Pi’s I port, for a dual-screen setup. urrently, it’s be able to navigate the UI using touch input. ne not possible to output Raspbian’s indow UI to thing missing by default is a right-click option, but both touchscreen and T. owever, some applications with a bit of config tweaking see Right-click trick’), already have support for a secondary video output, this can be emulated via a long press of the screen. including for the Kodi media centre) and omplayer. or instance, in omplayer, you can output On-screen typing a video to the touchscreen with the default command ow, the other obvious problem, unless you have a physical U keyboard attached, is the uestion of omxplayer video.mkv how you enter tet on the touchscreen. ortunately, there are a couple of virtual on-screen keyboard and another via I using options readily available in Raspbian lorence and atchbo. ust use the following terminal commands omxplayer --display=5 video.mkv to install one or both of them ith a bit of tweaking, it’s also possible to run a suo aptget install orence Kivy touch interface on the touchscreen while the sudo apt-get install matchbox-keyboard indow UI is output to an I T or monitor. ou can find out more about using Kivy to control lorence will then appear under the Universal physical devices on page 44.

46 November 2015 raspberrypi.org/magpi SCREEN TEST Featur F.A.Q. We tackle the most common issues RIGHT-CLICK i e official ocscreen isplay Help, I’ve got a black screen! Touch input isn’t working, TRICK Check that the DSI cable is pushed or stops working. firmly into place. ou can also try Assuming that you’ve checked hile the indow UI was never designed to work reversing it, by switching which all the connections are fine, this with a touchscreen, there is a handy tweak to get it to ends go to the video board and Pi. is likely down to a bug in the emulate a right mouse click when you long-press the touchscreen that’s been fixed in the screen. ote at the time of writing, we could only get I’ve got a white screen! latest version of Raspbian. To sort it this to work in Raspbian heey and not essie. This is likely due to the screen’s out, use the following commands: rom a terminal window, create a new config file with ribbon connector not being seated correctly in the video board. sudo apt-get update sudo nano /etc/X11/xorg.conf sudo apt-get install It’s stuck on the rainbow --reinstall libraspberrypi0 Then add the following code to it test screen. libraspberrypi-{bin,dev,doc} This means the Pi isn’t getting enough raspberrypi-bootloader Section “InputClass” power to boot up; this issue occurs sudo reboot Ientifier caliration most commonly when powering it Driver “evdev” from the video board via USB. Try Some windows are too big for the MatchProduct “FT5406 memory based driver” a different cable, or use the umper screen and I can’t see the right/ wires method. Also, note that even bottom edges. Option “EmulateThirdButton” “1” if the Pi does boot up, a permanent This may be due to some Option “EmulateThirdButtonTimeout” “750” rainbow square in the top-right corner developers assuming a minimum Option “EmulateThirdButtonMoveThreshold” “30” indicates undervoltage. screen resolution of 1024×768 EndSection pixels. Right-click (using a mouse My screen is upside down! or long-press emulation trick) on Press CTRL+X to eit, then Y and ENTER to save the file. If using an attached stand, such as the top of the window, select Move ow reboot the Pi Pimoroni’s, you may find that the from the menu, then use the arrow latest Raspbian update – which keys to reposition the window to sudo reboot ipped the display output for a better reveal the hidden parts. desktop viewing angle – results in ou should find that long-pressing on the desktop brings the screen being upside down. To I have black borders around the up the standard right-click menu. o whenever you want correct it, you need to add a line to desktop – it’s not using all of to right-click on something, simply long-press it. the config.tet file. pen it with the display. This may be because you have suo nano /oot/configtt overscan enabled in the bootup config file. Comment it out. Then add the line I want to use my screen in portrait lcd_rotate=2 mode, like a smartphone, by rotating it 90 degrees. Press CTRL+X to exit, then Y and There is a workaround to enable ENTER to save the file. Now reboot this, involving rotating both the the Pi and the display should be the display and touch input. See right way up! bit.ly/1GklquI for details.

raspberrypi.org/magpi November 2015 47 Featur SCREEN TEST

Install Kivy In a terminal window, open up the pt sources list TAKING sudo nano /etc/apt/sources.list t the end of the file, add the following line to add sources for streamer THINGS deb http://vontaene.de/raspbian-updates/ . main Press TR, then and TR to save the file. ow download and add the P key for the FURTHER streamer sources with the following commands gpg --recv-keys 0C667A3E e show how to install iy to create a custom gpg -a --export 0C667A3E | sudo apt-key add - touch interfaces and look at some possible proects for your new screen ote If you get an error gpg: keyserver receive failed: bad URI) after the first command, ust try o, now that you’ve got your Pi and touchscreen it again. S up and running, what are you going to do with Install the dependencies with the following two it hile you could simply use it as a portable Pi, commands there are countless possibilities for proects. Raspberry Pi’s U product evangelist att Richardson tells us, sudo apt-get update any Raspberry Pi proects need a user interface, but suo aptget install pgconfig these proects can’t always accommodate a full monitor, libgl1-mesa-dev libgles2-mesa-dev keyboard, and mouse. The touchscreen can oer these python-pygame python-setuptools capabilities without needing etra components. This libgstreamer1.0-dev git-core is where Kivy may come in handy it’s a framework for gstreamer1.0-plugins-{bad,base,good,ugly} Python which allows a developer to create graphical on- gstreamer1.0-{omx,alsa} python-dev screen interfaces. It’s a modern framework, says att, so it works well with multi-touch input, which the new ou’ll now need to install pip from source, as the Raspberry Pi display provides. version in the version in Raspbian’s pt repository ere we’ll walk you through how to set up Kivy using is too old. ote ignore any messages about att’s instructions. e’ll assume that you’ve already InsecurePlatformWarning. got your Pi fully updated using sudo apt-get update elow Follow this diagram to wire up and sudo apt-get upgrade, and the screen’s touch wget https://raw.github.com/pypa/pip/ your components input is working correctly. master/contrib/get-pip.py

sudo python get-pip.py

+

a b c d e f g h i j i h g f e d c b a +

_ _

30 30

29

29 Install ython, Pygments, and docutils. hile the

28 28

27

27 ETHERNET Pygments and docutils packages aren’t reuired for

26 26

USB X2 USB X2 USB

25

25 Kivy, the eample code you’ll eecute uses them. This

24 24

23

23 step may take uite a while.)

22 22

GPIO

21 21

GND GP21

20 20

GP26 GP20

19

19 pi@raspberrypi ~ $ sudo pip install GP19 GP16

18 18

GP13 GND

17 17

A/V cython pygments docutils GP6 GP12

16 16 16

GP5 GND

15 15 15 15

DNC DNC

14 14 CAMERA

GND GP7

13 13

13 et, it’s time to install Kivy globally, with the GP11 GP8

12 12 12 12

GP25 GP09

11 11

GP10 GND following series of commands. gain, this can take a

10 10 GP24 3V3

9 9 GP22 GP23 long time, so be patient.

8 8 GP27 GND

7 7 GP17 GP18

6 6

GND GP15 PWR IN PWR

5 GP4 GP14 5 git clone https://github.com/kivy/kivy

GND 4 GP3 4

3 GP2 5V cd kivy 3

5V 3V3 2 2

DISPLAY python setup.py build 1 1

a b c d e f g h i j i h g f e d c b a +

+ _ sudo python setup.py install _

48 November 2015 raspberrypi.org/magpi SCREEN TEST Featur

To generate a Kivy configuration so we can modify it to enable touch input), run the pictures demo POTENTIAL PROJECTS python ~/kivy/examples/demo/pictures/main.py As we’ve seen with third-party Home Hub ow let’s modify that Kivy configuration file screens, there are countless ne obvious use for the ocial potential projects for making use touchscreen is to use it as a nano /iv/configini of the ocial touchscreen. Matt touch control panel for a home Richardson tells us, “I foresee automation system. Indeed, the Go to the [input] section of the file and replace people using the display for Foundation‘s Gordon Hollingworth the lines in there with the following projects like home control panels. is already using his screen and They could be a single point Pi with an add-on Pi-mote board mouse = mouse of control for heating and air (bit.ly/1MtujUU) and Energenie mtdev_%(name)s = probesysfs,provider=mtdev conditioning, show status of doors mains switches to remotely hid_%(name)s = probesysfs,provider=hidinput and windows, or control home control the electrical sockets entertainment systems. It wouldn’t in his home. be dicult to mount the panel Try it out inside a wall. With power and a USB aunch the multi-touch pictures demo again Wi-Fi dongle, a home control panel could be fully extensible. python ~/kivy/examples/demo/pictures/main.py “The display could also be used to control devices like 3D printers, Use multi-touch gestures to drag, rotate, and CNC routers, and homebrew sound pinch-oom the photos. Press CTRL+C to eit. To see systems,” adds Matt. Kivy’s many UI elements, launch the showcase ince the ocial touchscreen has only just been released, it’s early python ~/kivy/examples/demo/showcase/main.py days, but we have already spotted a few projects in the wild. If you’re ou can eplore the other eamples in ~/kivy/ working on one yourself, please do examples/ if you like. let us know. ow it’s time to try out att’s demo, linking the Pi’s PI pins up to some electronic components to PiPad 2.0 give a basic eample of physical input and output MCM Electronics’ Michael K Castor, using Kivy. pieo buer is connected to PI creator of the original ‘PiPad’, pin , a red to pin , a yellow that will has designed and 3D-printed a ash) to pin 0, and a button has one leg connected to case for a prototype tablet device pin and the other to ground see page 44 diagram). using the ocial touchscreen Unless you’re using Raspbian essie, you’ll need to (bit.lyfdz). Like Clive Beale, be root to control the PI pins. o you’ll need to copy he’s reduced the depth of the setup the edited config file to the root account by reverse-mounting the Pi on the screen’s video board, bending out suo cp /iv/configini /root/iv/ two GPIO pins to attach jumper Carputer configini leads for power. “The result is a Chris is using his new ocial self-contained and fully functional touchscreen for a carputer project ou can now run the code Raspberry Pi-based tablet that (you can see it on Instagram serves for the foundation of the here: bit.lyPwcy). He says cd rpi-kivy-screen/ ‘PiPad 2.0’,” says Michael. If you he’s “planning on having Kodi sudo python main.py want to 3D-print the case, the for multimedia and RetroPie for files are available on itub passenger gaming.” Both are already The left on-screen panel will light up whenever bit.lymed. up and running on the screen. you press the physical button on the breadboard. The middle panel can be touched to toggle the red ono. Touch the right panel to cause with the touchscreen and PI pins. att the buer to emit a short beep. The slider is used to says he epects people to do some really cool control the speed of the ashing yellow . stu with it. ull details, code, and a video This is ust a simple demo that barely scratches demonstration of his Kivy eample can be found the surface of what can be achieved using Kivy at github.com/mrichardson23/rpi-kivy-screen.

raspberrypi.org/magpi November 2015 49 Tutoria WALKTHROUGH SIMON MONK Simon Monk is the author of the Raspberry Pi Cookbook and EVERYDAY Programming the Raspberry Pi: Getting Started with Python, among others. PART 9 simonmonk.org ENGINEERING monkmakes.com

3V3 5V GP2 5V GP3 GND GP4 GP14 GND GP15 GP17 GP18 GP27 GND GP22 GP23 3V3 GP24 GP10 GND GP09 GP25 GP11 GP8 GND GP7 DNC DNC GP5 GND GP6 GP12 GP13 GND GP19 GP16 GP26 GP20 GND GP21

RGB LED indicates network status

Mini-servo with meter needle PINGOMETER Solve real-world electronic and engineering problems with your Raspberry Pi Yo’l and the help of renowned technology hacker and author, Simon Monk Nee he ‘pingometer’ gives a visual indication of > 9g mini servo P how much lag there is between your Raspberry motor Pi and your desired server on the internet. > Raspberry Squid As the Raspberry Pi will be connected to the same RGB LED network as your PC or games console, this will give > 3× male- you an indication of just how much delay there is to-female between your network and the online game server that umperwires you want to play on. It does this using a Linux network > Cocktail stick (to command called ‘ping’ that tells you how long it took make needle) for a small packet of data to get to the server and then > Glue back to your computer. This value is in milliseconds > Small food (thousandths of a second). container as As well as a servo-controlled meter indicating the an enclosure ping time (between 0 and 1,000 milliseconds), an RGB > Drill and LED will change from green for a fast ping, to orange craftknife for an okay ping, to red for a slow ping. If the ping fails to connect to the remote server, then the LED will be blue. Above The pingometer shows your connection speed

50 November 2015 raspberrypi.org/magpi PINGOMETER Tutoria

As you’ll see from the list of required components on the previous page, this project has both the servo motor and RGB LED module plugged directly into the BUILDING THE PROJECT Raspberry Pi GPIO pins, so no breadboard is needed. The servo motor is of a type called 9g, and you can This is a pretty straightforward project to build. find these on eay for very little money. Everything just plugs into the GPIO header pins. The RGB LED is a device called a Raspberry Squid that combines a bright 10mm RGB LED with built- in current-limiting resistors and female header leads. ou can find full instructions for building your own Squid on the GitHub page for the Squid’s accompanying library (github.com/simonmonk/ squid). If you would rather buy a ready-made Raspberry uid, however, you can find one on Amazon or see monkmakes.com/squid. The food container came from a supermarket and has the nice feature that if you leave the top clip undone, it acts as a diuser for the .

>STEP-01 Attach the Raspberry Squid Connect the black header of the Raspberry Squid to a GND connection of the GPIO header, the red lead to GPIO 18, the green to GPIO 23, and the blue to GPIO 24.

1.0 mS 1.5 mS 2.0 mS

Above Controlling a servo motor Servo motors The key to this project is the servo motor that moves the meter needle. ervo motors are dierent from more conventional motors in that they are not free to rotate continuously. In fact, they can only normally rotate about 180 degrees. Servo motors have three leads: two power leads (ground and 5V) and a control lead. The control lead is fed a series of pulses of varying length. The length of the pulses will determine the servo motor’s angle. If the pulses are around 1 millisecond, the arm of the servo will be at one end of its range >STEP-02 - let’s call that 0 degrees. A pulse length of 1.5 Attach the servo milliseconds will position the servo arm right in the When you first plug the servo onto the P connector, there will be a surge of current, and this can be enough to cause your Raspberry Pi middle of its range (90 degrees), and a 2 milliseconds to reset. So it’s best to attach the servo to your Raspberry Pi while it is pulse will put the arm at the far end of its range powered off. (180 degrees). In practice, servos often don’t do the Use the three female-to-male jumper wires to connect the brown full 180 degrees – the range is sometimes more like lead of the servo to a GND pin on the GPIO connector, the red servo 0 to 170 degrees. lead to 5V, and the orange lead to GPIO pin 25. Fit one of the servo arms loosely onto the motor, just so that you can Building your pingometer see the servo moving, and jump ahead for a moment to the software As with all projects, it is a good idea to test the project section to try out the project before you go boxing everything up. out and get everything working while the parts are all out on your workspace. Once you know all is well, you can install the project in its enclosure.

raspberrypi.org/magpi November 2015 51 Tutoria WALKTHROUGH

Now that the hardware side of the project is complete, we just need to get the software running. The program is written in Python and uses the Squid library to control the colour of the Raspberry Squid. To install the Squid library, make sure that your Raspberry Pi has an internet connection and then run the commands:

git clone https://github.com/simonmonk/ squid.git cd squid sudo python setup.py install

You can download the program for this project from your Raspberry Pi command line, using:

git clone https://github.com/simonmonk/ pi_magazine.git

To run the program, change directory to the one where the code for this project lives and then run the >STEP-03 program using the commands below: Fix the servo to the lid cd /home/pi/pi_magazine/09_pingometer Use a hot glue gun, or other glue, and stick the cocktail stick onto the sudo python pingometer.py servo arm. You may need to shorten the stick a little to suit the size of your container. Carefully cut out a rectangle in the lid for the front of the servo to push through, and glue the servo in place. Resist the hen you run the program, you may find that the temptation to screw the servo arm firmly into place ust yet, as some needle is in the wrong place. The section on using adjustment will probably be necessary later. the pingometer will eplain how to fi this. How the code works The Python code for this program is pretty heavily commented. ou will probably find it handy to have the code up in an editor while we go through it. The program starts by importing the subprocess, time, RPi.GPIO and squid libraries that it needs. The constant HOSTNAME is used to specify the server whose ping is to be measured. If you are using this project for gaming, then put the address of the gaming server that you are going to use here. The PING_PERIOD variable determines how often the ping is measured, and GOOD_PING and OK_PING determine the colour that the Squid will display. If the ping is less than GOOD_PING, the LED will be green; if it’s greater than GOOD_PING but less than OK_PING, it will be orange; otherwise it will be red. The variable SERVO_PIN specifies the pin used to control the servo motor, and MIN_ANGLE and MAX_ANGLE determine the servo arm’s range of >STEP-04 movement, as we don’t want it swinging through Finish the boxing its full 180 degrees. Drill 10mm holes in the box for access to the USB socket and for the Next, the SERVO_PIN is set up as a PWM pin so that Raspberry Squid. If you are using an Ethernet connection, then you will need another hole for that. We used a USB WiFi adaptor. Make sure that we can generate pulses of the right length to move everything lines up okay for the servo motor. the servo. n the code downloads for this proect you will also find an image file The variable squid is initialised using the GPIO pins for a very simple scale. You can print this out, cut it down to size, and for the red, green, and blue channels (18, 23, and 24). then stick it on the inside of the plastic food container. The function map_ping_to_angle converts a ping time of between 0 and 1 seconds to an angle between MIN_ANGLE and MAX_ANGLE.

52 November 2015 raspberrypi.org/magpi PINGOMETER Tutoria Pingometer.p Languag e he ser he ngle speifie >PYTHON import subprocess, time def set_angle(angle): import RPi.GPIO as GPIO duty = (angle) / 10.0 + 2.5 from squid import * p.hngele() time.sleep(0.2); gie he r ie e HOSTNAME = "us.mineplex.com" p.hngele(0) # stop servo jitter # HOSTNAME = "google.com" PING_PERIOD = 3.0 # seconds def ping(hsne): GOOD_PING = 0.1 # seconds try: OK_PING = 0.3 # seconds output = spress.hep( "ping -c 1 -W 1 " + hsne shell=True) SERVO_PIN = 25 # control pin of servo return (output.split('/')[5]) / 1000.0 MIN_ANGLE = 30 except: MAX_ANGLE = 150 return -1

nfigre he pin try: GPIO.setmode(GPIO.BCM) hile True: GPIO.setup(SERVO_PIN, GPIO.OUT) p = ping(HOSTNAME) pwm = GPIO.PWM(SERVO_PIN, 100) # start PWM at 100 Hz # p = input("ping=") # Use for testing pwm.start(0) print(p) set_angle(map_ping_to_angle(p)) squid = Squid(18, 23, 24) if p == -1 : squid.set_color(BLUE) def map_ping_to_angle(ping_time): elif p < GOOD_PING: # ping timeout of 1000 ms sets maximum squid.set_color(GREEN) # ping min of 0 elif p < OK_PING: s ping neele er he righ squid.set_color((50, 15, 0)) # Orange angle = ping_time * (MAX_ANGLE - MIN_ANGLE) + MIN_ANGLE else: if angle > MAX_ANGLE : squid.set_color(RED) angle = MAX_ANGLE time.sleep(PING_PERIOD) if angle < MIN_ANGLE : finll: angle = MIN_ANGLE GPIO.cleanup() return angle

The function set_angle sets the servo pulse to the the units from milliseconds to seconds, as used in the correct duty cycle, and so also sets the pulse length to rest of the program. If the call to ping fails for any position the servo. To prevent excessive jittering, after reason, then the try/catch structure will ensure that generating pulses for 0.2 of a second, the duty is set to the function returns -1. 0. This has the eect of the servo arm moving to the The main loop repeatedly measures the correct position and then staying still until set_angle ping and then sets the servo position and LED is called again. colour accordingly. The code to actually get the ‘ping’ is contained in the ping function. This makes a Linux system call to Using your pingometer ping, capturing what would normally appear in the Below the line p = ping(HOSTNAME), there is NEXT terminal into the variable output. This would look alternative code for setting p, simply by inputting a MONTH something like: value. To make it easier to position the servo arm, In the next remove the # from the front of this line and run the project in this series, round-trip min/avg/max/stddev = program again. Enter a value of 0.5 for p and after you will learn 23.739/23.739/23.739/0.000 ms the arm has moved, remove the arm from the servo how to avoid and then put it back, but pointing straight up, as the seasonal danger of The ping command uses the -c 1 parameter, so this is the central position for the meter. You can burst pipes only one ping is made and the minimum, average then put the # back in front of the line again when by making a and maximum are all the same value. To extract that you are done. temperature monitor that value (23.739 in the example above), the string is split The settings used here for GOOD_PING and will email you into an array of strings separated by ‘/’. The content OK_PING are correct for your expert’s somewhat slow when things of index 5 of this array will be one of the elements network where he lives. You will probably need to get too cold. containing this number. Dividing it by 1,000 changes change these values to suit your setup. raspberrypi.org/magpi November 2015 53 Tutoria STEP BY STEP RICHARD HAYLER Richard is a mentor at CoderDojo Ham. His school CodeClub was one of the winning teams in the Primary School Astro Pi competition. richardhayler.blogspot.co.uk MAGIC coderdojoham.org PRESENTATIONS WITH SKYWRITER Amaze your audience with baffling magical powers Yo’l or mastery of the Force using a Skywriter HAT Nee et’s face it: simply using a Raspberry Pi to >STEP-02 > Skywriter HAT run the slides for your talk will make the Install the software or board shop. L audience think you’re pretty cool. But if that’s Make sure you have the latest version of Raspbian, with pimoroni.com not impressive enough, why not dazzle them further all updates installed. As usual, those helpful Pimoroni > Skywriter API by using your telekinetic powers to ip through the Pirates supply a single script to handle the installation, library github. presentation and annotate the slides by drawing in the including the full Python API. Like most HATs, the com/pimoroni air? You don’t even need to be a graduate of Hogwarts Skywriter needs the I2C bus on the Pi to be enabled, > Python or the Jedi Academy: just get yourself a Skywriter device so if you haven’t already got this activated on your Pi, AutoPy library github.com/ and some simple Python, and you’re ready to rock. you’ll need to reboot before the Skywriter will work. msanders/ The Skywriter device uses a grid of transmitting autopy electrodes to generate an field that propagates curl -sSL get.pimoroni.com/skywriter | bash > ibrece around the surface in three dimensions. When you move Impress libreoffice.org your hand above the kywriter, it disturbs this field and You’ll also need the AutoPy Python library and its these variations are detected by the receiver electrode dependencies, so install these with: grid. These measurements can be used to calculate the position and movement direction of your hand. sudo apt-get install libx11-dev libxtst-dev

>STEP-01 …and then: Below You can Connect the Skywriter device use longer wires or a ribbon cable If you have a Skywriter HAT, this just connects onto sudo pip install autopy to locate the the GPIO pins like other HATs. If you have the larger Skywriter board away from the Pi Skywriter board, you’ll need to connect six GPIO pins to if needed the matching pins at the top, as shown below. >STEP-03 Test your Skywriter The Python API has example scripts to help you become familiar with the way Skywriter works:

cd Pimoroni/skywriter sudo python test.py

Now wave your hand around in the air just above your Skywriter. You should see three columns of scrolling numbers corresponding to your hand’s position in a three-axis (x/y/z) box over the device. The Python library is preconfigured to recognise certain gestures a ick (swiping over the Skywriter), a tap or touch (bring your hand down to just above the surface), and, trickiest of all, the irwheel wiggle a finger in a circular pattern above the Skywriter). It takes a while to get the hang

54 November 2015 raspberrypi.org/magpi MAGIC PRESENTATIONS WITH SKYWRITER Tutoria

of reproducing these gestures so that they are always Languag detected, so spend some time practising. You can edit the Magi _Contro.p >PYTHON test.py script and comment out the @skywriter.move() #!/usr/bin/env python DOWNLOAD: function (which displays the x/y/z numbers) to make it import skywriter github.com/top- easier to see when you’ve nailed one of the gestures. import signal shed/MagicPres import autopy >STEP-04 import sys Configure your presentation software Now it’s time to get your presentation software mouse_down = False #work out how big the screen we're using is. ready. ibreffice Impress is very similar to icrosoft width, height = autopy.screen.get_size() PowerPoint and works well on the Raspberry Pi. If you don’t need the other applications in the ibreffice @skywriter.move() suite, you can just install Impress and the core def move(x, y, z): components using: #print( x, y, z ) global mouse_down suo aptget install lireofficeipress if mouse_down: # Only run if we're in drawing mode x = (x) * width You’re going to use Python code to detect gestures y = (y) * height via the Skywriter and generate keyboard taps to # scale to screen size control Impress in the normal way. The only extra x = int(x) y = height - int(y) configuration necessary is to activate the functionality that lets you draw on slides with the mouse. This is if( y > 799 ): done by selecting Slide Show>Slide Show Settings and y = 799 checking the ‘Mouse pointer as pen’ box. autopy.mouse.move(x, y) >STEP-05 #print( int(x), int(y) ) Use the code Type up the code from the listing (right) and save it as srier.i() magic_control.py. You can do this using IDLE or with def i(start,finish): another tet editor of your choice. tart ibreffice print( i sr finish) Impress and open your presentation. Then minimise if start == "east": # Back through Impress slides autopy.key.tap(autopy.key.K_LEFT) Impress and run your code either through Idle or via if start == "west": # Forward through Impress slides the command line: autopy.key.tap(autopy.key.K_RIGHT) if start == "north": # Start slideshow sudo python magic_control.py autopy.key.tap(autopy.key.K_F5) if start == "south": # Quit slideshow ow ip back to Impress and get ready to start your autopy.key.tap(autopy.key.K_ESCAPE) talk or presentation.

>STEP-06 @skywriter.double_tap() Dazzle your audience def doubletap(position): tart the slideshow by icking upwards across the print('Double tap!', position) sys.exit() # Emergency stop Skywriter. You can navigate through the slides by icking left to right forward), or right to left backwards). To end the presentation, ick down @skywriter.tap() across the Skywriter. def tap(position): To annotate a slide, you need to activate the drawing global mouse_down function. Do this using a tap/touch: you’ll now be print('Tap!', position) controlling the mouse with your hand movements, if mouse_down: # Toggle mouse up/dwon leaving a trail on the screen just like you’re drawing autopy.mouse.toggle(False) with a pen. This takes practice, so make sure you’ve mouse_down = False spent some time preparing in advance! When you’ve else: finished drawing, taptouch again to disengage the autopy.mouse.toggle(True) mouse_down = True pen function. We all know that, under the pressure of a live #@skywriter.touch() performance, things can go wrong. If you want to #def touch(position): quickly disable Skywriter control of the presentation, # print('Touch!', position) use a double-tap to quit the Python program. signal.pause() raspberrypi.org/magpi November 2015 55 Tutoria STEP BY STEP JAMES SINGLETON James is a software developer and engineer. He founded Computing 4 Kids Education (C4KE) and Yo Flow online gym inductions. computing4kids.com unop.uk

TIME-LAPSE

PHOTOGRAPHY Photo by NASA JSC Make a device to capture photographs at regular intervals. Yo’l Then turn these images into a video Nee ime-lapse photography reveals exciting things >STEP-01 about the world which you wouldn’t otherwise Connect the Camera Module > Raspberry Pi T Camera Module be able see. Things that happen too slowly First, connect the camera module to the Raspberry raspberrypi. for us to perceive: bread rising and plants growing; Pi with the included ribbon cable. Locate the org/products/ camera-module the clouds, sun, moon, and stars crossing the sky; correct socket; it’s on the top of the Raspberry Pi shadows moving across the land. In this tutorial, we’ll circuit board and is the one furthest away from the be making a Raspbian-based device that lets you watch micro-USB power connector. The socket is handily things that are too slow to observe with the naked eye. labelled ‘CAMERA’ on the newer Raspberry Pi To do this, we will capture lots of still photographs and models. Lift up the outside of the socket to release combine these frames into a video with FFmpeg/libav, the clamp, then insert the ribbon cable with the which can then be accessed via a web browser. metal contacts facing towards the micro-USB power connector. Finally, hold the ribbon cable in position The top of the camera is at The metal contacts on the the other end of the ribbon ribbon cable should face away and push the outside of the socket back down to cable connection from the Ethernet socket clamp the cable in place. >STEP-02 Enable and test the camera Power the Raspberry Pi up. You now have a choice: boot to the command line, open a terminal window, or establish a secure shell (SSH) connection. Enable the camera by running this command from a terminal to launch the Raspberry Pi configuration tool

suo raspiconfig

Then select the 'Enable Camera' option. You can test the camera by running the following command:

56 November 2015 raspberrypi.org/magpi TIME-LAPSE PHOTOGRAPHY Tutoria

raspistill o testiagepg

The red LED on the camera module should light up for 5 seconds and a JPEG image will be saved to the current directory. If the camera is mounted upside down, then you can use the vertical and horizontal ip command-line switches -vf and -hf). >STEP-03 Install and configure software so make sure that your subject is in frame. Run this Above Shell running the Install a web server to access your images remotely. to start the capture: rendering process Run this command to install Apache: on the Raspberry Pi. This will take suo raspistill 10 100 t 1000000 some time, so you suo aptget install apace tl 10000 o /var//frae0pg may prefer to use a faster machine

Remove the default page to see the contents This takes a photograph every ten seconds of the directory: (10,000 milliseconds) for three hours (10,800,000 MAKE AN milliseconds). The ampersand () at the end runs the ANIMATED GIF suo r /var//inetl process in the background. Instead of video, make Visit the IP address of your Pi (e.g.http://192.168.1.45 >STEP-05 an animated GIF with you can find this by using ifconfig) and you should Prepare to make the video ImageMagick. see an empty directory listing. If you run the following You can render the video on the Raspberry Pi, but it’ll be Use smaller command and refresh the page, you should see an very slow. better way is to transfer the files to a more images, captured less frequently. image file listed. ou run this as a superuser so you can powerful computer. In any case, you’ll need to install write to the directory. the tools on the rendering machine; for the Pi, enter: sudo convert /var/www/ suo raspistill o /var//testiagepg suo aptget install liavtools frame*.jpg /var/ www/anim.gif &

lick on the file link and you’ll see the image This installs a fork of FFmpeg, but you can also use in your browser. the original FFmpeg. To copy the images to a remote machine, you can download them from the web server >STEP-04 using wget or curl. For example: Capture the images Set up your scene and check the positioning get r pg ttp//111 of the camera. Or if you don’t have wget… suo raspistill 10 100 o /var/ /testiageullpg curl ttp//111/frae 000107pg O The width and height have been changed to capture a smaller image in 16:9 aspect ratio. This makes Change the IP address and numbers accordingly. things easier later. The top and bottom are cropped, >STEP-06 Below Some bread dough ready to prove. Watch it rise in your video. e careful not to move the bowl or camera during filming Make the video The final step is to make the video. Run this command to start the rendering process:

suo avconv i /var//frae0pg OTHER VIDEO crf v 10 /var//vieoe FORMATS

hen this has finished, you’ll be able to view the WebM is an open video in your browser. The default frame rate is 25fps. video format that can be displayed This compresses three hours of frames at ten-second directly in intervals to about forty seconds of video. You can adjust most browsers. this with the -framerate command-line option. The However, other video formats bitrate () has been set high, and the Constant Rate are available. Factor (-crf) low, to produce a good-quality video. raspberrypi.org/magpi November 2015 57 Tutoria WALKTHROUGH MIKE COOK Veteran magazine author from the old days and writer of the Body Build series. Co-author of Raspberry Pi for Dummies, MIKE’S PI BAKERY Raspberry Pi Projects, and Raspberry Pi Projects for Dummies. bit.ly/1aQqu15

The sliders have 16 possible combinations

The player pushes the pen around the maze, moving red barriers out of the way

Yo’l Nee

> Amaze game by ThinkFun AMAZE – > 4× SFH3410 light sensors

> 4× pieces of 3- by 4- hole stripboard

> An 8-pin header THE MAZE socket Explore the complexity of a moving-barrier maze

> 5× 300mm wires and let your Raspberry Pi help you navigate it with crimped female header ere at Mike’s Pi Bakery we have always been The instruction leaet shows each combination of sockets interested in mazes. The problem tends to left and right for an increasingly complicated maze. > Insulating tape H be that most mazes are either too open and Furthermore, there is a table telling you which slider & hot-melt glue simple, or too dense and complex. However, recently you have to push, and in what order, to complete the we came across the Amaze from ThinkFun. This is a maze. Of course, even if you got the correct order of mae with a dierence it’s uite open, but it’s not pushing, there’s no guarantee that you could finish immediately apparent how to complete it. This is due the maze because it matters where in the barrier to four rows of movable barriers on every third line. you pushed it, and they aren’t telling you that. What These barriers can be pushed in the direction that your makes this table a bit messy is that you can see all maze-following pen allows, so the path from start the solutions at once; with a computer interface, not to finish is not initially visible. The game is purely only could you simply select the maze’s complexity, mechanical, but when we got it home we saw that but also tailor the sort of help you’re given. Add to by interfacing it to a Raspberry Pi we could add some that the inclusion of sound eects, and the magic fun to the game, both in setup and play. Basically, of seeing the on-screen graphics reect the real- with four sliders that can be set either left or right, life hardware, and you have all the ingredients for a there are 6 possible ways to configure the mae. worthy Bakery project.

58 November 2015 raspberrypi.org/magpi AMAZE – THE MAZE Tutoria

The project We needed a way to interface the Raspberry Pi to the game so that it could read the position of each of the MAKING THE INTERFACE sliders; when you move them, the Pi should be able to read the new position and reect that on the screen. >STEP-01 A careful examination of the sliders showed that the Drilling the sensor holes round spots at the end covered up or revealed the tart off by drilling a hole in the middle of each slider position. Move plastic for the lower half of the case. We thought that all the sliders to the right, exposing the base of the box through the slot. Then take a 2mm drill and drill a hole in the middle of the slot; the hole a strategically placed phototransistor could detect will emerge through the base on the underside. On the reverse, drill a the light dierence between the two states of the similar-sized blind hole about 1cm away from the through hole. This is slider, especially if a hole was drilled in the lower side. to act as a securing hole for the hot-melt glue you will use later. To increase the contrast we placed a piece of black insulating tape on the underside of the slider, because it was a bit translucent. To simplify the electronics circuitry even further, we used a phototransistor attached directly into a digital input and allowed the internal pull-up resistor to act as the load. The only downside to this was that we had to ensure there was sufficient light reaching the phototransistor down a rather narrow hole. If there is insufficient light to register a logic low on the GPIO pin, then a small >STEP-02 anglepoise lamp can be aimed at the sliders. The Fitting light baffles schematic of the sensor interface is shown in Fig 1 Dismantle the Amaze by removing the four self-tapping screws, clean out (page 61); we chose the small phototransistor SFH3410 any swarf created by the drilling, and fix a small length of black masking to use here because it was cheap and at enough to sit tape inside the back of the slider at the end you have drilled the hole. This in the underside well of the game. For a step-by-step reduces the light through guide to installing the sensors on the Amaze, see the a closed hole. You could use acrylic paint here ‘Making the interface’ box. if you like. Reassemble the box, taking care not The screen display to force the self-tapping ow to work on the screen display. e started o screws back into the with a photograph of the Amaze and, using a photo- holes if it feels stiff, then editing package, removed all the red partitions and back off until you feel slider indicator with the clone tool. We also removed it click and then screw the cord of the pen and this was then used as the basic in again. You have to be background image, stored in an images directory at careful not to strip the the same level as the main code. Then the program thread in the plastic. could draw in the red barriers in the appropriate place, depending on the position of the sliders. However, this looked a little jerky going from one position to the other, so we decided to animate the change in position SURFACE-MOUNT SOLDERING so that it looked like a smooth movement. The results The only disadvantage with the photo sensor we were uite impressive and certainly better than we have chosen is that it’s a surface-mount device. were expecting. There are a lot of magic numbers We know many people are scared of soldering involved here for the positions of the red barriers, but them, but there’s no reason to be worried, these were easily gathered by the program itself by providing you have a finetipped soldering iron getting it to print out the coordinates of every mouse and a pair of tweezers. The way to do this is to click. This is commented out in the final code, but fix the stripboard to the bench with a blob of you can easily uncomment if you want to see them. Blu-Tack. Then apply a little solder to one track. The space for the pen holder in the image was used emelt this solder and oer the sensor up to the to show user messages, and the ‘Start’ and ‘Finish’ solder with the tweezers. Make sure it is aligned labels were used as clickable areas or buttons. correctly and when it is, remove the iron. Then you can solder the other side of the sensor, and finally Testing the sensors solder the third unconnected tab for mechanical The first thing you want to do is to check out the stability. We have made a video of this process sensors to see if you are getting enough light down and you can see it in the Pi Bakery video channel through the holes when the slider uncovers them. at vimeo.com/138562025. For this you can use the Photo_test.py code on page 63; raspberrypi.org/magpi November 2015 59 Tutoria WALKTHROUGH

Using the program Raspberry Pi PL1 With the sensors in place and the light adjusted, it’s time to run the Amaze.py code listing. It’s a Pygame GPIO 4 GROUND GPIO 17 GPIO 27 GPIO 22 program, so clicking the close box or pressing ESC will uit the program. There’s a startup message printed to the Python console, but after that all communication is through the graphic display. The first thing to do is to select the mae number these go from 1 to 16 and the bigger the number, the more complex the maze is. When you have selected the one

SFH3410 SFH3410 SFH3410 SFH3410 you want, click on the Start label; the display will then move the sliders into the start position and you have Slider 04 Slider 03 Slider 02 Slider 01 to physically push the sliders to match this. When you have done this, you will be asked to set a help >STEP-03 level; there are three of them. First, there is no help Wiring up the sensors at all. Next, there is the validation of a slider move; Make up four sensor boards using small pieces of stripboard, and wire them that means if you move a slider, then you will be told up as shown in the diagram. We used a single-width 8-pin header socket to if this was the correct slider to move. The final level connect these wires to the Raspberry Pi’s P connector P1. The first three of help tells you which slider is the next one to move; pin connections are empty, and the GPIO pins we used followed on from that. however, there is no indication of where in the slider We marked the end of this connector with typing correction uid to make you must push it, so it is still possible to trap yourself sure we always connected it the correct way round to the Pi’s port. You could use a blob of white paint if you haven’t got any corrector uid. even if you move the correct slider. When you have finished or want to give up, click the on-screen inish label and the whole process will start again. Let’s look at the code and see how this magic is worked. How the code works fter the normal Pygame initialisation stu there are four lists defined, one for each slider, containing a tuple with the x and y coordinate of the slide indicator and the start of each of the barriers. These lists are then combined into a list of lists. The same sort of thing is done with the maze solutions. For each initial starting slider configuration of a mae, there is a list of sliders to push, and this list is combined into a list of lists. Note here that while the sliders are numbered for the user as being 1 to 4, in the code these will be given >STEP-04 the numbers 0 to 3, so when indicating the next slider Fixing the sensors to move a 1 must be added to the number in the list. Fix the boards to the back of the maze case with hot-melt glue. Make sure that you can see the black spot of the sensor through the The same goes for maze starting numbers, 1 to 16. This hole from the other side before letting the glue set. Tack the board time the problem is resolved by putting a blank list as on at first to get the position correct, and then fill in the remaining the first item in the list of lists. et, the sounds are spaces with glue. Make sure you do this in stages so as not to melt loaded in from a sounds directory. and disturb the initial positioning spot of glue. When set, cover all the The main function is mainly one infinite while sensor boards with a strip of black insulation tape to ensure a light, loop the first part calls the functions that set up tight fitting for the back. the game, and the final while loop runs until the finish is indicated. The program only responds to a slider move once it’s running, and this is done by the this simply initialises the four GPIO pins as inputs, updateSensors function. This function checks to see if reads them at one-second intervals and prints out the any of the sensors indicate a dierent slider condition value. Note here that a logic 1 indicates that there’s than the program has displayed; if so, then that slider no light or not enough reaching the sensor, and a is updated with the toggleSlider function. It first logic 0 shows that the sensor is detecting enough looks at the old slider state to see what direction it light to pull the pin low. For the test, expose all the needs to move to. Then it performs the animation sensors by moving all the sliders to the right, adjust of moving the sliders; after that, it determines and the lighting so that all the sensors read zero, and then displays any feedback messages. This function is push the sliders to the left, making sure that each one also responsible for playing most of the feedback goes to a logic 1. sounds. The checkForEvent function handles all the

60 November 2015 raspberrypi.org/magpi AMAZE – THE MAZE Tutoria

mouse clicks; there is a section commented out that will ‘push’ the sliders from the keyboard – useful for SFH3410 testing, but not for running the game. Collector Not Connected Customisation Emitter So, what can you do to add your own twist to this project? Well, the observant will have noticed that the clickable areas to set the maze number and help levels remain active at all times; you could make the Raspberry Pi GPIO 4 program more robust by only allowing those clicks to aect the numbers at the correct time. ou can GPIO 17 do this simply by using a global Boolean variable in the click condition, and only setting those variables GPIO 27 when the appropriate function is being executed. Also, when clicking the Start and Finish labels, it would be GPIO 22 good to invert or highlight those areas to give some feedback. ou might want to add white s above each sensor so that the shadow of your hand doesn’t accidentally trigger the slide sensors. However, one SFH3410 SFH3410 SFH3410 SFH3410 big improvement you could make is to give help as Ground to which barrier on the slider to push, but that would Slider 01 Slider 02 Slider 03 Slider 04 reuire uite a bit more work analysing the mae. Whatever you do, have fun. Fig 1 The schematic of the slide position sensors

for each line Languag sliderState = [True,True,True,True] Am.p # True = left, False = right >PYTHON 2.7 # Amaze - maze game mazeLook = [5,9,4,11,6,10,1,12,7,13,3, # By Mike Cook - September 2015 14,8,15,2,16] DOWNLOAD: textHeight = 36 github.com/ import pygame, time, os font = pygame.font.Font(None, Grumpy-Mike/ import wiringpi2 as io textHeight) Mikes-Pi-Bakery/ # solutions tree/master pygame.init() # initialise graphics interface m1 =[3] pygame.mixer.quit() m2 =[3] pygame.mixer.init( m3 =[1,0,3] frequency=22050, size=-16, channels=2, buffer=512) m4 =[1,0,0,3] m5 =[2,1,0,0,3] os.environ['SDL_VIDEO_WINDOW_POS'] = 'center' m6 =[1,2,1,0,0,3] pygame.display.set_caption("Amaze - Maze helper") m7 =[0,2,1,0,0,3] pygame.event.set_allowed(None) m8 =[1,0,2,1,0,0,3] pygame.event.set_allowed([pygame.MOUSEBUTTONDOWN,pygame. m9 =[0,3,0,2,1,0,0,3] KEYDOWN,pygame.QUIT]) m10 =[1,0,3,0,2,1,0,0,3] screen = pygame.display.set_mode([800,665],0,32) m11 =[2,0,3,0,2,1,0,0,3] textHeight = 36 m12 =[2,1,0,3,0,2,1,0,0,3] font = pygame.font.Font(None, textHeight) m13 =[1,0,1,0,3,0,2,1,0,0,3] efine he pins r he rriers m14 =[2,1,0,1,0,3,0,2,1,0,0,3] slider1 = [(87,173),(172,159),(172,187),(210,159),(210,186), m15 =[1,1,0,1,0,3,0,2,1,0,0,3] (248,157),(248,186), m16 =[2,1,1,0,1,0,3,0,2,1,0,0,3] (401,157),(401,185), (440,157),(440,185),(516,157), sol =[ [],m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13,m14,m15, (516,185)] m16 ] slider2 = [(84, 285),(209, 270),(209, 300),(325, 269), progress = 0 (325, 299),(403, 269), (403, 298),(558, 269),(558, 299),(596, 269), (596, 298)] pinList = [22,27,17,4] # GPIO pins for sensor switches slider3 = [(81, 402),(207, 387),(207, 417),(327, 385), background = pygame.image.load( (327, 416),(445, 384),(445, 415),(563, 384), "images/noSlide.jpg").convert_alpha() (563, 414)] restart = False slider4 = [(78, 522),(166, 507),(166, 538),(206, 506), chosen = False # for options (206, 537),(246, 505), mazeIDnumber = 1 (246, 538),(327, 505),(327, 538),(448, 505), helpLevelNumber = 2 (448, 536),(568, 504),(568, 535),(607, 503), helpLevel = ["No help", "Validate slide", (607, 535)] "Show next slide","Start maze run now"] slider = [slider1, slider2, slider3, slider4] soundEffects = ["slide","ping","wrong",finish,"thanks","help"] sliderShift = [38,38,40,40] # amount to shift slider x position mazeSound = [ pygame.mixer.Sound( "sounds/"+soundEffects[sound]+".wav")

raspberrypi.org/magpi November 2015 61 Tutoria WALKTHROUGH

for sound in range(0,6)] drawWords("Change help level ",398,65) pygame.display.update() def main(): mazeSound[5].play() global moved, restart, progress current = helpLevelNumber initGPIO() chosen = False print"Amaze - click on the start button" while not chosen: while True: checkForEvent() restart = False if current != helpLevelNumber : setMaze(choose()) current = helpLevelNumber waitForSet() # player puts maze into that position showPicture() progress = 0 # number of slides drawWords(helpLevel[helpLevelNumber],366, 37) helpLevelRequired() drawWords("->",366,65) if helpLevelNumber == 2: pygame.display.update() drawWords("First slider to move is" drawWords(helpLevel[3],366, 37) +str(sol[mazeIDnumber][progress]+1),366, 37) pygame.display.update() pygame.display.update() time.sleep(2) while not restart: showPicture() checkForEvent() updateSensors() def choose(): def initGPIO(): global chosen, mazeIDnumber try : chosen = False io.wiringPiSetupGpio() mazeIDnumber = 1 except : currentMaze = mazeIDnumber print"start IDLE with 'gksudo idle' from command line" showPicture() os._exit(1) drawWords("Choose Maze",366, 37) drawWords("<-",536,65) for pin in range (0,4): drawWords("->",576,65) io.pinMode(pinList[pin],0) drawWords("01",556,37) io.pullUpDnControl(pinList[pin],2) # input enable pull up pygame.display.update() while not chosen : def showPicture(): # draws maze and sliders checkForEvent() screen.blit(background,[0,0]) if mazeIDnumber != currentMaze : lineCol = (230,20,0) currentMaze = mazeIDnumber for s in range(0,4): if currentMaze > 9 : pygame.draw.circle(screen,lineCol,slider[s][0],4,0) ns = str(currentMaze) points = len(slider[s])-1 else : for block in range(1,points,2): ns = "0"+str(currentMaze) pygame.draw.line(screen,lineCol, drawWords(ns,556,37) slider[s][block],slider[s][block+1],4) pygame.display.update() pygame.display.update() return mazeIDnumber def waitForSet(): # hold until put into matching position def drawWords(words,x,y) : drawWords("Set your Maze like this",366, 37) textSurface = pygame.Surface((len(words)*12,textHeight)) pygame.display.update() textRect = textSurface.get_rect() while checkSetup(): textRect.left = x checkForEvent() textRect.top = y showPicture() pygame.draw.rect(screen,(81,133,133), ( drawWords("Thank you",366, 37) x,y,len(words)*12,textHeight-10), 0) pygame.display.update() textSurface = font.render( mazeSound[4].play() words, True, (180,180,180), (81,133,133)) time.sleep(3.0) screen.blit(textSurface, textRect) def checkSetup(): # see if sensors are registering correctly def toggleSlider(s,showHelp): # move sliders to the other side done = True global sliderState, progress for i in range(0,4): if showHelp : if sliderState[i] != bool(io.digitalRead(pinList[i])): mazeSound[0].play() done = False if sliderState[s] : return not done shift = 2 else : def updateSensors(): # see if the sliders have changed shift = -2 for i in range(0,4): sliderState[s] = not sliderState[s] sensor = bool(io.digitalRead(pinList[i])) moves = 0 if sliderState[i] != sensor: while moves != sliderShift[s] : toggleSlider(i, True) moves += abs(shift) time.sleep(2.0) updateSlider(s,shift) return showPicture() if showHelp and helpLevelNumber !=0 : def helpLevelRequired(): time.sleep(0.8) ll slie sn finish global helpLevelNumber, chosen if progress < len(sol[mazeIDnumber]): drawWords(helpLevel[helpLevelNumber],366, 37) if s != sol[mazeIDnumber][progress] : drawWords("->",366,65) drawWords("Wrong - out of sequence",366, 37)

62 November 2015 raspberrypi.org/magpi AMAZE – THE MAZE Tutoria

pygame.display.update() if (point[0] > 535 and point[0] <557) and ( mazeSound[2].play() point[1] > 67 and point[1] < 91): if helpLevelNumber == 2: mazeIDnumber -= 1 time.sleep(3.0) if mazeIDnumber < 1: drawWords("The next slider move should be " mazeIDnumber = 16 +str(sol[mazeIDnumber][progress]+1),366, 37) if (point[0] > 576 and point[0] <597) and ( pygame.display.update() point[1] > 66 and point[1] < 90): else : mazeIDnumber += 1 drawWords("OK",366, 37) if mazeIDnumber > 16: pygame.display.update() mazeIDnumber = 1 mazeSound[1].play() if (point[0] > 365 and point[0] <385) and ( progress += 1 point[1] > 66 and point[1] < 91): if progress < len(sol[mazeIDnumber]) : helpLevelNumber +=1 if helpLevelNumber == 2: if helpLevelNumber >2: time.sleep(1.2) helpLevelNumber = 0 drawWords("OK - next slider is " if (point[0] > 661 and point[0] <725) and ( +str(sol[mazeIDnumber][progress]+1),366, 37) point[1] > 607 and point[1] < 623): pygame.display.update() restart = True else: time.sleep(1.5) if event.type == pygame.QUIT : mazeSound[3].play() terminate() drawWords("Click on Finish when done",366, 37) if event.type == pygame.KEYDOWN : pygame.display.update() if event.key == pygame.K_ESCAPE : else: terminate() drawWords("Move was not required",366, 37) if event.key == pygame.K_RETURN : pygame.display.update() restart = True ''' def updateSlider(s,inc): if event.key == pygame.K_1 : global slider toggleSlider(0, True) points = len(slider[s]) if event.key == pygame.K_2 : for i in range(0,points): toggleSlider(1, True) slider[s][i]= (slider[s][i][0] + inc,slider[s][i][1]) if event.key == pygame.K_3 : toggleSlider(2, True) def mazeNumber(): # set the maze to an ID number if event.key == pygame.K_4 : mazeNum = 0 toggleSlider(3, True) for i in range(0,4): ''' mazeNum = mazeNum << 1 # Main program logic: if sliderState[i] : if __name__ == '__main__': mazeNum = mazeNum | 1 main() return mazeLook[mazeNum] def setMaze(n): i = 0 Phot_tes.p while mazeLook[i] != n: i += 1 # photo transistor input test # i has the bit pattern of the slider states # for the Amaze game - Mike Cook September 2015 mask = 0x8 import time, os for n in range(0,4): import wiringpi2 as io if (mask & i) == 0 and sliderState[n] == True: toggleSlider(n, False) pinList = [22,27,17,4] # GPIO pins for sensor switches elif (mask & i) != 0 and sliderState[n] == False: toggleSlider(n, False) def main(): mask = mask >> 1 initGPIO() print"Amaze sensor switch test" def terminate(): # close down the program while True: print "Closing down please wait" for i in range(0,4): pygame.mixer.quit() print io.digitalRead(pinList[i])," ", pygame.quit() # close Pygame print" " os._exit(1) time.sleep(1) def checkForEvent(): # look at keys def initGPIO(): global restart, chosen, mazeIDnumber, helpLevelNumber try : event = pygame.event.poll() io.wiringPiSetupGpio() if event.type == pygame.MOUSEBUTTONDOWN: except : point = pygame.mouse.get_pos() print"start IDLE with 'gksudo idle' from command line" # print point os._exit(1) # print out position of click for development for pin in range (0,4): if (point[0] > 366 and point[0] <520) and ( io.pinMode(pinList[pin],0) point[1] > 37 and point[1] < 63): io.pullUpDnControl(pinList[pin],2) # input enable pull up chosen = True if (point[0] > 630 and point[0] <691) and ( # Main program logic: point[1] > 76 and point[1] < 94): if __name__ == '__main__': chosen = True main()

raspberrypi.org/magpi November 2015 63 Tutoria STEP BY STEP ROB ZWETSLOOT Tech writer, avid coder, and Raspberry Pi enthusiast with a history of building many things with Raspberry Pi twitter.com/RobThez

Create simple images or more advanced pixel art to represent your favourite thing

The 8×8 display on the Sense HAT may be simple, but it has a wide range of colours and is fully programmable

Yo’l Nee > Raspbian raspberrypi.org/ PIXEL ART downloads

> Sense HAT raspberrypi.org/ products/ ON SENSE HAT sense-hat Make use of Python and the Sense HAT’s LEDs > Pixel art to read and display 8×8 pixel art

e know what you’re thinking: 8×8 pixel art on top of the Pi. Turn it back on and it’s ready to use. doesn’t seem like a whole lot of pixels. And if If you haven’t made the update, you’ll need to install a W you were thinking that, you’d be right. That’s few etra libraries first. pen the terminal and run the 64 pixels to try to convey something – simple for low- following commands: complexity objects, but for proper pixel art it seems like a tall order. If you think back to the early days sudo apt-get install sense-hat of gaming, though, there are plenty of examples of sudo pip-3.2 install pillow INSPIRATIONAL sprites that didn’t use many pixels at all and looked… CODE passable. The main limitations in those days were the and then reboot the Raspberry Pi which you can This tutorial number of colours you could have on screen at once, also do in the terminal with sudo reboot if you wish!) was inspired and with the Sense HAT we have the power to use a full by reader Mike RGB spectrum, utilising every pixel to make something Legg on Twitter, >STEP-02 who created a bit better than on the old Atari 2600. Grab a sprite, Find some art code to cycle and let’s go! There’s a few ways you can do this: using Google or through all 100 searching on something like DeviantArt with the characters on Johan Vinet’s >STEP-01 right keywords piel art’ is a good start) and you sheet. View the Get the Sense HAT ready should be able to find a suitable sprite for showing o Python code for If you’ve upgraded to the newer version of Raspbian, on your Sense HAT. You could also experiment with this here: bit.ly/1GOV0Bp essie, all you need to do is switch o the Raspberry Pi, a suare picture from something like Instagram) to remove the power cable, and then plug the Sense HAT see what the code will spit out, or you can draw your

64 November 2015 raspberrypi.org/magpi PIXEL ART ON SENSE HAT Tutoria

own piel art in something like wanky Paint. or testing this tutorial, we grabbed one of the 100 Pelar.p Languag characters from a sprite sheet created by Johan >PYTHON inet twitter.com/johanvinet), which can be from sense_hat import SenseHat found here: bit.ly/1jxaJ3m. import time from PIL import Image >STEP-03 import os Prepare the art The Sense HAT can only display 64 pixels, and our pen ige file code assumes the image you have is going to be igefile = os.path.join( eactly that. n a normal computer, use an image os.sep,"/home","pi","SenseHAT",pielr.png) editor such as the free software IP to prepare img = ge.pen(igefile) the image. Remove any borders you may need to zoom right in to make sure) by cropping the image enere rg les fr ige piels and save it to a file name you’ll remember with the rgb_img = img.convert('RGB') extension .png or .gif. This is especially important igepiels = lis(rgb_img.getdata()) if the 8×8 art you have isn’t actually saved as an 8×8 image for instance, if each piel’ in the art is si e he piels nee pixels wide, like in our code. pielih = 6 igeih = pielih*8 >STEP-04 sensepiels = [] Study the pixel art srpiel = 0 As mentioned above, your pixel art may not be hile srpiel < (igeih*64): actually saved by the pixel. In the code we’ve sensepiels.een(igepielssrpiel( created, it takes this into account. The easiest way srpiel+igeih)pielih) to check the width of the pixels is to look at the srpiel += (igeih*pielih) resolution of the image. In our case, it’s 48×48, which means that each piel’ is si real piels wide ispl he ige and high, because it’s a suare). ou can check sense = SenseHat() this in IP by using a suare piel brush and sense.set_rotation(r=180) increasing the size until it’s the same as the pixels sense.sepiels(sensepiels) in your image. Alternatively, once you’ve cropped ie.sleep (3) the image, you can scale the image to be 8×8; this may not have the desired results, though, as it tries sense.ler() to squash everything together. >STEP-05 Load it all on the Raspberry Pi Put the image on the Raspberry Pi and open it in the image viewer to make sure it transferred fine. e did this by plugging the SD card directly into the computer we prepared the image on and copied it to a directory called enseT’ in the home folder, but you can always put it on a USB stick and copy it over from within the Pi or upload it to your cloud storage and download it to the Pi. >STEP-06 Write the code! ollow along to the code listing and tweak it to suit your own pixel art, whether this means you need to change the location of the file in the code our code assumes you’ve put it in a folder called enseT’ in Raspbian’s home directory) or if you need to change the width of each piel to or higher. Press to run the code, and it will then display the Above Rob is very vain, and (carefully) cut out image on the Sense HAT for three seconds before an image of his alter-ego M. Bison to display on turning itself o. the Sense HAT, taken from Johan’s sprite list raspberrypi.org/magpi November 2015 65 Tutoria WALKTHROUGH SAM AARON Sam is the creator of Sonic Pi. By day he’s a Research Associate at the University of Cambridge Computer Laboratory; by night he writes code for people to dance to. PART 4 sonic-pi.net

ACID && In the fourth part of his series, BASS Sam Aaron turns your Raspberry Pi Yo’l into a TB-303, the infamous acid house bass sound… Nee t’s impossible to look through the history > Raspberry Pi Squelch that bass running Raspbian of electronic dance music without seeing First, let’s build a live arpeggiator to make things fun. I the enormous impact of the tiny Roland In the last tutorial, we looked at how ris can ust be > Sonic Pi v2.6+ TB-303 synthesiser. It’s the secret sauce behind the a ring of notes that we tick through one after another, > Speakers or original acid bass sound. Those classic squealing and repeating when we get to the end. Let’s create a live headphones with a 3.5mm jack suelching T-0 bass ris can be heard from the loop that does exactly that:

> Update Sonic Pi: early Chicago House scene through to more recent sudo apt-get electronic artists such as Plastikman, Squarepusher, use_synth :tb303 update && sudo and Aphex Twin. live_loop :squelch do apt-get install Interestingly, Roland never intended for the TB-303 n = (ring :e1, :e2, :e3).tick sonic-pi to be used in dance music. It was originally created play n, release: 0.125, cutoff: 100, as a practice aid for guitarists. Roland imagined that res: 0.8, wave: 0 people would program the TB-303 to play basslines sleep 0.125 to jam along to. Unfortunately, there were a number end of problems it was a little fiddly to program, didn’t sound particularly good as a bass-guitar replacement, Take a look at each line… and was pretty expensive to buy. Opting to cut its losses, Roland stopped making the TB-303 after n the first line, we set the default synth to be 10,000 units were sold. After a number of years sitting tb303 with the use_synth function. on guitarists’ shelves, many ended in the windows of second-hand shops. These discarded TB-303s were On line two, we create a live loop called :squelch, waiting to be discovered by a new generation, which which will just loop round and round. started experimenting and using them to create new crazy sounds. Acid house was born. ine three is where we create our ri a ring of While getting your hands on an original TB-303 isn’t notes (E in octaves 1, 2, and 3), which we simply so easy, you’ll be pleased to know that you can turn tick through with .tick. e define n to represent your Raspberry Pi into one using the power of Sonic Pi. the current note in the ri. The euals sign ust ust put this code into an empty buer and hit Run means to assign the value on the right to the name on the left. This will be dierent every time use_synth :tb303 round the loop. The first time round,n will be play :e1 set to :e1. The second time round, it will be :e2, followed by :e3, and then back to :e1, cycling Instant acid bass! Let’s play around... round forever.

66 November 2015 raspberrypi.org/magpi SONIC PI LIVE CODING Tutoria

Line four is where we actually trigger our :tb303 envelope! This means we have amazing control over Languag synth. We’re passing a few interesting opts here: the timbre of the sound by playing with both of these >RUBY release:, cutoff:, res:, and wave:, which we envelopes. Let’s take a look: will discuss below. use_synth :tb303 ine five is our sleep we’re asking the live loop with_fx :reverb, room: 1 do to loop round every 0.125 seconds, which works live_loop :space_scanner do out at eight times a second at the default BPM of 60. play :e1, cutoff: 100, release: 7, attack: 1, cutoff_attack: 4, Line six is the end to the live loop. This just tells cutoff_release: 4 Sonic Pi where the end of the live loop is. sleep 8 end hilst you’re still figuring out what’s going on, type end in the code above and hit the Run button. You should hear the :tb303 kick into action. Now, this is where For each standard envelope opt, there’s a the action is: let’s start live coding. cutoff_ equivalent opt in the :tb303 synth. Whilst the loop is still live, change the cutoff: opt o, to change the cuto attack time, we can use the to 110. Now hit the Run button again. You should hear cutoff_attack: opt. Copy the code above into an the sound become a little harsher and more squelchy. empty buer and hit Run. ou’ll hear a cray sound Dial in 120 and hit Run. Now 130. Listen how higher warble in and out. Now start to play around with it. cuto values make it sound more piercing and Try changing the cutoff_attack: time to 1 and then intense. Finally, drop it down to 80 when you feel like 0.5. Now try 8. a rest. Then repeat as many times as you want. Don’t Notice that I’ve passed everything through a worry, I’ll still be here... :reverb for etra atmosphere try other Another opt worth playing with is res:. This to see what works! controls the level of resonance of the filter. high resonance is characteristic of acid bass sounds. We Bringing it all together currently have our res: set to 0.8. Try cranking it Finally, here’s a piece I composed using the ideas in this up to 0.85, then 0.9, and finally0.95 . You might tutorial. opy it into an empty buer, listen for a while, find that a cuto such as 110 or higher will make the and then start live-coding your own changes. See what dierences easier to hear. ow, go cray and dial in crazy sounds you can make with it! See you next time... 0.999 for some insane sounds. At a res: this high, you’re hearing the cuto filter resonate so much that use_synth :tb303 it starts to make sounds of its own! use_debug false Finally, for a big impact on the timbre, try changing the wave: opt to 1. This is the choice of source with_fx :reverb, room: 0.8 do oscillator. The default is 0, which is a sawtooth wave. live_loop :space_scanner do 1 is a pulse wave and 2 is a triangle wave. with_fx :slicer, phase: 0.25, amp: 1.5 f course, try dierent ris by changing the notes do in the ring or even picking notes from scales or co = (line 70, 130, steps: 8).tick chords. ave fun with your first acid bass synth. play :e1, cutoff: co, release: 7, attack: 1, cutoff_attack: 4, Deconstructing the TB-303 cutoff_release: 4 The design of the original TB-303 is actually pretty sleep 8 simple. There are only four core parts. First is the end oscillator wave the raw ingredients of the sound. end For instance, this could be a square wave. Next, there’s the oscillator’s amplitude envelope, which live_loop :squelch do controls the amp of the square wave through time. use_random_seed 3000 These are accessed in Sonic Pi by the attack:, 16.times do decay:, sustain:, and release: opts, along with n = (ring :e1, :e2, :e3).tick their level counterparts. For more information, read play n, release: 0.125, cutoff: Section 2.4, ‘Duration with Envelopes’, of the built- rrand(70, 130), res: 0.9, wave: 1, in tutorial. We then pass our enveloped square wave amp: 0.8 through a resonant low-pass filter. This chops o sleep 0.125 the higher frequencies, as well as having that nice end resonance eect. ow this is where the fun starts. The end cuto value of this filter is also controlled by its own end raspberrypi.org/magpi November 2015 67 Tutoria WALKTHROUGH SEAN M TRACEY Sean is a technologist living in the South West of England. He spends most of his PART 9 time making silly things with technology. MAKE GAMES WITH PYTHON sean.mtracey.org

THE ALIENS ARE [ PART 01] TRYING TO KILL ME In the penultimate part of this series, we make the first half of a game, putting to use everything we’ve learned in the first 8 instalments...

ello again - we’re almost at the end! This is our mouse, we’re going to control a small but feisty H the penultimate part of this series on making spaceship that fends o wave after wave of merciless games with Pygame. We’ve got a lot to do, alien hordes, by blasting them with a lethal green so we’ll jump straight in to the action. Over this part laser-ray patent-pending). In the final part of this Below The start screen for our and the final part, we’re going to use everything we’ve series we’ll learn how to make levels with organised final game learned so far to make a space-shooter game. Using structures, instead of the random placement of enemies that we have in this version of our game. We’ll also add a game-over screen, some UI elements like health and number of bullets, and we’ll add some shields to our space vessel too, because who doesn’t like shields? Since we’re not learning anything new this time, we don’t need to explore any abstract game or programming concepts before we can make something; we’re just going to walk through the code and figure out what we’ve done and why we’ve done it that way. o let’s look at the code first specifically, the structure of our code. ou may notice that the code for our game is not in one big file as it has been for most of our previous games. Instead, it’s split across three separate files one for our main game logic (we’ve called it aliens.py), one that

68 November 2015 raspberrypi.org/magpi MAKE GAMES WITH PYTHON Tutoria

contains the code for our spaceships (ships.py), and of any function in our program; this means that Above A screenshot of the game that one file that contains all of the information about our any function in our game can read and change the well make in this lasers and bullets (projectiles.py). variables as they like. In a lot of circumstances half of the tutorial aliens.py is where we will run our game from. this is frowned upon, but for games it’s perfect. It is responsible for handling how we react to user Not every variable we need to make this game is interactions and game events, such as moving and declared here; there are quite a few more in our firing the ship, creating new enemies, and triggering ships and projectile classes that we’ll get to shortly. sounds. ships.py and projectiles.py will be imported Remember, using classes is a great way to keep by aliens.py, and will be used to create our own properties that are relevant to the thing we’re using spaceship, the enemy space ships, and the projectiles all wrapped up nicely together. of both of these types of ship. In previous tutorials, we’ve always used a main loop to update our game state and draw the items Aliens.py and objects about the place as we’ve needed. We’re Let’s break down the structure of aliens.py first. This breaking that habit this time. Instead of having is where everything in the game will start from, so it the main loop be the sole place where game stu QUICK TIP makes sense that we should too. In what must seem happens, we’re going to create two extra functions like the bleeding obvious to you now, on lines 1-5 we and split up the work between them. These two This is the first have our import statements. Here, we’re importing all functions are updateGame() and drawGame(), and of two halves of our final game. of the standard Python and Pygame modules that we’ll their purposes are pretty simple. updateGame() verything works need to make our game do its thing. We also import (lines 41-75) will always be called before drawGame() but doesn’t look our own file, ships.py, which sits in the same folder as (lines 77-84); it will update everything that has too polished quite yet, and the our aliens.py folder, with import ship. changed since the last loop through our main game mechanics On lines 7-39, we have all of the global variables function. It will also calculate the new positions are simple, but that we’ll use to keep track of the various objects and statuses of all of our game objects if they’ve remember we’re setting the stage and events that occur in our game. These are ‘global’ changed, and then update those properties. Straight for next time. variables because they don’t fall within the scope after that, drawGame() is called; this is responsible raspberrypi.org/magpi November 2015 69 Tutoria WALKTHROUGH

Right The two ships for our game: our ship left and an alien ship right

only for drawing the elements of the game that may Ships.py or may not have been changed. drawGame() could On line 32 of aliens.py, we have the variable ship. update dierent properties if we wanted it to, but This is where we create our player’s spaceship. With that leads to messy code with multiple places where it, we shall defend the Earth, our solar system and, things can go wrong. At least this way, if something yes, even the galaxy from the tyranny of evil alien breaks in our game logic, we’ll know that it most kinds, because we are the Guardians of the... never probably broke in updateGame() and not somewhere mind, got a little carried away there. But what does else. ou’ll notice that drawGame() is a good deal this little variable do? Well, it instantiates our Player smaller than updateGame(); this is not necessarily ship class that we imported from our ship.py file. If because its job is simpler, but because all of the you take a look at ship.py, you’ll see it’s almost as big drawing onto our surface has been abstracted away as aliens.py. That makes sense after all, spaceships to individual classes. Each object is responsible for are complicated things. In our ships.py file, we have drawing itself, but drawGame() has to tell them two dierent classes our Player class (remember, to do it. class names usually start with a capital letter) and This is where we create our player’s spaceship. With it, we shall defend the Earth, our solar system and, yes, even the galaxy from the tyranny of evil alien kinds

Last, but certainly not least, we have our ‘main loop’ our Enemy class. The Player class is where all of the on lines 91-135. Now that our main loop is no longer logic for moving, firing, drawing and damaging our responsible for updating or drawing our game events, own spaceship happens. We also keep track of the it’s mainly responsible for detecting the state of our sound eects and images used by our spaceship as we mouse and timing events, like creating a new enemy play our game. Almost all of these functions will be spaceship after a certain amount of time. In a way, called by the code in our aliens.py file, but our ship our main loop is still responsible for updating and can call functions on itself too. For example, when we drawing our game, in that it calls updateGame() and initialise our Player class, we call the loadImages() drawGame() at the correct time based on our game function inside of our __init__ function with variables; the responsibilities have just been abstracted self.loadImages() so that we load our ship images so our code is a little more decipherable to people who straight away, rather than cause a delay when we need didn’t write the code or read this tutorial. to draw our ship for the first time.

70 November 2015 raspberrypi.org/magpi MAKE GAMES WITH PYTHON Tutoria

Our Enemy class is much, much smaller than our Player class. Is this because it’s less complicated? Nope. e firs ing e o on If you look at line 73 of ships.py, you’ll see that when we call the Enemy class, we pass through the Player class as each loop of our game an argument. But why? What does this do? It’s a really neat thing that classes do that we didn’t get time to look is set three variables over last time. When we instantiate a class, if we include the name of another class in its declaration when we actually write the code, it will get all of the properties each loop of our game is set three variables timeTicks, and classes of the class that has been passed through. mousePosition, and mouseStates. The timeTicks We do this because, despite being on opposite sides of variable keeps track of how many milliseconds have our epic cosmic war of wits and lasers, at their core, a passed since we started the game. We can use this to spaceship is a spaceship like any other but with a few set variables or create new objects after a set amount tweaks here and there. of time, as we do on line 128, where we create a new So, even though our Enemy class doesn’t have enemy ship after every 1.5 seconds of the game playing. checkForHit, registerHit and checkForBullets mousePosition is where we store the position of the methods typed out, it still has those methods - it just mouse in our game window. Remember, our mouse gets them from Player. This lets us use code in dierent Left The two ways across multiple objects, but we can also overwrite dierent proectiles some of those methods and add new ones as they’re for our ship types: our proectile needed for our Enemy class. For example, our Enemy class top and the alien has a tryToFire() function. Our Player class doesn’t proectile bottom have this; only our Enemy class does. We can also set dierent values for the same variables in our Enemy class our bulletSpeed value in Enemy is 10, whereas it’s -10 in our Player class. And, of course, the image we’re using for each type of ship is dierent. Projectiles.py Continuing our use of classes, we have our projectiles Bullet class in our projectiles.py file. ote that the latter isn’t imported into our game in aliens.py but in ships.py, because our game doesn’t need bullets - our ships do. Our Bullet class is far simpler than our two ship classes we have only three methods and a variety of variables to aect and track each bullet - move, draw, and loadImages. How does each bullet know when it’s hitting something? Because each bullet created in our game is stored in the bullets list in each of our ships, we use the ships class method checkForHit to see whether or not any of the bullets hit anything. There’s QUICK TIP no real reason for doing it this way; we could have each The sounds bullet be responsible for checking if it hit something, for this tutorial but it makes sense to have each ship keep an eye on werecreated whether the bullets it fired hit something. using BFXR (bfxr.net), a nifty little tool Game events designed for ow we know what each file is responsible for in our creating sound effects that latest game, we can start walking through how they all resemble those come together. As soon as our game is run, the global from games of variables are set and all of the imports between lines times long past. Go and have a 1 and 39 are applied. Let’s take a look at our main loop play with it! starting on line 90 in aliens.py. The first thing we do on raspberrypi.org/magpi November 2015 71 Tutoria WALKTHROUGH

Above The white position is relative to the top-left of our Pygame line 103, we blit our start screen image onto our game boxes around our spaceships window. We use the mouse to move our ship around surface. This image has a Start button drawn on it, are a visual in our game, so we need to keep a constant track of so next, on line 105, we check whether or not the left representation of the hit test that where our mouse is; storing our mousePosition at mouse button has been clicked and if it has, we check were running to the start of each loop saves us a little time and typing to see if the click occurred inside the button on line 107. check if a proectile has hit a ship if we need to check the position more than once every If both of these conditions are met, our gameStarted loop. mouseStates is where we save the ‘state’ of variable is set to True and on the next loop, our game our mouse buttons that is, which buttons are being will start - time to kill the alien scourge! pressed down and which ones aren’t. We use the left mouse button to fire our weapons and start our game Updating the game state so again, having that information stored globally The game has started, the onslaught begins, but how means we can check against one variable rather than do we go about saving our kind? Line by line, of course! calling pygame.mouse.get_pressed() multiple times. Lines 41-75 of aliens.py contain our updateGame() method. Here, we update the position of our ships, the Starting our game enemy ships, and fire our weapons if we click a mouse. Right after the first three variables, we come across On lines 45-49, we check whether or not our mouse is an if-else statement. This will check whether or not being clicked. If it is, we fire our weapon, but we don’t our game has started; after all, we want to have a title want our guns to keep firing for as long as we hold and game-over screen, so we need to know when to down the button we want to fire on each click, so we show them. The first check on line will see if we set the mouseDown variable to True. This way, we can be are running a game already. If so, it’ll update and certain that we only fire once per click, not willy-nilly. then draw the game (we’ll go through those shortly); hen we fire our weapon, we play a laser sound eect. otherwise, we go to the next check in our if-else True, in space no-one can hear you scream, but in Star statement. On line 102, if our game hasn’t started yet Wars it’s infinitely cooler to have blaster sounds going and it hasn’t finished either, then we must have ust o all around you. uch like when we add an image to started the program, so let’s draw the start screen. On our surface to see it drawn on our screen, we add our

72 November 2015 raspberrypi.org/magpi Tutoria

sound to our mixer to have it played out through our Drawing our game speakers (on lines 31-33 of ships.py). As noted previously, the drawGame() function is Next, on line 51, we set the position of the ship to much smaller than the updateGame() one. This match where our mouse is. We subtract half of the width is because updateGame() has done all of the hard of our ship from our mouse X coordinate, so the ship’s work for us. We don’t need to worry about moving centre aligns with our mouse pointer. anything here everything that needs to be updated, That’s everything to do with our ship updated. Simple, like positions and health, has already been taken eh? On to the enemy ships now. Unlike our valiant care of before we get to drawGame(). spaceship there are many, many enemy spaceships. The first thing we draw with the latter We need to update the position and state of each one is the background, because we want everything of them, so we create a loop on lines 57-72 to handle else to be drawn on top of it. We only have a single this. First, we move them. Our enemy spaceships aren’t player spaceship, so we’ll draw that first and then that sophisticated when they move; they’re hell-bent we’ll draw all of the bullets that we’ve fired so on our destruction, so they y straight at us in order to far on lines 79-80. Next, we’ll draw our enemies. take a potshot. Next, the enemy spaceships will try to Again, we’ll do this in a loop because there’s the take a shot at us. Why ‘try’? Well, our enemies are being possibility of there being more than one enemy, controlled by Python, which can fire a darned sight and we’ll draw the bullets that each ship fires too. quicker than you can. tryToFire() is called once per It wouldn’t be much of an armada if there was only ship in every loop and gives our enemy a 1/100 chance one enemy ship. We set the position of the ship to match where our mouse is. We subtract half of the width of our ship from our mouse X coordinate so the ship’s centre aligns of getting o a shot. That might sound like pretty slim Next time... odds for firing at all! ut remember, our loop is run 60 That’s the first half of our game. e don’t have much Below f we dont times a second, which means that there’s a roughly 50- in the way of a game-over screen, so we’ll make listen for the mouseup event, 0 chance each enemy will fire a shot every two seconds, one of those. We’ll program a UI for our health, add our ship will be so it’s enough to keep our wits about us. shields to our ships, and include some explosion able to fire as uickly as ygame ines 60-6 are where we check whether any shots eects when either our own ship or an enemy ship is can handle it, which our enemies have fired have hit us, and whether destroyed. We’ll also write some code that will create doesnt make for a very interesting any shots we’ve fired have hit our enemies. The levels (waves) that you can customise to make each game, even if it is checkForHit function call does a couple of things. game behave any way you like. very pretty.. We pass through the thing we want to check that we hit; if we did, our code in ships.py on lines 48-49 will figure that out. If we did hit the enemy, or vice versa, our checkForHit function will call the registerHit() function on the object that we hit, which decreases the health value of our . Our enemies have one life, whereas we have five. t the end of our checkForHit() function, we return True if the health of the ship is 0; that way, if our shipIsDestroyed == True or our enemyIsDestroyed == True, we can end the game or remove the enemy from our game. Rather than removing our enemy straight away, we add its index in the enemyShips list to the enemiesToRemove list. Once we’ve worked out all of the enemies we need to delete, we iterate through the indexes in the enemiesToRemove list and delete them one at a time on lines 74-75. raspberrypi.org/magpi November 2015 73 Tutoria WALKTHROUGH Alien.p 01. import pygame, sys, random, math 69.57. else: quitGame() 02. import pygame.locals as GAME_GLOBALS 58.70. enemiesToRemove.append(idx) 03. import pygame.event as GAME_EVENTS 59.71. else: 04. import pygame.time as GAME_TIME 60.72. for idxenemiesToRemove.append(idx) in enemiesToRemove: 05. import ships 61.73. del enemyShips[idx] 06. 62.74. for idx in enemiesToRemove: def drawGame(): 07. windowWidth = 1024 63.75. del enemyShips[idx] windowHeight = 614 surface.blit(background, (0, 0)) 08. windowHeight = 614 64.76. def ship.draw()drawGame(): 09. 77. pygame.init() 78. ship.drawBullets()surface.blit(background, (0, 0)) 10. pygame.init() pygame.font.init() 79. ship.draw() 11. surface = pygame.display.set_mode((windowWidth, 80. forship.drawBullets() enemy in enemyShips: 12. 65. windowHeight)) 81. enemy.draw() 12. 13. 82. for enemy.drawBullets() enemy in enemyShips: 13. 14. pygame.display.set_caption(‘Alien\’spygame.display.set_caption('Alien\'s Are Gonna Kill Me!’)Me!') 83. enemy.draw() 14. def quitGame(): 15. textFont = pygame.font.SysFont(pygame.font.SysFont(“monospace”,"monospace", 5050)) 84. enemy.drawBullets() 66. pygame.quit() 16.15. 85. sys.exit() 17.16. gameStarted = False 86. def quitGame(): 18.17. gameStartedTime = 0 87. pygame.quit() gameFinishedTime = 0 # ‘main’ loop 19.18. gameFinishedTime = 0 88.67. sys.exit() gameOver = False while True: 20.19. gameOver = False 89.68.

21.20. 90. # 'main' loop #Mouse Variables timeTick = GAME_TIME.get_ticks() 22.21. # Mouse variables 91.69. while True: mousePosition = (0,0) mousePosition = pygame.mouse.get_pos() 23.22. mousePosition = (0,0) 92.70. mouseStates = None mouseStates = pygame.mouse.get_pressed() 24. mouseStates = None 93.71. timeTick = GAME_TIME.get_ticks() mouseDown = False 94.72. mousePosition = pygame.mouse.get_pos() 25. mouseDown = False if gameStarted is True and gameOver is False: 73.95. mouseStates = pygame.mouse.get_pressed() 26. #Image Variables # Image variables 96. 27. startScreen = pygame.image.load(“assets/start_screen.png”) 74. updateGame() startScreen = pygame.image.load("assets/start_screen.png") 97. if gameStarted is True and gameOver is False: 28. background = pygame.image.load(“assets/background.png”) drawGame() 29. background = pygame.image.load("assets/background.png") 98. updateGame() 23.30. #Ships 99. elif gameStarted is False and gameOver is False: drawGame() 24.31. ship# Ships = ships.Player(windowWidth / 2, windowHeight, pygame, 75.100. surface.blit(startScreen, (0, 0)) 25.32. surface)ship = ships.Player(windowWidth / 2, windowHeight, pygame, 76.101. elif gameStarted is False and gameOver is False: 26. enemyShipssurface) = [] 102. if mouseStates[0] is 1: 103. surface.blit(startScreen, (0, 0)) 27.33. enemyShips = [] 77. 104. 28.34. lastEnemyCreated = 0 78. if mousePosition[0] > 445 and mousePosition[0] < 580 35. lastEnemyCreated = 0 105. if mouseStates[0] is 1: 29. enemyInterval = random.randint(1000, 2500) and mousePosition[1] > 450 and mousePosition[1] < 510: 36. enemyInterval = random.randint(1000, 2500) 106. 30. 79. 37. 107. if gameStarted mousePosition[ = True0] > 445 and mousePosition[0] < 580 31. #Sound Setup 38. pygame.mixer.init()# Sound setup and mousePosition[1] > 450 and mousePosition[1] < 510: 32. 80. 39. pygame.mixer.init() 108. elif mouseStates[0] is 0 and mouseDown is True: 33. 81. 40. def updateGame(): 109. mouseDown gameStarted = False = True 41.34. def updateGame(): 110.82. 42.35. global mouseDown, gameOver 111. elif elif gameStarted mouseStates[ is 0]True is 0and and gameOver mouseDown is isTrue: True: 43.36. global mouseDown, gameOver 112. mouseDownsurface.blit(startScreen, = False (0, 0)) 44.37. if mouseStates[0] is 1 and mouseDown is False: 113. timeLasted = (gameFinishedTime - 45.38. if ship.fire() mouseStates[0] is 1 and mouseDown is False: 114.83. gameStartedTime) elif gameStarted / 1000is True and gameOver is True: 46.39. mouseDownship.fire() = True 115.84. surface.blit(startScreen, (0, 0)) 47.40. elif mouseDown mouseStates[0] = True is 0 and mouseDown is True: 116.85. # Handle usertimeLasted and system = ( events 48.41. elif mouseDown mouseStates[ = False0] is 0 and mouseDown is True: 86. gameFinishedTime for event in GAME_EVENTS.get(): - gameStartedTime) / 1000 49.42. mouseDown = False 117.87. 43.50. ship.setPosition(mousePosition) 88.118. # ifHandle event.type user and == systempygame.KEYDOWN: events 44.51. ship.setPosition(mousePosition) 89.119. for event in GAME_EVENTS.get(): 45.52. enemiesToRemove = [] 120. if event.key == pygame.K_ESCAPE: 46.53. enemiesToRemove = [] 90.121. if event.typequitGame() == pygame.KEYDOWN: 47.54. for idx, enemy in enumerate(enemyShips): 91.122. if GAME_TIME.get_ticks() - lastEnemyCreated > 55. for idx, enemy in enumerate(enemyShips): 92.123. if event.key == pygame.K_ESCAPE: if enemy.y < windowHeight: enemyInterval and gameStarted is True: 56. 93.124. quitGame() enemy.move() enemyShips.append(ships.Enemy(random.randint(0, 48.57. if enemy.y < windowHeight: 94.125. enemy.tryToFire() 126. windowWidth), if GAME_TIME.get_ticks() -60, pygame, surface,- lastEnemyCreated 1)) > 49.58. enemy.move() 95. shipIsDestroyedenemy.tryToFire() = enemy.checkForHit(ship) enemyInterval lastEnemyCreated and gameStarted = GAME_TIME.get_ticks() is True: 50.59. 96. 60. enemyIsDestroyedshipIsDestroyed == enemy.checkForHit(ship)ship.checkForHit(enemy) 127. enemyShips.append(ships.Enemy( 51. 97. 61. enemyIsDestroyed = ship.checkForHit(enemy) random.randint( if event.type 0==, windowWidth),GAME_GLOBALS.QUIT: -60, pygame, surface, 1)) 52. 98. quitGame() 62. if enemyIsDestroyed is True: 128. lastEnemyCreated = GAME_TIME.get_ticks() 53. 99. 63. if enemiesToRemove.append(idx) enemyIsDestroyed is True: 129. 54. 100. pygame.display.update() 64. enemiesToRemove.append(idx) 130. if event.type == GAME_GLOBALS.QUIT: if shipIsDestroyed is True: 101. 65. 131. quitGame() gameOver = True 66. if shipIsDestroyed is True: 132. print “\n\n\nYou Died\n\n\n” 67.55. gameOver = True 133.102. pygame.display.update() quitGame() 68.56. print "\n\n\nYou Died\n\n\n" 134.103.

74 November 2015 raspberrypi.org/magpi MAKE GAMES WITH PYTHON Tutoria

71. self.y -= self.height + 10 Languag Ship.p 72 73. class Enemy(Player): >PYTHON 01. import projectiles, random 74. 02. 75. x = 0 class Player(): 76. y = 0 DOWNLOAD: 03. github.com/ 77. firing = False 04. seanmtracey/ x = 0 78. image = None 05. Games-with-Pyg- 79. soundEffect = 'sounds/enemy_laser.wav' 06. y = 0 ame/tree/mas- 80. bulletImage = "assets/them_pellet.png" 07. firing = False ter/Part%209 08. image = None 81. bulletSpeed = 10 09. soundEffect = 'sounds/player_laser.wav' 82. speed = 2 10. pygame = None 83. 11. surface = None 84. def move(self): 12. width = 0 85. self.y += self.speed 13. height = 0 86. 14. bullets = [] 87. def tryToFire(self): 15. bulletImage = "assets/you_pellet.png" 88. shouldFire = random.random() 16. bulletSpeed = -10 89. 17. health = 5 90. if shouldFire <= 0.01: 18. 91. self.fire() 19. def loadImages(self): 92. 20. self.image = self.pygame.image.load("assets/you_ship.png") 93. def loadImages(self): 21. 94. self.image = self.pygame.image.load("assets/them_ship.png") 22. def draw(self): 95. 23. self.surface.blit(self.image, (self.x, self.y)) 96. def __init__(self, x, y, pygame, surface, health): 24. 97. self.x = x 25. def setPosition(self, pos): 98. self.y = y 26. self.x = pos[0] - self.width / 2 99. self.pygame = pygame 27. # self.y = pos[1] 100. self.surface = surface 28. 101. self.loadImages() 29. def fire(self): 102. self.bullets = [] 30. self.bullets.append(projectiles.Bullet( 103. self.health = health self.x + self.width / 2, self.y, self.pygame, self.surface, 104. self.bulletSpeed, self.bulletImage)) 105. dimensions = self.image.get_rect().size 31. a = self.pygame.mixer.Sound(self.soundEffect) 106. self.width = dimensions[0] 32. a.set_volume(0.2) 107. self.height = dimensions[1] 33. a.play() 108. 34. 109. self.x -= self.width / 2 35. 36. def drawBullets(self): 37. for b in self.bullets: Projectile.p 38. b.move() 39. b.draw() 01. class Bullet(): 40. 02. 41. def registerHit(self): 03. x = 0 42. self.health -= 1 04. y = 0 43. 05. image = None 44. def checkForHit(self, thingToCheckAgainst): 06. pygame = None 45. bulletsToRemove = [] 07. surface = None 46. 08. width = 0 47. for idx, b in enumerate(self.bullets): 09. height = 0 48. if b.x > thingToCheckAgainst.x and b.x < 10. speed = 0.0 thingToCheckAgainst.x + thingToCheckAgainst.width: 11. 49. if b.y > thingToCheckAgainst.y and b.y < 12. def loadImages(self): thingToCheckAgainst.y + thingToCheckAgainst.height: 13. self.image = self.pygame.image.load(self.image) 50. thingToCheckAgainst.registerHit() 14. 51. bulletsToRemove.append(idx) 15. def draw(self): 52. 16. self.surface.blit(self.image, (self.x, self.y)) 53. for usedBullet in bulletsToRemove: 17. 54. del self.bullets[usedBullet] 18. def move(self): 55. 19. self.y += self.speed 56. if thingToCheckAgainst.health <= 0: 20. 57. return True 21. def __init__(self, x, y, pygame, surface, speed, image): 58. 22. self.x = x 59. def __init__(self, x, y, pygame, surface): 23. self.y = y 60. self.x = x 24. self.pygame = pygame 61. self.y = y 25. self.surface = surface 62. self.pygame = pygame 26. self.image = image 63. self.surface = surface 27. self.loadImages() 64. self.loadImages() 28. self.speed = speed 65. 29. 66. dimensions = self.image.get_rect().size 30. dimensions = self.image.get_rect().size 67. self.width = dimensions[0] 31. self.width = dimensions[0] 68. self.height = dimensions[1] 32. self.height = dimensions[1] 69. 33. 70. self.x -= self.width / 2 34. self.x -= self.width / 2 raspberrypi.org/magpi November 2015 75 F.A.Q. YOUR QUESTIONS ANSWERED

NEED A FREQUENTLY PROBLEM SOLVED? Email [email protected] or ASKED QUESTIONS find us on raspberrypi.org/forums to feature in a future issue. Your technical hardware and software problems solved… CAMERA Can I only use the Pi Camera Module with the If I hook up a USB webcam, will I be able to use the Raspberry Pi, or can I use other types of cameras? same Camera Module Python code to control it?

The Camera Module is only one way to connect a o, unfortunately not. That code is very specifically camera to the Raspberry Pi; other methods will designed to work with the Camera Module connected work as long as Raspbian supports the drivers for via the I port on top of the Raspberry Pi. owever, your camera, or you have some you can install. Most you can still program it, although you may need to look commonly, you’ll find U webcams hooked up to the up methods on how to control your specific webcam Pi as they’re readily available and fairly standard to with Python or another programming language. In use. ne of the benefits of the amera odule when it theory, you can do a similar range of functions as the Pi was released was how it freed up a U port, especially camera: take video, time-lapse photography, etc, with when there were only two available on the Pi odel . only the webcam’s software as the limitation. side from U webcams, we’ve also seen people wire up Rs via a breadboard and the PI pins. Is the other slot on the top of the Raspberry Pi for putting a second camera in?

No, that’s a display port for adding a screen to the Raspberry Pi. You can only hook one Camera Module up to the Pi at a time, although that doesn’t mean you can’t add several more webcams via U ports if you want to create some kind of surveillance system, 3D scanner, or I bullet-time eect creator.

Can I improve the resolution of the slow-motion video function?

Unfortunately not video recording is limited compared to photo taking as it is; however, the 640×480 resolution of slow-motion video is a necessary limitation, as the camera and Pi have to work a lot harder to record the images and put them into a video file. There are ways around it, though; have a look in our 30 Minute Projects feature this issue to see how you can take a rapid burst of images and then combine them into a video for higher- resolution slow-motion video that can be filmed at an even higher frame rate than the standard function. It just takes a bit more manual processing from you.

76 November 2015 raspberrypi.org/magpi YOUR QUESTIONS ANSWERED F.A.Q.

FROM THE RASPBERRY PI FAQ RASPBERRYPI.ORG/HELP

Does the Raspberry Pi have an official version of the operating system, designed exclusively for programming language? embedded use, dubbed the Windows 10 nternet of Things The Raspberry Pi Foundation recommends Python as a (oT) Core. t will not include the user interface (shell’) or the language for learners. t also recommends cratch for desktop operating system. younger kids. ny language which will compile for RMv (Pi 1) or RMv (Pi 2) can be used with the Raspberry Pi, Will the Raspberry Pi run the Windows 8 ARM Edition? though, so you are not limited to using Python. C, C, ava, No. ven if Microsoft decided to devote all its resources cratch, and Ruby all come installed by default on the to getting Windows 8 on the Pi, it would not work. The Raspberry Pi. Raspberry Pi lacks the minimum memory and CP reuirements, it runs on a version of the RM processor Will the Raspberry Pi run Wine that is not supported by Windows 8, it lacks the appropriate (or Windows, or other x86 software)? axis sensors the list goes on and on. The Pi will not run n general, with most versions of the Raspberry Pi, this is Windows 8. not possible. ome people have put Windows 3.1 on the Raspberry Pi inside an x8 CP emulator in order to use Will the Raspberry Pi run Android? specific applications, but trying to use a version of Windows No. While a version of ndroid can be found in the even as recent as Windows 8 can take hours to boot into, forum, it is not stable enough for everyday use. There are no and may take several more hours to update your cursor plans to continue working on it, as ndroid does not provide every time you try to move it. We don’t recommend it any enhancement to educational purposes that are not s of summer 2015, a version of Windows 10 is available already fulfilled more readily with existing software we for use on the Raspberry Pi 2. This will be an entirely new see it as a platform for consumption, not creation.

THE MAGPI APP

Having trouble with The MagPi on the App Store or Google Play? Here are your most common questions answered:

How do I find The MagPi on Google Play or the App Store? ll you have to do is go to the search bar and type The MagPi’ or Raspberry Pi’ to find us.

I’ve subscribed to the digital edition and I can’t sign in to restore my purchases. Please help! ince your The MagPi purchases are linked to your oogle or pple accounts, there’s no need to sign in at all. f you’d like to re-download your purchases on your current device, or make your purchases available on other devices, all you need to do is hit ubscribe’ on the home screen, then Restore Purchases’ on the next screen.

How can I search the digital magazine for keywords? Finding direct references is really easy with The MagPi app all you have to do is tap the screen to get the app’s to show, and then press the small magnifying glass icon in the top-right corner of the screen. Now, ust type in your search term to find the relevant results.

raspberrypi.org/magpi November 2015 77 Review RASPBIAN 8.0

raspberrypi.org/downloads (As in beer FREE & speech)

RASPBIAN 8.0 ‘JESSIE’ A long time coming, is Raspbian Jessie the must-have update for the Raspberry Pi or can you stick with Wheezy?

fter a couple of years of a nicer look and feel, along with come pre-installed, too. hile A Raspbian staying largely much improved usability. this is nice, again it all feels much the same, we’ve recently Recently, the latest big update for the same. There are no real speed seen a big eort to actually update Raspbian came about, involving a improvements or optimisations the look and feel of the standard move to a new version of the Debian and, luckily, no issues with Raspberry Pi operating system. base system that it uses. The newer performance on earlier Raspberry Pi Sure, new bits of software have Raspbian ‘Jessie’ has been a while models, so the eperience of using been added to the distro images coming, and you can read a full it is almost no dierent. previously, like olfram and the breakdown of what’s new in this This is good in a way the old Pi tore, but it was mostly the version and why in our interview Raspberry Pi oundation is keen same old Raspbian running the with the principal engineer behind for people using the Raspberry Pi desktop interface. it, starting on page 6 of this issue. to not have to keep learning new Over the past year, however, ow does it actually perform, interfaces, and also for its eisting we have seen some major then? Well, largely the same. The guides and lessons to continue improvements and additions to move to Jessie brings with it a to work without needing new Raspbian, most notably a new whole host of updated and new screenshots and rewrites. This is browser based on ’s packages that make the experience also the reason the system now piphany and a custom desktop a bit more in line with the current boots to the desktop by default - environment built on top of the state of the software that you we’re of the opinion that this is interface that was already can install to the Raspberry Pi. a good change for the maority of there; both of these gave Raspbian ibreffice and laws ail now Raspberry Pi users, with the ability

78 November 2015 raspberrypi.org/magpi JESSIE Review

Maker Say Raspbian is the Foundation’s official supported operating system Raspberry Pi Foundation

to get to the command line still knowledgeable computer users programs still work as you expect available for when people are ready and makers anyway, so throwing even if you do install PI ero. It to give it a shot. all these extra options up at users doesn’t have every single function As well as the minor-but-not- who wouldn’t need or necessarily you’d want programmed in, after all. really-a-change switch from I understand them didn’t really The only real issue we have with to desktop, there are some bigger accomplish much in the first place. Raspbian essie is the sie at over dierences. The config screen you Again, they can access it at their 4, youll definitely need an used to get at the start of each own pace in a slightly more friendly micro card to get it on the Pi, something not everyone will have. There have been some eorts by the Additions and changes have community to slim it down, so keep an eye out for those if that tickles been made with usability your interest. Really, Raspbian Jessie is best and education in mind described as being more Raspbian. dditions and changes have been Raspbian boot now has its own interface, while people who know made with usability and education dedicated graphical tool, which what they’re doing can get it sorted in mind, and most of them, while works a lot better than the old once they’re in the desktop. fairly minor, will have a decent raspi-config ever did. verything is e love that you don’t have to impact on these areas. tabbed and much better presented, use sudo any more for accessing the and the overclock options now PI pins, and while the new PI Las wor know which version of the Pi you’re ero is not included in the current It’s the same old Raspbian but slightly better using so that it doesn’t try any build of the essie, having both here and there, albeit a little larger than it funky overvolting. Although the together really opens up the PI maybe should be. t reects the mission of the config menu doesn’t pop up on first header to a lot more people. cratch Raspberry Pi Foundation, though, and is still the boot anymore, the only real change can also now access the PI best Pi operating system. we’d ever find ourselves making pins, so the whole thing has been is epanding the file system. The made a lot easier for everyone on config screen was really for more every level and of course, your old raspberrypi.org/magpi November 2015 79 Review SCRATCH

scratch.mit.edu FREE

SCRATCHTucked inside Raspbian Jessie is a revamped version of Scratch, full of new features. Lucy Hattersley takes it for a spin...

cratch is one of the The new version is based upon ugly code, improving algorithms, S best ways to introduce the same core edition of Scratch tweaking configurations, and Relate young people to the joys (version 1.4), but it now runs much so on.” FUZE of programming. faster - up to ten times as fast in While direct speed comparisons BASIC 3.3 eveloped by IT specifically to some instances - and has native depend on a lot of factors, a version The FUZE help young people learn to code, support for the GPIO pins. Let’s of Pac-Man created in Scratch by Workstation Scratch is a visual editor with handle the speed boost first. Andrew Oliver is now running at a is a great characters, known as sprites, and playable 30fps, up from 16fps on Pi-powered computer for blocks that react to, and control, The need for speed the Raspberry Pi model B and a schools and the sprites. The blocks click While Scratch is developed by mere 1fps on the original Pi. colleges, with a together in much the same way that MIT, it’s brought to the Raspberry This faster speed isn’t just a version of BASIC similar to that code is written, and clicking the Pi thanks to the hard work of a nicety. The way Scratch gets kids used by the BBC blocks together creates programs. developer called Tim Rowledge coding is by recreating games and Microcomputer The Raspberry Pi Foundation’s (rowledge.org), and it’s from his game-like environments. The of yore. Most programmers aim to build tiny and aordable endeavours that we’re getting improved Scratch performance started out with computers for kids fits really Scratch’s souped-up engine. prevents young people from hitting BASIC, and it well with Scratch’s aim to help Scratch was originally developed a performance limitation and remains a great way to learn young people learn to code, so in a language called Smalltalk, switching o. text-based it’s no surprise to see Scratch and it runs inside a Squeak virtual coding. form part of the stock Raspbian machine (VM). Tim has spent Using pins operating system. a lot of his time ensuring that If the speed boost wasn’t enough, What you may not have noticed, Squeak runs on various ARM-based Scratch now incorporates however, is that the recent systems like the Raspberry Pi, GPIOServer so you can directly Raspbian Jessie update contains a mostly because he’s a RISC OS fan. access the pins on your Free revamped version of Scratch loaded Tim says he spent time “rewriting Raspberry Pi. It’s been referred as a www.fuze.co.uk with great new features. some of the more egregiously first pass’ at PI implementation,

80 November 2015 raspberrypi.org/magpi SCRATCH Review

Maker Say Program your own interactive stories, games, and animations – and share your creations Scratch

and it’s a bit clunky. Scratch has Teaching with GPIO either Adobe starts to support no GPIO blocks. Instead, you use There is something truly joyous ARM devices with Adobe Air, the Broadcast block to set up pins, about combining Scratch with GPIO. or MIT rewrites Scratch in a monitor input, and set them on or It breaks the barrier between Scratch dierent language. o. It follows the standard, so visual programming and physical This isn’t a big deal for the you add a Broadcast block and enter hardware. ou can create traffic most part, but Scratch 2.0 does config17out to set pin 17 to output, lights that respond to sprites of cars, include a feature called cloning, and then gpio17on and gpio17off or build a joystick from switches to via the ‘Create Clone Of’ block, to turn the pin on and o. control on-screen characters. These which is very close to the object- For input, you use config17in are software and hardware projects orientated process of instantiation and then combine an If control that will inspire kids to get started. and inheritance. This is something block with an Operator and Sensing As a bonus, many HATs are we’d love to see in Scratch on the block to get a block that says: If supported. We rather like the Raspberry Pi, but we’ll take GPIO GPIO 17 sensor value = 0/1. idea of hooking up Scratch access over it any day. When you add GPIO pins, they characters to Pibrella, PiGlow, and appear in the sensor blocks. Sense HAT devices. Las wor We would really like an easier implementation for young coders Send in the clones The new version of Scratch breaks the barrier to understand, but the good news If there is one slight wobble, between hardware and software and creates is that there are lots of examples it’s that this is still Scratch 1.4, an even more fun learning environment. And included with the installation, rather than the newer Scratch 2.0. the speed boost makes more exciting programs and tutorials are being developed This is because MIT moved over playable. It’s a shame that it’s still based on or rewritten on the official to Adobe Flash for Scratch 2.0, version 1.4 rather than 2.0, but don’t let that spoil Raspberry Pi website. So, you and the oine app installs using things. This is a fantastic update. won’t be short of assistance in Adobe Air. So we’re stuck with getting to grips with it. the older version of Scratch until raspberrypi.org/magpi November 2015 81 Review MEDIA PI PLUS

sb-components.co.uk/products/mediapiplus £39.99 / $60

Maker Say The new MEDIAPI+ augmented case for Raspberry Pi 2 SB-Components MEDIA PI PLUS A media centre case and remote for your Raspberry Pi: is it a necessity for a TV-connected Pi, though?

e all know at least one There is some construction The best thing about the Media W person who just has a required with the case, as a Raspberry Pi Plus is that it's very cheap. Even Raspberry Pi for a media Pi is not included. Popping the case if you factor in a Pi 2, it’s just south centre, running their TV on Kodi or open, you can see exactly how it of £70 for the whole thing, which is even an ancient version of XBMC works: it extends out and relocates pretty great value for a media centre that does the job. One of the things a number of the Raspberry Pi’s that will reliably serve you 1080p for Relate that has been lacking from this ports throughout a largely empty a long time to come. Construction equation for the longest time is a box. While this may seem slightly is a bit tricky and the case can feel MODMYPI suitable case for a Pi hooked up to redundant, it does provide extra a little imsy, though if you arent MODULAR your television – a case that can slip power to the USB ports, allowing for planning on inging it around or CASE in unnoticed under your TV, next to hubs to be connected. You can also otherwise treating it roughly, it’s a The modular case can be a Sky+ box and that Wii you haven’t connect an IR receiver directly to the perfectly serviceable way to make modified to fit touched in years. GPIO ports, which works well with your Pi media centre just that bit in better with While the Media Pi Plus isn’t the the media remote included, even if easier to use. your lounge, revealing only first one, or even the first edia you have the ability to turn the Pi o the ports you Pi product, they’re rare enough to but not on again with it. need to connect highlight and discuss. In the Media It’s really designed to be used Las wor to a T. Pi Plus’s case, it’s a re-release to fit with Kodi, which is why our version The box is a bit bulky in relation the form factor of the Raspberry Pi came with OpenELEC on a pre- to the Pi’s size, but it does a B+ and the Pi 2. In aesthetic terms, formatted SD card, although other good job of making the small it absolutely looks like something Kodi versions and oshoots we’re jump needed to get the Pi you’d put under your T, specifically looking at you, OSMC) will work just better suited for powering a TV. something like a Freeview box: it’s fine. ou may need to tweak some £5.99 / $9 unassuming, black, and with very of the remote settings, but it will be bit.ly/1M4gQTi little branding. fine nonetheless.

82 November 2015 raspberrypi.org/magpi

Review CHRISTMAS CRACKERS

bit.ly/1hNMjko £3 STUFF YOUR STOCKINGS LEGO MICRO WITH METAL GEARMOTOR ADAPTORS

There are a few ways to connect a Raspberry Pi up RASPBERRY PI! to ego, rick Pi being a good eample o the top of our heads. That requires a bit of Lego Mindstorms, We’ve got you an early gift guide though, which is another layer on top of whatever so you can start shopping for the code you’d want to do on the Pi. Great, but maybe not for everyone. This Lego axle adaptor works with tiny techie in your life. Or just you. micro metal gearmotors, specifically the ones that Pimoroni sells at least, so you can build a Lego vehicle t’s already November. You’ve had to turn completely with Lego wheels that is powered solely by I the heating on, you’ve gained an hour the Raspberry Pi’s motors. of sleep, and you’re finally able to bring We love this. While technically you could always just out the big winter coat. It’s this time of year use a Lego chassis with normal motors and wheels, that we’re constantly reminded that something this way you can use all of the new Lego kits you got big is coming in December: Star Wars. Also, at Christmas to create a supercharged monstrosity to Christmas. We like to get our shopping done early chase down some mince pies. here, especially when the post starts getting a bit clogged up. So, straight from our Christmas bit.ly/1hNITxX list is the stu that we think is the must-have Raspberry Pi gear to get and play around with £17 on Christmas Day!

CAMJAM EDUKIT #3

What exactly is in this new EduKit that can help you build a robot ell, it has a couple of pre-wired motors that come with a motor control board, a battery holder, a line sensor, an ultrasonic sensor, a ball castor wheel, some custom red wheels for the motors, and other bits and bobs to get it all wired up. Naturally, you will require a Raspberry Pi for it as well, although chances are if you’re reading this magaine and are aware of these duKits in the first place, that shouldn’t be a problem. The kits are out at the beginning of November, very probably by the time you read this article. We’re not sure if the EduKit robots will be able to stand up to any of Pi Wars’ house robots, but it will be very interesting to find out!

84 November 2015 raspberrypi.org/magpi CHRISTMAS CRACKERS Review

bit.ly/1Ocz1Ln bit.ly/1NRk6rq £25 £90

SENSE HAT PICADE CONSOLE We’ve talked about the Sense HAT a lot over the last We actually prefer this over the actual Picade that couple of issues, but it’s only because we’ve been having was Kickstarted all that time ago, mainly because we a lot of fun with it. As well as the ability to perform like the idea of a better version of those crap -in- some fairly basic environmental measurements, such arcade sticks you get in John Lewis or Next around as temperature, humidity, and air pressure, it features Christmas time. Plug into your TV and play thousands a suite of motion sensors, a joystick, and a neat, fully of games on it using the genuine pronounced gen- programmable 8×8 LED display. you-wine’, with emphasis on each syllable) arcade It’s nice and cheap, easily installed onto the Raspberry machine parts to control them. Pi and from there you can program it with Python to It’s a bit pricey compared to the other items here, make use of any of its inputs. And, of course, it’s being but it’s a high-uality product that is an ecellent way used in space, which makes it extra cool. For starters, to get a MAME and retro console machine into your you can take a look at our piel-art tutorial using ense living room using Raspberry Pi. The arcade buttons are HAT later on in the mag, and check back in next issue for modifiable and upgradeable, you can plug in standard how to turn one into the best Christmas tree ornament USB controllers, and the selection of games is frankly you’ve ever seen. more than you’d ever be able to play through.

bit.ly/1M2ZUCq bit.ly/1LlloXU £2 £15

SIDEKICK: POPULAR COMPONENT KIT

Giving the gift of building and making with a RASPIO PORTSPLUS Raspberry Pi at Christmas is great, but to do this you need a few very specific items to get someone started. This is a very simple little component: it slots over Wires, breadboards, a few resistors, and a selection the 40-pin PI port of the Raspberry Pi , , and of components can go a long way, and while figuring 2 and gives you a full rundown of what each pin can be out what to buy and where to buy them can be a bit used for, without getting in the way of any wires being tedious and confusing for someone starting out or plugged into the pins. It’s very handy if you’re not trying to sort out a gift box of them, this Sidekick kit sure where the grounds are – and if you need to use has you covered. the actual GPIO numbers instead of the pin numbers, Presented in a little carry case so you can take it you can ip it over to see what they should be. with you, the Sidekick comes with tons of little, basic This is especially good timing as a gift now that GPIO electronic components, switches, motors, buzzers, Zero is out, allowing you to know exactly where to plug and more to start you o on the path of the maker. components in and how to tell the code where they are Use it with tutorials in this mag, GPIO Zero, or start without having to count each individual pin (or pair of looking up stu online there’s a fantastic selection pins) while suinting at a diagram on your phone. out there to make the best use of this kit. raspberrypi.org/magpi November 2015 85 Review BOOKS

GETTING STARTED Python version on many operating RASPBERRY PI WITH PYTHON & systems.” We suggest it’s time RASPBERRY PI to drop Python 2 for newcomers. BESTSELLERS Nevertheless, the bulk of early chapters are a good Author: Dan Nixon Python introduction without SEVEN WEEKS Publisher: Packt Price: £25.99 distorting the lessons to be Pragmatics’ Seven Weeks series ISBN: 978-1783551590 overly Pi-focused, giving a compares solutions in hot topics bit.ly/1KZemHZ good grounding in control for programmers ow and data structures We get to review procedural with a hint of many good and functional avour. SEVEN DATABASES interesting Python tutorials, bect orientation is then IN SEVEN WEEKS but a book placing Python introduced as a concept in a Author: Eric Redmond learning within the context of chapter also covering threads and & Jim R Wilson programming the Raspberry Pi is locks. The peculiar areas of focus Publisher: Pragmatic Bookshelf Price: £23.50 always going to have an advantage: continue with a look at packaging ISBN: 978-1934356920 building quickly towards your in Python, but then the book turns bit.ly/1eLiCzB own projects on the Pi is a great to PI and the amera odule. motivator. Nixon’s book makes Data parsing and interfaces round A practical dip into NoSQL the link between basic Python out a useful introductory book, databases: Redis, Neo4J, CouchDB, MongoDB, HBase, learning and our favourite small which will give confident learners Riak (after PostgreSQL for board computer, even in the basics enough immersion in Python to comparison). The easiest way to – such as treatment of numerical move onto their own projects. quickly gain enough experience to make hands-on comparisons. variables to best fit PI values. Nixon excuses his use of Python 2.7: “this has the widest library Scor SEVEN CONCURRENCY support and is still the default MODELS IN SEVEN WEEKS gives you the full object-oriented Authors: Paul Butcher PYTHON 3 treatment. tarting, logically, with Publisher: Pragmatic Bookshelf OBJECT-ORIENTED objects and classes, this leads onto Price: £25.50 inheritance; multiple inheritance ISBN: 978-1937785659 PROGRAMMING bit.ly/1L5FItS is discussed take that, ava) and then the first case study. Author: Dusty Phillips As multiple cores proliferate Publisher: Packt Each chapter is rounded in the GPU as well as the CPU, o with a useful case study Butcher tackles the competing Price: £31.99 techniques for parallelism and ISBN: 978-1784398781 and practically oriented concurrency. Well written, and bit.ly/1LinBQP exercises, often generating strongly grounded in Clojure. further thoughts on the topic A decade ago, to be carried to the reader’s SEVEN WEB Python was an own work. FRAMEWORKS overlooked scripting From attribute accessibility IN SEVEN WEEKS language and object-oriented to design patterns, Phillips gives programming P) was the essence of P in the contet Authors: ack Mott introduced via Java (kitchen sink of Python’s way of doing things & Frederic Daoud Publisher: Pragmatic Bookshelf attached), malltalk in academia – along the way stretching best Price: £25.50 at least – and subsequently practice a little, as some places ISBN: 978-1937785635 powering cratch .), or even aren’t a comfortable fit for regular bit.ly/1VEahMc ouch). uckily for learners of expressions – but he keeps

A fascinating and enjoyable today, Python is widely accepted, pushing the reader to consider journey: explore minimalism, and as a multi-paradigm language each bit of knowledge in the composition, static typing, with strong P leanings it makes context of their own code, making state machines, declarative syntax, and other approaches an ideal introduction to P. for a very interactive book. to web programming, using Phillips’s book builds on basic Sinatra, CanJS, AngularJS, Python knowledge you may have Ring, Webmachine, Yesod, and Immutant. picked up with simple procedural Scor scripts for the Pi, for example, and

86 November 2015 raspberrypi.org/magpi BOOKS Review

MAKE: grouped by chapters such as Robots ESSENTIAL READING: and rones, icrocontrollers and THE BEST OF, icrocomputers, and un and DATA VOLUME 2 ames. That middle Data – big or otherwise – is a growing one includes many concern for coders in any language Author: The Editors of Make interesting Arduino Publisher: Maker Media projects including sound Clean Data Price: £19.99 synthesis, as well as Author: Megan Squire ISBN: 978-1680450323 turning a Pi into a Tor Publisher: Packt oreil.ly/1hpWhbr proxy for anonymous Price: £29.99 ISBN: 978-1785284014 browsing, or an bit.ly/1FWlLJh Want to be inspired? transmitter. Pick a project from Projects range from the Practical strategies to quickly and easily the contents page and mundane but useful (audio bridge the gap between the data we want and the data we have. start reading. We’d recommend amplifiers, lost screw finder), something from hapter 6 usic through difficult to classify a Python Data Science and udio, which includes igar eiger counter), to pure fun for Dummies o uitars, a aser arp, and amaing light-up shoes). ne Author: John Paul Mueller a olar ylophone. aving been of the most compelling, which & Luca Massaron inspired, you may find the slightly few can read without feeling the Publisher: Wiley macho introductory section on urge to build, is The ost Useless Price: £21.99 building and equipping your achine ick the switch, and an ISBN: 978-1118844182 bit.ly/1VEcYO1 workshop easier going, and be more arm reaches out from a door and forgiving of the jargon-laden text. turns the switch back o. That’s all A comprehensive introduction to practical Inspiration can be found on it does. trangely compelling, eh data science using Python. Good for Python almost every page, as this is a learners without being patronising. distillation of eight years of Make Learning Haskell Data Analysis magaine since the first Best Of Scor Author: James Church book was published. Projects are Publisher: Packt Price: £22.99 and personality bring the tutorials ISBN: 978-1784394707 SCRATCH to life, but the useful level of bit.ly/1RtmVxc detail ensures that the lessons Haskell-based intro to dealing with data FOR KIDS stay with the reader that doesn’t neglect its mathematical much longer. nature. Practical and educational.

Author: Derek Breen plit into three Publisher: Wiley sections – Designer, Derivatives Analytics with Python: Price: £21.99 nimator, ame Data Analysis, Models, Simulation, ISBN: 978-1119014874 Developer – Scratch for Calibration and Hedging bit.ly/1FSU6Jm Kids is very strong on Author: Yves Hilpisch graphics, with the vector Publisher: Wiley Price: £60.00 Delete the cat. That’s and collage chapters ISBN: 978-1119037996 reen’s first instruction. cratch being a great end to bit.ly/1HzDGSG is for everyone, not just younger the first section. The nimation children who like cute cats. But section builds into a great way to rowing use in the financial community Breen has written a book that will teach visually oriented children has given us some useful tools for data analysis in Python. get young and old quickly coding how to code. Attention to detail, and learning – creating a Flappy Bird good graphics and great writing Learning JavaScript Data clone in the first chapter, such is characterise a game section Structures and Algorithms the power of cratch. that takes four classic arcade Author: Loiane Groner The introduction, very much in games and once more sneaks in Publisher: Packt the spirit of Italo alvino’s If On A learning by osmosis. Unreservedly Price: £27.99 Winter’s Night A Traveller – but with recommended for kids of all ages – ISBN: 978-1783554874 stronger overt humour – draws including grown-up ones! bit.ly/1MYzqzd

you straight in, and you’ll only Beginner-friendly introduction to put the book down long enough data structures and algorithms, to switch on your computer and Scor using JavaScript. Comprehensive, approachable, excellent. open cratch. The author’s humour raspberrypi.org/magpi November 2015 87 Communit EVENTS

ROANOKE RASPBERRY JAM 2 oanoke, A, A

RASPBERRY JAM EVENT CALENDAR Find out what community-organised, Raspberry Pi-themed events are happening near you…

PUT YOUR EVENT ON THE MAP ant to add your gettogether ist it here: raspberrypi.org/jam/add

BIRMINGHAM RASPBERRY JAM PRESTON RASPBERRY JAM NORTHERN ISLAND When: Saturday 31 October When: Monday 2 November RASPBERRY JAM Where: Library of Birmingham, Where: Media Innovation Studio, When: Saturday 14 November Broad Street, B1 2ND Media Factory Building, Where: Farset Labs, Belfast, UK bit.ly/1jT8Opp Preston, UK bit.ly/1K5ihnJ The Birmingham bit.ly/1W5Ao4c The Northern Ireland Jam is aimed Picademy@Google team are A fun day out for all, with at complete beginners, with more hosting a Raspberry Jam at lightning talks, demos and hands- complicated challenges for those Google Digital Garage. on time with the Raspberry Pi. with some previous Pi experience.

ROANOKE RASPBERRY JAM LEEDS RASPBERRY JAM COTSWOLDS RASPBERRY JAM When: Saturday 31 October When: Wednesday 4 November When: Saturday 28 November Where: 1327 Grandin Rd. SW, Where: Swallow Hill Where: University of Gloucestershire, Roanoke, VA, USA Community College, Cheltenham, UK bit.ly/1PzW8Bd Leeds, UK cotswoldjam.org There will be new projects and bit.ly/1kq0Wwc The event will run between topics to discuss. Bring your Let’s bring people together to 1-4pm at the University of favourite Raspberry Pi project discover the exciting potential Gloucestershire Park Campus. for show-and-tell! of the Raspberry Pi. Bring along your Pi.

88 November 2015 raspberrypi.org/magpi EVENTS Communit

NORTHERN IRELAND 5 RASPBERRY JAM elfast,

PRESTON RASPBERRY JAM 3 reston,

LEEDS RASPBERRY JAM 4 eeds,

PI WARS 8 ambridge,

CODERDOJO HAM 7 MINI-JAM ichmond,

COTSWOLDS 6 RASPBERRY JAM heltenham, BIRMINGHAM 1 RASPBERRY JAM ibrary of irmingham

CODERDOJO HAM MINI-JAM When: Saturday 5 December DON’T BARNES & NOBLE Where: am lose o shburnham Road) Richmond, UK, MISS: MINI MAKER FAIRE TW10 7PL coderdojoham.org hen: aturday ovember here: arious arnes oble outlets Each dojo has a variety of activities on oer including app creation, Pi projects, Python , HTML, and CSS. If you’re a tech enthusiast, crafter, PI WARS educator, tinkerer, When: Saturday 5 December hobbyist, engineer, Where: Cambridge Computer Lab science club member, (William Gates Building), author, artist, student, Cambridge, UK entrepreneur, or maker piwars.org of any kind, you might want to head to your local Barnes & Noble. They’re getting The second annual roboteering event together in stores to learn from each other, hear from the experts, and work on has arrived! Come along and join in the projects. Visit bit.ly/1NniPoR to find a local Barnes & Noble that’s taking part in this competition, or just watch the fun! exciting event, or learn more at bit.ly/1X6JYRE.

raspberrypi.org/magpi November 2015 89 TAKE US ANYWHERE

SAVE 45% with a Newsstand subscription (limited time offer)

FREE: ALL 30 ORIGINAL ISSUES NOW INCLUDED! Sucrib fro £2.29 or £19.99 Magazine rolling subscription full year subscription Available now Download it today - it’s free! Get all 31 legacy issues free for smartphones & tablets Instant downloads every month Fast rendering performance Live links & interactivity

90 November 2015 raspberrypi.org/magpi In association with: Review

WHAT RASPBERRY PI PLANS DO YOU HAVE FOR THE HOLIDAYS? Tell us by 23 November for your chance to win!

How to enter: Simply email [email protected] and let us know what Raspberry Pi-related projects or plans you have over the holidays!

Terms & Conditions Competition closes 23 November 2015. Prize is offered worldwide to participants aged 18 or over, except employees of the Raspberry Pi Foundation, the prize supplier, their families or friends. Winners will be notified by email after the draw date. 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 (unless otherwise stated upon entry). 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.

raspberrypi.org/magpi November 2015 91 Communit FEATURE SKYCADEMY IN THE WILD In August of this year, The Raspberry Pi Foundation provided a course for 24 educators in high-altitude ballooning. Here, one of them puts his training into action…

tephen Brown is an “Two weeks of lunchtime S assistant headteacher at programming had gone into this Bourne Grammar School, and everyone was really nervous, and a passionate advocate of as multiple things could have gone computer science and engineering wrong,” says Fabio, who watched in education. After coming to his carefully assembled payload Cambridge in August to attend being tied to the helium balloon. the Raspberry Pi Foundation’s Fellow pupil Sohail was in charge Skycademy course, he returned to of the launch preparation itself. Bourne eager to put a balloon into e ensured that the ow of helium near space but committed to the into the balloon remained steady, idea that his students would plan as he nervously tried to keep the the mission, build the payload, and fragile latex from coming too close launch the balloon independently. to anything sharp, and carefully He assembled four teams of gauged when the required lift students: the computer science volume had been achieved. team would set up and program ith the balloon inated, Patrick the Pi’s software, the engineers took control, ensuring the payload would put together the payload, was securely attached, and carefully the launch team would send the cable-tied the neck of the balloon balloon to the stratosphere, and to ensure it remained inated. the chase team would track and retrieve the payload. He gave the students his documentation on how BOURNE to run a successful launch, then let GRAMMAR them get on with it. SCHOOL “My favourite part was working on this project as a team with other TOWN: students. It was good fun solving the Bourne, Lincolnshire problems and challenges we faced DATE OF LAUNCH: whilst working on it,” says Andrew, 9 October 2015 who led the computer science team. RECOVERY AREA: The students had two weeks to Near Welney, Norfolk organise themselves, with a three- bit.ly/1LaBqnh day launch window provided by the Civil Aviation Authority as a hard deadline that they had to meet. The weather on launch day couldn’t have been better, as the entirety of the school’s Year 8 students assembled on the field, ready to watch the launch.

92 November 2015 raspberrypi.org/magpi SKYCADEMY Communit

[01] THE RELEASE At nine o’clock the balloon is launched, while the four teams of students and the whole of Year 8 Lastly, it was up to Alex to launch watch their handiwork begin the balloon. He stood before the its incredible journey into the expectant audience, letting the upper atmosphere. string feed through his fingers as the balloon ascended, and then [02] FIRST AERIAL finally releasing the payload and PHOTOGRAPHS watching as all their hard work A fantastic view of Bourne and rapidly drifted upwards, now at the the surrounding Lincolnshire mercy of the atmosphere. countryside is captured as the balloon begins its ascent towards The chase team quickly jumped an overcast sky. into the back of the school minibus and, with satnavs and radios [03] ABOVE THE CLOUDS blaring, they barked instructions The balloon breaks free of the to their driver, Systems & Control clouds by 9:30. teacher Kevan Wackett. The original projections had the balloon [04] THE EDGE OF SPACE scheduled to return to Earth The balloon has made it to the somewhere near RAF Lakenheath, edge of space. and there were visions of RAF intercept jets being launched to [05] THE DESCENT bring down the UFO. Fortunately, The tracker has the payload the course updated and the chase predicted to land a little too close to a river. The tracking team team headed for Welney, with back at school keep their fingers the assistance of some expertly crossed that all will be well. executed U-turns from Mr Wackett. The payload came down in a field [06] THE RETRIEVAL between two rivers, which required The chase team assemble, ready a two-mile cross-country hike to to retrieve the payload. Two retrieve it. Half the students on of the students have hacked the chase team had come prepared together wellington boots from for a muddy trek, although two bin liners, as they prepare to of the sixth-formers had missed cross the muddy fields. the previous day’s lunchtime meeting and looked more suited to [07] FOUND IT A relieved Alex finds the payload, a business interview than a brisk intact and still transmitting walk in the country. telemetry and images. The payload was retrieved without a hitch, safe and sound [08] THE JOURNEY HOME in its polystyrene box, having With the payload sitting on the endured a 26km ride into the upper minibus dashboard, the team atmosphere, and being watched make their way back to school. over by a herd of curious cows. raspberrypi.org/magpi November 2015 93 Communit YOUR LETTERS YOUR LETTERS

Analogue magazines and free history I was really excited to see that you put all the original The MagPi issues up on your apps recently! I did enjoy them, and it was great to get all 30+ for free to join the rest of my digital collection of the mag. However, I do live in France and I’d love to get some of the print versions of the mag for my collection. I’ve never seen any of the magazines on the shelf here, though – is there any way I can get analogue English copies of the magazine here? Jay

Thanks, we were very proud of the fact we were An alternate display able get all the magazines from before the I take my Raspberry Pi around with me when relaunch up on our app! We’re making sure they I travel, but I don’t always have a way to display remain free forever on there as well, so that it on a proper monitor or TV screen to do any everyone can complete their collection without work on it. I do, however, take my laptop around breaking the bank. with me wherever I travel. I’ve always wondered As for getting physical versions out to France, if there’s a way for me to plug the Raspberry Pi The MagPi is sold in the Raspberry Pi’s Swag into its HDMI port and view the picture on the Store (bit.ly/1ZX6yhV) and ships to anywhere in screen - I’ve tried but never figured out if I was the world. Including France! They’re the same doing something wrong or had to switch ‘input’ price as you’d buy them in the shop, although or whatever. you’ll have to pay a bit extra for shipping. Of Is there any way you could do a guide on how course, if you really wanted to, you could grab the to get this to work? PDFs for the mags and print them yourselves. Thanks, Ordering the issues might save you a bit Praveen of time, though. Unless your laptop has some very specific gear to do video capture or the like via HDMI ports, it’s not going to be possible to hook the HDMI cable from the Raspberry Pi to your laptop and get it to display on there. The laptop’s HDMI port will be an output, much like the Raspberry Pi’s, so nothing will happen between the two. That’s not to say you can’t view your Pi desktop on your laptop, though. The method most similar to what you want involves getting capture gear that can be plugged into your laptop via USB. You can plug the Raspberry Pi into there and then display it on the screen in a window - not ideal, but it will function as much the same as possible. Otherwise, you can use screen-sharing utilities that work with VNC to remotely dial into the Pi’s screen from your laptop as long as they’re on the same network. We’ll try to get a tutorial like that sorted for the future!

94 November 2015 raspberrypi.org/magpi YOUR LETTERS Communit

FROM THE FORUM: SPACE IN YOUR HAND The Raspberry Pi Forum is a hotbed Robot parts I live in Germany and it’s very hard to get the of conversation and problem- parts for the amazing little robot [from issue solving for the community – join #38 of The MagPi]. Is it at all possible to get all of the robot bits from one supplier, or to get in via raspberrypi.org/forums a kit instead? Some of the websites have sold out of some of the components like the line t’s been mentioned that the Astro Pis tracker already and I’d really like to build it! Is that are going to the ISS are (a) Model B+, there any way you can help me out on this? I (b) running a special version of Raspbian Thanks, Wheezy, and (c) have special cases. Hermann Sailer The cases are, of course, really out of the question to be duplicated or sold for anything Unfortunately, in an attempt to keep the cost of affordable by mere mortals. The Model B+ is easy the robot down so we could keep to the £50 limit to obtain, so no issues there. Would it be possible we set ourselves, it was very difficult to have all to set up a download of the specific version of the parts come from one supplier. The line tracker Raspbian that is going to be flown so that those in particular was perfect for the size of the Pi on the ground who wish to demo the Sense HAT Model A+ and required simpler wiring to get it to and talk about Pis in space could run the ‘proper’ work. You may just have to be patient and wait for OS on them? it to get back into stock! W H Heydt As for a kit, though, there’s actually a new cheap robot kit that has been put together as part of We’ve been told by people in the know that the CamJam’s Pi Wars this year, which you can get image used on the Astro Pi is not really special, other from the Pi Hut (bit.ly/1hNITxX). It’s actually very than carrying the competition code and an MCP similar to our robot in a lot of ways, and will cost (master control program) to select which code to run you about the same as well. It’s also selling out on it. They’ve also told us it’s quite complex to set up every now and then, so you may need to wait for it at the moment. Either way, some of the competition to be in stock! code entries are up on GitHub, and more and more If there’s enough demand in terms of kits, of the code for the Astro Pis will see a release over though, we’d definitely look into it for the future. the next few months. So it sounds like you’ll be able to get it eventually! WRITE TO US

Have you got something you’d like to say? Get in touch via [email protected] or on The MagPi section of the forum at raspberrypi.org/forums

raspberrypi.org/magpi November 2015 95 Colum THE FINAL WORD MATT RICHARDSON Matt is Raspberry Pi’s US-based product evangelist. Before that, he was co-author of Getting Started with Raspberry Pi and a contributing editor at Make: magazine.

GOING MAINSTREAM Looking at the growth in our community, Matt Richardson thinks we’re just getting started...

here’s no doubt that ever since the first Pis in Currys, and you can buy The MagPi at WHSmith T batch of Raspberry Pis started shipping, and Tesco. There’s a chance that you picked up this adoption of our favourite educational copy of The MagPi at a place that also sells basic computer has been gaining momentum globally. consumer products like groceries, books, or toys. The signals are out there. I’m sure many of you At outreach events, we now spend less time long-time enthusiasts can recall a moment when introducing people to Raspberry Pi and more you’ve encountered Raspberry Pi in a context that time listening to what people are doing with their you didn’t quite expect. Perhaps on television, in a Raspberry Pis. When we do introduce people to newspaper, or for sale in a store. Recently, a family Raspberry Pi, they often already have at least a vague member called to tell me that he was surprised to notion of what we’re all about, instead of being overhear someone talking about Raspberry Pi – and completely unfamiliar with it. it wasn’t me! I’ve had a few of these moments recently. In Pi for everyone June I was walking around Washington DC, proudly When we were younger, my brothers and I became wearing my Raspberry Pi T-shirt. A total stranger fans of a particular band that wasn’t mainstream passed me by, gave me a thumbs-up, and exclaimed, and it felt like nobody had ever heard of them. “Yeah, Raspberry Pi!” It took me completely by (By the way, I won’t name this band – it would be surprise. And after the launch of Raspberry Pi 2, my too embarrassing!) The first time we heard their barber was asking about Pi because he had heard music on the radio we were initially excited, but about it in the news. then became dismayed. This small band we liked What we’re starting to see is Raspberry Pi was going mainstream and it wouldn’t be as special entering the mainstream. I know that it feels like to us anymore. we’re all part of a big movement right now, but Why don’t I feel this way as Raspberry Pi goes I believe we’re just on the brink of a really big mainstream? It’s because the bigger our community breakthrough into being more recognisable and is, the better it makes Raspberry Pi. The more that universal. It’s bound to have a huge impact on our people learn with it, the more they make with it, and mission and our community. the more they help others only improves Raspberry For example, up until recently, buying a Raspberry Pi as a resource for each of us. Pi meant ordering online from a speciality store, There’s plenty of Raspberry Pi to go around for one that provided hobby or industrial electronic everyone and I expect a broader, more novice group components. If you managed to find a bricks-and- of users to join us. They’re in luck; they have an mortar store that sold Raspberry Pis, it probably incredibly welcoming community waiting for them. also sold a wide variety of computer components. Those of you who have been with us since the However, this is starting to change. early days: thank you. You’re a huge part of how In the United States, Barnes & Noble Booksellers Raspberry Pi has been able to make it this far. And is now stocking Raspberry Pi kits and The MagPi in you can officially say that you liked Raspberry Pi its 640 locations. In the UK, you can find Raspberry before it was cool.

96 November 2015 raspberrypi.org/magpi

LEARN TO LOVE THE COMMAND Get started today for LINE just £2.49 / $2.99 From the makers of the official Raspberry Pi magazine ESSENTIALS

Find it on

digital app

raspberrypi.org/magpi/issues/essentials-bash-vol1

98 November 2015 raspberrypi.org/magpi