If you are just getting started with the ESP-13 Wifi Shield from Jaycar, I would encourage you to have a look at my “getting started with the ESP-13 WiFi shield” tutorial. It explains in great detail how to configure your Arduino, the IDE and the WiFi shield, and is a good pre-cursor for any of my ESP-13 WiFi shield tutorials (including this one).

This tutorial will show you how to setup a simple webserver on your ESP-13 WiFi Shield and display a table of all of the WiFi Access Points within it’s range (and refreshed every 5 seconds).
The ESP-13 shield will create it’s own WiFi access point, which means that you can take this project anywhere you want to. You do not have to be connected to your home/work WiFi network to see the webpage. The limitation however, is that your device must be within WiFi range of the ESP-13 WiFi shield in order to see the results of the WiFi scan.

Let me show you how to put this project together:

Parts Required

  1. Arduino UNO (or compatible board)
  2. KEYES ESP-13 WiFi Shield – from Jaycar (Cat. No: XC4614)
  3. USB cable – to connect Arduino to Computer
  4. 5 wires: 4 x Male to Male connectors and 1 x Female to Female Connector

Arduino IDE

While there are many Arduino IDE alternatives out there, I would recommend that you use the official Arduino IDE for this project. I used the official Arduino IDE app (v1.8.5) for Windows 10.
Make sure to get the most up-to-date version for your operating system here.

Arduino and IDE Setup

Make sure that your Arduino UNO has the BareMinimum sketch on it, and that you have configured your Arduino IDE as per this tutorial.

Use the following as a checklist:

  1. BareMinimum sketch loaded onto Arduino UNO
  2. Additional Boards Manager URL list contains:
    http://arduino.esp8266.com/stable/package_esp8266com_index.json
  3. Latest version of esp8266 board installed into Arduino IDE Boards Manager
  4. ESPDuino(ESP-13 Module) has been selected as the Board in the Tools menu.
  5. Make sure your ESP-13 Flash settings are correct
  6. Set your Arduino IDE Serial Monitor to a Baud rate of 115200

Once again – please make sure you have completed all of the tasks in the list above.
Please look at this tutorial for further information.

Wiring up the ESP-13 WiFi Shield

You will need to wire up your WiFi Shield in the following configuration to upload sketches to it:

Wire Connections

  1. Make sure that the Arduino UNO is OFF (i.e. not connected to power or USB port)
  2. Place the ESP-13 WiFi shield NEXT TO the Arduino UNO
  3. Connect a Red wire between 5V on Arduino UNO, and 5V (Arduino side) of the ESP-13 shield
  4. Connect a Black wire between GND on Arduino, and G (Arduino side) of the ESP-13 shield
  5. Connect a Green wire between D0(RX) on Arduino, and TX (UART – Arduino side) of ESP-13
  6. Connect a Yellow wire between D1(TX) on Arduino, and RX (UART – Arduino side) of ESP-13
  7. Connect a Blue wire between D0 (ESP-13 side) of the Shield, and G (ESP-13 side) of the Shield.
  8. Make sure that both of the switches on the ESP-13 WiFi Shield are in the “ON” position.

Uploading code to the ESP-13

Prepare the ESP-13 Shield for Code upload

  1. Make sure that both of the switches on the ESP-13 WiFi Shield are in the “ON” position.
  2. Connect the Arduino UNO to the computer via USB
  3. You should see a Red LED illuminate on the ESP-13 shield.
  4. Press the RESET (RST) BUTTON on the bottom left of the ESP-13 Shield

Uploading Code to the ESP-13

In your Arduino IDE – do the following:

  1. Create a new file: File > New
  2. Copy and paste the “ESP-13 WiFi Shield code” (see below) into the Arduino IDE
  3. Make sure ESPDuino(ESP-13 Module) has been selected as the Board in the Tools menu.
  4. Select: Tools > Port > COM4 (Your Arduino may be on a different COM port)
  5. Select: Sketch > Upload (or Ctrl + U) – or click on right arrow symbol
  6. Once code has been uploaded, POWER-OFF the Arduino and remove the Blue wire.
  7. Power-up the Arduino and watch the magic happen

