- Published on
树莓派折腾日记
- Authors

- Name
- Lin Zaizai
树莓派折腾日记
搞了台树莓派3b+来玩玩linux
1. 硬件结构(以pi3为例)

2. 修改root密码
sudo passwd
3. 连接网络
先找到无线网卡的名字
ls /sys/class/net
输出的名字中wl开头的就是无线网卡,en开头的是有线网卡
然后编辑配置文件
$ cd /etc/netplan/
$ ls
50-cloud-init.yaml
$ sudo vim /etc/netplan/50-cloud-init.yaml
添加以下内容:
wifis:
wlan0:
dhcp4: true
access-points:
"你的wifi名称":
password: "你的密码"
其中 wlan0 为无线网卡名称,dhcp4 表示开启自动IP地址分配,在 access-points 下可以设置多组 ssid(即通常所说的“Wi-Fi名称”)与密码。
更新后,配置文件内容大致如下,ethernets是以太网卡:
network:
version: 2
renderer: NetworkManager
ethernets:
eth0:
dhcp4: true
optional: true
wifis:
wlan0:
dhcp4: true
access-points:
"wifi_name1":
password: "mypassword"
"666":
password: "66666666"
检查配置文件
sudo netplan try # 检查配置文件中是否有语法错误、尝试用新的配置
应用配置文件
sudo netplan generate # 生成 renderers 所需的配置文件
sudo netplan apply # 应用 netplan 新配置,将自动重启 network-manager 使修改生效
附录a:网卡设备名称简析
在使用 ifconfig -a 或 ip a 列出本机所有网卡设备名称时,可能看到若干名称,其含义简单分析如下:
lo表示localen表示ethernet以太网wl表示wlan,即 Wireless Local Area Network 无线局域网- 后面的
p2s0等表示 PCIe 接口的物理位置(bus, slot),总线与插槽
例如, wlp4s0 表示一张位于 PCIe 总线4 插槽0 的无线网卡。
附录b:树莓派连接无线网络
在使用新安装 Ubuntu Server 系统的树莓派时,可能遇到手头没有显示器、也没有有线网络连接的情况。这时本可以通过电脑 SSH 连接至树莓派进行远程开发,但前提是树莓派必须已经接入无线局域网络;而为了让树莓派接入网络,又需要用 SSH 连接后才能修改 Netplan 配置文件,陷入僵局。解决问题的办法是,在树莓派系统启动之前就完成对网络的配置:通过修改安装着树莓派的操作系统的存储卡中的特定文件即可实现。
将存储卡通过读卡器连接到电脑,可以看到 system-boot 和 writable 两个分区,打开 system-boot 分区,搜索名为 network-config 的文件:

使用文本编辑工具打开该文件:
# This file contains a netplan-compatible configuration which cloud-init will
# apply on first-boot (note: it will *not* update the config after the first
# boot). Please refer to the cloud-init documentation and the netplan reference
# for full details:
#
# https://netplan.io/reference
# https://cloudinit.readthedocs.io/en/latest/topics/network-config.html
# https://cloudinit.readthedocs.io/en/latest/topics/network-config-format-v2.html
# ...
# Some additional examples are commented out below
network:
version: 2
ethernets:
eth0:
dhcp4: true
optional: true
# wifis:
# wlan0:
# dhcp4: true
# optional: true
# access-points:
# myhomewifi:
# password: "S3kr1t"
# myworkwifi:
# password: "correct battery horse staple"
# workssid:
# auth:
# key-management: eap
# method: peap
# identity: "me@example.com"
# password: "passw0rd"
# ca-certificate: /etc/my_ca.pem
可以看到,该文件的格式与语法正是 Netplan 形式,用于在首次启动系统时初始化 Netplan 配置。参考原本注释掉的示例和本文正文,编辑该配置文件,添加 Wi-Fi 信息并保存。
完成配置文件的编辑后,将存储卡插回到树莓派中,通电开机,即会自动连接至无线网络。进入路由器后台管理,即可看到设备名为 ubuntu 的设备,记住其局域网 IP 地址,在电脑上使用 ssh 连接即可:
ssh ubuntu@192.168.3.24
如果没有路由器的管理员权限,无法进入后台查看树莓派的 IP,可以在电脑上尝试使用 Angry IP Scanner 等 IP 扫描工具寻找。
4. 查看ip
想查看树莓派是否连接上了网络
ipconfig -a
但是出现command not found
sudo apt install net-tools
后来发现网络似乎没连通,调整网络后安装完毕

