最近看上了全志H3的芯片,开发板有香橙派和友善两家的板子,最后因为友善的 NanoPi NEO Air 有wifi和蓝牙而选择了它。
1. NanoPi NEO Air简介
NanoPi NEO Air的相关简介可以查看其 中文文档
2.镜像TF卡制作
NanoPi NEO Air 板卡自带了8GB的eMMC,上面官方已经默认烧录了 Linux-4.14 的系统固件,直接使用是可以的。
接下来我讲的是TF卡启动的方式,NanoPi NEO Air 的资料你可以在【下载地址】下载,进行解压后,找到文件目录:
NanoPi-NEO-Air\official-ROMs\nanopi-neo-air_sd_friendlycore-xenial_4.14_armhf_20200817.img
使用 balenaEtcher 软件烧录目录下的 img 镜像到SD卡,烧录完成后直接拔下来插入到 NanoPi NEO Air 板卡卡槽。
3.连接WiFi
# 进入root账户
su root#输入fa
# 开启WiFi
nmcli r wifi on
# 扫描附近的 WiFi 热点
nmcli dev wifi
# 连接到指定的 WiFi 热点(更换"SSID"和"PASSWORD"为自己的人WiFi账户账号和密码)
nmcli dev wifi connect "SSID" password "PASSWORD" ifname wlan0
# 重启开发板
reboot
4.换源
国内大陆的用户为了获得更快的安装速度,可以在安装之前先将软件包的源设置为国内源:
wget http://112.124.9.243/aptsouce.sh
chmod 755 aptsouce.sh
sudo ./aptsouce.sh
sudo apt-get update
5.安装0.96OLED驱动
【安装参考】
# 下载代码包
cd ~
git clone https://github.com/friendlyarm/BakeBit.git
# 安装BakeBit包
cd BakeBit/Script
chmod +x install.sh
sudo ./install.sh
安装完成之后,便可以调用例程看下效果了:
# 进入python例程目录
cd ~/BakeBit/Software/Python
# 运行动画例程
sudo python bakebit_128_64_oled_animate.py
接下来,使用之前【树莓派播放badapple】的方式,修改显示函数,即可在NanoPi上播放badapple,代码如下:
由于在显示图片时,发现显示驱动有些问题,先修改驱动,打开绝对目录下sudo nano ~/BakeBit/Software/Python/bakebit_128_64_oled.py
文件,将其drawImage(image)
函数修改为:
def drawImage(image):
"""Set buffer to value of Python Imaging Library image. The image should
be in 1 bit mode and a size equal to the display size.
"""
if image.mode != '1':
raise ValueError('Image must be in mode 1.')
imwidth, imheight = image.size
if imwidth != SeeedOLED_Width or imheight != SeeedOLED_Height:
raise ValueError('Image must be same dimensions as display ({0}x{1}).' \
.format(SeeedOLED_Width, SeeedOLED_Height))
# Grab all the pixels from the image, faster than getpixel.
pix = image.load()
# Iterate through the memory pages
bitList = []
pages=SeeedOLED_Height/8
for page in range(pages):
# Iterate through all x axis columns.
for x in range(SeeedOLED_Width):
# Set the bits for the column of pixels at the current position.
bits = 0
# Don't use range here as it's a bit slow
for bit in [0, 1, 2, 3, 4, 5, 6, 7]:
bits = bits << 1
bits |= 0 if pix[x,(page-1)*8+7-bit] == 0 else 1
bitList.append(bits)
for chunk in chunks(bitList, 32):
sendArrayData(chunk)
然后使用 FinalShell 工具将 badapple 的帧照片文件夹导入cd ~/BakeBit/Software/Python
目录,badapple 的帧照片怎么生成请查看【视频 转换为 可调分辨率 的图片】,然后新建文件sudo nano badapple.py
,添入如下代码:
import bakebit_128_64_oled as oled
from PIL import Image
from PIL import ImageFont
from PIL import ImageDraw
import time
import subprocess
oled.init() #initialze SEEED OLED display
oled.clearDisplay() #clear the screen and set start position to top left corner
oled.setNormalDisplay() #Set display to normal mode (i.e non-inverse mode)
oled.setHorizontalMode()
while True:
x = 0
y = 0
# Create blank image for drawing.
# Make sure to create image with mode '1' for 1-bit color.
width = 128
height = 64
image = Image.new('1', (width, height))
# Get drawing object to draw on image.
draw = ImageDraw.Draw(image)
# Draw a black filled box to clear the image.
draw.rectangle((0,0,width,height), outline=0, fill=0)
font = ImageFont.truetype('DejaVuSansMono.ttf', 10)
for Test in range(1,500):
# Draw a black filled box to clear the image.
draw.rectangle((0,0,width,height), outline=0, fill=0)
# Shell scripts for system monitoring from here : https://unix.stackexchange.com/questions/119126/command-to-display-memory-usage-disk-usage-and-cpu-load
cmd = "hostname -I | cut -d\' \' -f1"
IP = subprocess.check_output(cmd, shell = True )
cmd = "top -bn1 | grep load | awk '{printf \"CPU Load: %.2f\", $(NF-2)}'"
CPU = subprocess.check_output(cmd, shell = True )
cmd = "free -m | awk 'NR==2{printf \"Mem: %s/%sMB %.2f%%\", $3,$2,$3*100/$2 }'"
MemUsage = subprocess.check_output(cmd, shell = True )
cmd = "df -h | awk '$NF==\"/\"{printf \"Disk: %d/%dGB %s\", $3,$2,$5}'"
Disk = subprocess.check_output(cmd, shell = True )
# Write two lines of text.
draw.text((x+32, y), "Liuzewen pi", font=font, fill=255)
draw.text((x, y+11), "Test: ", font=font, fill=255)
draw.text((x, y+22), "IP: " + str(IP), font=font, fill=255)
draw.text((x, y+32), str(CPU), font=font, fill=255)
draw.text((x, y+42), str(MemUsage), font=font, fill=255)
draw.text((x, y+52), str(Disk), font=font, fill=255)
# Display image.
oled.drawImage(image)
time.sleep(.1)
for I_image in range(1,6540,2):#6540
image = Image.open('badapple/'+str(I_image)+'.jpg').convert('1')
oled.drawImage(image)
接下来在cd ~/BakeBit/Software/Python
目录下执行sudo python badapple.py
即可看到OLED屏幕上在显示系统信息和badapple之间来回切换。
如果想让OLED在开机时就开始显示系统参数。则需要在cd ~/BakeBit/Software/Python
目录下新建sudo nano start.sh
文件,修改其内容为:
#!/bin/sh
cd /home/pi/BakeBit/Software/Python
sudo python badapple.py&
按下ctrl+o
保存,使用ctrl+x
退出编辑。
修改shell脚本权限sudo chmod 777 /home/pi/BakeBit/Software/Python/start.sh
写好了shell脚本,接下来【设置程序开机自启动】,输入sudo nano /etc/rc.local
,在exit 0
的上一行添加如下代码:
/home/pi/BakeBit/Software/Python/start.sh start
执行sudo reboot
重启板子即可看到OLED已经运行了起来!
6.安装mp3解码库
为了使板子能正常播放音频:
# 安装音频驱动
sudo apt-get update
sudo apt-get install libasound2
sudo apt-get install alsa-base
sudo apt-get install alsa-utils
# 安装 sox 播放器
sudo apt-get install sox
# 安装WAV,MP3,MPG,OGG,FLAC等格式的解码支持
sudo apt-get install libsox-fmt-all
# 播放方式
play *.mp3
未完,待续~~~