香橙派2实现USB摄像头转mjpeg

香橙派Zero2

为什么采用香橙派Zero2

Orange Pi Zero2 是一款高性价比的 ARM 开发板,凭借其硬件配置和扩展能力,适用于多种场景。以下是其主要应用领域及适用场景的详细分析:

一、智能家居与物联网(IoT)

  1. 智能网关
    Zero2 支持 Wi-Fi 5 和蓝牙 5.0,可通过 40Pin GPIO 和 24Pin 扩展接口连接传感器(如温湿度、红外感应等),实现家庭环境数据的采集与联动控制。其低功耗和小尺寸(30mm×65mm)便于嵌入智能灯具、安防设备等终端中。
  2. 家庭自动化中枢
    支持运行 Home Assistant 等开源平台,可集成 Zigbee、Z-Wave 等协议模块,统一管理智能设备。

二、教育与创客开发

  1. 嵌入式学习工具
    作为树莓派平替产品,Zero2 提供丰富的教程文档(如 PWM 控制、ROS 安装等),适合新手学习 Linux 系统、Python 编程及硬件交互。其低成本(89 元起)降低了学习门槛。
  2. 硬件项目原型开发
    支持 PWM 输出(可控制舵机、电机转速)、GPIO 扩展,适用于机器人、智能小车等 DIY 项目。例如通过 PWM 实现呼吸灯或电机调速。

三、多媒体与边缘计算

  1. 轻量级媒体中心
    集成 Mali G31 MP2 GPU,支持 4K 视频解码和 HDMI 输出,可搭建电视盒子或智能投屏设备,运行 Android TV 系统。
  2. 端侧 AI 推理
    搭载四核 Cortex-A53 处理器(1.5GHz),可部署轻量级深度学习模型。实测运行 YOLOv5n 目标检测算法耗时约 9 秒,优化后(如 FastestDet)可达 8 FPS,适合交通标志识别等低实时性场景。

四、工业与行业应用

  1. 工业控制节点
    支持宽温工作环境(部分版本),可通过扩展以太网或串口实现 PLC 通信,用于生产线数据采集或设备监控。
  2. 边缘网关
    运行 Docker 或 OpenWrt,可部署在物联网边缘节点,实现数据预处理和协议转换,减少云端负载。

五、其他创新场景

  • 机器人视觉:结合 OpenCV 和摄像头模块,实现基础图像处理(如物体追踪)。
  • 网络服务器:千兆网口(部分型号)支持搭建轻量级 Web 服务器或 NAS 存储。

总结

Orange Pi Zero2 的核心优势在于 性价比高(最低 89 元)、系统兼容性强(支持 Android、Ubuntu 等 6 种 OS)以及 扩展灵活(40Pin+24Pin 接口)。其性能虽不及高端开发板,但足以满足中小型项目需求,尤其适合预算有限的开发者、教育机构及智能硬件初创团队。

镜像采用官方下载的ubuntu2204 ,Orangepizero2_3.1.0_ubuntu_jammy_server_linux6.1.31.7z

通过串口连接wifi网络

OrangePi ZERO 2 通过串口连接 WiFi 网络的操作步骤如下:

一、硬件准备与串口连接

  1. 串口模块接线
    使用 USB 转 TTL 模块(如 CH340 或 CP2102)连接开发板:

    • 开发板 TX 接模块 RX
    • 开发板 RX 接模块 TX
    • 开发板 GND 接模块 GND
    • 模块插入电脑后,在设备管理器中确认 COM 端口号(如 COM13)。
  2. 串口终端设置
    使用 MobaXterm 或同类工具创建串口会话:

    • 选择对应的 COM 端口,波特率设为 115200

    image-20250520135614989

    image-20250520135626479


二、通过命令行连接 WiFi

  1. 扫描可用 WiFi 热点
    登录系统后输入命令扫描周围网络:

    nmcli dev wifi
    

    按方向键查看列表,按 Q 退出。

  2. 连接 WiFi 网络
    使用 nmcli 命令直接连接(需替换 wifi_namewifi_passwd):

    nmcli dev wifi connect "wifi_name" password "wifi_passwd"
    

    示例(连接名为 WIFI_SSID 的 WiFi):

    nmcli dev wifi connect WIFI_SSID password xxxxxxxx
    

    成功后会显示连接状态。

  3. 验证连接

    • 查看 IP 地址:ifconfig(重点关注 wlan0 接口)
    • 测试网络连通性:ping www.baidu.com

