树莓派系统中一些常见的问题与解决方法

1、vim打开写入命令时提示E212

运行环境:在wm虚拟机的Linux中运行sudo命令时,在编写需要root权限的配置文件过程

出错原因:没有切换到root用户权限,文件编辑完毕后入输入:wq 时,出现 E212:无法打开并写入文件的错误提示信息,因为在该目录下当前用户没有写的权限。
在这里插入图片描述

解决办法如下:

第一步:保存文件时用 :w ! sudo tee % (tee 用于读取输入文件,同时保存 ,%表示当前编辑文件)
在这里插入图片描述

第二步:输入自己的虚拟机Linux的密码

2、vim报错 E37: No write since last change (add ! to override)

用 vi 命令编辑文本文件,没有文件写入权限的时候会报这个错。:q :wq 怎么都不能退出。
这时只需 ctrl+z 即可,或者在退出命令后加 ! 忽略提示 :q!

3 、树莓派启动一段时间后报错

/usr/bin/xauth:  error in locking authority file /home/pi/.Xauthority
sudo: unable to execute /usr/sbin/service: Input/output error
Failed to open initctl fifo: No such device or address
Failed to talk to init daemon.
ls: reading directory '.': Input/output error
sh: 1: /usr/bin/xauth: Input/output error

SSH可以正常连接
vim
sudo
都用不了
命令重启也不行
只能手动重启。。。造孽啊!!!

暂未找到解决办法,怀疑是SD卡问题
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4、树莓派新建桌面快捷程序

新建xxx.desktop文件

vim /usr/share/applications/XueXi.desktop

键入以下内容

[Desktop Entry]
Encoding=UTF-8
Name=XueXi
Exec=/home/pi/Downloads/TechXueXi-20220126/run.sh
Icon=/home/pi/Downloads/TechXueXi-20220126/log.jpg
Terminal=true
Type=Application
StartupNotify=true

在这里插入图片描述
其中Exec为执行shell脚本文件
Icon为自定义图标图片
:wq 保存退出后在树莓派的图形化界面中的开始菜单就能看到,点击图标右键可以添加到桌面
在这里插入图片描述
注意: shell 文件需要先给可执行权限,否则会报错

chmod +x /home/pi/Downloads/TechXueXi-20220126/run.sh

run.sh文件则为shell脚本,里面可以写一些terminal命令或者c/c++语言
在这里插入图片描述
这样就能实现傻瓜式双击桌面图标运行python程序/shell命令。

5、shell脚本监测程序是否挂掉然后重新运行

#!/bin/sh
while true
do
ps -ef | grep "mainpy" | grep -v "grep"
if [ "$?" -eq 1 ]     #上一条命令返回值0成功,1失败
then
    python  /home/pi/Desktop/motion_video/mainpy.py   #要运行的应用程序、脚本等
    echo "process has been restarted!"
else
    echo "process already started!"
fi
sleep 10
done

最后不要忘记了修改新增脚本的权限,执行chmod 777 checkpython.sh
后台运行:nohup sh checkpython.sh &

6、树莓派安装docker

  1. 一键脚本:
sudo curl -sSL https://get.docker.com | sh
  1. 测试是否安装成功:
 sudo docker run hello-world

如果 Docker 安装成功,你会看到一条消息:“Hello from Docker!”

  1. 修改国为内镜像源–清华源
echo "deb [arch=armhf] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian \
$(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list

设置开机自启

sudo systemctl daemon-reload  #重启 systemctl 守护进程
sudo systemctl enable docker  #设置 Docker 开机启动
sudo systemctl start docker  #开启 Docker 服务

7、树莓派docker安装motioneye

sudo docker run --name="motioneye"  \
  -p 80:8081 \
  -p 8765:8765 \
  --hostname="motioneye" \
  -v /etc/localtime:/etc/localtime:ro \
  -v /etc/motioneye:/etc/motioneye \
  -v /var/lib/motioneye:/var/lib/motioneye \
  --restart="always" \
  --detach=true \
  ccrisan/motioneye:master-armhf

访问方式: http://ip地址:8765
添加网络摄像头rstp

8、树莓派学习强国

更改系统镜像源,推荐清华镜像,速度快
编辑/etc/apt/sources.list文件:

	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

编辑/etc/apt/sources.list.d/raspi.list文件:

	deb http://mirror.tuna.tsinghua.edu.cn/raspberrypi/ stretch main ui
	deb-src http://mirror.tuna.tsinghua.edu.cn/raspberrypi/ stretch main ui

更新源

sudo update
sudo upgrade

安装包

sudo apt-get install libzbar0 chromium-driver
pip install -r requirements.txt

直接运行源码

python pandalearning.py #注意修改路径

9、永久解决树莓派Vim无法复制(右键显示可视)的问题

这个问题网上找了好多都是临时解决的版本,是在命令模式输入:set mouse=v,然而每次打开vim都要输入这个命令,甚是麻烦。

因此使用如下方法一劳永逸的解决vim右键显示可视的问题
安装Vim

sudo apt-get install vim

打开Vim默认配置文件

sudo vim /usr/share/vim/vim82/defaults.vim

找到以下代码的位置 (大概在82行)

if has('mouse')
  if &term =~ 'xterm'
    set mouse=a
  else
    set mouse=nvi
  endif
endif

set mouse=a 改为 set mouse-=a ,保存后立即生效。
在这里插入图片描述

下面是一个使用Python编写的树莓派控制霍尔编码电机的PID测速程序的示例代码,供参考: ```python import RPi.GPIO as GPIO import time # 设置GPIO模式为BCM GPIO.setmode(GPIO.BCM) # 定义三个引脚的GPIO编号 encoder_pin1 = 17 encoder_pin2 = 18 motor_pin = 27 # 设置GPIO为输入模式 GPIO.setup(encoder_pin1, GPIO.IN) GPIO.setup(encoder_pin2, GPIO.IN) GPIO.setup(motor_pin, GPIO.OUT) # 设置PID参数 Kp = 0.1 Ki = 0.01 Kd = 0.05 # 初始化PID误差 last_error = 0 integral = 0 # 定义PID计算函数 def pid_control(current_speed, target_speed): global last_error, integral error = target_speed - current_speed integral += error derivative = error - last_error last_error = error output = Kp * error + Ki * integral + Kd * derivative return output # 定义读取编码器函数 def read_encoder(): global encoder_counter if GPIO.input(encoder_pin1) == GPIO.input(encoder_pin2): encoder_counter += 1 else: encoder_counter -= 1 # 定义电机控制函数 def motor_control(speed): if speed >= 0: GPIO.output(motor_pin, GPIO.HIGH) else: GPIO.output(motor_pin, GPIO.LOW) pwm = GPIO.PWM(motor_pin, 1000) pwm.start(abs(speed)) # 初始化编码器计数器和速度 encoder_counter = 0 last_encoder_counter = 0 current_speed = 0 # 定义目标速度 target_speed = 50 # 记录开始时间 start_time = time.time() # 循环读取编码器和控制电机 while True: read_encoder() current_time = time.time() - start_time if current_time >= 0.1: current_encoder_counter = encoder_counter current_speed = (current_encoder_counter - last_encoder_counter) / current_time output_speed = pid_control(current_speed, target_speed) motor_control(output_speed) last_encoder_counter = current_encoder_counter start_time = time.time() ``` 注意,这只是一个示例代码,具体根据实际情况进行修改和优化。此外,还需要根据具体的硬件连接情况和编码器的工作方式进行相应的配置和调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值