ESP-13 WiFi Shield CODE

/*==========================================================================
* Project: ArduinoBasics WiFi Scanner
* Author: Scott C
* Date created: 16 September 2018
* Arduino IDE version: 1.8.5
* Operating System: Windows 10 Pro
*
* Description:
* The ESP-13 WiFi shield will create an Access Point that you can connect to
* using your phone/tablet/PC. Once connected via WiFi, navigate your browser
* to the IP address displayed in the Serial monitor to see the list of Access Points in your area.
*
* Acknowledgements:
* Some of the code used within this sketch was inspired by or adapted from other notable sources.
* Webserver code: adapted from https://arduino-esp8266.readthedocs.io/en/latest/esp8266wifi/server-examples.html
* WiFi scanner code adapted from tablatronix : https://gist.github.com/tablatronix/497f3b299e0f212fc171ac5662fa7b42
* HTTP/1.1 protocols: https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
*
* ————————————————————————-
* LIBRARIES:
* Libraries used: ESP8266WiFi.h – installed with Boards Manager : https://github.com/esp8266/Arduino
* More information about ESP8266WiFi.h library :
* https://arduino-esp8266.readthedocs.io/en/latest/esp8266wifi/readme.html
* https://arduino-esp8266.readthedocs.io/en/2.4.2/libraries.html#wifi-esp8266wifi-library
*
*
* GLOBAL VARIABLES:
* The SSID and Password for the Access point (AP) that will be created by the ESP-13 WiFi shield
* The WiFi server which will listen for Clients on Port 80 (eg. Web Browsers)
============================================================================ */
#include <ESP8266WiFi.h>
const char* ssid = “PinkFluffyUnicorn”;
const char* password = “12345678”;
WiFiServer server(80);
/* ==========================================================================
* SETUP:
* Begin Serial Communication using a Baud Rate of 115200
* Configure the ESP-13 WiFi shield into Access Point Mode
* Create an Access Point for devices to connect to.
* Display the Access Point (AP) IP address in the Serial monitor.
* Start the server if the Access Point has been created successfully
============================================================================ */
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
WiFi.mode(WIFI_AP);
boolean r = WiFi.softAP(ssid, password);
if (r) {
server.begin();
Serial.println(“”);
Serial.print(“Please connect to the Access Point: “);
Serial.println(ssid);
Serial.printf(“then open %s in a web browser\n”, WiFi.softAPIP().toString().c_str());
Serial.println(“”);
} else {
Serial.println(“FAILED to create Access Point”);
while(1){}
}
}
/* ==========================================================================
* LOOP:
* Start listening for Clients
* Notify when a Client connects to the server using the Serial Monitor
* Then write any request messages from the client to the Serial Monitor
* Wait for the client to send through an empty line, then
* Serve the constructed HTML page to the client
* The delay gives the browser some time to receive the HTML page, before
* the server dicsonnects from the client.
* Notify when the client has been disconnected.
============================================================================ */
void loop() {
WiFiClient client = server.available();
if(client){
Serial.println(“\n A Client just connected to the server”);
while(client.connected()) {
if(client.available()){
String clientMessage = client.readStringUntil(‘\r’);
Serial.print(clientMessage);
if(clientMessage.length() == 1 && clientMessage[0] ==’\n’) {
client.println(constructHTMLpage());
break;
}
}
}
delay(1000);
client.stop();
Serial.println(“\n The server has disconnected the Client”);
}
}
/* ==========================================================================
*constructHTMLpage:
*SCAN for available WiFi networks within range of the ESP-13 WiFi Shield
*Construct the necessary HTTP response and HTML to
* – display the SCAN results within a web browser (client).
* – automatically refresh the HTML page every 5 seconds.
*
*The HTML page will display the following information in a table:
* – SSID,
* – Signal Strength and
* – Encryption type.
============================================================================ */
String constructHTMLpage(){
int numSSID = WiFi.scanNetworks();
String HTMLpage = String(“HTTP/1.1 200 OK\r\n”) +
“Content-Type: text/html\r\n” +
“Connection: close\r\n” +
“Refresh: 5\r\n” +
“\r\n” +
“<!DOCTYPE HTML>” +
“<html><body>\r\n” +
“<h2>WIFI NETWORKS</h2>\r\n” +
“<table><tr><th>SSID</th><th>Signal Strength</th><th>Encryption type</th></tr>\r\n”;
for(int i=0; i<numSSID; i++){
HTMLpage = HTMLpage + String(“<tr><td>”);
HTMLpage = HTMLpage + String(WiFi.SSID(i));
HTMLpage = HTMLpage + String(“</td><td>”);
HTMLpage = HTMLpage + String(WiFi.RSSI(i));
HTMLpage = HTMLpage + String(“</td><td>”);
HTMLpage = HTMLpage + String(encryptionTypeStr(WiFi.encryptionType(i)));
HTMLpage = HTMLpage + String(” [“);
HTMLpage = HTMLpage + String(WiFi.encryptionType(i));
HTMLpage = HTMLpage + String(“]”);
HTMLpage = HTMLpage + String(“</td></tr>”);
}
HTMLpage = HTMLpage + String(“</table></body></html>\r\n”);
return HTMLpage;
}
/* ==========================================================================
*encryptionTypeStr:
*Will accept a WiFi.encryptionType() integer and convert it into a more
*meaningful string.
============================================================================ */
String encryptionTypeStr(uint8_t authmode) {
switch(authmode) {
case ENC_TYPE_NONE:
return “OPEN”;
case ENC_TYPE_WEP:
return “WEP”;
case ENC_TYPE_TKIP:
return “WPA_PSK”;
case ENC_TYPE_CCMP:
return “WPA2_PSK”;
case ENC_TYPE_AUTO:
return “WPA_WPA2_PSK”;
default:
return “UNKOWN”;
}
}

