Skip to content

Commit 2139a5c

Browse files
First-pass editorial
1 parent c4ae2b4 commit 2139a5c

5 files changed

Lines changed: 114 additions & 113 deletions

File tree

content/learning-paths/embedded-and-microcontrollers/raspberry-pi-smart-home/1-overview.md

Lines changed: 28 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -8,66 +8,65 @@ layout: learningpathall
88

99
## Overview
1010

11-
This Learning Path walks you through deploying an efficient large language model (LLM) locally on the Raspberry Pi 5, powered by an Arm Cortex-A76 CPU. This will allow you to control your smart home using natural language, without relying on cloud services. With rapid advances in Generative AI and the power of Arm Cortex-A processors, you can now run advanced language models directly in your home on the Raspberry Pi 5.
11+
This Learning Path walks you through deploying an efficient large language model (LLM) locally on the Raspberry Pi 5, powered by an Arm Cortex-A76 CPU. This setup enables you to control your smart home using natural language without relying on cloud services. With rapid advances in generative AI and the power of Arm Cortex-A processors, you can now run advanced language models directly in your home on the Raspberry Pi 5.
1212

13-
You will create a fully local, privacy-first smart home system that leverages the strengths of Arm Cortex-A architecture. The system can achieve 15+ tokens per second inference speeds using optimized models like TinyLlama and Qwen, while maintaining the energy efficiency that makes Arm processors a good fit for always-on applications.
13+
You will create a fully local, privacy-first smart home system that leverages the strengths of Arm Cortex-A architecture. The system can achieve 15+ tokens per second inference speeds using optimized models like TinyLlama and Qwen, while maintaining the energy efficiency that makes Arm processors well suited for always-on applications.
1414

15-
## Why Arm Cortex-A for Edge AI?
15+
## Why Arm Cortex-A for edge AI?
1616

1717
The Raspberry Pi 5's Arm Cortex-A76 processor can manage high-performance computing tasks like AI inference. Key architectural features include:
1818

19-
- The **superscalar architecture** allows the processor to execute multiple instructions in parallel, improving throughput for compute-heavy tasks.
20-
- **128-bit NEON SIMD support** accelerates matrix and vector operations, which are common in the inner loops of language model inference.
21-
- The **multi-level cache hierarchy** helps reduce memory latency and improves data access efficiency during runtime.
22-
- The **thermal efficiency** enables sustained performance without active cooling, making it ideal for compact or always-on smart home setups.
19+
- **Superscalar architecture**: Executes multiple instructions in parallel, improving throughput for compute-heavy tasks
20+
- **128-bit NEON SIMD support**: Accelerates matrix and vector operations, common in the inner loops of language model inference
21+
- **Multi-level cache hierarchy**: Reduces memory latency and improves data access efficiency during runtime
22+
- **Thermal efficiency**: Enables sustained performance without active cooling, making it ideal for compact or always-on smart home setups
2323

24-
These characteristics make the Raspberry Pi 5 well-suited for workloads like smart home assistants, where responsiveness, efficiency, and local processing are important. Running LLMs locally on Arm-based devices brings several practical benefits. Privacy is preserved, since conversations and routines never leave the device. With optimized inference, the system can offer responsiveness under 100 ms, even on resource-constrained hardware. It remains fully functional in offline scenarios, continuing to operate when internet access is unavailable. Developers also gain flexibility to customize models and automations. Additionally, software updates and an active ecosystem continue to improve performance over time.
24+
These characteristics make the Raspberry Pi 5 well suited for workloads like smart home assistants, where responsiveness, efficiency, and local processing are important. Running LLMs locally on Arm-based devices brings several practical benefits. Privacy is preserved, since conversations and routines never leave the device. With optimized inference, the system can offer responsiveness under 100 ms, even on resource-constrained hardware. It remains fully functional in offline scenarios, continuing to operate when internet access is unavailable. Developers also gain flexibility to customize models and automations. Additionally, software updates and an active ecosystem continue to improve performance over time.
2525

26-
## Arm Ecosystem Advantages
26+
## Arm ecosystem advantages
2727

