树莓派开发环境部署(任何类型的树莓派),最简易
以下是树莓派从零开始使用C语言开发的超详细指南,包含环境搭建到功能开发的完整流程(基于SSH远程开发):
一、硬件准备
- 所需材料:
-
- 树莓派主板(推荐4B/5型号)
- Micro SD卡(至少16GB Class10)
- 5V电源适配器(Type-C接口)
- 网线或可连接的WiFi环境
- 读卡器(用于烧录系统)
- 可选:HDMI线、显示器、键鼠(首次配置可不用)
二、系统安装与网络配置
1. 烧录系统
- 下载官方工具Raspberry Pi Imager
- 选择系统:
-
- 推荐:Raspberry Pi OS Lite(无桌面版)
- 版本:选择64-bit或32-bit(根据硬件选择)
-
- 高级设置(⚙️图标):
-
- 启用SSH:勾选"Enable SSH"
- 设置用户名密码:建议用户
pi
,密码自定义 - 配置WiFi(可选):填入SSID和密码
- 烧录到SD卡
2. 首次启动配置
- 插入SD卡到树莓派并通电
- 等待启动(约1-2分钟)
- 获取IP地址(任选一种方法):
-
- 登录路由器管理页面查看
- 使用
arp -a
命令扫描局域网 - 使用
nmap -sn 192.168.1.0/24
扫描(需安装nmap) -
三、SSH远程连接
1. 基础连接
ssh pi@<树莓派IP> # 示例:ssh pi@192.168.137.123
输入密码完成登录 #我设置的是1
2. 配置免密登录(推荐)
- 本地生成密钥:
ssh-keygen -t rsa # 按回车使用默认路径
- 上传公钥到树莓派:
ssh-copy-id pi@<树莓派IP>
3. 基础安全设置
sudo raspi-config
# 选择:System Options -> Password -> 修改密码
# 选择:System Options -> Wireless LAN -> 配置WiFi(可选)
# 选择:Advanced Options -> Expand Filesystem
四、开发环境搭建
3.1 更新系统
sudo apt update && sudo apt upgrade -y
3.2 修改密码
passwd
3.3 配置时区
sudo dpkg-reconfigure tzdata
选择Asia -> Shanghai
3.4 扩展文件系统
sudo raspi-config
选择"Advanced Options" -> "Expand Filesystem"
4. 开发环境搭建
4.1 安装编译工具
以下操作在SSH登录到树莓派的时候操作
sudo apt install build-essential git cmake
4.2 安装GPIO库
sudo apt update
sudo apt install libgpiod-dev # 官方推荐的GPIO库
下载其他库,未找到,待解决
sudo apt install libi2c-dev libspi-dev libserial-dev
5. 开发流程
5.1 在Ubuntu上开发
在Ubuntu上使用你喜欢的编辑器编写代码,例如:
exit #从pi切换到用户
sudo apt install libgpiod-dev #在ubuntu用户模式下也下载库,便于调试
mkdir ~/raspberry_projects
cd ~/raspberry_projects
code test.c
示例代码(test.c):
// ~/raspberry_projects/blink.c
#include <gpiod.h>
#include <unistd.h>#define GPIO_CHIP "gpiochip0"
#define LED_PIN 17 // 物理引脚11int main()
{struct gpiod_chip *chip = gpiod_chip_open_by_name(GPIO_CHIP);struct gpiod_line *led = gpiod_chip_get_line(chip, LED_PIN);gpiod_line_request_output(led, "blink-example", 0);while (1) {gpiod_line_set_value(led, 1);sleep(1);gpiod_line_set_value(led, 0);sleep(1);}gpiod_line_release(led);gpiod_chip_close(chip);return 0;
}
编译要记得链接库
gcc test.c -lgpiod
#仅用来查看错误
5.2 传输代码到树莓派
先使用ssh登录树莓派
ssh pi@192.168.137.123ls #查看文件
mkdir project #创建文件,便于ubuntu上传储存exit #退出登录树莓派
在ubuntu下操作
scp test.c pi@192.168.137.123:~/project/
5.3 在树莓派上编译运行
ssh pi@192.168.137.123
cd ~/project
gcc -o test test.c -lgpiod #gcc test.c
./test #./a.out
连接相关点亮,led灯闪烁
使用系统启动,防止运行./a.out再ctr+c时代码不允许,但是没有flash,只能用系统启动自启
将代码设置为开机自启动是一个常见的需求,尤其是对于嵌入式系统或需要持续运行的任务。以下是将你的可执行文件 a.out
设置为开机自启动的详细步骤,基于你的当前目录结构(~/project
)和文件列表(a.out
和 test.c
)。
步骤 1: 确保可执行文件可以运行
首先,确保 a.out
是一个有效的可执行文件,并且可以在终端中正常运行。你可以通过以下命令测试:
./a.out
如果程序正常运行,你可以继续下一步。
步骤 2: 创建 systemd
服务文件
systemd
是现代 Linux 发行版(包括树莓派的 Raspbian)使用的初始化系统和服务管理器。我们可以使用它来创建一个服务,使程序在系统启动时自动运行。
- 创建服务文件:
使用文本编辑器(如 vim
)创建一个新的服务文件。例如,在 /etc/systemd/system/
目录下创建一个名为 mycode.service
的文件:
sudo vim /etc/systemd/system/mycode.service
- 编辑服务文件:
在文件中添加以下内容:
[Unit]
Description=My Code Service
After=network.target #在网络启动后启动,但是不管网络能是否正确连上都启动,注释掉的话直接启动[Service]
ExecStart=/home/pi/project/a.out
WorkingDirectory=/home/pi/project
Restart=always
User=pi[Install]
WantedBy=multi-user.target
-
Description
是服务的描述。After=network.target
表示服务在网络服务启动后启动。如果你的程序不需要网络,可以省略这一行。ExecStart
是启动服务的命令。这里指定了你的可执行文件的完整路径。WorkingDirectory
是服务运行时的工作目录。Restart=always
表示如果服务崩溃或停止,systemd
将自动重启它。User=pi
表示服务将以pi
用户的身份运行。
程序等待网络连接成功才可以使用
[Unit]
Description=My Code Service
After=network-online.target
Wants=network-online.target[Service]
ExecStart=/home/pi/project/a.out
WorkingDirectory=/home/pi/project
Restart=always
User=pi[Install]
WantedBy=multi-user.target
- 保存并退出:
按 Ctrl+O
保存文件,然后按 Ctrl+X
退出 nano
编辑器。
步骤 3: 启用并启动服务
- 启用服务:
使用 systemctl
命令启用服务,使其在系统启动时自动运行:
sudo systemctl enable mycode.service
- 启动服务:
立即启动服务(如果你不想等待系统重启):
sudo systemctl start mycode.service
- 检查服务状态:
你可以使用以下命令检查服务的状态:
sudo systemctl status mycode.service
sudo reboot #重启设备查看
你应该会看到服务正在运行的信息。
步骤 4: 验证
- 重启树莓派,然后检查你的程序是否在启动时自动运行。
- 你可以通过查看日志文件(通常位于
/var/log/syslog
或使用journalctl
命令)来调试任何问题。
注意事项
确保你的可执行文件具有适当的权限,以便 pi
用户可以运行它。
如果你的程序需要特定的环境变量或配置文件,确保这些在服务文件中正确设置。
如果你需要调试服务,可以查看 journalctl
的输出:
journalctl -u mycode.service
这样,你的程序 a.out
就会在树莓派启动时自动运行了。
在使用ssh登录树莓派使能相关的iic和spi
6. 高级开发设置
6.1 使用VS Code远程开发
- 在Ubuntu上安装VS Code
- 安装"Remote - SSH"扩展
- 点击左下角绿色图标 > "Connect to Host" > 输入树莓派SSH信息
- 现在可以直接在VS Code中编辑树莓派上的文件
6.2 自动同步代码(rsync)
在Ubuntu上创建同步脚本sync.sh
:
#!/bin/bash
rsync -avz --exclude='.git/' ~/raspberry_projects/ pi@<树莓派IP>:~/projects/
然后:
chmod +x sync.sh
./sync.sh
7. 外设和传感器开发
7.1 GPIO使用
确保用户有GPIO访问权限:
sudo usermod -a -G gpio pi
7.2 I2C设备
启用I2C:
sudo raspi-config
选择"Interface Options" -> "I2C" -> "Yes"
安装i2c工具:
sudo apt install i2c-tools
检测设备:
sudo i2cdetect -y 1
7.3 SPI设备
启用SPI:
sudo raspi-config
选择"Interface Options" -> "SPI" -> "Yes"
8. 调试技巧
8.1 查看GPIO状态
gpio readall
8.2 查看系统日志
dmesg | tail
8.3 监控CPU温度
vcgencmd measure_temp
9. 常用命令备忘
用途 | 命令 |
重启树莓派 |
|
关机 |
|
查看IP |
|
查看存储 |
|
查看内存 |
|
查看CPU信息 |
|
查看USB设备 |
|
查看内核日志 |
|
10. 后续学习建议
- 学习Linux基本命令
- 研究树莓派GPIO引脚图
- 查阅传感器数据手册
- 学习Makefile编写
- 探索交叉编译(在Ubuntu上编译树莓派程序)
这样你就完成了从零开始的无屏幕树莓派4B C语言开发环境搭建!
五、第一个C程序
1. 创建项目目录
mkdir ~/projects && cd ~/projects
2. 编写Hello World
vim hello.c
输入以下内容:
#include <stdio.h>int main() {printf("Hello Raspberry Pi!\n");return 0;
}
3. 编译与运行
gcc hello.c -o hello # 编译
./hello # 运行
六、GPIO控制开发(以LED为例)
1. 安装硬件控制库
sudo apt install -y wiringpi # 传统库
# 或使用新库(推荐):
git clone https://github.com/WiringPi/WiringPi
cd WiringPi && ./build
2. 硬件连接
- LED正极 → GPIO17(物理引脚11)
- LED负极 → GND(物理引脚9)
- 串联220Ω电阻
3. 编写控制程序
// blink.c
#include <wiringPi.h>#define LED_PIN 0 // wiringPi编号模式(对应GPIO17)int main() {wiringPiSetup();pinMode(LED_PIN, OUTPUT);while(1) {digitalWrite(LED_PIN, HIGH);delay(1000);digitalWrite(LED_PIN, LOW);delay(1000);}return 0;
}
4. 编译运行
gcc blink.c -o blink -lwiringPi # 链接库
sudo ./blink # 需要root权限操作GPIO
七、进阶开发配置
1. 启用硬件PWM(以控制舵机为例)
#include <wiringPi.h>
#include <softPwm.h>int main() {wiringPiSetup();softPwmCreate(1, 0, 200); // 引脚1,初始占空比0,范围200while(1) {softPwmWrite(1, 15); // 15/200 = 7.5% → 舵机中位delay(2000);softPwmWrite(1, 25); // 12.5% → 右转delay(2000);}return 0;
}
2. 使用Makefile
创建Makefile
:
CC = gcc
CFLAGS = -Wall -Wextra
LDFLAGS = -lwiringPiTARGET = blinkall: $(TARGET)$(TARGET): $(TARGET).c$(CC) $(CFLAGS) -o $@ $< $(LDFLAGS)clean:rm -f $(TARGET)
八、调试技巧
- GDB调试:
gcc -g program.c -o program
gdb ./program
- GPIO状态检查:
gpio readall # 查看所有GPIO状态
- 系统监控:
top # 查看CPU使用
vcgencmd measure_temp # 查看温度
九、常见问题排查
- SSH连接失败:
-
- 确认IP地址正确
- 检查
/boot/ssh
文件是否存在 - 使用
ping <IP>
测试网络连通性
- GPIO无响应:
-
- 检查接线是否正确
- 确认使用
sudo
运行程序 - 验证GPIO编号模式(wiringPi使用自身编号)
- 编译错误:
-
- 确认安装了所有依赖库
- 检查
-l
参数后的库名称拼写 - 使用
ldconfig -p | grep wiringPi
验证库安装
十、推荐学习路径
- 掌握Linux基础命令(ls, cd, grep等)
- 学习C语言指针和内存管理
- 研究树莓派官方文档
- 尝试传感器集成(温湿度/DHT11)
- 探索多线程编程(pthread库)
建议从简单的GPIO控制开始,逐步过渡到I2C/SPI设备通信,最后尝试结合网络编程开发物联网项目。