view rawArduinoBasics_WiFi_Scanner_Code.ino hosted with ❤ by GitHub

Interacting with the ESP-13 Shield

When the ESP-13 WiFi shield regains power, it will create an Access Point called “PinkFluffyUnicorn”. Use the following steps to interact with the shield:

  1. Open the Serial Monitor in the Arduino IDE.
  2. Press the RESET (RST) Button on the ESP-13 WiFi Shield
  3. You should see some instructions inside of the Serial Monitor Window
  4. Using your phone, Connect to the WiFi Access Point: PinkFluffyUnicorn
  5. Use password: 12345678
  6. Open a Browser on your Phone and Navigate to: 192.168.4.1
  7. You should now see a list of Access Points in your Area (excluding PinkFluffyUnicorn)
  8. The list should automatically refresh every 5 seconds
  9. You can also see the “GET” requests sent by the browser in the Serial Monitor.

Using the ESP-13 Shield

Now that we know everything is working. We can now use the Shield as a Shield.

  1. POWER-OFF the Arduino UNO
  2. Remove ALL of the connection wires between the Arduino and the ESP-13 Shield.
  3. Place the ESP-13 WiFi Shield onto the Arduino UNO by lining up the respective header pins
  4. The ESP-13 side of the shield lines up with the Power and Analog pins of the Arduino
  5. The Arduino side of the Shield lines up with the Digital pins of the Arduino
  6. When the shield is installed, the WiFi chip should be on the opposite side from the power jack
  7. Double check that ALL of the male headers on the underside of ESP-13 shield are sitting in the appropriate female header on the Arduino UNO
  8. POWER-UP the Arduino UNO, and reconnect to the WiFi Access point as before, and navigate the browser to 192.168.4.1 as before.
  9. ***PLEASE NOTE: You will no longer see any further communication in the Serial Monitor window. If you want to use the serial monitor, then you will have to take the shield off and connect the wires again (but not the blue one).
  10. The blue wire is only needed when you UPLOAD CODE to the ESP-13 Shield.

You can now disconnect it from the computer completely and power your project with an appropriate battery. You can take this project around your house and find the WiFi blind-spots in your home.

Summary

