我是一个把树莓派当“万能插座”折腾了快八年的老玩家从最早的树莓派1代B型一路玩到CM4踩过的坑比吃过的盐还多。这次收到一套树莓派CM4核心板配的是微雪WaveshareCM4 IoT底板、4G模块和CSI摄像头算是物联网项目里非常经典的“远程数据采集终端”组合。整篇内容适合三类人看一是准备拿CM4做毕业设计的在校生二是想搭一套远程监控/数据上传设备但不想用云服务商的开发者三是纯粹对“核心板扩展底板”玩法好奇、想换换口味的树莓派老用户。1. 整体设计思路与硬件选型拆解1.1 为什么选树莓派CM4而不是普通树莓派4B如果你只是想在屋里跑个桌面系统、看个视频CM4的意义不大树莓派4B甚至5B省心得多。但一旦项目要面向工业场景、嵌入式设备、或者要“长在”自己的PCB板子上CM4的优势就出来了。CM4本质上是一块把CPU、内存、eMMC可选、无线模块全部集成在一起的“核心板”它自己没有IO接口必须通过底板引出。这意味着你可以按需选择不同的底板做出完全符合自己项目形态的设备。比如这次用的微雪CM4 IoT底板就是专门为工业物联网场景设计的上面直接集成了4G模块M.2插槽、双路CSI摄像头接口、千兆以太网、RS485/RS232串口、以及两路HDMI输出。另一个很实际的原因是供货和成本。在过去几年芯片紧张的时候CM4比整机树莓派更容易到手而且如果你只需要“一台能联网、能拍图、能传数据的Linux小主机”CM4 Lite版无eMMC加一张好一点的TF卡成本要比买一台树莓派4B低不少。1.2 微雪CM4 IoT底板上有哪些关键接口微雪这块底板在我用过的一堆CM4底板里算是在“接口齐全”和“体积可控”之间平衡得比较好的一款。拆开包装第一眼就能看到标准的40Pin GPIO排针兼容树莓派原有的HAT扩展板这一点很关键意味着以前给树莓派买的传感器扩展板、继电器模块都能直接插上用。双路MIPI CSI摄像头接口都是22Pin的软排线座。CM4核心板本身引出两路CSI一块底板全引出来了不用自己飞线做双目视觉或者“一个拍环境、一个拍操作面”很方便。M.2 B-Key插槽这是给4G/5G模块预留的同时底板上有nano SIM卡槽和两路4G天线接口IPEX座。千兆以太网口和USB 3.0/2.0混合接口实测千兆网口走的是PCIe通道带宽不是问题。带电源管理支持12V DC供电配合板上的DC-DC降压电路能给4G模块稳定供出3.8V/4V左右的工作电压不用像用USB转接板那样担心供电不足。有一点需要注意不是所有CM4底板都带M.2插槽如果你用的是其他品牌底板4G模块可能还得通过USB转接稳定性和走线都会差一些。微雪这块底板的优势就是“物联网全家桶”思维把所有模块一次性安排到位。1.3 4G模块与CSI摄像头的选型思路4G模块我这次用的是广和通的L610-EU市面上兼容的模块多得很比如移远EC20、EC25SIMCom A7600系列还有微雪自家主推的SIM7600系列。选模块的核心标准有三个第一是协议栈支持。现在的4G LTE模块通信模式已经从传统的AT命令拨号演进到了QMI、MBIM这些高速网卡模式。QMI模式需要linux内核里装qmi_wwan驱动MBIM模式需要cdc_mbim驱动。这次用的L610走的是QMI内核5.10以上基本都内置了qmi_wwan驱动免去了自己编译内核的麻烦。第二个标准是频段。如果你在国内用必须选支持国内运营商的B1/B3/B5/B8这些FDD-LTE频段同时最好兼容TDD-LTE的B38/B39/B40/B41。如果是给国外项目用就要换对应地区频段的版本买错版本模块插卡没信号最让人头疼。第三是接口形态。微雪这块底板是M.2 B-Key接口所以模块也得选M.2封装不能直接买那种老式的Mini PCIe封装虽然有人卖转接卡但物理上还要多一层转接信号和稳定都打了折扣。摄像头这边我选的是最常见的OV5647就是树莓派官方Camera Module V1用的那颗传感器500万像素在树莓派生态里驱动最成熟。同样是500万像素的IMX219性能更好一些但OV5647价格便宜、资料多搭配CM4做远程监控完全够用。其实只要接口是标准的MIPI CSI-2驱动做好后用什么传感器只是改个设备树的问题。1.4 我这套配置的完整清单给新入坑的朋友一个参考我这套整机的配置如下树莓派CM4选的是2GB内存 16GB eMMC版本跑无桌面系统绰绰有余。微雪CM4 IoT底板12V/2A DC电源适配器供电。广和通L610-EU 4G模块配了一根棒状天线和一根PCB天线。OV5647 CSI摄像头接CSI-0接口。一张Sandisk Extreme 32GB TF卡虽然eMMC做主存储但我还是习惯放一张TF卡做备份系统。散热片 5V风扇CM4跑起来发热不小不加散热长跑会降频。这套配置整体下来主要成本在CM4和底板上4G摄像头都是百元级配件。做一台“能远程拍照、能拨号上网、能自动上报数据”的物联网核心设备预算基本能控制住。2. 系统安装与eMMC烧录2.1 eMMC版和Lite版怎么选CM4按存储方式分两个大版本带eMMC的版本和Lite版无eMMC。带eMMC的版本好处是系统装在板载存储上读写速度比TF卡快抗震动、抗掉电性能更好非常适合设备装好之后长期通电运行的场景。Lite版则适合那些想用自己手里的NVMe固态、或者想用大容量TF卡当系统盘的玩家。这次我选的是16GB eMMC版本理由很简单跑一个精简的Debian系统、装几个Python服务、存一些图片缓存16GB完全够用。如果你后面想往里面塞机器学习模型或者大容量媒体文件那就建议直接上32GB差价不算大但能省掉后期扩容的折腾。需要注意的是eMMC版本在第一次烧录系统时比Lite版麻烦一些。Lite版很简单用树莓派Imager把镜像写到TF卡上插卡就能开机。eMMC版则需要让CM4进入USB Device模式把整块eMMC当作一个U盘挂载到电脑上再用Imager或dd命令写镜像。2.2 通过USB烧录eMMC的实际操作CM4进入USB烧录模式的原理是eMMC支持一个特殊的USB boot协议树莓派官方在GitHub上开源了usbboot工具运行rpiboot脚本后会把一个特殊固件下发到CM4内部让eMMC以USB Mass Storage的形式暴露出来。具体操作步骤是这样的在电脑上下载usbboot工具并安装依赖库。Debian/Ubuntu系统执行sudo apt install git libusb-1.0-0-dev pkg-config build-essential git clone https://github.com/raspberrypi/usbboot cd usbboot sudo make用跳线帽或者拨码开关把微雪底板上的BOOT模式设置为USB烧录模式。我这块底板上有两个启动模式选择针脚位置在HDMI接口附近把跳线帽跳到BOOT位核心板加电后就会等待USB主机下发固件。用一条高质量Micro-USB线连接电脑和底板侧面的USB Device口。需要注意这个Micro-USB口并不是所有微雪底板都有我手里这块IoT底板上是专门留了的如果你用的是其他底板可能得自己用串口模块连。在电脑上运行烧录工具sudo ./rpiboot此时终端会输出大量枚举、传输固件的信息如果一切正常最后你的电脑会多出一个U盘设备容量就是你CM4 eMMC的大小。打开树莓派Imager选择对应的系统镜像把目标磁盘选成刚识别出来的CM4 eMMC点击写入。这里的写入速度取决于USB2.0带宽16GB镜像大概需要5到10分钟耐心等完就好。如果你在Linux下不想用图形界面的Imager也可以直接ddsudo dd if2024-11-18-raspios-bookworm-arm64.img of/dev/sdX bs4M statusprogress sync烧录完成后断电把BOOT跳线帽恢复到默认的eMMC启动模式重新上电CM4就会从eMMC启动系统。我在这里吃过一个亏第一次烧录时忘记装libusb依赖make虽然成功了但rpiboot运行时提示设备无法打开折腾了半天才发现是pkg-config没装全。建议严格按照官方仓库的README来装依赖别跳步骤。2.3 首次开机与基础系统设置首次开机建议先不插4G模块和摄像头用HDMI接显示器、键盘鼠标接USB口先确认系统能正常启动。这样能缩小问题排查范围等基础系统稳定了再逐步添加外设。我这次刷的是Raspberry Pi OS Lite即无桌面版本完全是为了远程项目考虑桌面环境能省则省。开机后默认用户名是pi密码raspberry第一次通过SSH连接之前建议先用显示器把密码改掉并启用SSHsudo raspi-config在Interface Options里把SSH打开。顺手做几件事把系统时区改成Asia/Shanghai把hostname改成有业务含义的名称比如cm4-iot-01后期多台设备管理起来不容易串。这些在raspi-config里都能快速完成。2.4 国内网络环境下必做的软件源更换这一步必须放在最前面否则后面apt装包、pip装库全部卡到怀疑人生。树莓派系统默认软件源指向官方服务器国内访问速度非常不稳定尤其是编译一些较大依赖包的时候一旦网络中断就得从头再来。修改/etc/apt/sources.list把默认的deb.debian.org替换成国内镜像地址。我这里用的是清华源sudo sed -i s|deb.debian.org|mirrors.tuna.tsinghua.edu.cn|g /etc/apt/sources.list同时注意/etc/apt/sources.list.d/目录下可能还有树莓派专用的源文件同样替换sudo sed -i s|archive.raspberrypi.com|mirrors.tuna.tsinghua.edu.cn/raspberrypi|g /etc/apt/sources.list.d/raspi.list更新源并升级系统sudo apt update sudo apt upgrade -yPython的pip也要一起配置好镜像源建议直接写进全局配置文件/etc/pip.conf[global] index-url https://pypi.tuna.tsinghua.edu.cn/simple extra-index-url https://mirrors.cloud.tencent.com/pypi/simple实测换了源之后apt下载速度能从几十KB/s飙到几MB/s整个开发效率完全不一样。3. CSI摄像头配置与实时视频流3.1 硬件接线双CSI接口怎么接微雪CM4 IoT底板把CM4的两路CSI接口都用排线座引出来了两个座子都标了序号一个叫CSI-0一个叫CSI-1。OV5647摄像头模组用的是22Pin柔性排线排线的金属触点朝哪边在板子上有标注插的时候一定要看仔细。排线插法是这个项目第一个容易踩坑的点。柔性排线的金属引脚很薄插反或者没插到底轻则识别不到摄像头重则损坏排线座。正确做法是先掰开排线座的卡扣把排线平推进去注意排线末端的金手指要完全进入座子内部然后按回卡扣固定。插好后轻轻拉一下排线确认不会脱落。我习惯把摄像头接到CSI-0接口上因为树莓派官方很多示例默认读取CSI-0可以少改配置。如果你的底板有两个接口且都接了摄像头那就要在设备树里分别配置这个稍后说。还有一点要注意供电和信号线的距离。摄像头排线本身不长但如果你把摄像头用延长线往外拉了好几米MIPI信号会衰减甚至完全丢失。官方建议延长线别超过1米我实测超过60厘米就开始出现花屏现象所以摄像头尽量靠近底板安装或者用支持长线传输的串行器方案。3.2 内核设备树让系统认识OV5647在老版本树莓派系统里摄像头的驱动是走/boot/config.txt里的dtoverlay配置加载的。到了Bookworm及更新版本配置文件和目录结构有了变化不再是单一的/boot/config.txt而是改成了/boot/firmware/config.txt不过核心机制还是一样的。对于OV5647这款传感器在config.txt里加上这一行dtoverlayov5647如果摄像头的I2C地址和供电引脚有特殊需求还可以追加参数比如dtoverlayov5647,i2c_pin_00,i2c_pin_11但在我这次实际使用中发现树莓派OS较新版本对OV5647已经做到了“接上就能识别”即使不写dtoverlay系统也能通过自动探测机制加载驱动。这归功于设备树的运行时探测逻辑它会扫描I2C总线上是否存在OV5647的ID如果探测成功自动挂载驱动。如果你用的是CSI-1接口那么可能需要在摄像头枚举失败时尝试在config.txt里指定dtoverlayov5647,cam1或者manually改/boot/firmware/config.txt里的相关配置然后重启。检查摄像头是否被正确识别用这个命令sudo dmesg | grep -i camera通常能看到类似“imx219/ov5647: chip found 0x36”之类的日志。如果没有任何输出基本可以断定排线没插好、座子接触不良或者传感器型号不对。3.3 libcamera拍照和测试的完整流程树莓派OS从Bullseye开始默认的摄像头工具栈换成了libcamera。以前好用的raspistill和raspivid在新版系统里已经废弃了官方推荐用的是libcamera-hello、libcamera-still、libcamera-vid这一套命令。先用libcamera-hello做一个最简单的连通性测试libcamera-hello如果正常屏幕上会短暂出现摄像头预览画面终端里会打印出摄像头传感器信息比如OV5647的像素尺寸、格式列表等。如果摄像头没有画面大概率是线序、供电或者驱动层的问题。拍照用libcamera-still -o test.jpg保存的图片默认在当前目录下可以用Python的PIL库或者直接拷贝到电脑上看。如果照片出现偏色大概率是自动白平衡还没有收敛可以加参数强制连续自动白平衡libcamera-still --awb auto -o test.jpg录制视频用libcamera-vid -t 10s -o test.h264 -v这条命令录制10秒H.264编码视频。注意H.264裸流文件不是标准MP4用VLC播放需要右键选择“从URL打开”或者后期封装成MP4。Python调用摄像头是很多项目实际要用的。用libcamera的Python绑定from libcamera import CameraManager, Camera from picamera2 import Picamera2 picam2 Picamera2() camera_config picam2.create_still_configuration() picam2.configure(camera_config) picam2.start() picam2.capture_file(photo.jpg) picam2.stop()picamera2是官方针对新摄像头栈发布的Python库接口比老版的picamera更清晰而且支持流式回调非常适合二次开发。3.4 局域网内视频实时推流摄像头调试通过后最常用的需求就是把视频画面实时传到电脑或手机上。最简单的方案是用GStreamer或者ffmpeg把摄像头画面编码后推到RTSP服务器。我这次用的方案是ffmpeg推到本机RTSP服务客户端用VLC拉流。先安装必要工具sudo apt install -y ffmpeg v4l2loopback-dkms在树莓派上启动RTSP服务可以用mediamtx以前叫rtsp-simple-server下载好对应Linux ARM64版本的可执行文件后直接运行./mediamtx然后在另一个终端启动推流ffmpeg -f libcamera_vid -framerate 30 -c:v libx264 -preset ultrafast -tune zerolatency -b:v 1000k -f rtsp rtsp://192.168.1.100:8554/camera需要注意FFmpeg新版本对libcamera的输入封装名有了变化如果你的FFmpeg版本是5.x以上可以改用ffmpeg -f libcamera_vid -i /base/soc/i2c0mux/i2c-1/1-002c -c:v libx264 -f rtsp rtsp://0.0.0.0:8554/camera这个写法是在部分ARM平台上兼容libcamera视频源的方式。如果上述命令都不可用还有一个兜底方案是用手动方式跑视频采集libcamera-vid --codec yuv420 --width 1280 --height 720 --framerate 30 --inline -o - | ffmpeg -f rawvideo -pix_fmt yuv420p -s 1280x720 -i - -c:v libx264 -f rtsp rtsp://0.0.0.0:8554/camera比较下来我最终用的是libcamera-vid输出管道传输给ffmpeg处理这套流程最稳定。直推RTSP时如果频繁断开可以考虑把帧率从30降到15负载会明显下降。4. 4G模块从识别到拨号上网全记录4.1 模块安装、SIM卡与天线4G模块的硬件安装相对简单M.2模块插进底板上的M.2 B-Key插槽用底板的螺丝固定。插的时候注意模块缺口的位置要和插槽的凸起对应方向搞反了会损坏插针。SIM卡装在底板背面的nano SIM卡座里注意插卡方向。有的卡座是有弹簧机制的插进去之后要往下按一下才能锁住。我遇到过几次因为SIM卡没插到位导致无法识别SIM卡的情况拨号软件报了“no SIM card”的错误排查到最后发现是卡片没压到底。天线安装是我觉得最容易被新手忽略但实际影响最大的一环。4G模块一般有两个天线接口主天线MAIN和分集天线DIV。主天线必须接我用了一根棒状天线信号强度在室内大概-85dBm左右勉强够用。如果信号差分集天线也得接上。有的模块还有GNSS天线接口如果你需要定位功能单独接一根GNSS天线就好。天线的射频连接头是IPEX接口很小装的时候要垂直按压进去然后可以听到“咔哒”一声。千万别用力斜着推不然接口很容易断。4.2 确认系统识别到了4G模块把4G模块、SIM卡、天线都装好后CM4先断电再重新上电。启动成功后先查看USB设备列表lsusb正常会看到类似这样的输出Bus 001 Device 002: ID 2cb7:0104 Fibocom L610 4G modem如果lsusb里找不到设备大概率是M.2插槽接触不良或者模块供电没起来。然后看内核日志sudo dmesg | grep -E qmi|wwan|option|cdcL610默认加载的是option和qmi_wwan驱动。启动完成后系统里会出现一个名叫wwan0的网络接口用ip link查看ip link看到wwan0接口存在说明模块已经被系统识别并进入了QMI网卡模式。这个时候如果系统里还没有ModemManager建议先装一个sudo apt install -y modemmanagerModemManager是Linux下统一管理调制解调器的服务它能把SIM卡状态、信号强度、网络注册状态这些信息都规范化管理起来方便后续用nmcli拨号。用mmcli查看模块状态sudo mmcli -L sudo mmcli -m 0能看到模块型号、IMEI、SIM卡状态、运营商信息等。4.3 AT指令手动拨号与PPP拨号如果你的项目是嵌入式精简系统不想装ModemManager那一大堆东西可以用比较“原始”的AT指令方式拨号。L610模块的串口设备一般是/dev/ttyUSB2这是AT命令端口。先用串口工具进入AT模式我习惯用minicomsudo apt install -y minicom sudo minicom -D /dev/ttyUSB2 -b 115200输入AT回车模块返回OK说明通信正常。查看SIM卡状态ATCPIN?返回CPIN: READY表示SIM卡正常。如果返回CME ERROR: SIM not inserted或者CPIN: NOT INSERTED就检查SIM卡插接。查询信号强度ATCSQ返回值格式是CSQ: 19,99第一个数字越大信号越好。19对应约-79dBm属于比较理想的水平。第二个数字99表示不适用如果第一位接近99就是无信号。设置APN并拨号ATCGDCONT1,IP,cmnet ATD*99#第一条命令是把PDP上下文设置好第二条是发起数据呼叫。国内移动的APN是cmnet联通是3gnet电信是ctnet根据自己的SIM卡运营商来写。AT指令方式最难的是拨号成功后要自己处理PPP协议。传统做法是用pppdsudo pppd call gprs其中/etc/ppp/peers/gprs文件里配置好串口、波特率和拨号参数。这是个很成熟的方案但现在有更好的方式下面说。4.4 用ModemManagerNetworkManager管理蜂窝连接在我的实践里技术选型是ModemManager NetworkManager。这套组合的优点是统一配置、操作简单、状态可视化而且对断电重启后的自动重连支持非常友好。首先确认两个服务都在运行systemctl status ModemManager systemctl status NetworkManager然后启用wwan0接口sudo nmcli radio wwan on查看ModemManager是否枚举出蜂窝连接sudo mmcli -L返回类似/org/freedesktop/ModemManager1/Modem/0的路径。接下来创建并激活蜂窝连接sudo nmcli connection add type gsm ifname wwan0 con-name lte-apn apn cmnet sudo nmcli connection up lte-apn这里ifname wwan0要和ip link里看到的接口保持一致。如果APN和PIN码有特殊要求还可以在add命令里追加参数sudo nmcli connection modify lte-apn gsm.pin 1234连接激活之后用nmcli connection show lte-apn查看IP地址。如果看到IPv4地址已经从运营商那边获取到了通常是一个10.x.x.x或者100.x.x.x的私网地址说明拨号已经成功。4.5 配置路由与DNS拨号成功后最重要的一个环节是让流量真正走4G接口出去。检查路由表ip route show默认会多出一条默认路由走的是wwan0。但如果你同时连着以太网或者WiFi系统可能出现路由优先级问题默认流量仍然走以太网。我项目里需要同时用4G和有线连接我的做法是把有线链接设成低优先级甚至直接断开不用的后端或者按目标网段分流。如果你的设备同时有以太网和4G且希望主用4G可以给wwan0的默认路由加一个metricsudo ip route add default dev wwan0 metric 100数字越小优先级越高只要以太网的default路由metric大于1004G就会优先生效。DNS配置也要检查。NetworkManager在激活gsm连接后会自动下发运营商的DNS服务器地址但如果网络环境特殊也可以手动指定比如改全局配置/etc/resolv.conf或者用nmtui设置对应连接的DNS服务器。测试联网ping -I wwan0 -c 3 223.5.5.5 curl --interface wwan0 -s https://api.ipify.orgcurl返回的IP就是你4G线路出去的出口IP。如果这个测试通过了基本可以宣告你的CM4已经是一台“装上SIM卡就能上网”的物联网核心设备。4.6 信号质量检查与自动重连策略产品级设备不能靠手动拨号养活得能自己重连、自己恢复。这一步我用的是脚本systemd服务方案。信号查询可以用mmclisudo mmcli -m 0 --commandATCSQ或者直接看Modem状态sudo mmcli -m 0里面有Signal quality、Access tech这些字段。我写了一个异常检测脚本每分钟检查一次wwan0接口的IP是否存在如果连续3次没有IP就重置4G模块并重新激活连接#!/bin/bash # /usr/local/bin/network_watchdog.sh INTERFACEwwan0 CONN_NAMElte-apn COUNTER0 while true do IP$(ip -4 addr show $INTERFACE | grep -oP (?inet\s)\d(\.\d){3}) if [ -z $IP ] then COUNTER$((COUNTER1)) if [ $COUNTER -ge 3 ] then systemctl restart ModemManager nmcli connection up $CONN_NAME COUNTER0 fi else COUNTER0 fi sleep 60 done加上systemd服务让它后台运行[Unit] Description4G network watchdog AfterNetworkManager.service [Service] ExecStart/usr/local/bin/network_watchdog.sh Restartalways [Install] WantedBymulti-user.target这个方案跑了大半个月遇到信号波动、SIM卡偶发拒网等场景都能自动恢复比单纯依赖NetworkManager自动重连可靠得多。5. 常见问题与排查技巧实录5.1 eMMC烧录失败速查症状1rpiboot提示Failed to connect to device。通常是因为BOOT跳线帽没设对或者Micro-USB线插到了别的USB口上。部分粗线的Micro-USB线只能充电不能传数据直接换一根短一点的、确定支持数据传输的线。症状2写入镜像到一半提示I/O错误。eMMC此时可能已经被之前多次擦写折腾出坏块但这概率不高。更常见的是USB供电不稳电脑端USB口供电不足换一个直连主板的USB接口不要用USB Hub。症状3烧录完成后拔电重新上电显示器没有画面。检查config.txt里是否配置了HDMI输出无桌面系统默认是串口控制台接显示器本来就不该有画面此时直接用SSH连上来验证系统是否起来了。5.2 CSI摄像头不识别怎么办摄像头排查顺序非常重要很多人一上来就改配置其实问题往往出在物理接触上。我总结的五步排查法第一步拔下排线重插这一步能解决一半以上的问题第二步用dmesg确认I2C总线上有没有传感器回应第三步检查config.txt里有没有明显错误的dtoverlay配置有过就删掉第四步确认摄像头接的是CSI-0还是CSI-1配置里对应的接口必须一致第五步换一根排线排线弯折次数多了内部容易断裂这是隐形故障。还要注意OV5647模组虽然引脚兼容IMX219但不同厂家的模组在原厂驱动支持上有差异。如果你买的摄像头是“兼容版”而不是树莓派官方版驱动的回调地址可能不一样需要自己查资料确认传感器ID。5.3 4G模块不识别或联网失败lsusb看不到模块优先检查M.2插入方向、SIM卡是否安装、底板供电功率够不够。一个容易忽略的细节是很多4G模块上电初期的功耗非常高峰值电流能到2A如果底板供电不足模块会反复重启USB枚举自然不稳定。拨号成功但分配不到IP大概率是APN配置错了。比如你用的是物联网卡APN可能不是常规的cmnet而是一串自定义字符串这个得找运营商确认。我因为APN写错排查了整整一个晚上最后发现是物联网卡的APN和普通SIM卡不一样。能PING通IP但DNS解析失败检查/etc/resolv.conf如果被别的配置覆盖了用nmcli connection modify lte-apn ipv4.dns 223.5.5.5直接给连接指定DNS。信号强度显示很弱天线位置决定一切。棒状天线要垂直于地面别贴着金属壳子放。如果信号仍然差先接上天线延长线把天线挪到窗边试一下。如果模块本身没问题这个操作通常会有明显改善。模块温度过高导致断流4G模块本身发热不小如果底板散热不好长时间满载传输时会热保护掉线。给模块贴上散热片或者加强机箱风道比改什么软件配置都实在。5.4 供电与散热的血泪教训这个项目的供电问题非常隐蔽。CM4整机功耗本身不算大但加上4G模块、摄像头、WiFi整机峰值功耗能到7瓦左右。如果用一个5V/2A的普通手机充电器供电开机瞬间可能因为电流不足而反复重启而且这种现象是随机的有时候能跑几个小时才重启排查起来非常恶心。我最后是用12V/2A的DC电源接微雪底板底板自带DC-DC降压电路把电压稳定地分配到各个模块。这一步把整机稳定性提升了一大截。散热方面CM4核心板我加了一个官方主动散热套件除了顶部散热片还加了一个小风扇。平时待机温度大概45度满载跑视频编码时能到65度虽然不至于过热降频但温度越低对eMMC寿命越友好。风扇噪音在室内完全可接受如果对噪音敏感可以买支持PWM调速的版本用GPIO控制转速。5.5 其他几个我踩过的坑第一次插入摄像头后发现摄像头的排线座被旁边的散热片挡住了。微雪底板布局紧凑有些元器件离得很近装散热片之前必须先规划好摄像头排线和4G天线的走线路径否则后期返工很麻烦。搞混了两种RTSP推流工具。老教程里推荐用rtsp-simple-server新版本改名叫mediamtx配置文件的格式也有变化。如果你下载的是老版本教程的配置文件新程序可能直接拒绝加载。用了树莓派Imager刷写但烧录后系统无法启动。检查镜像是32位还是64位、以及对应的系统版本。CM4用Raspberry Pi OS Lite 64位是没问题的但如果你用了老旧的第三方精简镜像驱动缺失、启动失败都很正常。某天早上发现摄像头不工作了检查了半小时结果是排线从座子里松出来了一点点。所以设备长期震动或者温度变化比较大的环境下建议用胶带在排线上做固定防脱处理。6. 最后再分享一点心得整套流程走下来我最想对新手说的是树莓派CM4这种核心板项目80%的难度不在软件配置而在硬件基础工作是否扎实——电源给足、排线插牢、天线摆好位置这三点做到了后面就顺藤摸瓜的事。真正会反复折腾你的反而是那些看起来不起眼的接触不良和供电抖动所以别嫌麻烦该做的检查一步都不能省。如果你想在这个基础上继续扩展还有几个非常有价值的方向一是接入MQTT协议把采集到的数据直接发送到自建的MQTT Broker二是用Python写一个多线程任务一边采集摄像头图像一边走4G上传到云服务器做轻量AI识别三是把这套设备做成“移动节点”配上电池和GPS模块变成一个真正能移动的室外数据采集器。我自己接下来准备做的事情是把这个CM4节点放到老家的鱼塘边接一个温湿度传感器和摄像头靠4G网络定时上报水质和环境数据。树莓派这类板卡真正吸引人的地方不是参数多好看而是它能用极低的成本把一个“远程在线”的想法变成现实。这大概就是为什么这么多年过去我还会时不时掏出一块CM4来折腾——它永远能接住你脑子里冒出来的那些奇奇怪怪的点子。