New Adafruit generic OLED display driver for Raspberry PI
-
Thank you for the detailed blog post. I followed your instructions and got 2 problems :
- there is no libi2c available, the only thing similar I've found is libi2c-dev so I installed that;
- 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
-
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
-
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!
-
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.
-
Meng
did you tried your non working OLED on an Arduino with I2CScan sketch just to see ? -
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. -
Meng,
yeah Seeed library works fine on Arduino, but not sure there is a port on Raspberry Pi -
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!
-
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?
-
Hi gbona,
Did you checked that your I2C oled is visible with i2cdetect ? If so does his I2C address is 0x3C ? -
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
-
@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.
-
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
-
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 ?
-
@Deennoo
you can post the picture on the forum, may be some other will know, because I'm not sure I will. -
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
-
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/1000Am I running out of memory or what, please advise - thanks
-
I forget to mention that in my SD card - I also have installed a media player OS (OpenElec) in addition to the Raspian OS
-
@akdracom
your're missing space on SD card 100% on /dev/root, you're SD seems to be formatted to 4GBMay be trying raspiconfig and select the menu to expand filesystem to use full SD Size (8GB) will help
-
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.1The 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 : yesbcm2835_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 : yesx: 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: 4Nothing 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 FSONo 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