In this tutorial I showed how to upload a sketch to the ESP-13 WiFi shield. The code set the ESP-13 WiFi shield as an Access Point, and created a web server. The Webpage created was a bit primitive, but I did not want to get overly complicated at this stage. I hope to provide another tutorial in future which will show you how to create a more interesting yet more complicated web page using AJAX requests and XML. I plan to serve a webpage stored on the ESP-13’s flash chip.

Please let me know if this tutorial helped you in any way.
Until next time…..

This is a very simple project that turns a Rainbow Cube Kit from Seeedstudio, into a digital rain cloud. It features a relaxing rain animation which is ruined by a not-so-relaxing yet somewhat realistic lightning effect. The animation has a very random pattern, and is quite satisfying to watch. The strategically placed cotton wool on the top of the cube makes all the difference to the project, and is sure to impress all of your friends. Luckily, I have done all of the hard work for you. You will find the full source code for the animation sequence below. You just have to provide the Rainbow Cube Kit and the cotton wool. Have fun !!

Parts Required

  1. Rainbow Cube Kit (Assembled) – 4x4x4 RGB LED cube
  2. Cotton Wool
  3. Mini USB cable – to connect Rainbow Cube Kit to Computer

More information about the Rainbow Cube Kit can be found here:
https://seeeddoc.github.io/Rainbow_Cube/

Arduino IDE

The Rainbow Cube Kit comes pre-configured with its own animation sequence.
We will over-write this sequence with the Digital Rain Cloud sketch below, and use the Arduino IDE to re-program the Rainbow Cube Kit. While there are many Arduino IDE alternatives out there, I would recommend that you use the official Arduino IDE for this project.
I used the official Arduino IDE app (v1.8.5) for Windows 10.
Make sure to get the most up-to-date version for your operating system here.

Arduino IDE Setup (Libraries)

You will need to install a couple of libraries into your Arduino IDE before you upload the sketch to the Rainbow Cube Kit.

Download the Rainowduino-v3 library

The Rainowduino-v3 library by unwiredben can be found here:
https://github.com/unwiredben/Rainbowduino-v3

Install the Rainbowduino-v3 library using the Arduino IDE:

Sketch > Include Library > Add .ZIP library
Then select the downloaded Rainowduino-v3 library ZIP file.

The FastLED library can also be installed via the IDE:

Sketch > Include Library > Manage Libraries : then search for FastLED
Select the latest version, and then select INSTALL.
I used version 3.2.0 – but the latest version should also work.

Arduino Code

Upload the following sketch to the Rainbow Cube via the mini USB cable.

