Introduction: Make Your Pi a (Local) Cloud Server!

Picture of Make Your Pi a (Local) Cloud Server!

Save and access docs and photos and music on your own local Pi Cloud server! The best part: you can use it if, or when, the Internet goes down (or if you're in a remote spot & want access to Wikipedia). Oh hey, and if your friend gets one and they live close (*ahem*80ft*ahem*), you can share stuff with them and make your own personal chat line!

That gets me thinking.. if enough folks built Pi Cloud servers, we could crowdsource the Internet! That would be an 11/10 on a scale of greatness. With the new models of the Raspberry Pi computer, it's possible and not even expensive! (What! Tell me more!)

This tutorial will show you how to set up a short-range (~ 80 ft) WiFi Access Point and a personal web server ('bringin it back to HTML bbies). You can set this up as a (closed) local network only (i.e. your own personal "cloud" backup device), or broadcast it to the rest of the world! (..if you do this be sure you know network security.)

That said, assuming you have a basic knowledge of the Pi, here's the breakdown:

Read Time: ~ 40 min

Build Time: ~ 60 min (less if you are experienced w/ Linux)

Cost: ~ $35 (for the Pi 3)

If you're interested in helping to kickstart a people's Internet, share it w/ your friends & family & everyone you know (or build it for them!). If you build this project please mark that you've built it so we can get a sense of how many folks have the infrastructure we need to actually make a full-fledged people's Internet. Lastly, follow me to stay updated (I am reaching out to some folks to try to get this to be a real thing, please feel free to contact me if you can help and/or take this on, it is open-source!).

Step 1: New to Linux & Terminal Programming?

Picture of New to Linux & Terminal Programming?

We'll need to be able to access our Pi remotely (e.g. via SSH). If you're like "wtf is that", check out this introductory tutorialfor a more thorough overview on how to set up the Raspberry Pi 3 and some quick Linux terminal programming.

This approach to the Pi Access Point* and web server** uses the Jessie Lite OS. If you follow this tutorial line-by-line, you will need this specific version of Linux.

Lastly, this tutorial is built off of the Adafruit Digital Free Library tutorial, so check that tutorial if you run into any issues (or leave a comment and myself or another helpful folk will attempt to answer your question :) )

(Also, this might feel a bit long, so I've included various cute puppy photos throughout to keep you motivated :D)

*An Access Point is hardware device that allows a WiFi device (e.g. smartphone) to connect to a wired network (e.g. router).

**A web server is a computer that delivers a web page. When you go to your favorite websites, you type in "www.wikipedia.org" which takes you to the IP address for the web server and displays public information.

Warning: it is recommended to run your Pi as a local network only (i.e. do not connect the Pi to the broader World Wide Web) as the WPA2 password protocol may not be secure.

Step 2: Materials

Picture of Materials

- Computer with Ethernet port & SD Card slot

- Raspberry Pi 3

- SD Card(8GB or larger, esp. if you want to use it for storage)

- MicroUSB to USB power cord

- Ethernet Cable

- Recommended: Raspberry Pi Case

Step 3: Software Programs

Picture of Software Programs

1. PuTTY allows us to remotely log in to the Raspberry Pi using the Pi's IP address, username, and password.

Download here: http://www.putty.org/

2. Etcher formats and writes the Raspbian (or other) Operating System (“OS”) to an SD card.

Download here: https://etcher.io/

3. WinSCP allows for easy file transfer between your computer and the Raspberry Pi.

Download here (click on Installation Package): https://winscp.net/eng/download.php

4. Windows computers will need Bonjour print services for Windows (from Apple) to use the "raspberrypi.local" IP address.

Download here: https://support.apple.com/kb/dl999?locale=en_US

Step 4: Quickstart

Picture of Quickstart

If you've worked with the Pi before and are comfortable w/ the Linux terminal and such, here's a quick overview of this process:

1. Load Jessie Lite onto an SD card (8GB or more) and insert into the Pi.

Download the Jessie Lite OS here.

2. Remotely log in (e.g. SSH) and enter credentials.

3. Here's a Github repository with all of the commands to turn your Pi into a web server :D

Go through the Setup file and input the commands (in order). This process will install HostAPD (authentication), DHCP (IP management), iptables (firewall), and Apache (web server software).

4. Create a public web page or keep your files/data private/w/ friends & family.

A sample HTML web page adapted from the Adafruit Digital Free Library tutorial is included in the Github repository (ServerWebsiteHTML-Raw). You can also use the larger zip file to build off of :)

Warning: it is recommended to run your Pi as a local network only (i.e. do not connect the Pi to the broader World Wide Web) as the WPA2 password protocol may not be secure.

Step 5: Set Up the Raspberry Pi

Picture of Set Up the Raspberry Pi

1. Flash the SD card with Jessie Lite (download Jessie Lite here). Enable SSHby adding a file named "SSH" in the SD card file contents (no extensions -- remove the .txt if any added automatically). Insert into the Pi.

2. Plug in the Ethernet cable between your computer and the Pi, then plug the Pi power cable.

3. Create a network bridge between your computer and the Pi.

Go to Settings -> Network & Internet -> Change Adapter Settings. Select the Ethernet connection (should show an unknown connection or something similar). Hold the "CTRL" key, and then select the WiFi connection. Right click and choose "Bridge Connections."

3. Open PuTTY, type "raspberrypi.local" for the hostname, and log into your Pi, woo!

If you are logging in for the first time, use the default username: pi and password: raspberry . Change your password using the command passwd

4. Check that the Pi is connected to the Internet and update it.

Run this command to check if the Pi can connect to Google (it will print 5 lines saying it if received information from google.com):

ping -c 5 google.com

Run this command to update the Pi (first one downloads the packages, second one installs 'em):

sudo apt-get update
sudo apt-get upgrade

Step 6: Install Apache!

Picture of Install Apache!

Apache is our web server software! (It allows us to easily host information and files accessible via a web browser like Chrome, Firefox, Explorer, etc.)

Let's install the Apache software and then change permissions to edit the HTML folder. Type and enter the following commands (in order):

sudo apt-get install apache2 -y
cd /var/www
sudo chown pi:pi /var/www/html
cd

Step 7: Install Server Software!

Picture of Install Server Software!

1.Install HostAPDand DHCP software.

HostAPD is used to authenticate information sent and received from connected devices, and DHCP is a protocol used to provide quick, automatic, and central management for the distribution of IP addresses within a network.

To install both at once, type the following command and then press "y" to continue:

sudo apt-get install hostapd isc-dhcp-server

2. Install iptables for a firewall. (yayy for security!)

Run this command and type "y" (yes) to both of the config screens that pop up:

sudo apt-get install iptables-persistent

Step 8: Edit the DHCP Configuration File

Picture of Edit the DHCP Configuration File

Let's set up the DHCP communication protocol so we can send and receive information (pretty important if you're thinking of building a connected network)! Go to the DHCP configuration file by typing the following:

sudo nano /etc/dhcp/dhcpd.conf

1. Add a comment ("#") in front of the following lines (so it looks like the file in Photo 1):

option domain-name “example.org”;

option domain-name-servers ns1.example.org, ns2.example.org;

2. Remove the comment ("#"') from the "authoritative" line (Photo 1 also helpful here):

#If this DHCP server is the official DHCP server for the local network, the authoritative directive should be uncommented.

#authoritative;

3. Add this code to the very end of the file (see photo 2):

subnet 192.168.42.0 netmask 255.255.255.0 {    
    range 192.168.42.10 192.168.42.50     
    option broadcast-address 192.168.42.255;
    option routers 192.168.42.1;
    default-lease-time 600;
    max-lease-time 7200;
    option domain-name “local”;
    option domain-name-servers 8.8.8.8, 8.8.4.4;
}

What is this doing?! To (very briefly) summarize, it sets up a range of IP addresses to assign to connected devices (from 192.168.42.10 to 192.168.42.50), just like your home router! It also tells the Pi how to communicate to other devices (its broadcast address, 192.168.42.255, and its own IP address, 192.168.42.1). It assigns an amount of time (in sec) to share this connection (lease time), and sets up domain name servers (like looking up a phone number in a directory).

4. Save and exit by pressing "Ctrl - X" and then "y" (and then the enter key).

Step 9: Edit the Default DHCP Server File

Picture of Edit the Default DHCP Server File

Let's edit the DHCP server file so that we can assign it to broadcast via WiFi! Go to the DHCP default server file by typing the following:

sudo nano /etc/default/isc-dhcp-server

1. Scroll down to the line that says INTERFACES=”” and change it to broadcast via wlan0 (that's a zero, not an O):

INTERFACES=”wlan0”

2. Save and exit by pressing “Ctrl - X” and then “y” (you've probably figured this out key combo by now so I'll stop mentioning it :) ).

Step 10: Set Up a Static IP Address

Picture of Set Up a Static IP Address

1. Let's give our Pi a static (unchanging) IP address so that we can always find it, yay! Temporarily disable the wireless interface network:

sudo ifdown wlan0

2. Use the nano text editor program to edit the network interfaces file (which you probably figured out by reading the command (: )

sudo nano /etc/network/interfaces

3. Edit the file so that it looks exactly like the following, then exit & save (also check out Photo 1):

auto lo
iface lo inet loopback
iface eth0 inet dhcp
allow-hotplug wlan0
iface wlan0 inet static
    address 192.168.42.1
    netmask 255.255.255.0
#iface wlan0 inet manual
#wpa-roam /etc/wpa-supplicant/wpa_supplicant.conf
#iface default inet dhcp

4. Assign a static IP:

sudo ifconfig wlan0 192.168.42.1

Step 11: Configure the Access Point Details

Picture of Configure the Access Point Details

1. Create a new configuration file named "hostapd":

sudo nano /etc/hostapd/hostapd.conf

2. Write the following (exactly as-is) in this new configuration file (then exit & save) (Photo 1):

interface=wlan0
ssid=HelloWorld #Name of your RPi WiFi connection
country_code=US #Unless you are elsewhere!
hw_mode=g
channel=6
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2 #This is the password protocol
wpa_passphrase=raspberry #Change the password!
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP
wpa_group_rekey=86400
ieee80211n=1
wme_enabled=1 

3. Tell the HostAPD protocol where to find this new file.

Edit the default HostAPD file:

sudo nano /etc/default/hostapd

Find the line that says #DAEMON_CONF="". Remove the comment and edit it so that it looks like this (Photo 2):

DAEMON_CONF=”/etc/hostapd/hostapd.conf”

Edit the HostAPD initialization file:

sudo nano /etc/init.d/hostapd

Find the line that saysDAEMON_CONF=. Edit it so that it to point to your new configuration file! Like this (Photo 3):

DAEMON_CONF=/etc/hostapd/hostapd.conf

Step 12: Configure Network Address Translation ("NAT")

Picture of Configure Network Address Translation ("NAT")

This step allows for multiple clients (like all your friends!) to connect to the Pi's WiFi at once (play all the games!!). It is a bit technical, so I'm gonna gloss over the deets (also not terribly familiar with this part), but it will get you through the process.

1. First, we need to start IP forwarding every time the Pi turns on. Enter the following command to edit the sysctl* configuration file:

sudo nano /etc/sysctl.conf 

-- Scroll to the bottom and type this code on a new line, then exit & save:

net.ipv4.ip_forward=1

*btw that is an L in sysctl, not a 1, which I have messed up soooo many times -.-

2. Activate IP forwarding by typing:

sudo sh -c “echo 1 > /proc/sys/net/ipv4/ip_forward” 

3. Create network translation between the Ethernet port eth0 and the WiFI port wlan0 by typing the following commands (w/ - signs and caps and such):

sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE 
sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT 
sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT 

4. To ensure network translation happens when we reboot the Pi, run this:

sudo sh -c “iptables-save > /etc/iptables/rules.v4”

Step 13: Test That Access Point!

Picture of Test That Access Point!

1. Run hostapd with our configuration file manually with this command:

sudo /usr/sbin/hostapd /etc/hostapd/hostapd.conf 

2. Check the WiFi list on your computer or smartphone and find your new access point SSID! If you didn't change anything, it will be named "HelloWorld" with a password of "Raspberry".

If you connect successfully, you will get some text on the Raspberry Pi screen. We won't see much yet, but we are very close!

3. Cancel the test by typing “Ctrl+C” in the Raspberry Pi console.

You can check the status of the host AP server and the DHCP server with the following commands:

sudo service hostapd status 
sudo service isc-dhcp-server status 

Step 14: Set Up a Daemon

Picture of Set Up a Daemon

A daemon is a program that starts automatically every time the Pi is powered on and runs in the background (not quite like the "His Dark Materials" series..).

1. Start the hostapd and dhcp programs:

sudo service hostapd start
sudo service isc-dhcp-server start 

2. Run these next two commands to enable hostapd and dhcp to start automatically when the Pi turns on:

sudo update-rc.d hostapd enable 
sudo update-rc.d isc-dhcp-server enable

Step 15: Almost There! Create a Web Server HTML File!

Picture of Almost There! Create a Web Server HTML File!

1. Write an HTML page to host on your web server! Or download one I adapted from the Adafruit Digital Free Library :)

Download and save the zip file, then extract the contents. (Here's the full GitHub page)

2. Open WinSCP and enter the hostname: raspberrypi.local

3. Log in to the Pi (type the username and password).

4. On the Pi side of the screen (right side), go to the home directory.

Click the folder with the up arrow on it two times.

5.Go to the /var/www/html file.

Double-click on the folder labeled “var”, then the "www" folder", and finally the "html" folder.

6. Delete the existing index.html file (or if you want to write your own you can just open and edit it).

7. Copy the web server files into the Pi html folder.

On the left side of the screen (your computer), go to the folder where you saved the files. Highlight and drag the contents (two folders and a file named "index.html") into the Pi html folder. That's it!

8. Open a browser and type "raspberrypi.local" in the navigation bar at the top. If it worked, you will see the web server page, what what!

Step 16: Edit the HTML File Pt. 1!

Picture of Edit the HTML File Pt. 1!

You probably want to make your own web site, so add your own docs/images/whatever and change the HTML file to point to your files!

1. Open the index.html file on the Pi.

2. Edit the headers and descriptors in the index.html file.

-- Change the title of your web server by editing the text between the title parts:

<title> jenfoxbot's Local Web Server!</title><br>

-- Change the heading of the webserver by editing the text between the h2 and center parts (line 51):

<h2> <center> 
jenfoxbot's Local Web Server!
</center> </h2>

-- Optional: Change the description of the webpage (line 55):

<pre><div><center>
<p>Depending on the position of the moon & stars*, 
this hotspot may or may not provide an Internet connection.</p>
<p> If there IS an Internet connection, check out <a href="http://www.foxbotindustries.com" style="font-size: 12.15px;">jenfoxbot's website</a> 
and learn about the other cool stuff she does! </p>
<p><i style="font-size: 12.15px;">*And by position of the moon & stars we mean the current whims of the builder, jenfoxbot :) </p> </i>
</center></div>

3. Optional: Delete existing documents, images, and videos and add your own!

There are two layers to this webpage: the front page, which is created by the "index.html" file, and "internal", which has two pages: "helpfulinfo.html" and "books.html". If you want to add/modify content on the front page, edit the "index.html" file and add images to the "images" folder in the same directly (you can also add more folders to store different or more content).

If you want to modify content on the internal pages, edit the "helpfulinfo.html" and "books.html" files, add images to the "images" folder and PDFs (or other docs) to the "issues" folder (again, you can add more folders in here).

Step 17: Edit the HTML File Pt. 2!

Picture of Edit the HTML File Pt. 2!

1. Add your own documents!

-- Decide what you want to include on your server and download PDFs of those docs. Also download images for each of the documents so you'll have something fun to click on :D

-- Using WinSCP, add your documents to the appropriate folders (see previous step and photo 1).

-- Edit the index.html or other relevant html file (e.g. if you want to add or change a book in the helpful info page, edit the "helpfulinfo.html" file). Display and access images and documents by changing the file names and extensions and updating the descriptions :

<a target="_top" href="UpdateDocumentLinkHere">
<img src="UpdateImageLinkHere">
<div class="desc"><p>ALL YOUR FAVORITE WORDS HERE</p>

2. For folks new to code, you can add more documents by copying and pasting the existing code and changing the file names and extensions (see photo 2)!

Here's a helpful overview on HTML from the Khan Academy!

Step 18: OMG Finally! We're Done :)

Picture of OMG Finally! We're Done :)

Unplug the Ethernet cable, connect to your wireless access point, and then type in the IP address in the address bar of your favorite browser (192.168.42.1 if you followed this tutorial exactly).

If everything is working, you'll see your web page (I've included screenshots of mine). Woohoo you just created a wireless access point!! (If it didn't work, run through the setup again and double check that all the terminal code is exactly as shown, including spaces and such).

Explore your very own local Cloud website and decide how you want to use it from here!

Step 19: What's Next?

Picture of What's Next?

One option is to use it as a local wireless storage device. Plug in the Pi, connect to the WiFi access point you set up (this one is named "HelloWorld"), and store or withdraw files from it. You can access these files even if you are disconnected from the Internet. So you could save your favorite movie and still watch it when the power goes out :) (er, assuming you have a charged laptop).

Add more documents (e.g. you can use it as backup storage), play around with the HTML code to make your site all fancy, and have fun!

Another option is to configure this as a public-facing web page and assign it a domain name so other people can access the files. This is particularly helpful if you are going somewhere without WiFi or cable Internet -- you can take Wikipedia with you! (but maybe donate to them if you do that 'cause they are awesome). If you are comfortable with code, you can set this up to be an automatic backup server, a local wireless game server for you and your friends, etc. Get creative!

If you go this route, be sure you know a bit about network security as the WPA2 password protocol has recently been compromised (see below).

Finally, as mentioned in the intro, you can use this Cloud server to kickstart a people's Internet! Have a build day with your friends to create a bunch of Cloud servers so that you all can "talk" to each other! This approach isn't necessarily the *best* (aka most efficient/effective) way to build a public Internet, but it's a great starting point. Plus, the better we understand how these technologies work, the better we use them to solve serious problems and advocate for ourselves and our communities. :)


More info on the WPA2 security risk from the helpful user BillDauterive:

"[T]he attacker needs a device within range of the target wifi network to be a threat i.e. opening a port to the web doesn't affect that. If an [access point] is compromised, the attacker could then spy on/modify traffic on the Wifi network that's not encrypted via TLS. On a compromised WLAN, unencrypted VNC to the Pi would be a risk even when accessing from with the WLAN."

Comments

nlee31 (author)2017-12-14

Road block hit. iptables cannot initialize. I was on a roll.

sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

modprobe: ERROR: ../libkmod/libkmod.c:557 kmod_search_moddep() could not open moddep file '/lib/modules/4.4.21-v7+/modules.dep.bin'

iptables v1.4.21: can't initialize iptables table `nat': Table does not exist (do you need to insmod?)

Perhaps iptables or your kernel needs to be upgraded.

jenfoxbot (author)nlee312017-12-14

Foo!! Hmmm some debugging questions:

1. You're connected to the Interwebs?

2. Did you run update and dist-upgrade?

3. Are you using Jessie Lite?

4. Did you run the commands in order they are listed

nlee31 (author)jenfoxbot2017-12-14

1-Yes

2-Yes

3-Yes

4-Yes.

Looking at the log the iptables-persistent update-rc.d was not supported and went back to the defaults. modprobe: Error: ../libkmod/libkmod.c:557 kmod_search_moddep() could not open moddep file....

I"m a Noob and really can't understand that. I think I might just wipe the pi and start over on the weekend.

jenfoxbot (author)nlee312017-12-17

Hmm it seems like iptables isn't installed? Were you able to get the command below to run successfully?

sudo apt-get install iptables-persistent

Also, wiping the SD card and starting over is a good way to test it. It took me a couple of times to get this all to work correctly, ha. I'm about to head out on vacation but leave a comment if you are unable to get it to work and I'll see if I can do some digging when I'm back early Jan. Best of luck!

gravityisweak (author)2017-12-06

Could I use this to setup wifi storage for my house? I'm always looking to swap files between different laptops, desktop, 3d printer etc. It would be great to be able to use a pi as sort of a wifi enabled external hard drive. On that note, is it possible to use a large external hard drive instead of a relatively small SD card? Nice instructable!

jenfoxbot (author)gravityisweak2017-12-14

Yup! Once you set it up as an access point, you can use WinSCP or another file transfer protocol to wirelessly transfer files to your Pi. If you do a lil' research I"m sure you could find a python or linux code to do this automatically :)

Also yes to the external hard drive! You might need to look up how to transfer files to USB via linux but it's definitely possible.

BillDauterive (author)2017-12-04

Good job.

The web has been getting far too centralised over the last few years with more "walled garden" approaches. Home servers and local webs are IMHO far closer to the original vision for the web than walled private data farms like FB etc.

I've played about with piratebox (https://piratebox.cc/start) in the past (before Pi), but went a slightly different route for my (kinda similar) Pi server setup.

I ended up using Docker to keep services (and data) separate and resettable/reproducable/shareable - takes a bit to learn Docker (loads of resources) & adds complexity (e.g. having to keep multiple images updated), but a really cool approach to running multiple services (reverse-proxy, git, web, etc.) on a Pi - this was my starting point: https://blog.hypriot.com/getting-started-with-docker-on-your-arm-device/ - one day I'll get around to something more 'cloudy' like clustering/scaling!

Keep up the good work!

----

I'm not sure I'll be able to write Instructibles myself (great work on spreading ideas - many of us don't, when we really should) but a couple of technical points:

* [apt-get update] only updates the package list to find available updates. Running [apt-get upgrade] after that will actually install those updates.

* on the WPA2 vulnerability (KRACK) - the attacker needs a device within range of the target wifi network to be a threat i.e. opening a port to the web doesn't affect that. If an AP is compromised, the attacker could then spy on/modify traffic on the Wifi network that's not encrypted via TLS. On a compromised WLAN, unencrypted VNC to the Pi would be a risk even when accessing from with the WLAN.

jenfoxbot (author)BillDauterive2017-12-04

Thank you! A friend mentioned piratebox, will have to check that out when I have the time. I'll take a look at Docker too -- definitely a newbie when it comes to networking but it's easier when other folks have already figured out the hard stuff!

And thank you for the super helpful technical points!! Your comment re: WPA2 is on the last page w/ a link to your profile. This is why open-source is awesome :D

ahp2267 (author)2017-12-03

Great Instructable, Thank You. Question, Can I use the latest PI Zero that has WiFi capabilities for this project?

jenfoxbot (author)ahp22672017-12-04

Thanks! Yes, you can definitely use the Pi Zero. As long as you are using the Jessie Lite OS, the process *should* be the same.

LghtSpeed (author)2017-12-03

Excellent Article,Jen. Also, nice "Poochers" !

jenfoxbot (author)LghtSpeed2017-12-04

Thank you! :D (& I'll pass along the compliment to the pooch!)

snowdrop1101 made it! (author)2017-11-27

Not bad. I already did this a while back, and it was fun. I like servers that you can actually interact with friends on, so I got bored pretty quickly. I decided to do this again and follow your tutorial.
Sorry I can't provide any good photos right now, there's not much to take pictures of as far as software goes.

Good tutorial, keep up the good work.

Long live |`\ @ $ ¶ |8 € |`\ |`\ ¥ π!!!

- Snowdrop1101

jenfoxbot (author)snowdrop11012017-11-29

That's awesome!! Super stoked you decided to dust off your previous server! Maybe you can wrangle a few of your friends to do the same and then you can chat w/ 'em! :D

snowdrop1101 (author)jenfoxbot2017-12-01

Great idea! I was thinking of doing that, but sadly no one I know is interested in Linux. They're the kind of people that are chanting "Windoze! Windoze! WIndoze!" (I'm a geek so that's grammatically correct to me)

Go |_ : |\| {_} X !!! (x3) Force vs force, fight for Linux.

jenfoxbot (author)snowdrop11012017-12-04

hah! Grab your keyboard of justice and show 'em the light of Linux! The Pi might be the perfect intro for your friends, since you can use it w/ a Desktop OS which makes it less intimidating. If you want to show 'em something easier before diving into this, here's a tutorial that is like the "part one" for beginners: https://www.instructables.com/id/Intro-to-the-Headless-Raspberry-Pi/

Aaaecm (author)2017-11-28

Thanks! Awesome Ible! I really enjoyed the pictures of your dog(s) too. Day brighterner!

jenfoxbot (author)Aaaecm2017-11-29

Yayy, thank you!! Very happy to hear that you enjoyed it (and the photos of my pup lol) :D

About This Instructable

10,804views

233favorites

License:

Bio: Dabbled in dark matter, settled into engineering with a blend of inventing and teaching, always trying to solve problems + learn new things!
More by jenfoxbot:Make Your Pi a (Local) Cloud Server!Intro to the (Headless) Raspberry PiBuild an (Easy) Floor Piano!
Add instructable to: