2023年8月

1 换源

仅适用于Release date: May 3rd 2023、Debian version: 11 (bullseye)这个树莓派OS版本,其他版本不保证有效。

首先使用如下命令,查看自己树莓派的架构。

uname -a

结果如下:
屏幕截图 2023-08-20 193101.png

如果红圈处显示为aarch64,使用命令sudo nano /etc/apt/sources.list,注释掉里面的所有内容,加入以下内容:

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free

deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free

deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free

# deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free
# # deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free

deb https://security.debian.org/debian-security bullseye-security main contrib non-free
# deb-src https://security.debian.org/debian-security bullseye-security main contrib non-free

然后保存。
如果红圈处显示armv7l,则使用命令sudo nano /etc/apt/sources.list,注释掉里面的所有内容,加入以下内容:

deb https://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ bullseye main non-free contrib rpi
# deb-src https://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ bullseye main non-free contrib rpi

# deb [arch=arm64] https://mirrors.tuna.tsinghua.edu.cn/raspbian/multiarch/ bullseye main

注意两者不可同时选择。
做完上述步骤后,使用命令sudo nano /etc/apt/sources.list.d/raspi.list ,注释掉里面的所有内容,输入以下内容:

deb https://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ bullseye main

然后保存。
执行sudo apt-get update.

2 安装OpenCV

使用命令sudo apt-get install python3-opencv -y安装OpenCV。

3 编写代码

在/home/pi下创建project文件夹,在该文件夹中再创建文件夹中创建img文件夹、code.py文件。
在code.py文件中写入以下内容:

# -*- coding=utf-8
import time
import datetime  #日期时间
import os  #文件操作
import cv2  #opencv-python
from qcloud_cos import CosConfig
from qcloud_cos import CosS3Client
import sys
import os
import logging

# 正常情况日志级别使用 INFO,需要定位时可以修改为 DEBUG,此时 SDK 会打印和服务端的通信信息
logging.basicConfig(level=logging.INFO, stream=sys.stdout)

# 1. 设置用户属性, 包括 secret_id, secret_key, region等。Appid 已在 CosConfig 中移除,请在参数 Bucket 中带Appid。Bucket 由 BucketName-Appid 组成
secret_id = '你的ID'     # 用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://cloud.tencent.com/document/product/598/37140
secret_key = '你的key'   # 用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://cloud.tencent.com/document/product/598/37140
region = 'ap-guangzhou'      # 替换为用户的 region,已创建桶归属的 region 可以在控制台查,https://console.cloud.tencent.com/cos5/bucket
                           # COS 支持的所有 region 列表参见 https://cloud.tencent.com/document/product/436/6224
token = None               # 如果使用永久密钥不需要填入 token,如果使用临时密钥需要填入,临时密钥生成和使用指引参见 https://cloud.tencent.com/document/product/436/14048
scheme = 'https'           # 指定使用 http/https 协议来访问 COS,默认为 https,可不填

config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key, Token=token, Scheme=scheme)
client = CosS3Client(config)

camera = cv2.VideoCapture(0)  #一个摄像头,后期可扩展多个摄像头
 
def delete_imgs():
    delete_url = "/home/pi/project/img"
    delete_list = os.listdir(delete_url)
    #print(delete_list)
    for i in range(len(delete_list)):
        os.remove(delete_url+'/'+delete_list[i])
    logging.info("delete all imgs success!")

if camera.isOpened():
    logging.info("Start Picture!")
    while True:
        # 设置分辨率
        camera.set(3, 1920)  #width
        camera.set(4, 1080)  #height
        ret, img = camera.read()
        date = datetime.datetime.now().strftime("%Y-%m-%d")
        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)
        response = client.upload_file(
            Bucket='raspberry1-1257204660',
            LocalFilePath=file_path,
            Key="getRasberryImgs/"+ date + "/" + str(upload_time)+ ".jpg",
            PartSize=1,
            MAXThread=10,
            EnableMD5=False
        )
        os.remove(file_path)  #删除树莓派本地已保存文件//有时候因为进程先后,有些图片文件来不及删除

        #判断img文件中有没有照片,删除掉
        nums = os.listdir('/home/pi/regular-photos-of-raspberry-pie/img')#删除来不及删除的照片
        if nums:
            delete_imgs()
        # camera.release()
        time.sleep(3600)

执行上述代码,即可完成每小时拍一张照并上传到腾讯云对象存储COS中。

参考资料

https://blog.csdn.net/weixin_46709801/article/details/128045344

注意:本教程仅用于libcamera操作。如果使用OpenCV操作,请勿配置本文第三节的内容!在完成第1、2、4节后,OpenCV可正常使用!

背景