/*==========================================================================
* Project: ArduinoBasics Digital Raincloud
* Author: Scott C
* Date created: 06 November 2018
* Arduino IDE version: 1.8.5
* Operating System: Windows 10 Pro
* Tutorial Link: https//arduinobasics.blogspot.com/
*
* Description:
* A simple program written for the Rainbowduino 4x4x4 RGB LED cube (by Seeedstudio),
* that creates a digital raincloud effect, lightning and all. Add a bit of cotton wool to the top of the
* cube and the project really comes alive.
*
*
* Acknowledgements:
* My son suggested putting cotton wool on the top. This simple suggestion made all the difference.
* The Seeedstudio Rainbowduino WIKI page is a great place to get started with this cube.
* http://wiki.seeedstudio.com/Rainbowduino_v3.0/
*
* ————————————————————————-
* LIBRARIES:
* The Rainowduino-v3 library by unwiredben was used in this project.
* The Rainbowduino-v3 library can be found here: https://github.com/unwiredben/Rainbowduino-v3
*
* The FastLED library was used for the random8() function.
* The FastLED library can be installed via the IDE:
* Sketch > Include Library > Manage Libraries : then search for FastLED
* Select the latest version, and then select INSTALL.
* I used version 3.2.0
============================================================================ */
#include <FastLED.h>
#include <Rainbowduino.h>
/* ————————————————————————–
* GLOBAL VARIABLES
* xPos,yPos = allows us to select a specific LED position in a layer.
* randomLED = is used to select the random LED from which rain falls
* cRed, cGreen, cBlue = allows slight variations in colour of the raindrops.
* topR, topG, topB = restores the colours of the top layer after the lightning effect
* rainChance = affects the frequency/amount of rainfall
* rainSpeed = the speed at which the rain falls. Recommend you set this between 2-5.
* lightningChance = affect the frequency of lightning
—————————————————————————-*/
unsigned char xPos[16] = {0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3};
unsigned char yPos[16] = {0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3};
int randomLED = 0;
int cRed[4][16];
int cGreen[4][16];
int cBlue[4][16];
int topR[16];
int topG[16];
int topB[16];
int rainChance;
int rainSpeed = 5;
int lightningChance;
/*————————————————————————–
* SETUP:
* Initialise the Rainbowduino 4x4x4 RGB LED cube and the colour arrays
————————————————————————–*/
void setup() {
Rb.init();
for(int i=0; i<4; i++){
for(int j=0; j<16; j++){
cRed[i][j] = 0;
cGreen[i][j] = 0;
cBlue[i][j] = 0;
}
}
}
/*————————————————————————–
* LOOP:
* Randomise the chance of a lightning strike with every loop. Probability = 5%
* Randomise the chance of a rain drop. Probability = 40%
* Randomise the LED from which the rain drop falls from
* Randomise the colour of the raindrop, with a bias towards blue colours
* Record the colour of the raindrop into the topR, topG, and topB arrays.
* Then update the display to start the raindrop animation.
————————————————————————–*/
void loop() {
lightningChance=random8(100);
if(lightningChance>95){
lightning();
}
rainChance = random8(100);
if(rainChance>60){
randomLED = random8(16);
cRed[3][randomLED]=random8(10,100);
cGreen[3][randomLED]=random8(10,100);
cBlue[3][randomLED]=random8(80,250);
topR[randomLED] = cRed[3][randomLED];
topG[randomLED] = cGreen[3][randomLED];
topB[randomLED] = cBlue[3][randomLED];
}
updateDisplay();
}
/*————————————————————————–
* updateDisplay:
* This function is responsible for the raindrop animation.
* Illuminate the randomLED
* Move the raindrop down to the next level with every cycle
* Gradually fade the LEDs on every cycle, and prevent the values from dropping below zero
* Update the LED brightness and rain drop animation sequence on the lower levels of the cube.
* The delay at the end, will determine the speed of the raindrop animation (larger values are slower)
————————————————————————–*/
void updateDisplay(){
for(int i=0; i<4; i++){
for(int j=0; j<16; j++){
// Illuminate the randomLED on the top layer
if(i>2){
if(j==randomLED){
Rb.setPixelZXY(3,xPos[j],yPos[j], topR[j],topG[j],topB[j]);
}
}
// Move the raindrop down to the next level
if(i>0){
cRed[i-1][j] = cRed[i][j];
cGreen[i-1][j] = cGreen[i][j];
cBlue[i-1][j] = cBlue[i][j];
}
// Gradually fade the LEDs – Please note: the top layer is not affected
cRed[i][j]=cRed[i][j]-50;
cGreen[i][j]=cGreen[i][j]-40;
cBlue[i][j]=cBlue[i][j]-40;
if(cRed[i][j]<0){
cRed[i][j] = 0;
}
if(cGreen[i][j]<0){
cGreen[i][j] = 0;
}
if(cBlue[i][j]<0){
cBlue[i][j] = 0;
}
// Update the LED brightness and rain drop animation sequence on the lower levels.
if(i<3){
Rb.setPixelZXY(i,xPos[j],yPos[j],cRed[i][j],cGreen[i][j],cBlue[i][j]);
}
//Set the speed of the raindrop animation sequence
delay(rainSpeed);
}
}
}
/*————————————————————————–
* lightning:
* The LEDs will be set to flash a random number of times (0 to 19 times)
* But the flash may or may not always occur.
* If the flash does occur, then there is a 50% chance that any particular LED will join in.
* The LED will illuminate to full brightness WHITE (255,255,255)
* They will stay illuminated for 20 to 70 milliseconds
* and then return back to their normal colour for 0 to 20 milliseconds until the next flash.
* We do not want the rain animation to stop when the lightning is flashing, so we need to update
* the raindrop sequence from time to time. I did this randomly to eliminate any PERCEIVED delay from the
* lightning sequence.
* The lightning sequence and pattern is very RANDOM, which makes it very realistic.
————————————————————————–*/
void lightning(){
int chance = random8(20);
for(int k=0; k<chance; k++){
lightningChance=random8(100);
if(lightningChance>random8(50)){
for(int j=0; j<16; j++){
chance = random8(100);
if(chance>50){
Rb.setPixelZXY(3,xPos[j],yPos[j],255,255,255);
}
}
delay(random8(20,70));
for(int j=0; j<16; j++){
Rb.setPixelZXY(3,xPos[j],yPos[j],topR[j],topG[j],topB[j]);
}
delay(random8(20));
}
chance = random8(100);
if(chance>70){
updateDisplay();
}
}
}

