Community Forum
    • Blog
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Register
    • Login

    New Adafruit generic OLED display driver for Raspberry PI

    Scheduled Pinned Locked Moved Blog articles comments
    driver1.30.96i2ciic
    53 Posts 20 Posters 40.8k Views
    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.
    • CharlesC Offline
      Charles
      last edited by

      @Meng-Qi

      the i2c smbus_ is a know problem

      you just need to intall again lm-sensors package (even if correctly installed) then all shoud go fine. Something obvious I’d like to understand, but it seems to work.

      look below how I resolved it.

      root@pi03:~/github/ArduiPi_SSD1306/examples# make
      g++ -Ofast -mfpu=vfp -mfloat-abi=hard -march=armv6zk -mtune=arm1176jzf-s -Wall  -lssd1306 ssd1306_demo.cpp -o ssd1306_demo
      /usr/local/lib/libssd1306.so: undefined reference to `i2c_smbus_write_i2c_block_data'
      /usr/local/lib/libssd1306.so: undefined reference to `i2c_smbus_write_byte_data'
      /usr/local/lib/libssd1306.so: undefined reference to `i2c_smbus_write_word_data'
      collect2: ld returned 1 exit status
      make: *** [ssd1306_demo] Error 1
      root@pi03:~/github/ArduiPi_SSD1306/examples# dpkg --get-selections | grep i2c
      i2c-tools                                       install
      libi2c-dev                                      install
      root@pi03:~/github/ArduiPi_SSD1306/examples#  dpkg --get-selections | grep lm
      lm-sensors                                      install
      root@pi03:~/github/ArduiPi_SSD1306/examples# apt-get install lm-sensors
      Reading package lists... Done
      Building dependency tree
      Reading state information... Done
      lm-sensors is already the newest version.
      The following packages were automatically installed and are no longer required:
        libblas3gf liblapack3gf
      Use 'apt-get autoremove' to remove them.
      0 upgraded, 0 newly installed, 0 to remove and 14 not upgraded.
      root@pi03:~/github/ArduiPi_SSD1306/examples# make clean
      rm -rf ssd1306_demo teleinfo-oled
      root@pi03:~/github/ArduiPi_SSD1306/examples# cd ..
      root@pi03:~/github/ArduiPi_SSD1306# make clean
      rm -rf *.o libssd1306.* /usr/local/lib/libssd1306.*
      root@pi03:~/github/ArduiPi_SSD1306# make
      g++ -Wall -fPIC -fno-rtti -Ofast -mfpu=vfp -mfloat-abi=hard -march=armv6zk -mtune=arm1176jzf-s -c Adafruit_SSD1306.cpp
      ./ArduiPi_SSD1306.h:51:21: warning: ‘oled_type_str’ defined but not used [-Wunused-variable]
      g++ -Wall -fPIC -fno-rtti -Ofast -mfpu=vfp -mfloat-abi=hard -march=armv6zk -mtune=arm1176jzf-s -c Adafruit_GFX.cpp
      ./ArduiPi_SSD1306.h:51:21: warning: ‘oled_type_str’ defined but not used [-Wunused-variable]
      gcc -Wall -fPIC -Ofast -mfpu=vfp -mfloat-abi=hard -march=armv6zk -mtune=arm1176jzf-s -c bcm2835.c
      g++ -shared -Wl,-soname,libssd1306.so.1 -Ofast -mfpu=vfp -mfloat-abi=hard -march=armv6zk -mtune=arm1176jzf-s  -o libssd1306.so.1.0 Adafruit_SSD1306.o Adafruit_GFX.o bcm2835.o
      [Install Library]
      [Install Headers]
      root@pi03:~/github/ArduiPi_SSD1306# cd examples/
      root@pi03:~/github/ArduiPi_SSD1306/examples# make
      g++ -Ofast -mfpu=vfp -mfloat-abi=hard -march=armv6zk -mtune=arm1176jzf-s -Wall  -lssd1306 ssd1306_demo.cpp -o ssd1306_demo
      g++ -Ofast -mfpu=vfp -mfloat-abi=hard -march=armv6zk -mtune=arm1176jzf-s -Wall  -lssd1306 teleinfo-oled.cpp -o teleinfo-oled
      root@pi03:~/github/ArduiPi_SSD1306/examples#
      
      

      For the i2cbus detection, nothing to do with my lib, i2cdetect is a tool distribued with your linux distro.

      So to be sure I've just gone on my PI V2 to test

      root@pi01(rw):~/ArduiPi_OLED/examples# i2cdetect -y 1
           0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
      00:          -- -- -- -- -- -- -- -- -- -- -- -- --
      10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
      20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
      30: -- -- -- -- -- -- -- -- -- -- -- -- 3c -- -- --
      40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
      50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
      60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
      70: -- -- -- -- -- -- -- --
      
      root@pi01(rw):~/ArduiPi_OLED/examples# ./oled_demo -o 3
      x: 9y: 0dy: 3
      x: 30y: 0dy: 2
      x: 111y: 0dy: 2
      x: 81y: 0dy: 4
      x: 41y: 0dy: 2
      x: 85y: 0dy: 5
      
      

      So @Mr_Tom yes it works on Pi V2 (at least in I2C mode) but should be the same for SPI; look below

      V2-OLED.jpg

      1 Reply Last reply Reply Quote
      • Meng QiM Offline
        Meng Qi
        last edited by

        I've got the lm-sensors module in there, and the make on examples worked.

        But only still I can't get my Pi to recognize my oled screen, and I have another device on the i2c bus which works perfectly.
        I just ordered another oled (a seeed 96*96) to see if that would work.

        Thank you for your detailed reply!

        1 Reply Last reply Reply Quote
        • CharlesC Offline
          Charles
          last edited by

          Meng,

          Even if Seeed OLED will be seen, it won't work because it"s another driver in it (SSD1308) and I didn't port this one in the example code, something I wanted to do but never had time do do it.

          By the way Seeed OLED 96x96 is the best OLED I ever saw, excellent display and gray level.

          1 Reply Last reply Reply Quote
          • CharlesC Offline
            Charles
            last edited by

            Meng
            did you tried your non working OLED on an Arduino with I2CScan sketch just to see ?

            1 Reply Last reply Reply Quote
            • Meng QiM Offline
              Meng Qi
              last edited by

              Hi, Charles,

              I've tested my oled with I2CScan, and it wasn't detected... maybe a broken one. And I have another oled screen here which can be detected on Arduino, but not on Pi.

              Here is a library by Seeed themselves : https://github.com/DexterInd/GrovePi/tree/master/Software/Python/grove_oled
              I'll see if that would work once the oled screen arrives. Happy to know that it looks amazing.

              1 Reply Last reply Reply Quote
              • CharlesC Offline
                Charles
                last edited by

                Meng,
                yeah Seeed library works fine on Arduino, but not sure there is a port on Raspberry Pi

                1 Reply Last reply Reply Quote
                • Meng QiM Offline
                  Meng Qi
                  last edited by Meng Qi

                  This 96*96 oled screen is detected by my Pi and it is working with Seeed's own library, and it would also put out stuff while running your oled_demo.

                  Does your library has a manual? It doesn't looks like python when I peek into your library files... Sorry I am quite a beginner. Thank you.

                  I use my Pi to generate sound, and if I do oled operations within the same piece of .py file that does sound, any oled writing operations would block the sound. But if I open 2 terminal instances (I am using SSH), and run sound code on one, oled code on another, it wouldn't block the sound. So it is certainly not a CPU speed issue...

                  Why does this happen? And if I make my Pi running some python code at boot, how I can make the codes running like within multiple terminals?

                  Thank you!

                  1 Reply Last reply Reply Quote
                  • G Offline
                    gbona
                    last edited by

                    I also try to run it on RPi2 with an SPI OLED 128x64 and ran into the same problem. The program freezes in display.begin(). What can be wrong?

                    1 Reply Last reply Reply Quote
                    • CharlesC Offline
                      Charles
                      last edited by

                      Hi gbona,
                      Did you checked that your I2C oled is visible with i2cdetect ? If so does his I2C address is 0x3C ?

                      1 Reply Last reply Reply Quote
                      • B Offline
                        boik
                        last edited by

                        Hi Charles. I am trying to use your library to drive a 128x64 SPI OLED display I got from the internet. It is advertised as being SSD1106 (which I assume means SH1106). I have hacked the CS detect line of your code to force it to use SPI instead of the default I2C (this display has no CS pin). I am getting something on the display, but quite garbled.

                        Here is a video of it running your OLED_demo. https://youtu.be/bETtabNliYc

                        Are these symptoms familiar to you. Any ideas of what might need tweaking.

                        Many thanks

                        Graham

                        1 Reply Last reply Reply Quote
                        • CharlesC Offline
                          Charles
                          last edited by

                          @boik,
                          Strange, first time I see SPI oled without CS line, would you mind post a picture of the back ?

                          You're right I forgot to add SPI option for SH1106 in oled_demo.

                          1 Reply Last reply Reply Quote
                          • B Offline
                            boik
                            last edited by

                            Hi Charles,

                            [IMG]http://i68.tinypic.com/6zwsjl.jpg[/IMG]

                            Heres a pic of it running the circle, square, triangle cross demo. Just displays the bottom 8 lines of the image but at the top of the OLED.

                            [IMG]http://i64.tinypic.com/2mhbn7k.jpg[/IMG]

                            Not sure if this forum accepts IMG tags?

                            Graham

                            1 Reply Last reply Reply Quote
                            • D Offline
                              Deennoo
                              last edited by

                              Hello Charles

                              I got a freebox server out of ordre.

                              There is a ssd1327 screen on it.

                              If i send you the pcb pictures can you help me to find the good pin to plug it to my PI ?

                              M 1 Reply Last reply Reply Quote
                              • CharlesC Offline
                                Charles
                                last edited by

                                @Deennoo
                                you can post the picture on the forum, may be some other will know, because I'm not sure I will.

                                1 Reply Last reply Reply Quote
                                • M Offline
                                  Matthieu Laborie @Deennoo
                                  last edited by

                                  @Deennoo

                                  Hi, did you succeed getting the freebox server Oled Display work with a raspberry or Arduino? Did you find any wiring schema, or source code. I would like to reuse the whole SSD1327 and CAP1066 pad of the freebox.

                                  Regards

                                  1 Reply Last reply Reply Quote
                                  • A Offline
                                    akdracom
                                    last edited by

                                    I followed your procedures and up to the part of :

                                    git clone https://github.com/hallard/ArduiPi_OLED

                                    and received the following error message and can't go further :

                                    fatal: could not create work tree dir 'ArduiPi_OLED'.: No space left on device

                                    I am using a 8GB SD card and I think I have enough space - don't I ?

                                    I then issued df -Bm command to check space with following :

                                    Filesystem 1M-blocks Used Available Use% Mounted on
                                    /dev/root 4196M 4087M 0M 100% /
                                    devtmpfs 483M 0M 483M 0% /dev
                                    tmpfs 487M 0M 487M 0% /dev/shm
                                    tmpfs 487M 7M 481M 2% /run
                                    tmpfs 5M 1M 5M 1% /run/lock
                                    tmpfs 487M 0M 487M 0% /sys/fs/cgroup
                                    /dev/mmcblk0p6 63M 20M 44M 31% /boot
                                    tmpfs 98M 0M 98M 0% /run/user/1000

                                    Am I running out of memory or what, please advise - thanks

                                    1 Reply Last reply Reply Quote
                                    • A Offline
                                      akdracom
                                      last edited by

                                      I forget to mention that in my SD card - I also have installed a media player OS (OpenElec) in addition to the Raspian OS

                                      1 Reply Last reply Reply Quote
                                      • CharlesC Offline
                                        Charles
                                        last edited by

                                        @akdracom
                                        your're missing space on SD card 100% on /dev/root, you're SD seems to be formatted to 4GB

                                        May be trying raspiconfig and select the menu to expand filesystem to use full SD Size (8GB) will help

                                        1 Reply Last reply Reply Quote
                                        • D Offline
                                          donde
                                          last edited by

                                          Screen Never Lights
                                          New to OLED. Waiting for SSH1306 1.3" display like on Adafruit website. Sent for SH1106 display instead. Pinouts are left to right: VDD VSS SCK SDA D/C CS1 FS0 CS2
                                          Using Pi Zero. Went through tutorial OK I think. 2 problems:

                                          root@raspberrypi:~# ls /dev/i2c*
                                          /dev/i2c-0
                                          root@raspberrypi:~# ls /dev/spi*
                                          /dev/spidev0.0 /dev/spidev0.1

                                          The first check returned /dev/i2c-1 instead of /dev/i2c-0
                                          The second response was OK.
                                          Now I wasn't at root when I did commands, but at user.
                                          Other problem I had to supply sudo for
                                          ./oled_demo --verbose --oled 6
                                          I received this:

                                          pi@raspberrypi:~/ArduiPi_OLED/examples $ ./oled_demo --verbose --oled 6
                                          oled_demo v1.1
                                          -- OLED params --
                                          Oled is : SH1106 I2C 128x64
                                          -- Other Stuff --
                                          verbose is : yes

                                          bcm2835_init: Unable to open /dev/mem: Permission denied
                                          pi@raspberrypi:~/ArduiPi_OLED/examples $ sudo ./oled_demo --verbose --oled 6
                                          oled_demo v1.1
                                          -- OLED params --
                                          Oled is : SH1106 I2C 128x64
                                          -- Other Stuff --
                                          verbose is : yes

                                          x: 9y: 0dy: 3
                                          x: 30y: 0dy: 2
                                          x: 111y: 0dy: 2
                                          x: 81y: 0dy: 4
                                          x: 41y: 0dy: 2
                                          x: 85y: 0dy: 5
                                          x: 7y: 0dy: 5
                                          x: 76y: 0dy: 2
                                          x: 72y: 0dy: 3
                                          x: 76y: 0dy: 4

                                          Nothing on screen!
                                          I wired it this way from Pi Zero
                                          Pi 5 volts to Vdd
                                          Pi GND to Display VSS
                                          Pi SCL to Display SCK
                                          Pi SDA to Display SDA
                                          IO25 to Display FSO

                                          No ID on Display, just this description:

                                          Features

                                          Self-luminous display for backlight
                                          High resolution: 128 x 64
                                          Viewing angle: >160 degree
                                          Supports many control chip: Fully compatible with Arduino, 51 Series, MSP430 Series, STM32 / 2, CSR IC, etc.
                                          Ultra-low power consumption: full screen lit 0.08W
                                          Voltage: 3V ~ 5V DC
                                          Working Temperature: -30 oC ~ 70 oC
                                          Module Size: 32.0mm x 35.50mm x 4.1mm
                                          SPI Interface, need 4 IO only.
                                          Driver IC: SH1106
                                          

                                          Package Includes

                                          1 x 1.3" SPI Serial 128X64 OLED LCD LED Display Module for Arduino UNO R3
                                          

                                          Not sure what try next. What turns on screen to see at least something?
                                          Thanks ... donde

                                          1 Reply Last reply Reply Quote
                                          • D Offline
                                            donde
                                            last edited by

                                            I looked closer at box the display came and it said it is for SPI mode. I tried i2C and didn't light up. Then, tried SPI and still no success. Doesn't seem to be a RST pin. I see no pictures of the same pin arrangement on the Net. Looks to be a special display no one knows about. Guess I'll return it and hopefully the SSH1306 will be available soon, Sorry to take up so much room here is this comments section. Moderator, you can delete all I said on first post. donde

                                            1 Reply Last reply Reply Quote
                                            • First post
                                              Last post

                                            3

                                            Online

                                            5.7k

                                            Users

                                            534

                                            Topics

                                            5.0k

                                            Posts

                                            Top Topics

                                            • Denky 4 - Domoticz - Triphasé -
                                              Nicolas BernaertsN
                                              Nicolas Bernaerts
                                              0
                                              7
                                              249

                                            • Denky D4 et Linky Standard TInfo Rx Non Configuré
                                              CharlesC
                                              Charles
                                              0
                                              5
                                              282

                                            • CC1101
                                              CharlesC
                                              Charles
                                              0
                                              2
                                              117

                                            Popular Tags

                                            teleinfo
                                            24 topics
                                            arduino
                                            19 topics
                                            remora
                                            16 topics
                                            esp8266
                                            10 topics
                                            arduipi
                                            10 topics
                                            wifinfo
                                            7 topics
                                            raspberry
                                            7 topics
                                            broadcast
                                            7 topics
                                            Copyright © 2022 Charles-Henri Hallard | Return to blog page | Powered by NodeBB