感谢核桃派和电子发烧友论坛提供的这次机会让我有机会体验核桃派(WalnutPi)ZeroW这款linux开发板,希望可以借这个机会好好学习一下。
依旧是打开终端,输入以下指令:
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对象
i2c = busio.I2C(board.SCL1, board.SDA1)
#构建oled对象,配套的OLED地址为0x3C
display = adafruit_ssd1306.SSD1306_I2C(128, 64, i2c, addr=0x3C)
# 亮屏
display.fill(1)
display.show()
屏幕亮了起来:
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对象
i2c = busio.I2C(board.SCL1, board.SDA1)
#构建oled对象,配套的OLED地址为0x3C
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)
# 调用命令显示IP、CPU、内存、存储等信息
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融合起来,做成小小气象站的雏形(还有其它传感器哦!)
更多回帖