Welcome to the Pycom forum Forum
    • \[\[global:header.categories\]\]
    • \[\[global:header.recent\]\]
    • \[\[global:header.tags\]\]
    • \[\[global:header.popular\]\]
    • Login

    Explore Pybytes | Official Documentation | Report a Firmware Bug/Issue | GitHub

    Object with buffer protocol required

    Scheduled Pinned Locked Moved SiPy
    ssd1306i2cbuffer downlink
    3 Posts 2 Posters 1.5k Views 2 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • B Offline
      brossingo
      last edited by

      Hello,
      I am new with Pycom and using a Sipy board for a project (which I am programming with Atom and the Pymakr consol). I want to display messages on a OLED screen (which is a RiT display). Thus, I was thinking about using the SSD1306 library which seems approriate (here is the one I am using https://github.com/micropython/micropython/blob/master/drivers/display/ssd1306.py). I also need to use a framebuffer, thus I imported the framebuf library at the beginning of my code. However, when I run the code, I get this message : TypeError: object with buffer protocol required. I have no idea why I get this so I would really appreciate your help. You can find below the block of code which causes this problem.

      scl=Pin('P10',mode=Pin.IN,pull=None,alt=-1)
      sda=Pin('P9',mode=Pin.IN,pull=None,alt=-1)
      i2c=I2C(0,pins=('P9','P10'))
      fbuf = FrameBuffer(bytearray(10 * 100 * 2), 10, 100, framebuf.RGB565) (apparently, this line provokes the error)
      oled=SSD1306_I2C(128,32,i2c,0x3c)

      Thanks for your help and do not hesitate to ask if you need further information

      E 1 Reply Last reply Reply Quote 0
      • E Offline
        Eric73 @brossingo
        last edited by Eric73

        @brossingo So, it seem that pycom micropython doesn't include framebuffer module, so you cant create one.

        But i use SSD1306 one a projet from
        https://github.com/dmitryelj/LoPyI2CLCD/blob/master/lopy_lcd.py

        File is named SSD1306.py on my board

        Here is sample of the code i use in my projet

        from machine import I2C
        import SSD1306 as Screen
        i2c=I2C(0)
        i2c.init(I2C.MASTER,baudrate=400000)
        Screen.initialize(Screen.kDisplayI2C128x64,i2c)
        Screen.set_contrast(128) # 1-255
        Screen.clearBuffer()
        Screen.addString(0, 0,"SSD1306 running")
        Screen.displayOn()
        Screen.drawBuffer()
        
        1 Reply Last reply Reply Quote 1
        • B Offline
          brossingo
          last edited by

          @Eric73 Thank you, it works much better now!

          1 Reply Last reply Reply Quote 0

          Hello! It looks like you're interested in this conversation, but you don't have an account yet.

          Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

          With your input, this post could be even better 💗

          Register Login
          • 1 / 1
          • First post
            Last post

          Pycom on Twitter

          Pycom