学长给我的物品清单:
树莓派4b(附加充电线)、摄像模块、显示屏(附加HDMI线、充电线)、SD卡、读卡器
目录
一、烧录程序
1.下载必须文件
(1)下载树莓派官方烧录软件Raspberry Pi Imager
地址:Raspberry Pi OS – Raspberry Pi
(2)下载镜像文件
地址:https://www.raspberrypi.com/software/operating-systems/
我没有选择最新版,使用的是自己一直用的版本(个人习惯)
2.烧录镜像
(1)内存卡放在读卡器里插到电脑上。
(2)解压刚才下载好的镜像文件,得到以.img结尾的镜像文件;双击exe文件,安装imager;
(3)烧录
打开树莓派镜像烧录器,选择“操作系统”;
往下拉,选择“使用自定义镜像”;
找到我们刚才解压后的以.img结尾的镜像文件,选择“open”。
再选择“选择SD卡”,会默认出现我们的SD卡,选择它;
到这一步,先不烧录,点击右下角设置
开启SSH服务,方便我们使用本地电脑xshell连接树莓派
往下拉,设置树莓派密码;
再往下拉,配置WIFI
多说两句:对于没有显示器的同学来说,连接的wifi最好能进入到后台能够看到树莓派的IP地址。
保存,进行烧录,选择“是”;
烧录界面;
验证界面:
烧录成功:
二、无显示屏连接树莓派
1.登录wifi后台,查看树莓派IP
(烧录过程中已经说过,对于没有显示屏的同学来说,最好连接能进入后台的wifi)
(如果没有wifi,可以连接你的手机热点)
2.Xshell7连接树莓派
Tips:Xshell7去官方免费申请就行,不用到网上找什么破解版的。
弹出SSH警告,选择“接受并保存”
输入SSH用户名(烧录过程中设置过用户pi的,不记得可以回到上面看一看)
输入密码,点击确定;
连接上了
3.使用VNC Server
VNC下载链接:Download VNC Viewer | VNC® Connect
(这里就不详细说VNC的下载安装啦,我相信你们可以的)
在Xshell7中输入 vncserver :1 得到vnc连接地址
打开VNC,输入得到的IP地址和端口号(注意冒号是英文)
回车连接,选择“continue”;
Username是pi,passwd是在烧录过程中设置的密码
就连接成功了
三、在VNC中完成树莓派引导
我们可以在VNC的连接界面中看到,我们在烧录过程中设置的wifi已经连上了
下面完成引导,点击Next;
国家设置、时区设置先默认,后面我们会改的;点击Next;
改变pi的密码,这里设置烧录过程中设置的密码就可以了,怎么方便怎么来(如果你改变pi的密码也可以,Xshell7到时候需要再重新登录)
设置屏幕,默认,点击“Next”;
设置wifi,我们烧录时已经设置过了,不用管,默认,点击“Next”;
更新软件界面,我选择“Skip”(跳过)。如果更新的话,需要挺长时间。
选择“Done”就完成了
四、通过Xshell7安装opencv-python
下面我们使用Xshell7安装所需环境,也可以在VNC中操作,都可以。
这里参考的是csdn上的一位博主(该博主写的很详细,大家可以去他那里看一看)
超简单教你在树莓派上安装opencv(一)_流 浪 猫的博客-CSDN博客_树莓派安装opencv
1.查看python2和python3的版本
2.sources.list换源
输入sudo nano /etc/apt/sources.list,进入到sources.list文件中,将里面的代码注释掉
将下面的代码粘贴进去
deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main non-free contrib rpi
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main non-free contrib rpi
完成后的效果就是这样:
按下ctrl+x键,如下图,选择y
选择y后,变成下图模样,直接回车就出去了
3.raspi.list换源
进入:sudo nano /etc/apt/sources.list.d/raspi.list
注释掉原有代码
添加上:deb http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ buster main ui
如下图所示:
Ctrl+x,y,回车,保存退出
4.换源结束,更新apt-get
执行sudo apt-get update
更新过程截图:
更新结束截图:
5.安装opencv
sudo apt-get install python3-opencv -y
安装结束截图:
6.测试opencv
(进入python3测试,opencv-python被安装到python3中)
五、使用VNC在树莓派中创建文件目录结构和定时拍照代码测试
(1)在/home/pi下创建regular-photos-of-raspberry-pie文件夹
(2)在regular-photos-of-raspberry-pie文件夹中创建img文件夹、code.py和ziqidong.service三个文件(注意后缀)
简单说一下三个文件的作用:
Img文件夹用来存放摄像头采集到的照片
Code.py放定时拍照代码python代码
Ziqidong.service是自启动配置文件(关于自启动配置,下文会详细说到)
(3)复制以下代码到code.py文件中
#思路:1.文件内循环每五秒上传一次 2.放在后台,每五秒执行一次文件
#第1种
import time
import datetime #日期时间
import os #文件操作
import cv2 #opencv-python
import oss2 #oss传输至阿里云
DEVICE = 'opencv' #拍照设备名称
ACCESS_KEY = '你的oss账户名(放在引号里)' #oss账户
SECRET_KEY = '你的oss密码(放在引号里)' #oss密码
ENDPOINT = '(这个是我的,仅供参考)oss-cn-hangzhou.aliyuncs.com' #上传网址(不同服务器地址不同)
BUCKETNAME = 'regular-photos-of-raspberry-pie' #上传的bucketname
camera = cv2.VideoCapture(0) #一个摄像头,后期可扩展多个摄像头
auth = oss2.Auth(ACCESS_KEY, SECRET_KEY) #oss账户、密码
bucket = oss2.Bucket(auth, ENDPOINT, BUCKETNAME)
# 检查网络,断网重启wifi
def restartWifi():
status = os.system("ping -w 3 www.baidu.com")
if status == 1:
# 关闭wifi
os.system('sudo ip link set wlan0 down')
# 开启wifi
os.system('sudo ip link set wlan0 up')
else:
print('已经连上网了')
return status
def delete_imgs():
delete_url = "/home/pi/regular-photos-of-raspberry-pie/img"
delete_list = os.listdir(delete_url)
#print(delete_list)
for i in range(len(delete_list)):
os.remove(delete_url+'/'+delete_list[i])
print("delete all imgs success!")
if camera.isOpened():
while True:
# 设置分辨率
camera.set(3, 1920) #width
camera.set(4, 1080) #height
ret, img = camera.read()
get_photo_time = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
#print(get_photo_time)
file_path = "/home/pi/regular-photos-of-raspberry-pie/img/" + str(get_photo_time) + ".jpg"
cv2.imwrite(file_path,img) #保存到树莓派本地
upload_time = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
#print(upload_time)
UploadResult = bucket.put_object_from_file("getRasberryImgs/"+ str(upload_time) + "_" + ".jpg", file_path)
os.remove(file_path) #删除树莓派本地已保存文件//有时候因为进程先后,有些图片文件来不及删除
if UploadResult.status==200:
print("Upload success!")
else:
print("maybe wifi problem,start link")
status = restartWifi()
#判断img文件中有没有照片,删除掉
nums = os.listdir('/home/pi/regular-photos-of-raspberry-pie/img')#删除来不及删除的照片
if nums:
delete_imgs()
camera.release()
time.sleep(4)
如下图所示:
(4)安装缺少的包
执行code.py文件,查看缺少什么包
缺少oss2,在pytohn3中安装oss2
我们使用pip安装,安装之前我们先升级pip3中的pip(升级pip可以解决很多意外的问题)
在Xshell7中执行,pip3 install -U pip
上述黄字告诉我们没有将环境变量添加到路径中。如果忽略,后面python3会无法导入包。所以我们要再添加环境变量(就算没有黄字提示,大家也要检查一下用户pi的bin有没有添加到环境变量中,防止后面python导入包出现找不到的情况)
nano ~/.bashrc
按住下箭头,到最后一行,输入
export PATH=/home/pi/.local/bin/:$PATH
(PATH根据自己的来,灵活改变)
Ctrl+x,y,回车退出
退出后一定要更新文件,不然咱们添加的环境变量依然不起作用
source ~/.bashrc
再执行pip3 install oss2 -i Simple Index
(使用清华源,我的网络下载时比较慢,会报下面的错误,所以使用了清华源)
成功安装:
回到VCN中,继续执行code.py,发现不缺少包了,照片成功上传到阿里云
去阿里云看一看,登录阿里云,去对象存储oss控制台,再到相应的文件夹下,可以看到我们传过来的照片。
六、设置开机自启动
(1)编辑ziqidong.service
文件内容如下:
[Unit]
Description=My service
After=network.target
[Service]
Restart=on-failure
RestartSec=5
ExecStart=/usr/bin/python3 -u /home/pi/regular-photos-of-raspberry-pie/code.py
[Install]
WantedBy=multi-user.target
(2)将ziqidong.service文件复制到/etc/system/system目录下
sudo cp /home/pi/regular-photos-of-raspberry-pie/ziqidong.service /etc/systemd/system/ziqidong.service
(3)启动服务
sudo systemctl start ziqidong.service
(4)查看该服务的输出
journalctl -u ziqidong -e
输出说明我们安装的包oss2找不到,好在作者给我们提供了解决方法:
- 指定用户pi
- 全局安装包
这里我选择第二种
所以,要全局安装一边,来吧
sudo pip3 install oss2 -i Simple Index
然后再来查看输出journalctl -u ziqidong -e
成功了
(5)停止服务
sudo systemctl stop ziqidong.service
(6)先停止服务,再设置开机自启动
sudo systemctl enable ziqidong.service
给树莓派断电再上电,查看服务输出
树莓派断电,Xshell7断开
树莓派上电,Xshell7重新连接(手动重新连接)
查看服务输出journalctl -u ziqidong -e
七、再拓展一些(设置时间)
我再传图片时,给文件的名字设置了拍照时间
如下图红色框标出的,图片显示年月日是对的,但是时间是11:28分,右边是阿里云显示接收时间,晚上19:28分。所以我们还要给树莓派设置时间。
话不多说,我们来。
(1)安装NTP
sudo apt-get install ntpdate
(2)选择上海时区
输入命令:sudo dpkg-reconfigure tzdata
进入下图所示界面:选择Asia , ok就是回车
回车选择shanghai
再回车,回到终端
(3)添加到自启动的配置文件中,实现开机自启动
sudo ntpdate -ubv s2m.time.edu.cn
(第二行有个报错,我没管,不影响使用)
(4)date查看时间
(5)树莓派断电再上电,到阿里云看图片名称时间对不对
发现没问题了
八、再扩展一些(断网重连)
大家可以看code.py中,虽然代码中有断网重连的代码,如下图:
但是我们要设置wlan0
话不多说,我们来操作
(1)wifi连接配置,增加几个wifi
sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
增加wifi如下图:(priority是优先级),ctrl+x,y,回车退出
(2)修改网络配置
sudo nano /etc/network/interfaces
添加下面的代码:
auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
(3)树莓派断电、再上电,就可以看到成功连上WiFi了。
到此,树莓派定时拍照就讲解完了,如果你觉得有用的话,可以点个赞
如果你有什么问题,可以在评论区留言
我们下次再见