view rawDigital_Rain_Cloud.ino hosted with ❤ by GitHub

Final Touches

Once the code is uploaded, you will see a very random LED sequence. The top layer represents the clouds, and the 3 layers beneath represent the rain. Add a bit of cotton wool to cover the LEDs on the top layer and watch the light show begin.

Summary

While this may seem like a simple project, it actually took a little time to get the effect that I wanted. The cotton wool really brought the project to life, and if you don’t like the lightning, you can always delete that section in the program. If you would like to try some other animations on your LED cube, then feel free to look at the example folder on my GitHub page:
https://github.com/ArduinoBasics/Rainbowduino_LEDcube
Enjoy your new digital Rain cloud – I would love to see your versions.

Generally when you work with CNC machinery, you program it on a computer, then allow a controller to automatically run through a cutting routine. Arduino boards have long been used for this kind of control through the grbl software package, but YouTuber Electronoobs decided to do things a bit differently.

His setup takes input from a potentiometer and several buttons, enabling manual control of his stepper motor-driven router. An Arduino Nano powers the motors through a pair of stepper drivers, while a second Nano is then used to output distance information on an LCD screen, letting him view exactly where his cutter is at a glance.

Why use 2 Arduinos? Well, if I use only one, the code would be very difficult with too much interruptions. We have to create pulses for the motors and print on the LCD at the same time. I’ve done that and each time I was printing on the LCD, there was a small pause in the motor rotation, and if the refresh rate is fast, the motors will have a pause each time and we don’t want that. That’s why I use 2 Arduinos. One will create the pulses for the motors and the other one will count the steps and print the distance and speed.

We have 2 step motors. I’ve used NEMA 17. Each with a A4988 driver. This driver needs 3 signals from the Arduino. Enable, direction and steps. The enable pin is connected to a toggle switch so we could start to stop the motors manually. The toggle switch is also connected to the Arduinos so we could know when the motors are enabled or not. To control speed we use a lineal potentiometer and to move axis and reset position, some push buttons with pulldowns. To print the distance, I’ve used an I2S LCD screen of 20×4 but you will have the code for the 16×2 version of LCD as well.

Besides adding a nice readout to the machine, this concept could certainly form the basis for all manner of other stepper-driven devices.

Boards:NanoCategories:ArduinoFeatured

Looking for this year’s perfect something to put under the tree ‘from Santa’? Well, look no further than right here — it’s time for our traditional Christmas shopping list!

Woohoo!

Which Raspberry Pi?

As you are no doubt aware, the Raspberry Pi comes in more than one variety. And if you’re planning to give a Pi as a gift to a first-time user, you may be confused as to which one you should buy.

Raspberry Pi 3B+

For someone learning to write code for the first time, we recommend the Raspberry Pi 3B+. Anyone living in a home with an HDMI display, such as a computer monitor or television, will be able to plug directly into the 3B+, and in case they don’t already have a standard USB mouse and keyboard, these can both easily be acquired online, in many charity shops, or by sweet-talking a friend/neighbour/employer. You can even find some great Raspberry Pi starter kits that include many of the items needed to get started.

Raspberry Pi Zero W

