立即注册

扫一扫,访问微社区

micropython-microbit 中文社区

查看: 1811|回复: 18

用官方的SSD1306.py 驱动 OLED

  [复制链接]
  • TA的每日心情
    开心
    2019-5-12 11:06
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    发表于 2017-6-8 09:55:29 | 显示全部楼层 |阅读模式

    马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    这几天看了一下micropython的I2C OLED驱动(SPI的类似),发现有几个版本。一个是官方的版本,还有早期网上流传的版本。

    网上的版本使用了pyb.I2C驱动,是将Arduino的OLED驱动移植过来,只能用在STM32上;而官方的驱动使用了machine.I2C,这样有更好的兼容性,适合不同的硬件平台,还可以用软件I2C。

    因为没有看到有人介绍官方的SSD1306驱动,所以我就简单的介绍一下I2C接口的OLED使用方法,SPI的也是类似的。下面以比较常见的0.96寸的128x64 I2C OLED为例:

    • 从github下载micropython的源码(或者只下载其中的ssd1306.py文件),然后将ssd1306.py复制到PYB Nano或其它micropython板
    • 连接I2C和电源到I2C的OLED上,如果没有硬件I2C,使用任意GPIO也可以。
    • 在终端里输入下面代码

    1. from machine import I2C
    2. i2c=machine.I2C(-1, sda=machine.Pin("PB9"), scl=machine.Pin("PB8"), freq=400000)  

    3. from ssd1306 import SSD1306_I2C
    4. oled = SSD1306_I2C(128, 64, i2c)
    5. oled.text("Hello PYB Nano", 0, 0)
    6. oled.show()
    复制代码


    如果可以看到Hello这一段文字,就说明驱动成功了。

    3.jpg


    SSD1306.py中带有的函数不多,主要函数有:

    • text(string, x, y),在(x, y)处显示字符串,注意text()函数内置的字体是8x8的,暂时不能替换
    • poweroff(),关闭OLED显示
    • poweron(),空函数,无任何效果。可以用 write_cmd(0xAF) 代替
    • fill(n),n=0,清空屏幕,n大于0,填充屏幕
    • contrast(),调整亮度。0最暗,255最亮
    • invert(),奇数时反相显示,偶数时正常显示
    • pixel(x, y, c),在(x, y)处画点
    • show(),更新显示内容。前面大部分函数只是写入数据到缓冲区,并不会直接显示到屏幕,需要调用show()后才能显示出来。


    另外还有部分功能可以用下面方法实现:

    • framebuf.line(x1,y1,x2,y2,c),画直线
    • framebuf.hline(x,y,w,c),画水平直线
    • framebuf.vline(x,y,w,c),画垂直直线
    • framebuf.fill_rect(x,y,w,h,c),画填充矩形
    • framebuf.rect(x,y,w,h,c),画空心矩形
    • 大家也可以自己封装一下,甚至加入画园、字体选择、显示logo等功能。




    手机扫码浏览

    本帖被以下淘专辑推荐:

    该用户从未签到

    发表于 2018-8-1 10:08:29 | 显示全部楼层
    1602显示屏能用么?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-5-12 11:06
  • 签到天数: 8 天

    [LV.3]偶尔看看II

     楼主| 发表于 2018-8-1 10:14:02 | 显示全部楼层
    wx_TSYMMyez 发表于 2018-8-1 10:08
    1602显示屏能用么?

    1602的可以用I2C LCD1602库。

    https://github.com/micropython-C ... ter/lcd/I2C_LCD1602

    普通的1602需要的连线较多,因此没有归入。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2018-8-1 10:44:01 | 显示全部楼层
    shaoziyang 发表于 2018-8-1 10:14
    1602的可以用I2C LCD1602库。

    https://github.com/micropython-Chinese-Community/mpy-lib/tree/master/ ...

    Ready to download this file,please wait!
    ...............
    download ok
    exec(open('6.py').read(),globals())
    >>>


    出不来,提示是这样的
    原谅我小白啥也看不懂
    求解
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-5-12 11:06
  • 签到天数: 8 天

    [LV.3]偶尔看看II

     楼主| 发表于 2018-8-1 12:04:23 | 显示全部楼层
    wx_TSYMMyez 发表于 2018-8-1 10:44
    Ready to download this file,please wait!
    ...............
    download ok

    参考一下链接中的 test.py。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2018-12-26 16:03:25 | 显示全部楼层
    ssd1306的驱动是不是直接用官方的就行?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-5-12 11:06
  • 签到天数: 8 天

    [LV.3]偶尔看看II

     楼主| 发表于 2018-12-26 20:30:28 | 显示全部楼层
    Junki旺 发表于 2018-12-26 16:03
    ssd1306的驱动是不是直接用官方的就行?

    是的
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2018-12-26 23:49:10 | 显示全部楼层
    1. class SSD1306_I2C(SSD1306):

    2.     def __init__(self, width, height, i2c, addr=0x78, external_vcc=False):

    3.         self.i2c = i2c

    4.         self.addr = addr

    5.         self.temp = bytearray(2)

    6.         super().__init__(width, height, external_vcc)
    复制代码


    驱动里面的addr=0x78是不是要改成OLED屏上的地址
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2018-12-26 23:58:35 | 显示全部楼层
    i2c=machine.I2C(-1, sda=machine.Pin("PB9"), scl=machine.Pin("PB8"), freq=400000)  
    这里面指定的引脚不是pyboardcn2上的吧
    是不是要改成下面这样
    i2c=machine.I2C(-1, sda=machine.Pin("X10"), scl=machine.Pin("X9"), freq=400000)  
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-5-12 11:06
  • 签到天数: 8 天

    [LV.3]偶尔看看II

     楼主| 发表于 2018-12-27 09:17:56 | 显示全部楼层
    Junki旺 发表于 2018-12-26 23:58
    i2c=machine.I2C(-1, sda=machine.Pin("PB9"), scl=machine.Pin("PB8"), freq=400000)  
    这里面指定的引脚 ...

    引脚根据实际使用定义,软件I2C时大部分GPIO都可以使用。
    回复 支持 反对

    使用道具 举报

    游客
    回复
    您需要登录后才可以回帖 登录 | 立即注册

    Archiver|手机版|小黑屋|micropython-microbit 中文社区

    GMT+8, 2019-7-18 11:36 , Processed in 0.188535 second(s), 25 queries .

    Powered by Discuz! X3.4

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表