入手了OrangePi Zero玩玩,已经把他做成了智能音箱了,结果不知道怎么回事就突然出问题了。之前一直都是通过WiFi连接SSH服务器来控制OrangePi Zero,现在的情况是WiFi刚连上就死机了。
OrangePi Zero已经用胶粘在音箱里了,TF卡可以取出来,但是网口没有空间插网线了。突然想起来手上还有一个CH340(USB转TTL)可以用来连接OrangePi Zero,记录一下不用网线配置OrangePi。

烧入Armbian

官方的Linux镜像已经完全不更新了。还是Armbian好,一直在不断更新,内核也到了5.4
下载OrangePi Zero的镜像,需要注意的是,我强烈推荐Ubuntu版的Armbian,Debian版反应迟缓、经常死机,具体原因不清楚。
然后解压,校验镜像
7z e Armbian_*.7z && sha256sum --check Armbian_*.img.sha
接着将SD卡插入电脑,查看SD的分区,如sdX
lsblk -p
依次卸载SD卡的所有分区
sudo umount /dev/sdX*
等等
烧录镜像
sudo dd bs=4M if=[你解压出来的img文件] of=/dev/sdX conv=fsync

TTL连接

将USB TTL的Tx和Rx分别与OrangePi Zero的Rx和Tx连接起来,插入电脑的USB口。
安装并以root身份开启putty
sudo apt-get install putty
sudo putty
串口设备选择ttyUSB0,波特率115200,打开串口,然后接通OrangPi Zero的电源,不出意外可以看到串口打印出内核启动的信息了。

连接WiFi

Armbian默认的root密码是1234,设置好新密码后我们就可以连接wifi了
nmcli radio wifi on
nmcli d wifi connect YOUR_SSID password YOUR_PASSWROD
然后我们就可以查看IP地址了
ifconfig
尝试SSH连接吧,记得运行armbian-config更换国内软件源

断线重连

为了防止由于WiFi不稳定造成的断线问题,我们可以利用Crontab每分钟检测WiFi连接情况,判断是否要重新连接。
sudo crontab -e
追加一行
* * * * * ping $(ip route show default | awk '/default/ {print $3}') -c3 || reboot

设置音频输出

不管是树莓派还是其他Pi,ALSA管理的音频输出一直是我头疼的问题。一方面ALSA的配置极其复杂,各种card,device,asound.conf,.asoundrc让人眼花缭乱;另一方面这些开发板音频口底噪都比较大,如果能在软件方面提高音量,那跟从功放端提高音量相比可以减少噪声输出。
对于OrangePi Zero,我赶紧把调好步骤记录下来

1
2
3
4
5
6
7
8
9
10
11
12
/usr/bin/amixer -c 0 cset numid=3 31
/usr/bin/amixer -c 0 cset numid=4 on
/usr/bin/amixer -c 0 cset numid=1 63
/usr/bin/amixer -c 0 cset numid=10 on
/usr/bin/amixer -c 0 cset numid=7 7
/usr/bin/amixer -c 0 cset numid=18 on
/usr/bin/amixer -c 0 cset numid=8 1
/usr/bin/amixer -c 0 cset numid=13 off
/usr/bin/amixer -c 0 cset numid=5 7
/usr/bin/amixer -c 0 cset numid=19 on
/usr/bin/amixer -c 0 cset numid=6 1
/usr/bin/amixer -c 0 cset numid=14 off

编辑/etc/asound.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
sudo tee /etc/asound.conf >/dev/null <<'EOF'
# the sound card
pcm.real {
type hw
card 0
device 0
}

# software volume
pcm.softvol {
type softvol
slave.pcm "real"
control {
name "Software"
card 0
}
max_dB 40.0
min_dB -10.0
resolution 10
}

pcm.mic {
type plug
slave.pcm "hw:0,0"
slave.format S16_LE
}

# default device
pcm.!default {
type asym
playback.pcm "softvol"
capture.pcm "mic"
}
EOF

接着重启即可,然后测试默认音频输出

1
speaker-test  -c2 -twav

此时应该可以听到轻柔的女声,如果不行就放大招————重装alsa

1
sudo apt-get --purge --reinstall install alsa-base alsa-utils

配置硬件看门狗

1
apt install watchdog

/etc/watchdog.conf参考如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# Defaults compiled into the binary
temperature-sensor = /sys/class/thermal/thermal_zone0/temp
max-temperature = 85

# Defaults compiled into the binary
admin = root
#Allwinner H2+默认的看门狗timeout是16秒,所以每隔15秒喂一次就可以了
interval = 15
logtick = 1
log-dir = /var/log/watchdog

# This greatly decreases the chance that watchdog won't be scheduled before
# your machine is really loaded
realtime = yes
priority = 1

接着启用watchdog

1
service watchdog start && systemctl enable watchdog