H_On个人小站

个人站

这都被你发现了【惊
奖励你一朵小红花~


Pi Pico I2C通信

目录

接线

Pico GPIO OLED
28 GND GND
36 3V3 VCC
27 GP21 SCL
26 GP20 SDA

接线图

添加 ssd1306 库

查看 Thonny 标题下方是否有工具框,没有的话 Thonny 右上角应该有一行蓝色的 “切换到一般模式”,点击之后按照提示关闭 Thonny 并重新打开,再次打开时软件标题下方(调试按钮上面)应该就有一行工具按钮了。

  1. 点击 “工具”
  2. 点击 “管理包”
  3. 搜索 “ssd1306”
  4. 找到 “ssd1306.py” 并安装(不出意外的话它就排在最上面,长这样
    micropython-ssd1306
    ssd1306 module for MicroPython
    

OLED 控制代码

下面给出一个控制 OLED 输出字符的 demo:

import machine
import utime
# 配置引脚功能
sda, scl = machine.Pin(20), machine.Pin(21)
# 声明 i2c 功能类
i2c = machine.I2C(0, sda=sda, scl=scl, freq=400000)

from ssd1306 import SSD1306_I2C
# 设定输出类
oled = SSD1306_I2C(128, 32, i2c)
print(i2c.scan())
# 设置字符
oled.text("Hello you~", 0, 0)
oled.text("Pi Pico", 0, 10)
oled.text("Display demo", 0, 20)
# 输出字符
oled.show()
utime.sleep(4)
# 填充屏幕全白
oled.fill(1)
oled.show()
utime.sleep(2)
# 填充屏幕全黑
oled.fill(0)
oled.show()

while True:
    oled.text("Happy birthday!", 0, 0)
    for i in range(164):
        # 将显示向右移动一位
        oled.scroll(1, 0)
        oled.show()
        utime.sleep_ms(10)

如果运行提示 OSError: [Errno 5] EIO 那可能是接线没接好,确定 4 根线都接触良好,或者焊点没有虚焊。

Pico 温度检测器

掌握了之后我们可以来做点稍微有意义的事,监控 Pico 温度。还记得之前 模拟输入 那一章提到过 ADC 接口嘛,有一个接口是用于内部温度传感器的。因此我们就可以实现在 OLED 屏幕上实时监控内部温度传感器给出的温度。

import machine
import utime

from ssd1306 import SSD1306_I2C
# 定义一个 OLED 屏控制类,方便我们之后的使用
class OLED(object):
    def __init__(self, sda, scl):
        self.sda = machine.Pin(20)
        self.scl = machine.Pin(21)
        self.i2c = machine.I2C(0, sda=self.sda, scl=self.scl, freq=400000)
        self.oled = SSD1306_I2C(128, 32, self.i2c)
        self.clean()
    # 清空屏幕
    def clean(self):
        self.oled.fill(0)
        self.oled.show()
    # 显示输入的字符串
    def display(self, txt):
        self.clean()
        l = 0
        # 如果遇到空格,oled 屏不会自动换行
        # 所以我们手动处理一下,换一行 y 轴坐标 +10
        for t in txt.split('\n'):
            self.oled.text(t, 0, l)
            l += 10
        self.oled.show()

oled = OLED(20, 21)
# 指定第四个 ADC 接口
tempSensor = machine.ADC(4)
# 温度 = 27 - (串口读数*3.3/65535 - 0.706)/0.001721
offset = 3.3/65535

try:
    while True:
        read = tempSensor.read_u16()*offset
        temp = 27 - (read - 0.706)/0.001721
        oled.display(f"Pico temp is \n{temp}")
        utime.sleep(2)
except KeyboardInterrupt:
    oled.clean()
    print("程序结束")
  • 温度获取的代码看的是 这里 的讲解。
  • 可以对 Pico 的芯片(CPU)哈气或者扇风来查看温度变化。

结尾

第一章 提到过的本人入门参考的 文章 里,除了最后的电机驱动器,其他的到此为止全都进行了学习和实践(最后的实验也是对前面所有知识点的应用)。

到此为止 Pico 的入门学习就结束了,很显然很多东西还没有学到。但是我认为接下来是可以开始尝试用 Pico 做一些实际的项目了,用到什么学什么正是本人一贯的学习思路,所以在此督促自己在进行其他项目时一定要记得坚持写博客详细记录,以便多年以后再次再次想要拾起的时候方便参考。

感谢观看。