最近为新买的树莓派4B安装摄像头。然而网上的教程非常老旧,仍然使用旧版系统进行配置,仍然使用raspistill命令来进行操作,这对于新版树莓派系统来说,会产生command not found报错。同时,网上关于无法使用新命令libcamera调用摄像头的排错教程异常缺乏,同时很多教程互相抄,也许能解决问题,但是多了很多额外配置,是否会对今后产生影响不明确。本教程旨在解决上述问题。
本文可解决以下问题:

  • 树莓派4B配置CSI摄像头
  • 使用libcamera命令操作树莓派摄像头
  • 解决raspistill command not found问题
  • 解决安装摄像头后VNC黑屏并显示Cannot currently show the desktop问题

1 安装摄像头

1、将摄像头安装到树莓派上
首先,查看排线最底部,会发现一面有蓝色胶带,另一面有纹路。
蓝色胶带一面:
有蓝色胶带一面

纹路一面:
有纹路一面

注意,本示意图为3B的示意图,4B的部件有所不同,请根据实际情况调整)找到红圈中的CSI接口,向上轻轻拉黑色的部分,打开CSI接口。然后将蓝色胶带一面朝向网线接口,有纹路一面朝向电源接口,插入到CSI接口中。如示意图所示:
示意图

其中,蓝圈1表示网线接口,蓝圈2右侧为电源接口(注意,本示意图为3B的示意图,4B的部件有所不同,请根据实际情况调整),中间红圈表示CSI接口

2 打开摄像头模块

1、在树莓派终端中输入以下命令,打开配置:

sudo raspi-config

效果如图所示:

然后选择上图中的第三项。
打开如下图所示的新界面,然后选择第一项,如图所示:

在新界面中选择Yes。返回后选择Finish,然后Reboot。此时摄像头已经打开,但还不能使用。

3 配置摄像头

注意:本教程仅用于libcamera操作。如果使用OpenCV操作,请勿配置本文第三节的内容!在完成第1、2、4节后,OpenCV可正常使用!
1、在终端中输入:

sudo nano /boot/config

在最下面添加下面的语句:

dtoverlay=ov5647

注意,上面的命令仅适用于用长长尾巴的CSI摄像头(如上面的图片),非此摄像头,在命令中替换成其他参数,如下表所示。

保存后重启。
重启后,在VNC下使用下面两个命令进行测试:

libcamera-hello
libcamera-jpeg -o test.jpg

其中第一个命令是检测摄像头,会打开界面,显示几秒摄像头拍摄内容后就关闭了。第二个命令是拍摄一张图片,保存在当前目录下面。

4 解决安装摄像头后VNC打不开的问题

使用如下命令

sudo nano /boot/config.txt

将hdmi_force_hotplug=1前面的#删掉即可。如图所示:

然后,输入以下命令进入配置:

sudo raspi-config

效果如图所示:

然后选择上图中的第二项。进去后,将分辨率调到最大,然后保存后reboot树莓派,问题顺利解决。

背景

闲来无事,在咸鱼上买了一个树莓派4B。买来配件都十分齐全,于是就想着启动来测试一下。下面是树莓派无显示器第一次启动的全过程,包含安装系统。
网上的教程大多需要额外使用显示器、鼠标、键盘之类的外设。然而,树莓派本身就是便捷灵活开发的代表,在真实开发环境下,一般不可能有单独的显示器,通常是只有笔记本电脑。所以,大部分网上的教程根本不适用。
本文提供在最通常情况下从新启动树莓派的教程。

1.2所需软件

(1)树莓派官方系统镜像
下载地址:https://www.raspberrypi.com/software/operating-systems/
选择Raspberry Pi OS with desktop即可。
在这里插入图片描述

(3)镜像写入软件win32diskimager-1.0.0-install
下载地址:https://sourceforge.net/projects/win32diskimager/
(4)网络IP地址扫描工具Advanced IP Scanner
下载地址:https://www.advanced-ip-scanner.com/cn/
(5)远程连接软件Xshell
下载地址:https://www.netsarang.com/zh/xshell/
(6)图形化远程连接软件VNC Viewer
下载地址:https://www.realvnc.com/en/connect/download/viewer/

2 烧录系统

1、将TF卡插入读卡器,然后插入笔记本电脑。
2、用格式化工具SDFormatter将TF卡格式化。在select card中选择TF卡对应的盘符(一般已经自动读取好了),然后选中Quick format,然后点击Format即可。
软件界面3、将下载好的系统镜像烧录进TF卡中。在映像文件中选中下载好的文件,在设备中选中TF卡对应的盘符,点击写入按钮。等待写入完成。
软件界面
4、烧录完成后,进入TF的根目录,新建一个名为ssh的文件,以便进行远程连接。
注意,该文件名为ssh,无扩展名。有些电脑自动隐藏扩展名,所以需要自行设置显示扩展名,然后将扩展名删除。
5、同样在此目录下,新建文件wpa_supplicant.conf,内容如下。其中,ssid是WIFI热点名称,psk是WIFI密码。