2828
For the stack in this setup, Raspberry Pi 5 benefits from the extensive developer ecosystem:
2929

3030
- Optimized compilers including GCC and Clang with Arm-specific enhancements
3131
- Native libraries such as gpiozero and lgpio are optimized for Raspberry Pi
32-
- Community support from open-source projects where developers are contributing Arm-optimized code
33-
- Arm maintains a strong focus on backward compatibility, which reduces friction when updating kernels or deploying across multiple Arm platforms
32+
- Community support from open-source projects where developers contribute Arm-optimized code
33+
- Backward compatibility in Arm architecture reduces friction when updating kernels or deploying across platforms
3434
- The same architecture powers smartphones, embedded controllers, edge devices, and cloud infrastructure—enabling consistent development practices across domains
3535

36-
## Performance Benchmarks on Raspberry Pi 5
36+
## Performance benchmarks on Raspberry Pi 5
3737

3838
The table below shows inference performance for several quantized models running on a Raspberry Pi 5. Measurements reflect single-threaded CPU inference with typical prompt lengths and temperature settings suitable for command-based interaction.
3939

40-
| Model | Tokens/Sec | Avg Latency (ms) |
40+
| Model | Tokens/sec | Avg latency (ms) |
4141
| ------------------- | ---------- | ---------------- |
4242
| qwen:0.5b | 17.0 | 8,217 |
4343
| tinyllama:1.1b | 12.3 | 9,429 |
4444
| deepseek-coder:1.3b | 7.3 | 22,503 |
4545
| gemma2:2b | 4.1 | 23,758 |
4646
| deepseek-r1:7b | 1.6 | 64,797 |
4747

48+
### Insights
4849

49-
What does this table tell us? Here are some performance insights:
50+
- Qwen 0.5B and TinyLlama 1.1B deliver fast token generation and low average latency, making them suitable for real-time interactions such as voice-controlled smart home commands
51+
- DeepSeek-Coder 1.3B and Gemma 2B trade some speed for improved language understanding, which can be useful for complex tasks or context-aware prompts
52+
- DeepSeek-R1 7B offers advanced reasoning capabilities with acceptable latency, which may be viable for offline summarization, planning, or low-frequency tasks
5053

51-
- Qwen 0.5B and TinyLlama 1.1B deliver fast token generation and low average latency, making them suitable for real-time interactions like voice-controlled smart home commands.
52-
- DeepSeek-Coder 1.3B and Gemma 2B trade off some speed for improved language understanding, which can be useful for more complex task execution or context-aware prompts.
53-
- DeepSeek-R1 7B offers advanced reasoning capabilities with acceptable latency, which may be viable for offline summarization, planning, or low-frequency tasks.
54+
## Supported Arm-powered devices
5455

55-
## Supported Arm-Powered Devices
56+
This Learning Path focuses on the Raspberry Pi 5, but you can adapt the concepts and code to other Arm-powered devices.
5657

57-
This Learning Path focuses on the Raspberry Pi 5, but you can adapt the concepts and code to other Arm-powered devices:
58+
### Recommended platforms
5859

59-
### Recommended Platforms
60+
| Platform | CPU | RAM | GPIO support | Model size suitability |
61+
| ------------------- | -------------------------------- | -------------- | ------------------------------ | --------------------------- |
62+
| **Raspberry Pi 5** | Arm Cortex-A76 quad-core @ 2.4GHz | Up to 16GB | Native `lgpio` (high-performance) | Large models (8–16GB) |
63+
| **Raspberry Pi 4** | Arm Cortex-A72 quad-core @ 1.8GHz | Up to 8GB | Compatible with `gpiozero` | Small to mid-size models |
64+
| **Other Arm devices** | Arm Cortex-A | 4GB min (8GB+ recommended) | Requires physical GPIO pins | Varies by RAM |
6065