三、注意事项

  1. 避免修改配置文件
    不要通过 /etc/network/interfaces 配置文件修改 WiFi 连接,可能导致网络异常。
  2. 串口工具兼容性
    部分终端工具(如 minicom)可能无法正常显示图形化界面 nmtui,优先使用命令行操作。
  3. 静态 IP 设置(可选)
    若需固定 IP,需先通过 route -n 获取网关和子网掩码,再使用 nmtui 配置(需支持图形界面的终端工具)。

四、常见问题

  • TF 卡兼容性:建议使用闪迪 Class 10 及以上 TF 卡,其他品牌可能出现启动故障。
  • 供电要求:初始测试可用电脑 USB 3.0 供电(5V/2A),外接设备时需独立电源。

通过以上步骤,即使没有网线或显示器,也可通过串口完成 WiFi 配置。若需更详细的图形化操作或系统镜像烧录方法,可参考官方手册。

添加多组WiFi密码与优先级

在OrangePi Zero 2上实现多组WiFi配置自动切换,可通过以下两种主流方案实现。根据是否使用NetworkManager工具,选择最适合你的方式:


一、基于NetworkManager的配置(推荐)

适用场景:需要动态管理多个WiFi网络、设置连接优先级,或需兼容图形化工具(如nmtui
​操作步骤​​:

  1. 添加新WiFi配置
    使用nmcli命令添加多组WiFi凭证(替换SSID_NAMEPASSWORD):

    sudo nmcli connection add type wifi con-name "Home_WiFi" ifname wlan0 ssid "Home_SSID" wifi-sec.key-mgmt wpa-psk wifi-sec.psk "Home_Password"
    sudo nmcli connection add type wifi con-name "Office_WiFi" ifname wlan0 ssid "Office_SSID" wifi-sec.key-mgmt wpa-psk wifi-sec.psk "Office_Password"
    

    注:con-name为连接配置名称,可自定义;ifname需与无线网卡接口名一致(通常为wlan0

  2. 设置自动连接优先级
    为不同网络配置优先级,数值越大优先级越高:

    sudo nmcli connection modify "Home_WiFi" connection.autoconnect yes connection.autoconnect-priority 10
    sudo nmcli connection modify "Office_WiFi" connection.autoconnect yes connection.autoconnect-priority 5
    

    设备会优先尝试连接优先级高的可用网络

  3. 激活配置

    sudo nmcli connection reload  # 重载配置
    sudo systemctl restart NetworkManager  # 重启服务
    

二、基于wpa_supplicant的配置文件(方法备选)

适用场景:无NetworkManager的极简系统,或需直接管理底层网络协议栈
​操作步骤​​:

  1. 编辑配置文件

    sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
    

    添加多个network块(按需调整优先级priority):

    ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
    update_config=1
    
    network={
        ssid="Home_SSID"
        psk="Home_Password"
        priority=5
    }
    
    network={
        ssid="Office_SSID"
        psk="Office_Password"
        priority=3
    }
    

    注:priority范围1-10000,数值越大优先级越高

  2. 重启服务生效

    sudo systemctl restart wpa_supplicant
    

三、验证与调试

  • 查看当前连接状态:

     nmcli connection show --active  # NetworkManager方案
     iwconfig wlan0                  # wpa_supplicant方案
    
  • 强制切换网络测试:

    sudo nmcli connection up "Office_WiFi"  # NetworkManager方案
    

四、注意事项

  1. 接口名称确认
    通过ip link确认无线网卡接口名称(可能为wlp2s0等非wlan0

  2. 配置文件权限

    wpa_supplicant.conf
    

    需设置权限:

    sudo chmod 600 /etc/wpa_supplicant/wpa_supplicant.conf
    
  3. 服务依赖检查

    • NetworkManager需保持运行:sudo systemctl enable --now NetworkManager
    • wpa_supplicant需绑定接口:sudo wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf

通过上述配置,设备在切换环境时会自动尝试已存储的WiFi网络,按优先级完成无感切换。推荐优先使用NetworkManager方案,因其支持动态优先级调整和可视化管理。

修改和校正时间

终端输入date命令,弹出如下时间。
在这里插入图片描述
明显是时区不正确,可以输入更改时区的命令进行修改。

sudo dpkg-reconfigure tzdata  

进入了时区设计界面,按方向键选择“Asia”,回车。

在这里插入图片描述

按方向键找到“Shanghai”并回车。

在这里插入图片描述

设置好后,再次在终端输入date命令,弹出如下时间,时间就对上了。

在这里插入图片描述

将USB摄像头视频流给推流到WebServer

在无桌面版Linux系统(如Orange Pi Zero 2)中,完全可以通过成熟的工具实现USB摄像头视频流推送至Web服务器的需求。以下是经过验证的成熟方案及具体实现方法:


方案对比与选型建议

方案 开发难度 延迟 适用场景 依赖环境
mjpg-streamer ★☆☆☆☆ 1-2秒 简单监控、多客户端 需安装依赖库
Motion ★★☆☆☆ 2-5秒 带动态检测的长期监控 独立服务
FFmpeg+RTMP ★★★☆☆ 0.5-1秒 专业直播、低延迟场景 Nginx编译环境
Flask+OpenCV ★★★★☆ 1-3秒 需深度定制的Web集成 Python环境
cam2web ★☆☆☆☆ 1-2秒 快速原型开发 需编译

本文选择的是mjpg-streamer,开箱即用无需编码,以下是通过源码编译安装mjpg-streamer

在Orange Pi Zero 2上安装mjpg-streamer时出现报错,是因为该软件包未收录在系统默认的软件源中。根据多篇技术文档的实践指导,必须通过源码编译安装。以下是经过验证的完整解决方案:


一、安装依赖环境

# 更新软件源并安装编译工具
sudo apt update
sudo apt install -y cmake libjpeg8-dev git

注:部分系统可能需要替换libjpeg8-devlibjpeg62-dev(参考网页2报错案例)


二、源码编译安装

# 克隆官方仓库(国内用户推荐gitee镜像)
git clone https://gitee.com/leeboby/mjpg-streamer.git  # 或原地址:github.com/jacksonliam/mjpg-streamer

# 进入编译目录
cd mjpg-streamer/mjpg-streamer-experimental

# 编译安装(-j4表示4线程加速编译)
make -j4
sudo make install

关键说明

  1. 若编译报错libjpeg not found,需检查libjpeg-dev是否安装成功
  2. 芒果派MQ Quad等H616设备实测可通过此流程完成编译(参考网页3)
  3. 若出现cmake not found错误,表明系统未安装CMake编译工具,跳转至[安装CMake工具链](# 安装CMake工具链)

三、启动视频流服务

# 设置库路径(重要!避免报错找不到插件)
export LD_LIBRARY_PATH=/usr/local/lib/mjpg-streamer

# 启动服务(需确认摄像头设备节点,通常为/dev/video0或video1)
# 使用USB摄像头的主视频流节点(通常为video1)
mjpg_streamer -i "input_uvc.so -d /dev/video1 -r 1280x720 -f 30" \
               -o "output_http.so -p 8080 -w /usr/local/share/mjpg-streamer/www"

参数解释

  • -d /dev/video0:摄像头设备路径(通过v4l2-ctl --list-devices确认)
  • -r 1280x720:分辨率设置(支持640x480/1920x1080等)
  • -f 30:帧率限制(过高可能导致卡顿)

四、验证与访问

  1. 本地测试:

    curl http://localhost:8080/?action=stream
    
  2. 局域网访问
    在浏览器输入http://[开发板IP]:8080,可看到实时视频流界面

五、高级配置参考

参数类型 常用选项 作用说明
输入插件 -q 80 设置JPEG压缩质量(1-100)
-n 禁用动态控制(解决部分驱动兼容性问题)
输出插件 -c user:password 启用HTTP基本认证
-l on 控制摄像头LED指示灯

画质与性能平衡建议

  • 高画质-q 80~95(适合静态场景,带宽占用高)
  • 低延迟-q 40~70(适合动态场景,带宽占用低)

六、开机自启动配置

参考网页的systemd服务配置

# 创建服务文件
sudo nano /etc/systemd/system/mjpg-streamer.service

# 写入内容
[Unit]
Description=MJPEG Streamer
After=network.target

[Service]
ExecStart=/usr/local/bin/mjpg_streamer -i "input_uvc.so -d /dev/video1 -r 1280x720 -f 30 -q 85" \
               -o "output_http.so -p 8080 -w /usr/local/share/mjpg-streamer/www"
Restart=on-failure
User=orangepi

[Install]
WantedBy=multi-user.target

# 启用服务
sudo systemctl enable --now mjpg-streamer

故障排查优先级

  1. 确认设备节点是否被其他进程占用(lsof /dev/video1
  2. 尝试更换USB接口(排除供电不足问题)
  3. 查看内核日志:dmesg | grep uvc

常见问题排查

  1. 摄像头未识别:
    • 执行v4l2-ctl --list-devices确认设备节点
    • 检查USB摄像头供电(推荐使用带外接供电的USB HUB)
  2. 端口冲突:
    • 修改启动命令中的-p 8080为其他端口(如8081)
  3. 花屏/卡顿:
    • 降低分辨率参数-r 640x480
    • 添加-q 80降低JPEG压缩质量
  4. ​​确认摄像头设备节点​​
    • 运行以下命令,列出所有视频设备:
    • ls /dev/video*
    • 如果输出为空或只有 /dev/video0,说明摄像头可能映射到了 /dev/video0。修改命令中的 -d /dev/video1 为 -d /dev/video0
  5. ​​解决权限问题​​
    • 将当前用户加入 video 用户组:
    • sudo usermod -aG video $USER
    • 重启系统或重新登录使权限生效

安装CMake工具链

我在Orange Pi Zero 2上编译mjpg-streamer时出现cmake not found错误,表明系统未安装CMake编译工具。以下是详细的解决方案:


一、安装CMake工具链

方法1:通过apt快速安装(推荐)

  1. 添加universe软件源
    部分系统默认源未包含CMake,需开启扩展仓库:

    sudo add-apt-repository universe  # 启用universe仓库
    sudo apt update
    
  2. 安装CMake及编译依赖
    执行以下命令安装完整工具链:

    sudo apt install -y cmake build-essential libjpeg-dev  # 核心依赖
    
    • build-essential:包含gcc/g++编译器、make等工具
    • libjpeg-dev:mjpg-streamer依赖的JPEG库头文件

方法2:源码编译安装(apt不可用时)

  1. 下载CMake源码包
    访问CMake官网或通过wget下载:

    wget https://cmake.org/files/v3.28/cmake-3.28.3.tar.gz  # 示例版本
    
  2. 编译与安装

    tar -zxvf cmake-3.28.3.tar.gz
    cd cmake-3.28.3
    ./bootstrap && make -j4 && sudo make install  # 多线程加速编译
    

二、验证CMake安装

执行以下命令检查版本:

cmake --version  # 预期输出类似"cmake version 3.28.3"

三、重新编译mjpg-streamer

  1. 清理之前的编译缓存

    cd ~/mjpg-streamer/mjpg-streamer-experimental
    rm -rf _build  # 删除旧的构建目录
    
  2. 重新编译项目

    make clean && make -j4  # 启用4线程加速
    
    • 若仍报错,尝试指定CMake路径:

      mkdir _build && cd _build
      cmake -DCMAKE_BUILD_TYPE=Release ..  # 手动调用CMake
      make -j4
      

四、依赖问题排查

若编译过程中出现其他错误,需检查以下依赖:

  1. USB摄像头驱动

    sudo apt install v4l-utils  # 验证设备节点:v4l2-ctl --list-devices
    
  2. 缺失的开发库

    sudo apt install libopencv-dev  # 若涉及OpenCV功能
    

五、扩展说明

  • 交叉编译场景:若在x86主机上为Orange Pi交叉编译,需使用aarch64工具链(参考网页6/7/8的交叉编译配置)
  • 系统兼容性:Orange Pi官方镜像可能预装旧版CMake,建议通过apt upgrade升级至新版

通过上述步骤,可解决CMake缺失导致的编译中断问题。若网络环境受限,推荐优先使用apt安装;若需特定版本,则选择源码编译方案。

posted @ 2025-05-20 14:30  Dapenson  阅读(275)  评论(0)    收藏  举报