
Explore the Raspberry Pi full stack course, from hardware setup and GPIO with Python to building web apps with Nginx, Flask, and SQLite3, then publishing online.
Gather Raspberry Pi hardware, SD cards, and a 5V 1.8A power supply for setup. Wire a DHT22 sensor on breadboard with a pull-down resistor, using a minimal spin operating system.
Follow a disciplined, minimal-effort update path for the Raspberry Pi full stack, upgrading Raspberry Pi OS and Python 3.8.13 compatible components via apt, testing cloud APIs, backups, and trackers.
Explore the Raspberry Pi 4's gigabit Ethernet via a dedicated CPU channel, USB 3.0, and dual micro HDMI 4K outputs, with one, two, or four gigabytes of RAM.
Choose the Raspberry Pi model that fits your budget; this course runs a web app with Python and other server software, and the Raspberry Pi 4 Model B with 4 GB RAM is fastest, though the Pi 2 Model B or Pi Zero Wireless also work in headless mode.
Compare Raspberry Pi and Arduino, highlighting Raspberry Pi as a full computer with Linux, Wi-Fi, and 1 GHz CPU, versus Arduino's low-power microcontroller with limited RAM.
Compare the Raspberry Pi and Arduino hardware, highlighting size, connectors, GPIO usage, display and camera options, shield compatibility, breadboard connections, and safety considerations for handling static and damage.
Explore how the Raspberry Pi operating system enables hardware access, and compare desktop, newbies, and lite versions to build a minimal web application stack.
Opt for a headless Raspberry Pi OS to minimize SD card size for sensor-driven web app accessible remotely. Interact via remote connections and the command line, avoid monitor and peripherals.
Download the raspbian lite image from Raspberry Pi dot org downloads, flash it to 16 gb sd card using a cross-platform app, and enable SSH and wifi for headless access.
Enable ssh and wifi on a headless Raspberry Pi by placing an ssh file and a wpa_supplicant.conf in the boot partition, then connect via ssh for initial setup.
Identify the raspberry pi’s IP address on Mac OS with a network scanner, then log in as pi and run raspi-config to set hostname and wifi, expand filesystem, reboot.
Use windows tools to detect your raspberry pi's IP address with a scanner. Connect via SSH using putty, log in as pi with the default password raspberry.
Learn how to switch to the root user on a Raspberry Pi, enable root access, and use sudo for admin tasks to manage system configuration and file access.
Shut down the Raspberry Pi properly before removing the SD card to avoid damage. Use sudo to run dd and create a labeled Mac OS SD card image backup.
Restore the backup image to the SD card on Mac OS using dd after verifying the correct disk and formatting the card. Boot the Raspberry Pi to confirm the restoration.
Restore an SD card on Windows by flashing the backup image back onto the card with etcher, then verify the restore with boot and connection tests on the Raspberry Pi.
Demonstrates Python on the command line with Python 3, teaching basics like variables, strings, arithmetic, printing, and string operations on the Raspberry Pi full stack project.
Learn to write and run a Python program in Raspberry Pi's vim editor, including installing vim, switching modes, editing, saving, and executing scripts with command line arguments.
Learn to install the python package manager pip for python 3 on a raspberry pi using apt-get with superuser privileges, and then use it to manage python packages.
Learn to manipulate an LED on Raspberry Pi using rpi.gpio, import the library, configure pins with board and BCM numbering, and toggle the LED high and low.
Read the button state on a Raspberry Pi with Python, using board mode, gpio pin 8, and a while loop with a delay, printing 0 or 1.
Learn to install Git on Raspberry Pi, clone the DHT Python library repository, configure global user details, and run the library setup with Python 3, addressing permission errors.
Learn to use the DHT22 sensor on a Raspberry Pi with Python 3, wiring to GPIO 17, reading temperature and humidity, and printing formatted results.
Learn how Python virtual environments isolate each app's exact Python version and packages, avoiding conflicts with system Python and simplifying management of multiple projects.
Prepare the operating system to compile Python from source by installing build-essential, SSL support, and development tools, using sudo, then upgrade the system and enable pip to install Flask.
Update the Raspberry Pi's Python by downloading the 3.6.4 source, compiling and installing it alongside 3.5.3, verify the new version, and use its full path for virtual environments.
Set up the Raspberry Pi web app infrastructure by creating a /var/web directory, building a Python 3.6.4 virtual environment in the lab app folder, and activating it.
Install nginx on the Raspberry Pi with apt-get, run apt-get update if needed, and verify the installation by opening the Pi’s IP in a browser to see the nginx page.
Install uWSGI within a Python virtual environment, verify the executable, and configure nginx (engine X) to forward Flask requests to uWSGI for serving the application.
Create a dedicated nginx configuration file for the flask app, replace the default, set port 80 and static file paths, configure the socket, link to sites-enabled, and restart nginx.
Configure uwsgi for a Flask app by setting the app name, module, home path, and socket file; create log and lock directories and align with the engine X configuration.
Test and configure a uWSGI and nginx setup for a Flask app on the Raspberry Pi, verify port 80 access, back up the setup, and enable automatic restart with systemd.
Configure systemd to auto-start uwsgi on Raspberry Pi boot, create a service file, enable it, and verify the startup with status checks and browser access to port 80.
Install sqlite3 as part of the web application stack to store humidity and temperature data for a census, enabling retrieval, charts, and data uploads via a system-wide database.
Explore creating and querying a sqlite3 database on the Raspberry Pi using the command line. Build a temperatures table with datetime, sensor_id, and temp, insert a record, and retrieve it.
Learn to serve static assets and integrate the Skeleton boilerplate CSS in a Raspberry Pi full stack web app, enhancing styling, widgets, and date/time report functionality.
Create a static assets directory for the lab's engine X web server, with subdirectories synapsis and images, and add a static file copied from the courses get help directory.
Explore the skeleton css boilerplate to quickly style a responsive website with columns, headings, buttons, and form patterns, and copy its two css files to a Raspberry Pi.
Learn to securely copy files to a Raspberry Pi using sftp GUI clients, connect via IP and root, and drag-and-drop to update directories with css and google fonts.
Create a Flask templates directory and hello.html, use render_template with placeholders in curly braces, and enable debug mode to diagnose errors on dynamic pages.
Enable debugging mode in a flask app, run from the command line in a virtual environment, and use browser or uwsgi logs to locate and fix name errors, then restart.
Install the DHT library and GPIO module in your virtual environment, read humidity and temperature from the DHT sensor, and render it in a Flask template.
Install the DHT library and rpi-gpio module by cloning the GitHub repository, installing in a Python virtual environment, and running the example to verify the DHT sensor on GPIO 17.
Build a Raspberry Pi full stack app that reads humidity and temperature from a DHT sensor, serves data via a lab temp route, and uses template files for display.
Develop a Python script using sqlite3 to read humidity and temperature from a dht sensor on Raspberry Pi, log readings, record -999 when invalid, and schedule runs every 10 minutes.
Automate sensor data collection by scheduling a Python script with cron to log temperature and humidity readings into the database.
Add a new route and template to display database records in the browser, showing temperatures and humidity readings in clean tables pulled from the database.
Learn to render database records in the browser using a template by looping over Python data, and enable client-side date range filtering with JavaScript.
Implement a datetime range filter to retrieve DHT22 sensor records (temperature and humidity) from a specific time frame on a Raspberry Pi web page.
Learn sqlite on a Raspberry Pi, assess database size, and craft inclusive date-time range queries to fetch exact records from temperatures and humidity tables.
Set a date time range in the url to filter records. Display results in the browser using a Python web app with time parsing, get parameters, and between-dates SQL query.
Validate date time ranges in a URL query string with a Python function using a yyyy-mm-dd hh:mm format, and fall back to the last three or six hours when invalid.
tidy up the application by refactoring into a get_records function that returns temperatures, humidities, and from and to date strings for the template. prepare the app for maintainable growth.
Enable quick date-time range selection by adding radio buttons and using jQuery to auto-submit the range form, enabling client-side retrieval of records.
Extend the get_records function to process the radio button time range, converting the submitted value to hours and computing the from and to timestamps for record queries.
Learn to visualize table data as a line chart using the Google charts API, including preparing the chart div, loading the library, and rendering data with title and legend options.
Implement two Google charts for temperature and humidity using a template-driven Raspberry Pi full stack lab, building data tables from Python data and rendering date objects.
Install and integrate a date time picker widget to select start and end date times for temperature and humidity data, using jquery ui with a two-field form.
Demonstrates adding a two-field date time picker on the client side, wiring inputs to the template via python script, preserving from_date and to_date with CDN scripts.
Hardware and OS compatibility notice (updated August 2026)
This course was last updated in August 2022 for Raspberry Pi OS 11 ("Bullseye") and Python 3.8.13, and it works as recorded on the Raspberry Pi 4, 3, 2, 1, and Zero W.
If you are using a Raspberry Pi 5, or a newer version of Raspberry Pi OS ("Bookworm" or later), parts of this course will not work as shown. The Pi 5 changed how GPIO access works, and newer OS versions changed how Python libraries are installed. These changes break several of the libraries used in the course, including the DHT22 sensor library.
To follow this course today, use a Raspberry Pi 4 or earlier with Raspberry Pi OS 11 ("Bullseye"). Bullseye images are still available from the Raspberry Pi OS legacy downloads page, and the course will work exactly as recorded.
If you have a Raspberry Pi 5, I recommend waiting for the upcoming course update, which will cover the Pi 5 and current Raspberry Pi OS. If you prefer to proceed now, expect to adapt the GPIO and sensor lectures yourself.
What is this course about?
Welcome to Raspberry Pi: Full Stack, a hands-on project designed to teach you how to build an Internet-of-Things application based on the world’s most popular embedded computer.
This is an updated and improved remake of the original Raspberry Pi Full Stack. In this new course, I have updated all of the technologies involved in the current state of the Art, and have also added new content.
This course will expose you to the full process of developing a web application.
You will integrate LEDs, buttons and sensors with Javascript, HTML, web servers, database servers, routers and schedulers.
You will understand why the Raspberry Pi is such a versatile tinkering platform by experiencing first hand how well it combines:
open hardware, that includes wireless and wired networking and the ability to connect sensors and actuators,
the powerful Linux/Debian operating system, which gives you access to high-level programming languages and desktop-level software applications
and, the flexibility of open source development software which, literally, powers the cloud applications that you use every day
As you progress through the sections, you will learn how to complete a single step of the application development process.
You’ll start with the operating system, add Python and play with some common hardware. Then you'll set up the web application stack, and the application itself.
You will learn and add new features and refinements as you move through the lectures.
This course is perfect for people that have at least basic understanding of computers and electronics.
Ideally, you have experience in experimenting with the Arduino and are comfortable with the breadboard and simple components.
This course contains a substantial amount of programming. For this, you will need to be comfortable working with a text editor. Any prior knowledge of Python, Javascript or other high-level programming language will be beneficial, although it is not strictly necessary.
There are no requirements necessary to enrol; I only ask you to be ready to learn and willing to put the required time and effort.
Please don't forget to watch the free lectures in the first section of the course. These lectures will give you detailed information on the course content and the hardware you will need.
Looking forward to learning with you!