1.下载ubuntu
https://cdimage.ubuntu.com/releases/20.04.5/release/
2.格式化和烧录镜像源
3.修改自己的wifl sd卡直接放回树莓派
4.IP地址
https://www.bilibili.com/video/BV1YD421H7zF/?buvid=XU5DB1750D0CD69E8D83AEE359EB6582A7396&is_story_h5=false&mid=MJB9zT8GFG3V9L7c0g8cfA%3D%3D&plat_id=147&share_from=ugc&share_medium=android&share_plat=android&share_session_id=f1f38edf-f3aa-4896-9821-1ef82dcac76c&share_source=COPY&share_tag=s_i×tamp=1713572384&unique_k=TdOnWq9&up_id=250616280&vd_source=39ef28844a365fefcfd2f535a19e3c25
5.ssh连接
1.直接连接显示器和键盘
-
登录后,使用以下命令重置密码:
passwd
-
输入新密码并确认。
6.vnc连接
步骤 1: 安装 VNC 服务器
Ubuntu 20.04 及以上版本通常会预装 VNC 服务器(如 tigervnc
),但如果没有,您可以使用以下命令进行安装:
sudo apt install tightvncserver
步骤 2 启动 VNC 服务器
在终端中输入以下命令来启动 VNC 服务器:
vncserver
停止 VNC 服务器:
vncserver -kill :1
10.19
windows列出局域网中所有已知的 IP 地址和 MAC 地址
arp -a
pi root123
1.4b 64位系统
2.ssh 连接
3.vnc连接
https://blog.csdn.net/Daiwood/article/details/139565558
sudo raspi-config
4.换源 https://blog.csdn.net/KnightJoker0/article/details/130530041
要更改镜像源,您可以编辑 /etc/apt/sources.list
文件,例如:
Sh深色版本
sudo nano /etc/apt/sources.list
然后替换为类似下面的内容(以清华大学镜像站为例):
深色版本
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
当您尝试使用清华大学镜像站时遇到的错误表明APT无法验证存储库的签名,因为缺少公钥。这个问题可以通过导入缺失的公钥来解决。以下是处理该问题的步骤:
-
获取并导入公钥:
首先,您需要下载并导入缺少的公钥。可以使用
apt-key
命令来完成这个操作。但是需要注意的是,apt-key
在某些新版本的 Debian 和基于 Debian 的系统中已经被弃用,建议使用apt install --allow-downgrades
或者gnupg
相关命令来管理密钥。通常情况下,您可以这样做:
Sh深色版本
sudo apt-get install -y gnupg wget -qO - https://mirrors.tuna.tsinghua.edu.cn/gpgkey/public_key_9165938D90FDDD2E.asc | sudo gpg --dearmor -o /usr/share/keyrings/public_key_9165938D90FDDD2E.gpg
然后,您需要修改
/etc/apt/sources.list
或者创建一个新的.list
文件在/etc/apt/sources.list.d/
目录下,并且引用刚才导入的密钥环。例如:Sh深色版本
sudo nano /etc/apt/sources.list.d/tsinghua.list
文件内容应该如下:
深色版本
deb [signed-by=/usr/share/keyrings/public_key_9165938D90FDDD2E.gpg] http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main contrib non-free rpi # Uncomment line below then 'apt-get update' to enable the recommendation archive. # deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster-free main deb-src [signed-by=/usr/share/keyrings/public_key_9165938D90FDDD2E.gpg] http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main contrib non-free rpi
-
更新软件包列表:
导入公钥后,您可以再次运行
sudo apt update
来更新软件包列表。
请注意,上面的命令示例假设您使用的是 Debian Buster 版本。如果您使用的不是 Buster,请根据实际使用的版本号调整命令中的版本字符串。如果 wget
命令不可用,您可能需要先安装它,或者手动从清华大学镜像站的页面上找到公钥并下载。
完成这些步骤后,您应该能够正常地更新和升级您的树莓派系统了。
5.摄像头
目前(4代树莓派、Debian10以及以后)raspistill命令已经被逐渐遗弃
pi@raspberrypi:~ $ raspistill
-bash: raspistill: command not found
https://blog.csdn.net/weixin_51245887/article/details/124692953
新版本的不需要自己启用,直接输入libcamera-hello调用摄像头看能不能用(显示5秒后会退出)
这里我们使用几个简单的libcamera命令进行截图:
1、libcamera-hello
2、libcamera-still -e png -o test.png
3、libcamera-jpeg -o test.jpg4视频录制
预览camera流
直接使用libcamera-hello程序打开摄像头预览
sudo libcamera-hello -t 0
timeout 10s sh -c ‘libcamera-vid --width 1920 --height 1080 --framerate 30 --output video.h264’
6.换系统树莓派摄像头ov5647与opencv
https://blog.csdn.net/bert20010524/article/details/132393260
https://blog.csdn.net/zhangmou_9008/article/details/134047114
简单说一下,pios把摄像头驱动更换到了libcamera,而opencv当前还不支持libcamera,这个是你opencv不能用的根本原因,和dtoverlay没关系。不过最近opencv上游社区正在做适配,之后不久应该就可以。 你最终解决的办法就是回滚到老版的v4l2驱动,opencv当然支持v4l2,所以就ok了。
import cv2
# 创建摄像头对象
cap = cv2.VideoCapture(0)
# 检查摄像头是否成功打开
if not cap.isOpened():
print("无法打开摄像头")
exit()
# 调整摄像头的曝光和对比度设置
#cap.set(cv2.CAP_PROP_AUTO_EXPOSURE, 0.25) # 关闭自动曝光
#cap.set(cv2.CAP_PROP_EXPOSURE, -13) # 设置曝光值(范围:-13到-1,值越小曝光越低)
#cap.set(cv2.CAP_PROP_CONTRAST, 60.0) # 设置对比度值(默认为1.0)
# 循环读取摄像头画面
while True:
# 读取一帧图像
ret, frame = cap.read()
# 检查图像是否成功读取
if not ret:
print("无法获取图像帧")
break
# 在窗口中显示图像
cv2.imshow("Camera", frame)
# 按下 'q' 键退出循环
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 释放摄像头资源
cap.release()
# 关闭窗口
cv2.destroyAllWindows()
屏幕
https://blog.csdn.net/z625476/article/details/116986391?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0-116986391-blog-78006331.235
sudo rm -rf LCD-show
git clone https://github.com/goodtft/LCD-show.git
chmod -R 755 LCD-show
cd LCD-show/
sudo ./LCD35-show
灯
#!/usr/bin/env python #告诉Linux本文件是一个Python程序
import RPi.GPIO as GPIO #导入控制GPIO的模块,RPi.GPIO
import time #导入时间模块,提供延时、时钟和其它时间函数
colors = [0xFF00, 0x00FF, 0x0FF0, 0xF00F] #颜色列表
pins = {'pin_R':11, 'pin_G':12} #针脚字典,物理位置编号,红色针脚为11号,绿色针脚为12号
GPIO.setmode(GPIO.BOARD) #设置引脚编号模式为板载模式,即树莓派上的物理位置编号
#或者为BCM模式:
#GPIO.setmode(GPIO.BCM)
for i in pins:
GPIO.setup(pins[i], GPIO.OUT) # 设置针脚模式为输出(或者输入GPIO.IN)
GPIO.output(pins[i], GPIO.LOW) #设置针脚为低电平,关掉LED灯
p_R = GPIO.PWM(pins['pin_R'], 2000) # 设置频率为 2KHz
p_G = GPIO.PWM(pins['pin_G'], 2000)
p_R.start(0) # 初始占空比为0(范围:0.0 <= dc <= 100.0,0为关闭状态)
p_G.start(0) # p.start(dc) dc代表占空比
def map(x, in_min, in_max, out_min, out_max):
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min
def setColor(col): # 设置颜色
R_val = (col & 0xFF00) >> 8 #先“与”运算只保留自己颜色所在位的值有效
G_val = (col & 0x00FF) >> 0 #再“右移”运算将自己颜色所在位的值提取出来
R_val = map(R_val, 0, 255, 0, 100) #将颜色的刺激量转换为占空比对应的值
G_val = map(G_val, 0, 255, 0, 100)
p_R.ChangeDutyCycle(R_val) # 更改占空比,调整该颜色的亮度
p_G.ChangeDutyCycle(G_val)
def loop():
while True: #循环函数
for col in colors: #遍历颜色列表
setColor(col) #设置颜色
time.sleep(0.5) #延时0.5秒
def destroy():
p_R.stop() #停止PWM
p_G.stop()
for i in pins:
GPIO.output(pins[i], GPIO.LOW) # 关掉所有led灯
GPIO.cleanup() #重置GPIO状态
if __name__ == "__main__":
try: #用try-except代码块来处理可能引发的异常
loop()
except KeyboardInterrupt: #如果遇用户中断(control+C),则执行destroy()函数
destroy()
舵机
1.单个 gnd 5v g4
import RPi.GPIO as GPIO
import time
# 设置GPIO模式
GPIO.setmode(GPIO.BCM)
# 设置舵机连接的GPIO引脚
servo_pin = 4 # G4引脚
# 设置GPIO引脚为输出模式
GPIO.setup(servo_pin, GPIO.OUT)
# 设置PWM信号
pwm = GPIO.PWM(servo_pin, 50) # 50Hz
pwm.start(0) # 初始占空比
try:
while True:
# 0度
pwm.ChangeDutyCycle(2) # 1ms脉宽
time.sleep(1) # 等待1秒
# 90度
pwm.ChangeDutyCycle(7.5) # 1.5ms脉宽
time.sleep(1)
# 180度
pwm.ChangeDutyCycle(12) # 2ms脉宽
time.sleep(1)
except KeyboardInterrupt:
pass
# 清理
pwm.stop()
GPIO.cleanup()
两个
import RPi.GPIO as GPIO
import time
# 设置 GPIO 模式
GPIO.setmode(GPIO.BCM)
# 定义舵机引脚
servo1_pin = 4 # G4 引脚
servo2_pin = 5 # G5 引脚
# 设置引脚为输出模式
GPIO.setup(servo1_pin, GPIO.OUT)
GPIO.setup(servo2_pin, GPIO.OUT)
# 设置 PWM 信号
pwm1 = GPIO.PWM(servo1_pin, 50) # 第一个舵机,50Hz
pwm2 = GPIO.PWM(servo2_pin, 50) # 第二个舵机,50Hz
# 启动 PWM
pwm1.start(0) # 初始占空比
pwm2.start(0) # 初始占空比
try:
while True:
# 控制第一个舵机(0度)
pwm1.ChangeDutyCycle(2) # 1ms 脉宽
time.sleep(1)
# 控制第二个舵机(0度)
pwm2.ChangeDutyCycle(2) # 1ms 脉宽
time.sleep(1)
# 控制第一个舵机(90度)
pwm1.ChangeDutyCycle(7.5) # 1.5ms 脉宽
time.sleep(1)
# 控制第二个舵机(90度)
pwm2.ChangeDutyCycle(7.5) # 1.5ms 脉宽
time.sleep(1)
# 控制第一个舵机(180度)
pwm1.ChangeDutyCycle(12) # 2ms 脉宽
time.sleep(1)
# 控制第二个舵机(180度)
pwm2.ChangeDutyCycle(12) # 2ms 脉宽
time.sleep(1)
except KeyboardInterrupt:
pass
# 清理
pwm1.stop()
pwm2.stop()
GPIO.cleanup()