本系列博客计划完成树莓派4B对RC四驱车的改装控制,在树莓派4B上安装opencv,尝试通过对红色色块的追踪实现小车的前进后退。涉及的内容比较多。比如树莓派4B对嘎斯四驱车波箱电机的控制(L298N)、树莓派4B对四驱车舵机的控制(PCA9685)、树莓派上opencv的安装、树莓派上Flask的安装、Tensorflow安装。。恩。都是扫平进军树莓派的拦路虎系列小白教程。
博主是个徜徉于windows海洋的linux小白(现在很喜欢linux),2013在最初接触树莓派的时候并不知道任何关于linux的前世今生。所以在众多的linux门派斗争之外安安静静的选择了官方推荐的Rasbian OS。入门书籍就是这本著名的“爱上XXX”系列。
但是翻译的延时,软硬件更新的迅速在本就一窍不通的艰难入门之旅中平添了极多的障碍。走走停停。放弃、捡起来。每每遇到linux大神都无法解决我这种凡人的各种困惑。他们总是get不到我白到什么程度。提供的帮助都是零零散散,对于系统入门并没有特别友好。直到遇到了思扬和小僵尸两个人,才总算一只脚踏进了linux的门儿。到今天终于可以把之前遇到的坑稍微添一添。哈哈哈。写一篇我觉得真的可以白到极点的入门博客。希望可以帮助想尝试树莓派的朋友少走些弯路。当然因为个人能力有限,可能存在很多不足和问题,欢迎拍砖、指正。
树莓派4B(带散热片) 4G*1
树莓派开关电源线 *1
16GmicroSD卡 *1 (8G、32G我都试了没啥问题。)
树莓派4B专用电源(!!5V3A)*1
树莓派外壳 *1
( 树莓派外壳:因为后续要跟小车以及摄像头、电机和舵机对接。s市面上现有的壳体的接口大多不方便。下面图里所示的红白壳基本上只用了下面红色的部分。上面就是裸奔状态。风扇也没加。散热片还是需要的。)
《2019年树莓派microSD卡测评》一篇特别详细的国外测评报告,指出SamsungEVO plus的性能表现突出性价比最高。本教程在最初测试的时候使用的是SanDisk16G红卡。写博客时截图用的Netac32G(朗科)。
Raspberry Pi microSD card performance comparison - 2019
本实验选择的是闪迪的16G红卡
官方SD卡容量介绍
DOCUMENTATION > INSTALLATION > SD-CARDS
如果以NOOBS的方式安装桌面带软件版本:>=16GB
Raspberry Pi OS桌面带软件版本:>=8GB
Raspberry Pi OS Lite版本:>=4GB
注意:只有Raspberry Pi 3A+,3B+可以启动256GB以上的SD卡。
因为大于32G的SD卡是SDXC卡,需要用exFAT文件系统来进行格式化。所以官方的SD格式化工具会默认将大于等于64G的SD卡格式化微exFAT格式。但是树莓派的bootloader只能在FAT16或者FAT32系统上启动。所以你需要使用>=64G的卡时,需要将盘重新格式化为FAT32格式。(以上文字翻译自官方文档)
建议初学者最快开始进入学习的方式是买树莓派时要求店家写好系统在SD卡里。这样能让最初的热情和动力留在比较耗神的下一节“Raspberry Pi OS生存篇”,哈哈哈哈。
Raspberry Pi OS的安装有两种方式:
下载etcher镜像烧写工具
etcher官方下载地址
如下图所示,点击绿色按钮进行下载。
将img文件拖拽到相应位置,选择sd卡所在的盘符,点击"FLASH"
开始进行下载。
下载exe安装包进行安装
点击“ok”后,成功显示出树莓派桌面。可以进行操作了。之后就不用为树莓派连接额外的显示器了
如无法显示参见下面的解决办法:
初次VNC登录树莓派提示“cannot currently show the desktop”问题的解决
这种情况没有键盘。所以无法在树莓派端进行Wi-Fi账号密码的输入工作。需要在SD卡上进行配置。
打开刚刚烧写好镜像SD卡,用记事本新建一个名为wpa_supplicant.conf
的文件如下图所示。
打开这个文件输入下列代码,这个操作可以保证你的树莓派通电后直接连上网络,在电脑端通过SSH直接连接树莓派。无需额外的显示器、键盘以及鼠标。
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
network={
ssid=“你的WIFI名”
psk=“WIFI密码”
}
将SD卡插回树莓派,开启电源。树莓派连接上网络。
打开树莓派端的SSH和VNC(此时树莓派连接有鼠标和HDMI显示设备)。
点击“ok”后,成功显示出树莓派桌面。可以进行操作了。之后就不用为树莓派连接额外的显示器了
如无法显示参见下面的解决办法:
初次VNC登录树莓派提示“cannot currently show the desktop”问题的解决
这是最最可怜的情况。没有显示器(电视也没有,,,)、没有单独的键盘和鼠标。
打开刚刚烧写好镜像SD卡,用记事本新建一个名为wpa_supplicant.conf
的文件如下图所示。
打开这个文件输入下列代码,这个操作可以保证你的树莓派通电后直接连上网络,在电脑端通过SSH直接连接树莓派。无需额外的显示器、键盘以及鼠标。
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
network={
ssid=“你的WIFI名”
psk=“WIFI密码”
}
因为树莓派默认SSH功能默认是关闭的,所以还需要在SD卡根目录下再添加一个名为ssh
的空文件。注意没有任何的扩展名。
将已经写入了Wi-Fi账号和密码并开启了ssh的SD卡插入树莓派内通电。
arp -a
实现,对比树莓派接入Wi-Fi前后的区别来识别出设备。192.168.3.1
所以搜索范围就是192.168.3.1-192.168.3.255
。这是因为ip地址由32位二进制数表示的。一共分为四个部分。每个部分是8位。2的8次方是256。一般从0开始数所以最大为255.而0这个数字是作为保留地址有自己特殊功能(广播)不做分配使用。所以就是1-255
。如果你的路由器登录地址是192.168.1.1
那么红框的范围就是192.168.1.1-192.168.1.255
。putty下载地址
根据自己系统选择32位或者64位下载。如果不确定自己电脑的位数可以右键“我的电脑”选择“属性”进行查看。
SSH连接的默认端口号是22
,在Host Name
处填写刚刚查找到的IP地址。
点击OPEN
后如果弹出下图界面。选择yes
。
login as
是要求输入登录树莓派的用户名。我们选择使用pi
账户(下面的目录结构部分会详细介绍)。所有新装系统的树莓派pi
账户的密码都是raspberry
。输入时要特别注意。因为这个输入过程没有任何的屏幕提示。这个git我就录了两遍。。。因为第一遍我的密码就输错了。哈哈哈。
在上面的页面命令提示符后输入sudo raspi-config ...
。在弹出的界面中用键盘的上下方向键选择5 interfacing options
,接下来选择P3 VNC...
,按下回车,用Tab
键选择是
,用Tab
键选择Finish
,完成了VNC的开启。
点击“ok”后,成功显示出树莓派桌面。可以进行操作了。之后就不用为树莓派连接额外的显示器了
如无法显示参见下面的解决办法:
初次VNC登录树莓派提示“cannot currently show the desktop”问题的解决
戳这里:电脑、手机和iPad通过VNC Viewer连接树莓派
可能的意外
如果连接上VNC后,屏幕显示
-putty连接登录树莓派:
(ssh连接树莓派的方式参见本博客这个主题的情况三,里面有详细介绍)
输入:sudo raspi-config
弹出树莓派设置页面;
树莓派和电脑的连接要保证在一个局域网,也就是同一个IP字段内。主要的连接方式有下面6中。最常见的应该是第二种,即电脑和树莓派连接在同一个Wi-Fi下。家里宽带欠费了上不了网并不会影响树莓派和电脑间用SSH通信(详细的介绍可以参见《数据通信》这门课程。)。
老王很啰嗦: 虽然没有电脑时,手机也是一个不错的弥补办法。但我还是很建议没电脑的朋友可以入一台二手电脑一般价格在1千左右就好。目前我所有的博客都是在这样千元的二手电脑上测试并完成的。除了不能打游戏,还没觉得有啥不好。内存至少8G,固态硬盘128以上。后续的教程也是在电脑加树莓派的vnc连接下进行的。当然二手电脑并不是什么牌子的都ok。我还是喜欢小黑系列。都是原本万+的高端机。品控是有保障的。emmm。。。好吧,这是另一个话题,有需求我可以写个二手电脑选购指南。哈哈哈哈哈。下面这张图就是我自己电脑的配置。thinkpad X1 2012年版。
第一次登录会弹出如下的设置界面。点击next
。
选择所在地、语言和时区。
更换pi
用户的默认密码。
我的VNC里显示了黑色的边框。随意我在提示里大了对号。
选择Wi-Fi。因为之前我们已经连接上了Wi-Fi直接next
就好了
这一步是提示检查系统和预装的软件是否有更新。其实整个过程和我们安装Windows系统是一样的。安完了之后进行更新。
时间会有点长,耐心等待。
可以选用later
稍后重启。或者Restart
立刻重启。
接下来就是本文最最核心的部分,对于习惯了windows操作系统的人儿来说,Raspbian OS第一棘手的问题就是操作习惯的完全颠覆(虽然桌面化带来了一部分同化,但真正深入到编程层面还是要和乌漆墨黑的命令行称为朋友才可以)。生存指南将在下面几个方面提供入门必须的基本知识。爱上他从了解开始~~~
Pi OS目录结构官方说明
理解Pi OS的目录结构是非常重要的,他可以帮助你理解那些是重要的,那些是危险的不要轻易动会导致系统崩溃的,而下载的软件又是放在那个位置。
“/home/pi”
(用户文件夹下,用户名为“pi”
的用户所有的文件)“
C:\Users\admin”
(用户文件夹下,用户名为“admin”
用户的文件)安装的是桌面版的Pi OS所有对于整个的文件夹结构可以直观的看到,在桌面上侧的工具栏点击“文件夹”图标,会弹出一个类似WINS里的文件资源管理器的界面。如下图所示:如果用“pi”
用户登录。那么所以的下载、桌面、图片、文档、音乐等文件就都在“/home/pi”这个路径之下。
"/home/pi/Desktop":
pi用户的桌面上的所有文件(和WINS的桌面一样的)"/home/pi/Documents":
pi用户的文档文件夹"/home/pi/Downloads":
pi用户下载的文件默认放在这个文件夹下"/"
根文件系统下。文件系统是无论是不是挂载过来的,最终都分层排列到以"/"
为起始的文件系统之下。“/”
根路径/boot
/sys
/sbin
/bin
cat
,ls
,cp
这些命令。/lib
/sbin
和/bin
目录下二进制文件运行所需要的库文件。/lost+found
/dev
“com1”
、“com2”
来调用,但是Pi OS则是使用这个文件夹下的文件路径表示。一般为“/dev/tty1”
、 "/dev/tty2"
/etc
/etc/hosts
, /etc/resolv.conf
, nsswitch.conf
, 以及系统缺省设置,网络配置文件等等。以及一些系统和应用程序的配置文件。/home
profile
结尾的文件。但是也有例外,root用户的数据就不在这个目录中,而是单独在根路径下,保存在单独的/root
文件夹下。/media
“/media/pi/”
后面的文件夹。/mnt
/opt
/usr
bin
、sbin
和lib
目录,其中包含非关键用户和系统二进制文件以及相关的库和共享目录,以及一些库文件。/usr/sbin
/usr/bin
/usr/lib
/usr/share
/usr/local
/var
/tmp
/proc
上面已经详细介绍了Pi OS的文件目录结构。在桌面界面的帮助下。可以很快的掌握。但是后续的编程大多还是在乌漆墨黑的命令行界面完成的。所以关于命令行下的基本操作还是要必知必会的。对于小白来说,记住这么多的命令还是有些困难的。需要的时候把这些当字典翻看查找也是ok的。用久了也就记住了。
Pi OS是文件结构的,每次操作都是在一个具体的路径下完成的。小白最容易遇到的一个问题就是“我是谁?”“我在那里?”这时可以使用"pwd"
命令:如下图所示。输入"pwd"
命令后显示当前所在路径为"/home/pi"
。
“cd”
命令。使用方法就是“cd”+空格+路径
。cd
命令则回到pi用户的默认目录“/home/pi”
。"cd+空格+/"
。使用"ls"
命令就可以显示当前路径下全部文件和文件夹。
上图可以看到显示的文件和文件夹具有不同的颜色,诸如白色、蓝色、绿色。其实这些颜色代表着不同的含义。
"ls+空格+'-l'"
就可以显示出全部文件及其详细信息。而"ls+空格+'-a'"
则可以显示隐藏文件。类似windows系统里那个显示全部文件夹的设置。“-l”
参数的ls
命令后,显示当前目录下有一个叫Desktop
的文件夹,输入"cd +空格+Desktop"
命令。则会进入到Desktop
文件夹。输入cd ..
则返回上级目录cd ../../
:其中../
是指上一级目录,这是相对路径的描述,两层就是跳转到上两级目录cd ../文件名
:访问同级目录下名为“xxx”的文件/home/pi/Desktop
位置。在命令行中输入man ls
会打开如下图所示的界面。详解介绍了ls
命令的功能,可以使用的参数。每个参数的意义。这个功能特别重要。Pi OS中命令多,命令的参数也多。很多时候都记不太住。关键时刻可以man
下。非常重要~
"mkdir+空格+文件夹名称"
:新建一个文件夹
"rmdir+文件夹名称"
:删除一个文件夹(仅限该文件夹为空的情况,如果不为空会报错)
如果想要删除这个不为空的名为test
的文件夹需要用rm -r test
。
在Pi OS里面创建一个文件的最简单方法就是用自带的文本编辑器nano
。nano
很像是windows里的记事本。在window里新建一个文件的方法就是用记事本,保存的时候通过更改后缀来指定类型。比如:
一个名为test.html
的文件就被新建好了。而在Pi OS里执行这个操作的类似程序叫做nano
。
用nano
建立一个名为hello.txt
的文件。在命令行输入nano hello.txt
。
整个终端会跳转入nano
编辑器内,就像打开记事本一样。界面如下:相应的命令就是“ctrl”+相应的字母或符号。
如果再nano
里输入内容以后,按下“ctrl+x”后,页面下端会提示是否保存。键盘输入“y”。
页面下端提示你输入文件名。如果不想更改用默认的就行。回车后。文件创建完毕。
如果之后你在其他的程序里看到了vi hello.txt
这样的新建文件的命令,不用惊慌。vi
这个命令是Pi OS里另外一个文本编译器vim
的调用命令。其界面如下:
可以看到上面这个编译器是没有命令提示的。对于新手没有nano友好。所以你可以放心大胆的将vi
命令替换成nano
。不会有啥子问题。就类似wps和word差不多。
在/home/pi/Desktop
目录下有两个文件夹分别叫做test
和test2
。在test
文件夹内新建一个叫名为hello.txt
的文件。用mv
命令将其移动到test2
文件夹内。
Tips:在新建文件的部分,讲解的是通过nano hello.txt
的方式来新建文件。但是上面这段程序可以发现用的却是touch hello.txt
的方式。这里用到的命令是touch
。其不同点在于直接新建文件而不弹出任何编辑器界面。
将test
文件夹中的hello.txt
改名为hello2.txt
。用的依然是mv
命令。
find -name hello.txt
:在当前目录下查找文件名为 hello.txt
的文件。
在hello2.txt
写入下面这段话后回到命令行界面。
在hello2.txt
文件中寻找nice
字符串。查找的内容会直接返回在终端中。其应用功能非常强大。具体使用可以查找相关书籍和文献。
tar –xvf file.tar
tar -xzvf file.tar.gz
tar -xjvf file.tar.bz2
tar -xZvf file.tar.Z
unrar e file.rar
//需要安装应用
unzip file.zip
3//需要安装应用
wordpress-4.3.1-zh_CN.tar.gz
这个压缩文件到当前目录。在Windows系统中,一些软件的运行是需要管理员admin
的权限的。其实Pi OS中也是这样,Pi OS中的管理员是root
。树莓派默认使用pi
用户登录,并且不会启用root
用户,那么当你需要使用root身份来执行一些任务的时候可以使用sudo
命令,比如在《电脑、手机和iPad通过VNC Viewer连接树莓派4》这篇博客提到的。如果忘记了pi
用户的密码。就需要:sudo passwd pi
命令来修改密码。
apt
获取就OK了方便的很。而这个`apt在安装软件前最好对系统和已安装的软件包进行升级:
sudo apt update
:将系统源更新一遍
sudo apt upgrade
:将已经安装的所有软件更新到最新版
apt install xxxx
:安装软件用
例如安装之前提到过的vim文件编辑器:apt install vim
。
sudo apt remove vim
Tips:apt
命令取代了之前的apt-get
,apt
命令整合了apt-get
、 apt-cache
和 apt-config
, 更加结构化,为用户提供了管理软件包所需的必要选项。
终端输入: “exit
+回车”即可,
终端输入:sudo reboot
终端输入:sudo shutdown -h now
比如下载的时候耗时太长,不想下载了。
键盘输入:ctrl+c
就会回到命令提示符。
比如想要查询电脑里python的版本就用python -V
,从下面的图可以很清晰的看到。在Pi OS里python
命令代表的是python2
,而如果想用最新版本的python需要用python3
命令。
而同样的还有pip
和pip3
。使用的时候要特别注意。因为他们会导致通过pip安装的插件所在目录的不同。
ctrl+c
复制内容后,切换到树莓派的VNC显示界面时ctrl+v
却没有作用。其实这个时候内容已经复制好了,只是ctrl+v
快捷键不生效而已(因为这个是Windows OS的快捷键)。只需在想要粘贴的位置按下鼠标右键,选择粘贴
即可。在接下来执行任何具体操作之前,需要先更换下apt
的仓库下载源。默认的源在国外的服务器。更新下载的速度会特别慢。如下图,只是简单执行sudo apt upgrade
,下载其中一个9M的文件就要9个小时。为了解决这个问题。国内有很多服务器都放了官方的仓库镜像。我们需要打开存放这个仓库源的文件进行网址替换就好。
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
sudo cp /etc/apt/sources.list.d/raspi.list /etc/apt/sources.list.d/raspi.list.bak
说明:sudo
是以root
用户的权限执行cp
命令,将位于/etc/apt/
目录的sources.list
文件进行备份,并命名为source.list.bak
。第二句则是将/etc/apt/sources.list.d/
路径下的raspi.list
文件备份并命名为raspi.list.bak
sources.list
文件sudo nano /etc/apt/sources.list
deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main contrib non-free rpi
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main contrib non-free rpi
按ctrl+x
退出nano,会提示是否保存,键盘输入y
后回车。
sudo nano /etc/apt/sources.list.d/raspi.list
deb http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ buster main ui
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ buster main ui
换完结构如下图所示。
保存文件执行sudo apt update
和sudo apt upgrade
可看到系统源已经更换完毕。
pip是一款非常方便的Python包管理工具,可在Python开发过程中大大提高开发效率,本系列教程后续的好多程序都是pip安装的。pip的外网速度同样很慢。所以也要换成国内的镜像。
sudo nano /etc/pip.conf
命令打开位于/etc
目录下的pip.conf
文件。清空原有文件的内容,粘贴下面的内容。录屏的gif操作时是粘贴了之后才删掉的。[global]
timeout = 6000
index-url = http://mirrors.aliyun.com/pypi/simple/
extra-index-url=https://www.piwheels.org/simple/
[install]
use-mirrors = true
mirrors = http://mirrors.aliyun.com/pypi/simple/
trusted-host = mirrors.aliyun.com5
使用filezilla软件传输文件非常方便。很像以前的ftp的使用。
filezilla下载地址
-点击下图所示的绿色按钮进行下载、安装。
deb是debian linux的安装格式,而Raspberry Pi则是根据Debian系统而来的。所以树莓派后续安装的很多软件的安装都是deb结尾的。安装deb的命令为:sudo dpkg -i file.deb
卸载deb的命令:dpkg -r file.deb
如果你耐着心看完了全部的指令部分,应该会有一个疑问:为甚博主的截图中命令提示行的系统显示部分和你的不一样。。。哈哈 因为我这个版本是更换过shell的。Pi OS默认使用的shell是bash。但是其自动补全和历史记录功能总是让人想死。Zsh是一个Linux下强大的shell,oh-my-zsh是基于zsh的功能做了一个扩展,方便的插件管理、主题自定义,以及漂亮的自动完成效果。更简便的使用和安装。
命令行输入:sudo apt-get install zsh
6
“oh-my-zsh”
文件下载到home/pi
git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh
cd .oh-my-zsh/tools
(切换目录到"oh-my-zsh")./install.sh
命令安装。退处重进终端设置生效。raspbian文件系统详解https://shumeipai.nxez.com/2018/01/05/directory-introduction-in-raspbian.html ↩︎
Linux学习(4)-文件颜色,绿色,蓝色,白色,红色等代表的意义:https://blog.csdn.net/sunhuansheng/article/details/82111172?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase ↩︎
tar.gz zip 解压缩 压缩命令
https://blog.csdn.net/hailangnet/article/details/50444198 ↩︎
linux下载文件命令 wget 介绍:https://www.lxx1.com/935 ↩︎
PiSugar—树莓派更换pip为国内源https://www.pisugar.net/20190715/ ↩︎
Linux终极shell-Z Shell–用强大的zsh & oh-my-zsh把Bash换掉https://blog.csdn.net/gatieme/article/details/52741221 ↩︎