上回把硬件都准备好了,这篇我们来搭建一下树莓派的系统,并安装一些必要的工具软件。
树莓派上的操作系统选择很多,我们这里以主电脑为Win10系统,官方最新的2020.8.20的版本为例。
先在官网下载烧录软件 Raspberry Pi Imager,然后下载系统的镜像文件带推荐的软件。
//www.raspberrypi.org/downloads/https:
安装 Raspberry Pi Imager后,插入MircoSD,在 Operating System --> Use custom 选择刚才下载好的镜像文件,然后在 CHOOSE SD CARD 中选择对应的 SD 卡,最后点击 WRITE 进行烧录。
如果没有配置键盘和屏幕,那第一次启动OS前需要先新建两个文件来配置wifi连接和开启ssh。
在刚才烧录完成的 MircoSD 中 boot 分区的根目录下,新建一个空白文件,并重命名为ssh,全部小写且无扩展名。
同样在根目录下,新建 wpa_supplicant.conf 文件,内容如下:
country=CN
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="SSID"
psk="PASSWORD"
key_mgmt=WPA-PSK
priority=1
}
其中,
ssid 为 Wifi网络的ssid;
psk 为连接密码;
key_mgmt为加密方式:
WPA-PSK = WPA 预共享密匙 (这需要‘psk’字段)
WPA-EAP = WPA 使用 EAP 认证
EEE8021X =IEEE 802.1X 使用EAP 认证并动态生成密匙
NONE = 没有使用 WPA ;可以使用明码密匙或者静态WEP
WPA-PSK-SHA256 = 类似 WPA-PSK 但是使用增强型的SHA256-based加密算法
WPA-EAP-SHA256 = 类似 WPA-EAP 但是使用增强型的SHA256-based加密算法
如果没有设置,将会模式设置为 WPA-PSK WPA-EAP
priority 为优先级,数字越大代表优先级越高;
根据自己路由配置的情况,修改对应的 ssid , psk 和 key_mgmt 值。
以上两个文件,开机后 wpa_supplicant.conf 文件会自动转移到 /etc/wpa_supplicant 目录下,ssh文件会转化为开启ssh服务的指令后被删除。所以如果要更改配置,下一次要重新添加这个文件。
现在可以拔出MircoSD卡,插入树莓派,然后正常上电开机了。
Tip:
注意观察树莓派上的两个指示灯,红色代表电源,绿色一般代表SD读写。正常情况下,红灯常亮,绿色每隔几秒闪一次,表示网络连接成功;而绿灯有规律的闪烁,表示SD没有插好或者是无效的SD卡。
有显示器的话,可以直接用 ifconfig 来获取 IP 地址;
若没有显示器的话,那可以用局域网扫描工具 Advanced IP Scanner 来获取对应的信息:
有了 IP 地址,那就可以用ssh登录了。输入命令
ssh pi@192.168.1.62
然后输入默认密码 raspberry,就能正常登录了。
在登录的ssh连接中,输入命令
sudo raspi-config
选择 1 Change User Password,修改当前用户密码;
选择 5 Interfacing Options --> P1 Camera 启用摄像头;
选择 5 Interfacing Options --> P2 SSH 启用SSH(已经开启);
选择 5 Interfacing Options --> P3 VNC 启用VNC;
选择 7 Advanced Option --> A1 Expand Filesystem 扩展可用空间;
选择 7 Advanced Option --> A5 Resolution 修改屏幕分辨率。
安装 VNC-Viewer-6.20.113-Windows,新建连接,填入树莓派的IP地址,输入用户名 pi,密码 raspberry登录。
Tip:
VNC 连接后显示 “Cannot currently show the desktop” 的话,重新修改一个屏幕分辨率后重启就行。
每次树莓派上电后,由路由器 DHCP 分配的 IP 地址有时候会变化,这里我们设置固定地址,方便下次连接。
用 VNC 连接后,就能看见树莓派的桌面了,在屏幕右上角 Wifi 图标上右键,选择 Wireless & Wired Network Settings。
Configure 项选择 SSID,仅绑定指定的 Wifi 连接,填入对应的网段:
IPv4 地址:192.168.1.101
Router:192.168.1.1
DNS Servers: 192.168.1.1
修改树莓派的 IP 地址后,重启树莓派,就可以用PuTTY 通过 192.168.1.101 来连接了。
PuTTY 不光有ssh,还自带了 pscp 和 psftp 方便在主电脑和树莓派之间传输文件。
# 复制整个目录
pscp -r d:\raspi pi@192.168.1.101:/home/pi
# 复制单个文件
pscp d:\raspi\test.txt pi@192.168.1.101:/home/pi
# 复制整个目录
pscp -r pi@192.168.1.101:/home/pi d:\raspi
# 复制单个文件
pscp pi@192.168.1.101:/home/pi/test.txt d:\raspi
详细参数:
用法: pscp [选项] [用户名@]主机:源 目标
pscp [选项] 源 [其他源...] [用户名@]主机:目标
pscp [选项] -ls [用户名@]主机:指定文件
选项:
-V 显示版本信息后退出
-pgpfp 显示 PGP 密钥指纹后退出
-p 保留文件属性
-q 安静模式,不显示状态信息
-r 递归拷贝目录
-v 显示详细信息
-load 会话名 载入保存的会话信息
-P 端口 连接指定的端口
-l 用户名 使用指定的用户名连接
-pw 密码 使用指定的密码登录
-1 -2 强制使用 SSH 协议版本
-4 -6 强制使用 IPv4 或 IPv6 版本
-C 允许压缩
-i 密钥 认证使用的密钥文件
-noagent 禁用 Pageant 认证代理
-agent 启用 Pageant 认证代理
-hostkey aa:bb:cc:...
手动指定主机密钥(可能重复)
-batch 禁止所有交互提示
-proxycmd 命令
使用 '命令' 作为本地代理
-unsafe 允许服务端通配符(危险操作)
-sftp 强制使用 SFTP 协议
-scp 强制使用 SCP 协议
-sshlog 文件
-sshrawlog 文件 记录协议详细日志到指定文件
psftp与pscp类似,速度更快些,但没有进度条显示。
psftp 192.168.1.101
# 输入 pi 和 raspberry
# 上传文件
put d:\raspi\test.txt
# 下载文件
get /home/pi/test.txt
常用命令:
cd 切换目录。
ls 查看目录文件。
get [fileName]下载文件到当前本地目录 。
get -r [dir] 递归下载远程某个目录下的所有文件到当前本地目录即下载文件夹。
put [fileName] 长传文件到远程当前目录。
put -r [dir] 递归上传本地某个文件夹的所有文件到远程目标目录即上传文件夹。
delete [fileName/dir] 删除某个文件或者文件夹
上面两种都是命令行方式的,也可以安装一个WinSCP,建立连接以后,用类似文件管理器的方式,更方便的进行文件传输。
由于众所周知的原因,国内无法访问树莓派的更新服务器,所以可以换国内的镜像站作为更新点。
sudo nano /etc/apt/sources.list
注释第一行,然后 添加清华源,文件内容如下:
#deb http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
# Uncomment line below then 'apt-get update' to enable 'apt-get source'
#deb-src http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ stretch main contrib non-free rpi
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ stretch main contrib non-free rpi
按 ctrl + o 写入,再按 ctrl + x 退出。
同样给 pip 更换阿里源和豆瓣源。
sudo mkdir ~/.pip
ls .pip
sudo nano pip.conf
将以下内容写入配置文件:
[global]
timeout = 10
index-url = http://mirrors.aliyun.com/pypi/simple/
extra-index-url= http://pypi.douban.com/simple/
[install]
trusted-host=
mirrors.aliyun.com
pypi.douban.com
国内镜像采用异步更新的方式更新,有时候某些第三方库文件还是不能访问,特别是 github 上的 raw 资源,用 VPN 的话会更方便些。这里以我用的expressVPN为例,其他的 VPN 也雷同。
cd Downloads/
sudo dpkg -i expressVPN_xv_2.6.3.3-1_armhf.deb
expressvpn activate
expressvpn connect # 连接VPN
expressvpn list # 查看服务器可用列表
expressvpn status # 查看连接状态
expressvpn disconnect # 断开链接
解决连接问题后,就可以进行系统更新了。
sudo apt-get update
sudo apt-get upgrade
pip3 install -U pip
# 安装中文字库
sudo apt-get install fonts-wqy-zenhei
# 安装中文输入法fcitx及Google拼音输入法
sudo apt-get install fcitx fcitx-googlepinyin fcitx-module-cloudpinyin fcitx-sunpinyin
在 Windows 下可以直接读取树莓派MircoSD里的文件。
VNC需要在同一个局域网中才能远程连接,安装 Teamviewer 可以在任何地方通过 Internet 来访问到树莓派。特别在AIoT的应用中,通过4G网络来访问设备。
cd Downloads/
sudo dpkg -i teamviewer-host_15.9.4_armhf.deb
有出错缺失 teamviewer-host 的依赖,修复一下
sudo apt-get -f install
sudo apt-get install gdebi
sudo gdebi teamviewer-host_armhf.deb
接受协议,在桌面的右上角就能看见 teamviewer 的图标了。点击轻松访问,然后登陆账号后,就能远程连接了。
除了树莓派官网的烧录工具外,也可以使用 Win32DiskImager 来进行镜像写入,小巧方便绿色,无需安装。
这个软件不光可以进行写入,还能进行镜像导出,这样就便于我们保存多个开发环境,特别在之后配置 OpenCV 和 PyTorch 的过程很繁琐,可以避免每次都重做这些系统和配置。
Win32DiskImager 备份出的文件大小取决于MircoSD的大小,所以推荐在 Linux系统下用 dd 命令进行备份后,再对镜像进行压缩。
用 lsblk 查看MircoSD的盘符,一般为 sdb。
lsblk
用 dd 命令复制 SD 卡的数据保存为 img 镜像文件。
sudo dd if=/dev/sdb of=./rpi_backup.img bs=8M
使用 PiShrink 缩小镜像尺寸
git clone https://github.com/Drewsif/PiShrink.git
cd PiShrink
chmod +x pishrink.sh
sudo mv pishrink.sh /usr/local/bin
sudo pishrink.sh -s rpi_backup.img new_rpi_backup.img
更多参数如下:
Usage: $0 [-adhrspvzZ] imagefile.img [newimagefile.img]
-s Don't expand filesystem when image is booted the first time
-v Be verbose
-r Use advanced filesystem repair option if the normal one fails
-z Compress image after shrinking with gzip
-Z Compress image after shrinking with xz
-a Compress image in parallel using multiple cores
-p Remove logs, apt archives, dhcp leases and ssh hostkeys
-d Write debug messages in a debug log file
Tip:
若遇到以下错误:
**pishrink.sh: ERROR occured in line 275: resize2fs failed
mount: /tmp/tmp.Sj9Z4EXlzV: wrong fs type, bad option, bad superblock on /dev/loop0, missing codepage or helper program, or other error.
mv: 无法获取'/tmp/tmp.Sj9Z4EXlzV/etc/rc.local.bak' 的文件状态(stat): 没有那个文件或目录
umount: /tmp/tmp.Sj9Z4EXlzV: 未挂载.
losetup: /dev/loop0:断开失败: 没有那个设备或地址****设置环境变量,可修复bug:
set var LANG=en_US.UTF-8 could fix it.**
用 Win32DiskImager(备份文件大速度快),还是 dd 命令后压缩(时间长文件小),还有一种方式就是直接在树莓派里做 SD 卡克隆。还记得硬件篇里推荐多买几张 MircoSD 卡吧,这里就有用了。
# 查看磁盘空间和 SD卡挂载信息
df -h
空白卡以 usb 读卡器方式插入树莓派,然后在主菜单里 --> 附件 --> SD Card Copier,源选择 /dev/mmcblk0,目标盘选择 /dev/sda,点击 Start 开始复制。
插入另一个树莓派直接可用,插 2 个 usb 读卡器可以相互还原镜像。
万向节即万向接头,英文名称universal joint,是实现变角度动力传递的机件,用于需要改变传动轴线方向的位置
深入地了解一下 I2C 引脚与开发库的使用,以及调整 PiOLED 显示内容的方法。
这篇使用ngrok做内网穿透,让我们能通过公网访问树莓派。
2010 年以来, 由于大数据产业的发展, 数据量呈现爆炸性增长态势,而传统的计算架构又无法支撑深度学习的大规模并行计算需求,于是研究界对 AI 芯片进行了新一轮的技术研发与应用研究。AI 芯片是人工智能时代的技术核心之一,决定了平台的基础架构和发展生态。
在本文中,我将在 Wio 终端上制作一个带有内置麦克风的声控机器人车,以通过 TinyML 识别行驶、停止和背景噪音。
本文会介绍如何使用TensorFlow Lite构建一个本地语音识别系统,内容包括语音前端处理、语音识别模型的训练以及如何将其转换为TensorFlow Lite格式并部署到ESP32。
Jetbot 需要与很多周边设备互动,并且使用很多深度学习框架以及 Jupyter 交互界面进行操作,因此需要安装与调试的内容很多。