5. 连接树莓派
由于存储卡烧坏了,重新安装了系统,导致ssh公钥更换了,出现了以下报错
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ED25519 key sent by the remote host is
SHA256:78lBQ3vMowOD+RUYFI/NX9hwDJMiiNLG02H/7JcJ1FE.
Please contact your system administrator.
Add correct host key in C:\\Users\\\346\262\210\345\206\215\345\256\211/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in C:\\Users\\\346\262\210\345\206\215\345\256\211/.ssh/known_hosts:18
Host key for 192.168.2.104 has changed and you have requested strict checking.
Host key verification failed.
通过删除本机上的公钥重新生成公钥即可
ssh-keygen -R 192.168.2.104(树莓派的ip)
6. 设置开机自执行命令
创建命令sh文件
vim auto_boot_run.sh
通过设置以下命令
crontab -e
在最后一行添加
@reboot /path/to/command
参考资料:
7. pip报错解决
如果出现了以下pip报错Could not fetch URL https://pypi.org/simple/ultralytics/: There was a problem confirming the ssl certificate:,则只需要只当第三方源即可
pip install ultralytics(包名) -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
同类型的第三方源还有:
1)http://mirrors.aliyun.com/pypi/simple/ 阿里云
2)https://pypi.mirrors.ustc.edu.cn/simple/ 中国科技大学
3)http://pypi.douban.com/simple/ 豆瓣
4)https://pypi.tuna.tsinghua.edu.cn/simple/ 清华大学
5)http://pypi.mirrors.ustc.edu.cn/simple/ 中国科学技术大学
只要连带着把--tursted-host一起改了就行
8. 树莓派摄像头调用(通过mobaxtrem的x11服务器转发视频流)
要使用 v4l2-ctl 工具配合 X11 服务器从 USB 摄像头截取图像并传输到本机,你可以按照以下步骤操作:
1. 安装必要的软件包
首先,确保你已经安装了 v4l-utils,这是一个包含 v4l2-ctl 工具的软件包,可以用来控制和配置 V4L2 (Video4Linux2) 设备。
sudo apt update
sudo apt install v4l-utils
2. 检查 USB 摄像头
确保你的 USB 摄像头已正确连接,并可以被系统识别。你可以使用以下命令查看系统中的视频设备:
v4l2-ctl --list-devices
如果设备正常,系统应该会列出类似如下的设备信息:
USB2.0 Camera: USB2.0 Camera (usb-0000:00:14.0-4):
/dev/video0
/dev/video0 是你的 USB 摄像头设备节点。
3. 获取摄像头支持的格式
你可以用 v4l2-ctl 来查看摄像头支持的格式和分辨率:
v4l2-ctl --device=/dev/video0 --list-formats-ext
这将显示你的摄像头支持的视频格式和分辨率。例如,你可能会看到类似的输出:
ioctl: VIDIOC_ENUM_FMT
Type: Video Capture
[0]: 'YUYV' (YUYV 4:2:2)
[1]: 'MJPG' (Motion-JPEG)
[2]: 'H264' (H.264)
4. 抓取图像并保存为文件
使用 v4l2-ctl 截取图像并保存为文件,例如 JPG 格式,参考资料:
v4l2-ctl --device /dev/video0 --set-fmt-video=width=1920,height=1080,pixelformat=MJPG --stream-mmap --stream-to=./output_1920.jpg --stream-count=1
#用ffmpeg拍摄图像
ffmpeg -f v4l2 -video_size 1280x1024 -i /dev/video1 -frames:v 1 output_image.png
#用ffmpeg录制视频
ffmpeg -f v4l2 -framerate 30 -video_size 640x480 -i /dev/video1 output_video.mp4
这会抓取当前帧并将其保存为 output_image.png。你可以替换文件名和路径以保存到你想要的位置。
5. 显示图像(通过 X11 显示)
为了将摄像头捕获的图像传输到本地 X11 显示服务器,你可以使用工具如 feh 或 eog(Eye of GNOME)来显示图片。
首先,安装 feh 或 eog:
sudo apt install feh
然后用 feh 显示刚刚捕获的图片:
feh output_image.png
或者使用 eog 来显示图片:
eog output_image.png
6. 实时显示视频流(可选)
如果你希望实时查看摄像头的视频流,你可以使用 v4l2-ctl 结合 ffmpeg 来进行视频流的显示。例如:
ffmpeg -f v4l2 -framerate 30 -video_size 640x480 -i /dev/video0 -f x11grab -r 30 -s 640x480 :0.0+100,100 output.mp4
这条命令会将摄像头的实时视频流录制为 output.mp4,并显示到 X11 屏幕上。
7. 使用 MJPEG 流或其他格式
如果你的摄像头支持 MJPEG 等流媒体格式,你也可以使用 mjpg-streamer 或 vlc 来创建流并通过浏览器或 X11 客户端查看。安装 mjpg-streamer 并启动一个 HTTP 流:
sudo apt install mjpg-streamer
mjpg_streamer -i "/usr/lib/mjpg-streamer/input_uvc.so -d /dev/video0 -r 640x480 -f 30" -o "/usr/lib/mjpg-streamer/output_http.so -w /usr/share/mjpg-streamer/www -p 8080"
然后通过浏览器访问 http://localhost:8080 来查看摄像头的视频流。
8. 在 X11 中显示实时视频流(帧率低)
如果你想直接在 X11 窗口中显示视频流,可以结合 mplayer 或 vlc:
mplayer tv:// -tv driver=v4l2:device=/dev/video0
9. 使用ffmpeg来推流到本机(帧率较高)
在远程主机运行
将摄像头视频流推送到本地网络:
ffmpeg -f v4l2 -framerate 30 -video_size 640x480 -i /dev/video0 -f mpegts udp://<local-ip>:1234
<local-ip>:替换为本机的 IP 地址。1234:可以选择其他未占用的端口。
在本地主机运行
在本机使用 ffplay 接收并显示视频流:
ffplay udp://0.0.0.0:1234