country=CN
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
 
network={
    ssid="Wifi名称"
    psk="密码"
    priority=1
}

6、同样在此目录下,新建创建 userconf.txt文件,该文件内输入用户名和密码的密文,如下所示,用来配置用户名和密码。注意:这一步为最新的系统新增,请务必按此操作,否则无法登录系统!

pi:$6$4ilokQRQxmURT.py$aJWBQ5yniJJPwV3CKawYJcnSK5JZGhrVZYF3K4omRUFv6KL0MysEH7F4NZRMNMcYF.U3xsQvWrx7ZL2GKxuv.1

3 启动树莓派

1、将TF卡装入树莓派中。
2、连接电源线,并将插头通电。此时,红灯亮起,绿灯会不规律闪烁直至熄灭。
此时树莓派情况如图所示(此图为3B+图片,此时只插了一根线)。

3、连接网线。一头连接树莓派4B的网线接口,一头连接笔记本电脑。
4、打开控制面板-》网络和Internet-》查看网络状态和任务-》更改适配器设置。
在这里插入图片描述

右击自己的wifi,选择属性,然后点击共享选项卡,如图勾选和设置。点击确定。
在这里插入图片描述
5、右击以太网,点击属性,双击IPv4协议,查看IP。如图所示。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

一般情况应该是192.168.137.1.
win+R打开windows命令端输入cmd,然后输入

arp -a

找到接口为192.168.137.1下面的IP,如图:
在这里插入图片描述
找到除了192.168.137.255 的另一个,比如上图是192.168.137.77。如果有多个,都记下来。

6、启动Xshell。选择文件》新建,在主机处输入树莓派的IP地址。
Xshell设置
然后选择用户身份验证,在用户名处输入pi,在密码处输入raspberry。
Xshell设置
7、点击确定,然后点击连接。连接成功后,输入如下命令进入配置界面。

sudo raspi-config

在这里插入图片描述

6、选择第3项,接口配置选项。回车后选择I3 VNC,回车后出现确认页面,按方向键下键按键选择“Yes”,回车后提示设置成功,并跳转回主界面。参考图片如下:
在这里插入图片描述

VNC

VNC
7、按下方向键,选择finish,结束设置。
在这里插入图片描述8、配置wifi。
在终端输入ifconfig,发现没有wlan0。
在这里插入图片描述
此时需要打开射频。在终端输入:

rfkill list

在这里插入图片描述

这里就表示射频被锁住了,需要打开。输入:

rfkill unblock all

此时,输入ifconfig,发现显示wlan0,表示wif已经打开,配置完成。
在这里插入图片描述

9、在命令行中输入sudo reboot重启,此时SSH连接会断开,不必慌张。

10、使用VNC远程软件,以图形化界面操作树莓派。运行VNC Viewer软件,输入树莓派的网络IP地址后回车(图中地址仅为示例,请输入你自己的地址),选择continue,输入树莓派登陆用户名/密码,pi/raspberry,完成后点击“OK”,成功进入树莓派图形化界面。

VNC

VNC

VNC

VNC

至此,我们成功启动了树莓派。在今后的使用中,可以根据个人的兴趣爱好来选择命令行或者是图形界面。

4 参考文献

部分文字和图片参考了列表中的文献,其版权归原作者所有,在此表示感谢!

https://blog.csdn.net/Lyh_2015/article/details/90143748

修改记录

20230813 根据最新情况修改了文章,确保准确可用。

1 在自己的虚拟环境中安装ipykernel

1、激活自己的虚拟环境。

activate [Your enviroment name]

例如:

activate mindspore

2、在当前环境中安装ipykernel。

conda install ipykernel

3、添加环境到jupyter notebook。

python -m ipykernel install --user --name [Your enviroment name] --display-name "[Name you want to show in jupyter]"

例如:

python -m ipykernel install --user --name mindspore --display-name "mindspore(Python3.9)"

4、重启jupyter notebook。
5、在jupyter notebook界面中kernel菜单下面可以切换啦。

2 问题解决

2.1 在切换kernel时,出现ImportError: DLL load failed while importing _device: 找不到指定的模块

原因:pyzmq的版本不匹配。

解决办法:在刚才的虚拟环境下,安装以下版本的pyzmp:

pip install pyzmq==23.0.0

重新运行,即可解决。

2.2 在切换kernel时,出现ImportError: DLL load failed while importing _sqlite3: 找不到指定的模块

解决方法:
进入库下载地址:https://sqlite.org/download.html
下载自己需要的版本,比如:

解压后,将这两个文件放置在该虚拟环境的DLLs文件夹下,例如:

问题解决。

3 删除kernel

相关命令:
jupyter kernelspec list
输入jupyter kernelspec remove + kernel名称即可删除。