61-
| Platform | CPU | RAM | GPIO Support | Model Size Suitability |
62-
|------------------|----------------------------------|----------------|-------------------------------|-----------------------------|
63-
| **Raspberry Pi 5** | Arm Cortex-A76 quad-core @ 2.4GHz | Up to 16GB | Native `lgpio` (high-performance) | Large models (8–16GB) |
64-
| **Raspberry Pi 4** | Arm Cortex-A72 quad-core @ 1.8GHz | Up to 8GB | Compatible with `gpiozero` | Small to mid-size models |
65-
| **Other Arm Devices** | Arm Cortex-A | 4GB min (8GB+ recommended) | Requires physical GPIO pins | Varies by RAM |
66-
67-
Additionally, the platform must:
66+
Additionally, the platform must meet the following requirements:
6867

6968
- GPIO pins available for hardware control
70-
- Use Python 3.8 or newer
69+
- Python 3.8 or newer
7170
- Ability to run [Ollama](https://ollama.com/)
7271

73-
Continue to the next section to start building a smart home system that highlights how Arm-based processors can enable efficient, responsive, and private AI applications at the edge.
72+
Continue to the next section to start building a smart home system that highlights how Arm-based processors enable efficient, responsive, and private AI applications at the edge.

content/learning-paths/embedded-and-microcontrollers/raspberry-pi-smart-home/2-software-dependencies.md

Lines changed: 27 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -10,54 +10,54 @@ layout: learningpathall
1010
This guide assumes you have set up your Raspberry Pi with Raspberry Pi OS and network connectivity. For Raspberry Pi 5 setup help, see: [Raspberry Pi Getting Started](https://www.raspberrypi.com/documentation/)
1111
{{% /notice %}}
1212

13-
## Connect to Your Raspberry Pi 5
13+
## Connect to your Raspberry Pi 5
1414

15-
### Option 1: Using a display
15+
### Option 1: Use a display
1616

17-
The easiest way to work on your Raspberry Pi is connecting it to an external display through one of the micro HDMI ports. This setup also requires a keyboard and mouse to navigate.
17+
The easiest way to work on your Raspberry Pi is by connecting it to an external display through one of the microHDMI ports. This setup also requires a keyboard and mouse.
1818

19-
### Option 2: Using SSH
19+
### Option 2: Use SSH
2020

21-
You can also use SSH to access the terminal. To use this approach you need to know the IP address of your device. Ensure your Raspberry Pi 5 connects to the same network as your host computer. Access your device remotely via SSH using the terminal or any SSH client.
21+
You can also use SSH to access the terminal. To use this approach, you need to know the IP address of your device. Ensure your Raspberry Pi 5 is on the same network as your host computer. Access your device remotely via SSH using the terminal or any SSH client.
2222

2323
Replace `<user>` with your Pi's username (typically `pi`), and `<pi-ip>` with your Raspberry Pi 5's IP address.
2424

2525
```bash
2626
ssh <user>@<pi-ip>
2727
```
2828

29-
## Set up the dependencies
29+
## Set up dependencies
3030

3131
Create a directory called `smart-home` in your home directory and navigate into it:
3232

3333
```bash
34-
mkdir $HOME/smart-home
35-
cd $HOME/smart-home
34+
mkdir -p "$HOME/smart-home"
35+
cd "$HOME/smart-home"
3636
```
3737

38-
The Raspberry Pi 5 includes Python 3 pre-installed, but you need additional packages:
38+
The Raspberry Pi 5 includes Python 3 preinstalled, but you need additional packages:
3939

4040
```bash
41-
sudo apt update && sudo apt upgrade
42-
sudo apt install python3 python3-pip python3-venv git curl build-essential gcc python3-lgpio
41+
sudo apt update && sudo apt upgrade -y
42+
sudo apt install -y python3 python3-pip python3-venv git curl build-essential gcc python3-lgpio
4343
```
4444

45-
### Configure the virtual environment
45+
### Configure a virtual environment
4646

47-
The next step is to create and activate a Python virtual environment. This approach keeps project dependencies isolated and prevents conflicts with system-wide packages:
47+
Create and activate a Python virtual environment to isolate project dependencies:
4848

4949
```bash
5050
python3 -m venv venv
5151
source venv/bin/activate
5252
```
5353

54-
Install all required libraries and dependencies:
54+
Install the required libraries:
5555

5656
```bash
57-
pip install ollama gpiozero lgpio psutil httpx orjson numpy fastapi uvicorn uvloop numpy
57+
pip install ollama gpiozero lgpio psutil httpx orjson numpy fastapi uvicorn uvloop
5858
```
5959

60-
### Install Ollama
60+
## Install Ollama
6161

6262
Install Ollama using the official installation script for Linux:
6363

@@ -70,27 +70,29 @@ Verify the installation:
7070
```bash
7171
ollama --version
7272
```
73-
If installation was successful, the output from the command should match that below.
73+
74+
If installation was successful, the output should be similar to:
75+
7476
```output
7577
ollama version is 0.11.4
7678
```
7779

78-
## Download and Test a Language Model
80+
## Download and test a language model
7981

80-
Ollama supports various models. This guide uses deepseek-r1:7b as an example, but you can also use `tinyllama:1.1b`, `qwen:0.5b`, `gemma2:2b`, or `deepseek-coder:1.3b`.
82+
Ollama supports various models. This guide uses `deepseek-r1:7b` as an example, but you can also use `tinyllama:1.1b`, `qwen:0.5b`, `gemma2:2b`, or `deepseek-coder:1.3b`.
8183

82-
The `run` command will set up the model automatically. You will see download progress in the terminal, followed by the interactive prompt when ready.
84+
The `run` command sets up the model automatically. You will see download progress in the terminal, followed by an interactive prompt when ready.
8385

8486
```bash
8587
ollama run deepseek-r1:7b
8688
```
8789

8890
{{% notice Troubleshooting %}}
89-
If you run into issues with the model download, here are some things to check:
91+
If you run into issues with the model download, try the following:
9092

91-
- Confirm internet access and sufficient storage space on your microSD card
92-
- Try downloading smaller models like `qwen:0.5b` or `tinyllama:1.1b` if you encounter memory issues. 16 GB of RAM is sufficient for running smaller to medium-sized language models. Very large models may require more memory or run slower.
93-
- Clear storage or connect to a more stable network if errors occur
93+
- Confirm internet access and sufficient storage space on your microSD card.
94+
- Try smaller models like `qwen:0.5b` or `tinyllama:1.1b` if you encounter memory issues. 16 GB of RAM is sufficient for small to medium models; very large models may require more memory or run slower.
95+
- Clear storage or connect to a more stable network if errors occur.
9496
{{% /notice %}}
9597

96-
With the model set up through `ollama`, move on to the next section to start configuring the hardware.
98+
With the model set up through Ollama, move on to the next section to start configuring the hardware.

content/learning-paths/embedded-and-microcontrollers/raspberry-pi-smart-home/3-test-gpio.md

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@ weight: 4
66
layout: learningpathall
77
---
88

9-
The next step is to test the GPIO functionality. In this section, you will configure a LED light to simulate a smart-home device.
9+
The next step is to test the GPIO functionality. In this section, you configure an LED light to simulate a smart home device.
1010

11-
## Verify GPIO Functionality
11+
## Verify GPIO functionality
1212

13-
Bring out your electronics components. Connect the anode (long leg) of an LED in series with a 220Ω resistor to GPIO 17 (physical pin 11). Connect the cathode (short leg) to a ground (GND) pin. See image below for the full setup:
13+
Gather your electronic components. Connect the anode (long leg) of an LED in series with a 220Ω resistor to GPIO 17 (physical pin 11). Connect the cathode (short leg) to a ground (GND) pin. See the image below for the full setup:
1414

1515
![Raspberry Pi connected to a breadboard with a green LED and jumper wires](pin_layout.jpg "Raspberry Pi connected to a breadboard with a green LED and jumper wires")
1616

@@ -21,7 +21,7 @@ cd $HOME/smart-home
2121
vim testgpio.py
2222
```
2323

24-
Copy this code into the file:
24+
Add the following code to the file:
2525

2626
```python
2727
#!/usr/bin/env python3
@@ -32,7 +32,7 @@ from gpiozero.pins.lgpio import LGPIOFactory
3232
# Set lgpio backend for Raspberry Pi 5
3333
Device.pin_factory = LGPIOFactory()
3434

35-
# Setup GPIO pin 17
35+
# Set up GPIO pin 17
3636
pin1 = LED(17)
3737

3838
try:
@@ -52,19 +52,20 @@ python testgpio.py
5252
The LED should blink every two seconds. If you observe this behavior, your GPIO setup works correctly.
5353

5454
{{% notice Troubleshooting %}}
55-
If you run into issues with the hardware setup, here are some things to check:
56-
- Try fixing missing dependencies by running the following command:
57-
```bash
58-
sudo apt-get install -f
59-
```
60-
- If you're running into GPIO permission issues, run Python scripts with `sudo` or add your user to the `gpio` group. Don't forget to log out for the changes to take effect.
61-
```bash
62-
sudo usermod -a -G gpio $USER
63-
```
55+
If you run into issues with the hardware setup, check the following:
56+
57+
- Fix missing dependencies with:
58+
```bash
59+
sudo apt-get install -f
60+
```
61+
- If you encounter GPIO permission issues, run Python scripts with `sudo` or add your user to the `gpio` group. Don’t forget to log out for the changes to take effect:
62+
```bash
63+
sudo usermod -a -G gpio $USER
64+
```
6465
- Double-check wiring and pin numbers using the Raspberry Pi 5 pinout diagram
6566
- Ensure proper LED and resistor connections
6667
- Verify GPIO enablement in `raspi-config` if needed
6768
- Use a high-quality power supply
6869
{{% /notice %}}
6970

70-
With a way to control devices using GPIO pins, you can move on to the next section to interact with them using language models and the user interface.
71+
With GPIO pins working, you can now move on to the next section to interact with devices using language models and the user interface.

content/learning-paths/embedded-and-microcontrollers/raspberry-pi-smart-home/4-smart-home-assistant.md

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ python3 smart_home_assistant.py --no-api
5757
{{< /tab >}}
5858
{{< /tabpane >}}
5959

60-
### Command Options
60+
### Command options
6161

6262
| Option | Description | Example |
6363
|------------------|---------------------------------------------------------------------------------------------------|--------------------------------------------|
@@ -69,15 +69,15 @@ If everything is set up correctly, you should see the following output on runnin
6969

7070
![Running in Default Mode](cmd.png "Running the code in default mode")
7171

72-
## Interact With Your Assistant
72+
## Interact with your assistant
7373

7474
Try asking the assistant to `turn on living room light`. If you've connected additional devices, come up with prompts to test the setup.
7575

7676
### Web interface
7777

78-
Open your browser and navigate to `http://0.0.0.0:8000`, or as printed in the terminal output.
78+
Open your browser and navigate to `http://0.0.0.0:8000`, or as printed in the terminal output.
7979

80-
![Web Interface Interaction](UI3.png "Interacting with the LLM through the web interface")
80+
![Web Interface Interaction](UI3.png "Interacting with the LLM through the web interface")
8181

8282

8383
### Command line interface
@@ -105,9 +105,8 @@ If you're running into issues with the assistant, here are some things to check:
105105
- If port 8000 is unavailable, run the assistant with a different port using the `--port` flag.
106106
{{% /notice %}}
107107

108-
## Wrapping up
108+
## Wrap up
109109

110110
From here, you can modify the `smart_home_assistant.py` and extend the system by adding more devices, experimenting with conversational commands, or integrating sensors and automation logic into your smart home setup.
111111

112112
You should now know more about setting up a Raspberry Pi 5 to control real-world devices using GPIO pins, and running a smart home assistant powered by local language models through Ollama. You’ve learned how to wire basic circuits with LEDs and resistors to simulate smart devices, and how to launch and interact with the assistant through both the command-line interface and a web dashboard. Along the way, you also explored common troubleshooting steps for GPIO access, missing dependencies, and model loading issues.
113-

0 commit comments

Comments
 (0)