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.
    • M Offline
      Mr_Tom
      last edited by

      Ok. I changed the Raspberry Pi wiring back to Adafruit. I can run Adafruit's Python examples okay. I changed those 2 lines in 'ArduiPi_OLED_lib.h'. I 'sudo make' the library files, and 'sudo make' the example. When I run 'sudo ./oled_demo -o 1' nothing happens.

      I put some 'printf' commands in the example for debugging, and it seems to lock up after it calls 'display.begin()'.

      I can't find where the function display.begin() is so I can diagnose/debug it further.

      1 Reply Last reply Reply Quote
      • M Offline
        Mr_Tom
        last edited by

        I downloaded the older ArduiPi_SSD1306 and tried that, but same thing. Freezes after it runs 'display.begin()'. I changed the RESET and DC in the .h file as you mentioned. I don't understand why I can't access the display in C++, but Python works perfectly. I'm using a Raspberry Pi 2 if that makes a difference, and an SSD1306 1.3" 128x64 purchased from Adafruit.

        1 Reply Last reply Reply Quote
        • M Offline
          Mr_Tom
          last edited by

          Update: I setup my OLED in I2C mode and changed the address to 3D, and it worked. But I would still rather use SPI mode.

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

            That's an interesting point, I did not tried on a PI V2, I have one at home, I need to test just in case, because the driver relies on old BCM2835 library that may be I need to update for PI V2, worth checking.

            Good to know it works with I2C but I understand you prefer SPI, for sure it's so much faster.

            1 Reply Last reply Reply Quote
            • M Offline
              Mr_Tom
              last edited by

              Hi, Charles. Any progress with testing the library on a PI v2? Is the BCM2836 extremely different than the BCM2835?

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

                Thank you for the detailed blog post. I followed your instructions and got 2 problems :

                1. there is no libi2c available, the only thing similar I've found is libi2c-dev so I installed that;
                2. I got error messages while trying to "sudo make" within the example folder, here is a photo showing the result.
                  http://i.imgur.com/MkWvXbC.jpg

                Btw I am on a Pi B V2. One strange thing is that when I ran "sudo i2cdetect -y 1" there is nothing on the table. But while I tried to use Adafruit_SSD1306 library, the oled would respond (weirdly).

                Thanks

                1 Reply Last reply Reply Quote
                • 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
                                            • First post
                                              Last post

                                            7

                                            Online

                                            5.7k

                                            Users

                                            534

                                            Topics

                                            5.0k

                                            Posts

                                            Top Topics

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

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

                                            • CC1101
                                              CharlesC
                                              Charles
                                              0
                                              2
                                              116

                                            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