Xavier's Blog
做更美好的自己
树莓派
安装系统
官方烧录工具 Raspberry Pi Imager
下载地址:https://www.raspberrypi.org/downloads/
下载操作系统
官方地址:https://downloads.raspberrypi.org/ 官网下载选项中没有64位的Pi OS,可在清华源中下载、再解压:https://mirrors.tuna.tsinghua.edu.cn/raspberry-pi-os-images/raspios_arm64/images/
开启 SSH
烧录好的系统,默认不会开启 SSH。在TF盘符下,新建一个名为 ssh 的空文件(无扩展名) ssh连接到树莓派。默认用户名:pi,默认密码:raspberry
cat /etc/rpi-issue # 查看系统信息 armhf代表32位,arm64代表64位
lscpu # 查看CPU信息 armv7代表架构32位,armv8第一个arm64架构
getconf LONG_BIT # 查看系统位数
sudo passwd pi # 修改pi用户密码
sudo passwd root # 修改root用户密码
开机启动
supervisor
安装 supervisor
sudo apt install supervisor
默认会开机启动
应用配置
supervisor 管理应用的进程,需要对每个应用进行配置。在 /etc/supervisor/conf.d 中创建 xxx.conf,每个应用对应一个配置文件即可。 创建文件
sudo nano helloworld.conf
在窗口中添加
[program:helloworld] ;程序的名称
command = /root/www/HelloWorld ;执行的命令
directory = /root/www/ ;命令执行的目录
user = root ;执行进程的用户
stopsignal = INT
autostart = true ;是否自动启动
autorestart = true ;是否自动重启
startsecs = 1 ;自动重启间隔
stderr_logfile = /var/log/helloworld.err.log ;标准错误日志
stdout_logfile = /var/log/helloworld.out.log ;标准输出日志
保存,退出。 注意:文件中的每个分号之前必须有空格,不然会报错
supervisor
supervisorctl reload
或热重启,不会重启其他子进程
supervisorctl reread
supervisorctl update
为确保没有错误,可以正常启动,使用前文提到的查看supervisor状态的命令查看。或者查看要管理的进程是否启动,本例中可以使用下面的命令:
ps -ef | grep HelloWorld
常用命令
启用开机启动
systemctl enable supervisord.service
启动Supervisor
systemctl start supervisord.service
查看Supervisor状态
systemctl status supervisord.service
关闭所有任务
supervisorctl shutdown
启动或关闭某个应用
supervisorctl stop|start program_name
查看所有任务状态
supervisorctl status
用cron规划任务
cron是UNIX系统下常用的任务规划软件。你可以在cron中要求系统在特定的时间执行特定的任务。cron在系统中有一个运行着的守护进程。当系统时间符合某一条规划记录时,守护进程就会启动相应的任务。在树莓派应用行中运行下面命令,就可以找到cron的守护进程: 查看已有的定时任务
crontab -l
ps aux | grep cron
结果如下:
root 424 0.0 0.2 5072 2384 ? Ss 14:40 0:00 /usr/sbin/cron -f
pi 6938 0.0 0.2 4280 2008 pts/1 S+ 17:42 0:00 grep --color=auto cron
记录中的第一条,就是cron的进程。 如果想要规划任务,那么可以用下面的命令来编辑规划记录:
crontab -e
在规划记录中,每一行为一条记录,#开始的是注释。每一行记录又分为6列,用空格分隔,分别表示分钟(m,0-59)、小时(h,0-23)、一个月中的哪一天(dom,1-31)、月(mon,1-12)、一个星期中的哪一天(dow,0-6)、以及要执行的命令。在填写规划时间的时候,除了用数字,还可以用*,用来表示所有:
# m h dom mon dow command
30 5 10 3 * touch /tmp/test.log
上面表示每年3月10号5点30分,执行touch /tmp/test.log。
# m h dom mon dow command
10 18 * * * echo "Hello World" > /home/pi/log
每天的18点10分执行echo “Hello World” > /home/pi/log。 一列中,还可以规划多个时间点,例如:
# m h dom mon dow command
10 2-4 * * * echo "Hello World" > /home/pi/log
每天2:10、3:10和4:10执行。也就是说,“N-M”表示了从N到M的范围。
# m h dom mon dow command
30 1,5 * * * echo "Hello World" > /home/pi/log
每天1:30和5:30执行。也就是说,“N,M”表示了N和M两个时间点。
规划记录crontab保存后,cron就将按照规划,在对应的时间执行对应的命令。每个用户有一个自己的crontab,当cron要执行规划时,也会以相应的用户身份来执行。我是以pi用户修改保存的crontab,cron就会以pi的身份来运行各个命令。如果想修改其他用户的crontab,那么可以用-u关键字:
sudo crontab -e -u root
用cron来开机启动 cron除了做时间规划,还可以用于开机启动。在crontab中添加下面一行记录,就可以方便的实现:
@reboot touch /home/pi/reboot.log
文件保存位置
/var/spool/cron/
树莓派开启 crontab 日志
配置日志文件 rsyslog.conf
pi@raspberrypi:~ $ sudo vim /etc/rsyslog.conf
在文件中找到cron.*一行:
#cron.* /var/log/cron.log
#号表示该行被注释掉了,去掉#号,后面是日志文件的全路径,改成:
cron.* /var/log/cron.log
重新启动日志服务
pi@raspberrypi:~ $ sudo service rsyslog restart
至此配置完成,以后crontab生成的日志文件就会输出到/var/log/cron.log中,查看日志文件:
pi@raspberrypi:~ $ cat /var/log/cron.log
重启 crontab 服务
sudo /etc/init.d/cron restart
指定编辑器
Error opening terminal: unknown.
crontab: "/usr/bin/sensible-editor" exited with status 1
EDITOR=vim crontab -e
EC20
sudo minicom -D /dev/ttyUSB2 命令控制 AT + QGPS = 1 开启GPS采集 /dev/ttyUSB3 PPP拨号上网 /dev/ttyUSB1 GPS输出信息
无法 ping 通树莓派的 wlan0 口问题
原来是开启了AP隔离,关闭即可 在树莓派路由表上添加这样的一条路由就可以了:
sudo route add default gw 192.168.0.1 #192.168.0.1是无线路由器的地址
树莓派开机自动连接 Wi-Fi
树莓派使用的是 zero w
树莓派系统2021-03-04-raspios-buster-armhf-lite
电脑是mac系统
首先安装fuse-ext2使电脑可以挂载ext文件系统
查看分区
diskutil list
/dev/disk2 (external, physical):
#: TYPE NAME SIZE IDENTIFIER
0: FDisk_partition_scheme *31.9 GB disk2
1: Windows_FAT_32 boot 268.4 MB disk2s1
2: Linux 31.6 GB disk2s2
挂载
mkdir ~/Desktop/DISK
sudo mount -t fuse-ext2 /dev/disk2s2 ~/Desktop/DISK
卸载
sudo umount /dev/disk2s2
在sd卡/etc/network/目录下修改interfaces文件,内容如下
allow-hotplug wlan0
auto wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
在sd卡/etc/wpa_supplicant/目录下修改wpa_supplicant.conf文件,内容如下
network={
ssid="你的WiFi的SSID"
psk="你的WiFi密码"
key_mgmt=NONE
priority=4
}
其中ssid表示WiFi的SSID号,key_mgmt表示加密类型,key_mgmt=NONE表示没有密码或者WEP,key_mgmt=WPA-PSK表示WPA/WPA2加密,psk表示密码,没有密码就不用写,priority表示优先级,大的优先连接,一般这两种就够了。
树莓派 zero w 开启串口打印
串口默认被蓝牙占用,参看链接https://www.raspberrypi.org/documentation/configuration/uart.md
需要关闭蓝牙,在 /boot/config.txt
文件中开头加入
dtoverlay=disable-bt
树莓派 zero w 设置串口输入
树莓派CPU内部有两个串口,一个PL001 UART和一个Mini UART。Mini UART没有时钟源,必须由内核提供时钟源,而内核频率本身是变化的,导致Mini UART速率不稳,无法正常使用。RPI ZERO W与以往老版本RPI不同,没有将PL011 UART分配GPIO中的UART(GPIO14和GPIO15),而是将其分配给了蓝牙模块。我们需要关闭蓝牙对PL011 UART的使用,恢复GPIO串口对PL011 UART的使用。
树莓派设置静态IP地址
在sd卡/etc/目录下修改dhcpcd.conf文件,内容如下
interface wlan0
static ip_address=192.168.4.1/24
nohook wpa_supplicant
WiringPi GPIO安装
wiringPi包括一套gpio控制命令,使用gpio命令可以控制树莓派GPIO管脚。用户可以利用gpio命令通过shell脚本控制或查询GPIO管脚。
更新列表:
pi@raspberrypi:~ $ sudo apt-get update
更新软件:
pi@raspberrypi:~ $ sudo apt-get upgrade
安装:
pi@raspberrypi:~ $ sudo apt-get install wiringpi
wiringPi包括一套gpio命令,使用gpio命令可以控制树莓派上的各种接口,通过以下指令可以测试wiringPi是否安装成功。
pi@raspberrypi:~ $ gpio -v
gpio version: 2.50
Copyright (c) 2012-2018 Gordon Henderson
This is free software with ABSOLUTELY NO WARRANTY.
For details type: gpio -warranty
Raspberry Pi Details:
Type: Pi Zero-W, Revision: 01, Memory: 512MB, Maker: Sony
* Device tree is enabled.
*--> Raspberry Pi Zero W Rev 1.1
* This Raspberry Pi supports user-level GPIO access.
查看GPIO图
pi@raspberrypi:~ $ gpio readall
+-----+-----+---------+------+---+-Pi ZeroW-+---+------+---------+-----+-----+
| BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |
+-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
| | | 3.3v | | | 1 || 2 | | | 5v | | |
| 2 | 8 | SDA.1 | IN | 1 | 3 || 4 | | | 5v | | |
| 3 | 9 | SCL.1 | IN | 1 | 5 || 6 | | | 0v | | |
| 4 | 7 | GPIO. 7 | IN | 1 | 7 || 8 | 1 | ALT0 | TxD | 15 | 14 |
| | | 0v | | | 9 || 10 | 1 | ALT0 | RxD | 16 | 15 |
| 17 | 0 | GPIO. 0 | IN | 0 | 11 || 12 | 0 | IN | GPIO. 1 | 1 | 18 |
| 27 | 2 | GPIO. 2 | IN | 0 | 13 || 14 | | | 0v | | |
| 22 | 3 | GPIO. 3 | IN | 0 | 15 || 16 | 0 | IN | GPIO. 4 | 4 | 23 |
| | | 3.3v | | | 17 || 18 | 0 | IN | GPIO. 5 | 5 | 24 |
| 10 | 12 | MOSI | IN | 0 | 19 || 20 | | | 0v | | |
| 9 | 13 | MISO | IN | 0 | 21 || 22 | 0 | IN | GPIO. 6 | 6 | 25 |
| 11 | 14 | SCLK | IN | 0 | 23 || 24 | 1 | IN | CE0 | 10 | 8 |
| | | 0v | | | 25 || 26 | 1 | IN | CE1 | 11 | 7 |
| 0 | 30 | SDA.0 | IN | 1 | 27 || 28 | 1 | IN | SCL.0 | 31 | 1 |
| 5 | 21 | GPIO.21 | IN | 1 | 29 || 30 | | | 0v | | |
| 6 | 22 | GPIO.22 | IN | 1 | 31 || 32 | 0 | IN | GPIO.26 | 26 | 12 |
| 13 | 23 | GPIO.23 | IN | 0 | 33 || 34 | | | 0v | | |
| 19 | 24 | GPIO.24 | IN | 0 | 35 || 36 | 0 | IN | GPIO.27 | 27 | 16 |
| 26 | 25 | GPIO.25 | IN | 0 | 37 || 38 | 0 | IN | GPIO.28 | 28 | 20 |
| | | 0v | | | 39 || 40 | 0 | IN | GPIO.29 | 29 | 21 |
+-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
| BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |
+-----+-----+---------+------+---+-Pi ZeroW-+---+------+---------+-----+-----+
添加默认网关
sudo route add gw your_ipaddr
查看网关
route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 303 0 0 wlan0
169.254.0.0 0.0.0.0 255.255.0.0 U 205 0 0 wwan0
192.168.1.0 0.0.0.0 255.255.255.0 U 303 0 0 wlan0
改变默认shell
sudo dpkg-reconfigure dash
no
ls -l `which sh`
lrwxrwxrwx 1 root root 4 Mar 4 22:45 /usr/bin/sh -> dash
ls -l `which sh`
lrwxrwxrwx 1 root root 4 Apr 21 04:18 /usr/bin/sh -> bash