前言
感谢核桃派和电子发烧友论坛提供的这次机会让我有机会体验核桃派(WalnutPi)ZeroW这款linux开发板,希望可以借这个机会好好学习一下。
oled库安装
依旧是打开终端,输入以下指令:
sudo pip3 install adafruit-circuitpython-ssd1306
测试
按上一篇接线的SCL
、SDA
接在I2C1
上面,这样体现了I2C的一个特点,就是一个接口可以接很多个设备,前提是每个设备的I2C地址要不一样,因为I2C就是通过地址识别不同设备的。
接着上代码:
'''
实验名称:OLED显示屏
实验平台:核桃派ZeroW
'''
import time,board,busio
from digitalio import DigitalInOut
import adafruit_ssd1306
i2c = busio.I2C(board.SCL1, board.SDA1)
display = adafruit_ssd1306.SSD1306_I2C(128, 64, i2c, addr=0x3C)
display.fill(1)
display.show()
屏幕亮了起来:
显示CPU信息
Adafruit_CircuitPython_SSD1306
的官方仓库提供了不少示例,经过测试都可以正常运行。
Adafruit_CircuitPython_SSD1306的github地址:https://github.com/adafruit/Adafruit_CircuitPython_SSD1306
我们用ssd1306_stats.py
测试一下显示CPU、内存等信息的示例,参考代码如下:
import time,board,busio,subprocess,adafruit_ssd1306
from digitalio import DigitalInOut
from PIL import Image, ImageDraw, ImageFont
i2c = busio.I2C(board.SCL1, board.SDA1)
disp = adafruit_ssd1306.SSD1306_I2C(128, 64, i2c, addr=0x3C)
disp.fill(0)
disp.show()
width = disp.width
height = disp.height
image = Image.new("1", (width, height))
draw = ImageDraw.Draw(image)
draw.rectangle((0, 0, width, height), outline=0, fill=0)
padding = -2
top = padding
bottom = height - padding
x = 0
font = ImageFont.load_default()
while True:
draw.rectangle((0, 0, width, height), outline=0, fill=0)
cmd = "hostname -I | cut -d' ' -f1"
IP = subprocess.check_output(cmd, shell=True).decode("utf-8")
cmd = 'cut -f 1 -d " " /proc/loadavg'
CPU = subprocess.check_output(cmd, shell=True).decode("utf-8")
cmd = "free -m | awk 'NR==2{printf \\"Mem: %s/%s MB %.2f%%\\", $3,$2,$3*100/$2 }'"
MemUsage = subprocess.check_output(cmd, shell=True).decode("utf-8")
cmd = 'df -h | awk \\'$NF=="/"{printf "Disk: %d/%d GB %s", $3,$2,$5}\\''
Disk = subprocess.check_output(cmd, shell=True).decode("utf-8")
draw.text((x, top + 0), "IP: " + IP, font=font, fill=255)
draw.text((x, top + 8), "CPU: " + CPU, font=font, fill=255)
draw.text((x, top + 16), MemUsage, font=font, fill=255)
draw.text((x, top + 25), Disk, font=font, fill=255)
disp.image(image)
disp.show()
time.sleep(0.1)
显示效果:
下一次我们将把上一篇的传感器和oled融合起来,做成小小气象站的雏形(还有其它传感器哦!)