1. 香橙派5摄像头测试全攻略
最近在折腾香橙派5的摄像头功能,发现网上很多教程都是基于带桌面的系统镜像,而我用的却是无桌面版的Ubuntu系统。经过一番摸索,总结出两种实用的摄像头监控方案:一种是基于X11转发的简易方案,另一种是低延迟的网页实时监控方案。下面就把我的踩坑经验和完整实现步骤分享给大家。
1.1 X11转发方案(高延迟但简单)
这个方案适合临时查看摄像头画面,对延迟不敏感的场景。核心思路是通过SSH的X11转发功能,在Windows上显示香橙派的摄像头画面。
注意:使用前确保香橙派和Windows电脑在同一局域网内,建议使用网线连接以获得更稳定的传输速度。
1.1.1 环境配置步骤
首先需要安装X11相关工具:
bash复制sudo apt update
sudo apt install -y xauth x11-apps
然后修改SSH配置启用X11转发:
bash复制sudo nano /etc/ssh/sshd_config
找到并修改以下参数:
code复制X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost no
保存后重启SSH服务:
bash复制sudo systemctl restart ssh
sudo reboot
1.1.2 摄像头工具安装与使用
安装必要的多媒体工具:
bash复制sudo apt install -y ffmpeg v4l-utils
查看摄像头设备:
bash复制v4l2-ctl --list-devices
启动摄像头预览(建议在MobaXterm等支持X11转发的SSH客户端中执行):
bash复制ffplay -f v4l2 -framerate 15 -video_size 640x480 /dev/video0
实测这个方案的延迟在1-2秒左右,适合静态场景监控。如果摄像头画面卡顿,可以尝试降低分辨率和帧率:
bash复制ffplay -f v4l2 -framerate 10 -video_size 320x240 /dev/video0
1.2 网页实时监控方案(低延迟)
想要更专业的监控方案?我基于GStreamer和MediaMTX搭建了一套网页监控系统,实测延迟仅240ms左右。
1.2.1 一键安装脚本
创建安装脚本install_camera.sh:
bash复制#!/bin/bash
echo "===== 安装摄像头实时监控系统 ====="
# 更新系统并安装GStreamer
sudo apt update
sudo apt install -y \
gstreamer1.0-tools \
gstreamer1.0-plugins-base \
gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad \
gstreamer1.0-plugins-ugly \
gstreamer1.0-libav
# 下载并安装MediaMTX
cd /opt
sudo mkdir -p mediamtx
cd mediamtx
sudo wget https://github.com/bluenviron/mediamtx/releases/download/v1.16.3/mediamtx_v1.16.3_linux_arm64.tar.gz
sudo tar -xzf mediamtx_v1.16.3_linux_arm64.tar.gz
# 创建MediaMTX服务
sudo bash -c 'cat > /etc/systemd/system/mediamtx.service <<EOF
[Unit]
Description=MediaMTX Streaming Server
After=network.target
[Service]
ExecStart=/opt/mediamtx/mediamtx /opt/mediamtx/mediamtx.yml
Restart=always
[Install]
WantedBy=multi-user.target
EOF'
sudo systemctl daemon-reload
sudo systemctl enable mediamtx
sudo systemctl start mediamtx
# 创建摄像头推流脚本
cd ..
sudo mkdir -p camera
sudo bash -c 'cat > /opt/camera/camera_stream.sh <<EOF
#!/bin/bash
echo "Waiting for MediaMTX..."
sleep 10
gst-launch-1.0 v4l2src device=/dev/video0 ! \\
video/x-raw,width=640,height=480,framerate=30/1 ! \\
videoconvert ! \\
x264enc tune=zerolatency bitrate=2048 speed-preset=ultrafast ! \\
rtspclientsink location=rtsp://127.0.0.1:8554/cam
EOF'
sudo chmod +x /opt/camera/camera_stream.sh
# 创建摄像头服务
sudo bash -c 'cat > /etc/systemd/system/camera.service <<EOF
[Unit]
Description=Camera Stream
After=network.target mediamtx.service
[Service]
ExecStart=/opt/camera/camera_stream.sh
Restart=always
[Install]
WantedBy=multi-user.target
EOF'
sudo systemctl daemon-reload
sudo systemctl enable camera
sudo systemctl start camera
echo "================================="
echo "安装完成"
echo "浏览器访问:"
hostname -I | awk '{print "http://"$1":8889/cam"}'
echo "================================="
运行脚本:
bash复制sudo bash install_camera.sh
1.2.2 参数调优技巧
如果发现画面卡顿,可以调整GStreamer管道参数:
- 降低分辨率:将
width=640,height=480改为width=320,height=240 - 降低帧率:将
framerate=30/1改为framerate=15/1 - 调整编码质量:修改
bitrate=2048(单位kbps)
实测发现:在香橙派5上,640x480@30fps的配置可以稳定运行,CPU占用约40%
2. 音频设备测试指南
2.1 录音功能测试
使用USB摄像头自带的麦克风进行录音测试:
查看可用录音设备:
bash复制arecord -l
输出示例:
code复制card 0: Camera [USB Camera], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0
录制5秒音频:
bash复制arecord -D plughw:0,0 -f cd -d 5 test.wav
参数说明:
-D plughw:0,0:指定声卡0设备0-f cd:CD质量(16bit, 44100Hz)-d 5:录制5秒
2.2 播放功能测试
使用USB音箱进行播放测试:
查看播放设备:
bash复制aplay -l
播放录音文件:
bash复制aplay -D plughw:4,0 test.wav
常见问题:如果出现"Device or resource busy"错误,可能是其他进程占用了音频设备,可以尝试重启ALSA服务:
bash复制sudo alsa force-reload
3. 舵机与电调控制实战
3.1 硬件连接指南
舵机连接:
- 信号线(黄色):PWM0_M1(GPIO1_D2,wPi编号10)
- 电源线(红色):5V
- 地线(棕色):GND
电调连接:
- 信号线(黄色):PWM1_M2(GPIO1_A3,wPi编号16)
- 电源线(红色):5V
- 地线(棕色):GND
- 电机电源线:黄粗线接电机正极,蓝粗线接电机负极
3.2 PWM控制程序
使用wiringOP库控制PWM输出,测试程序如下:
c复制#include <wiringPi.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#define SERVO_PIN 10 // 舵机控制引脚 wPi编号10
#define ESC_PIN 16 // 电调控制引脚 wPi编号16
int main(void) {
if(wiringPiSetup() == -1) {
printf("wiringPi初始化失败!\n");
return 1;
}
pinMode(SERVO_PIN, PWM_OUTPUT);
pinMode(ESC_PIN, PWM_OUTPUT);
pwmSetMode(PWM_MODE_MS);
pwmSetRange(2000);
pwmSetClock(192);
int servoPos = 150; // 舵机中位
int escSpeed = 150; // 电调中位
printf("控制指令:\n");
printf("w - 电调加速\ts - 电调减速\n");
printf("a - 舵机左转\td - 舵机右转\n");
printf("q - 退出程序\n");
while(1) {
char cmd = getchar();
switch(cmd) {
case 'w': // 电调前进
if(escSpeed < 200) escSpeed += 10;
pwmWrite(ESC_PIN, escSpeed);
printf("电调速度: %d\n", escSpeed);
break;
case 's': // 电调后退
if(escSpeed > 100) escSpeed -= 10;
pwmWrite(ESC_PIN, escSpeed);
printf("电调速度: %d\n", escSpeed);
break;
case 'a': // 舵机左转
if(servoPos < 200) servoPos += 10;
pwmWrite(SERVO_PIN, servoPos);
printf("舵机位置: %d\n", servoPos);
break;
case 'd': // 舵机右转
if(servoPos > 100) servoPos -= 10;
pwmWrite(SERVO_PIN, servoPos);
printf("舵机位置: %d\n", servoPos);
break;
case 'q': // 退出
pwmWrite(SERVO_PIN, 150);
pwmWrite(ESC_PIN, 150);
return 0;
}
}
}
编译与运行:
bash复制gcc -o pwm_test pwm_test.c -lwiringPi
sudo ./pwm_test
3.3 电调校准技巧
电调常见问题及解决方法:
- 无法后退:先给后退信号使电调灯亮起,再回中,之后即可正常后退
- 响应迟钝:检查电源是否充足,建议使用独立12V电源供电
- 舵机抖动:确保电源稳定,可并联大容量电容(如1000μF)
重要提示:首次使用电调前必须进行校准!校准步骤:
- 上电时给最大油门信号
- 听到"滴滴"声后给最小油门信号
- 再次听到确认音后校准完成
4. 网络优化建议
在测试中发现5G WiFi连接下GitHub下载速度慢的问题,建议:
- 更换国内镜像源:
bash复制sudo sed -i 's|http://.*archive.ubuntu.com|https://mirrors.aliyun.com|g' /etc/apt/sources.list
sudo apt update
- 对于GitHub项目,可以使用Gitee镜像:
bash复制git clone https://github.com/xxx/yyy.git
# 替换为
git clone https://gitee.com/mirrors/yyy.git
- 使用网线连接时,建议配置静态IP避免地址变化:
bash复制sudo nano /etc/netplan/01-netcfg.yaml
添加以下配置(根据实际网络修改):
yaml复制network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
addresses: [192.168.1.100/24]
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
应用配置:
bash复制sudo netplan apply
经过这些测试,香橙派5在多媒体处理和硬件控制方面表现相当不错。特别是使用网页监控方案时,240ms的延迟已经可以满足大多数监控场景的需求。不过在跨网络传输时(如通过Tailscale中继),延迟会明显增加,这将是下一篇要重点解决的问题。