The Raspberry Pi Zero W comes at a lower price, and with it, a smaller footprint than the 3B+. This makes the tiny Pi the perfect addition to any creator’s toolkit, ideal for projects that run on a Pi long-term, such as display builds, robots, or near-space HABs.

Pre-loaded micro SD card

Whatever Raspberry Pi you choose for the lucky receiver of your Christmas gift, we also recommend getting them a pre-loaded micro SD card. While it’s really easy to flash an operating system image onto one of the dusty old micro SD cards you have lurking in a drawer, pre-loaded cards allow new Pi owners to plug in and get started right off the bat. Plus, the ones with our operating system Raspbian on come in rather fancy, logo-adorned SD adapters. And who doesn’t like a rather fancy, logo-adorned SD adapter?

Books, books, books

We’re releasing two new books this week that are perfect for any Christmas stocking!

Code Club Book of Scratch Volume 1

Code Club Book of Scratch Volume 1

The Code Club team is buzzing over the release of the first Code Club book, which is available to order now. Primarily aimed at learners aged 9–13, the book focuses on teaching the Scratch programming language, and it’s jam-packed with fun projects, tips, and stickers. The book also comes with a pair of super-special computer science glasses that allow you to see secret hints hidden throughout the book. Very, very cool.

And since Scratch is pre-installed on Raspbian, the Code Club Book of Scratch is the perfect accompaniment to that Raspberry Pi you’re planning to get for the young person in your life!

The Official Raspberry Pi Beginner’s Guide

Raspberry Pi Beginner's Guide Book 2018

From setting up a Raspberry Pi to using Scratch and Python to create games and animations, the hot-off-the-press Official Raspberry Pi Beginner’s Guide has everything your loved one needs to get started and keep going.

And when we say ‘ hot-off-the-press’, we mean it — we only released the book this week!

Both the Raspberry Pi Beginner’s Guide and the Code Club Book of Scratch are available with free international shipping. And if you’d like to give either of them a ‘try before you buy’ test drive, they should both available soon as free PDFs for you to download and peruse at your leisure.

Magazine subscriptions

Alongside our books, we have an array of magazines, including the brand-new, twice-monthly, video game–focused Wireframe! As with the books, you can download all issues of our magazines for a test read before you commit to a subscription.

Twelve-month print subscriptions to HackSpace magazine or The MagPi will reward you with a technical treat: an Adafruit Circuit Playground or a Raspberry Pi 3A+.

So not only can you give a gift that will last the entirety of 2019, but you’ll also automatically provide your favourite creative person with something rather lovely to play with when they receive their first issue.

And if you sign them up now, you can give someone a six-issue subscription of Wireframe magazine for £12! Or save 49% on a twelve-month subscription of 26 magazines from £40.

So many choices, so many ways to make the creators and tech fans in your life happy this holiday season.

Accessories and such

Maybe the person you’re shopping for already has every Raspberry Pi on the market. And as for our publications, their mailbox is full of magazines and books every week, and their smartphone and tablets are crammed with every PDF we’ve ever produced. So what next?

Swag

What do you buy the Raspberry Pi fan who has all the Pis? Swag, of course!

Raspberry Pi Swag - enamel pin
Raspberry Pi Swag - travel card holder
Raspberry Pi Swag - Mug

From stickers and mugs, to coasters and pins, check out the Raspberry Pi swag store for some wonderful treats!

Add-ons

Whether it’s a HAT (Hardware Attached on Top) for the Raspberry Pi, or a full kit to make something rather spectacular, our Approved Resellers stock all manner of Pi add-ons.

The Break for Pi AdaBox from Adafruit

Pimoroni Picade

Pimoroni’s new and improved Picade

Pi Hut LED Xmas Tree

The Pi Hut 3D Xmas Tree

You can find your nearest Raspberry Pi Approved Reseller by clicking on any item on our products page and then selecting your country.

This isn’t all!

We’ve been putting together a Raspberry Pi shopping list every year in response to the message we receive from you asking for gift ideas. So why not have a look back at our previous lists to get more inspiration for what to give, including more books, toolkit staples, non-Pi tech bits, and, of course, LEGO.

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Read More

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Read More

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Read More