I have .91inch 128×32 pixel oled display. here
im following Tom’s Hardware tutorial here
I’m using Thonny on windows 10
ive basically copy and pasted from Tom’s hardware
from machine import Pin, I2C from ssd1306 import SSD1306_I2C i2c=I2C(0,sda=Pin(0), scl=Pin(1), freq=400000) oled = SSD1306_I2C(128, 64, i2c) oled.text("Tom's Hardware", 0, 0) oled.show()
I named the file “main.py”
I have the ssd1306 micropython package. when i try to run it i get the following message
Traceback (most recent call last): File "<stdin>", line 17, in <module> File "/lib/ssd1306.py", line 110, in __init__ File "/lib/ssd1306.py", line 36, in __init__ File "/lib/ssd1306.py", line 71, in init_display File "/lib/ssd1306.py", line 115, in write_cmd OSError: 5
I honestly dont know what this is trying to say. i googled “OSError 5” and the only solutions that i could find were to add a delay between the initiation and the first write to the i2c device. that didnt work.
does anyone know how to fix this error?
- #Zeno, Welcome and nice to meet you. Ah, let me see. Please let everybody know which SSD1306 you are testing, and which tutorial you are following. Two links would help a lot. Cheers. – tlfong01 yesterday
- I searched my old files and found a setup record, as shown in Appendix A below. Please confirm your device is exactly the same as mine. So I would tailor my answer accordingly. – tlfong01 yesterday
- I have added a couple of references to my answer. I would suggest you to skim them and perhaps also listed some references in your answer. This shows the research work you have done, and other readers would upvote you. At least you should show that you are reading Tom’s Hardware columns and give the link in your answer. – tlfong01 yesterday
How can Rpi Pico Micropython Talk To I2C LCD SSD1306?
/ to continue, …
- It is pretty likely that Pico Thonny Python’s error message “OSError: 5” is similar to Rpi Os’s “OSError: [Errno 121] Remote I/O error“
- Errno 121 usually occurs when running an I2C python program with the following situation:2.1 The hardware wiring connection is bad, eg,2.1.1 Forget to plug/connect the cable,2.1.2 Too long cabling, eg, over 30cm,2.1.2 I2C frequency too high, over 400kHz,2.1.3 I2C device, eg. I2C I2C MCP23017, which is sensitive to noise,2.1.4 I2C bus overloaded, with more than 4 devices, causing bus capacitance over 400pF.
/ to continue, …
/ to continue, …
/ to continue, …
Appendix A – Old SSD1306 Setup Record
Appendix B – Installing Rpi Pico MicroPython OLED SSD1306 Library – Tom’s Hardware
- Click on Tools > Manage Packages to open Thonny’s package manager for Python libraries.
- Type “ssd1306” in the search bar and click “Search on PyPI”.
- Click on “micropython-ssd1306” in the returned results and then click on Install. This will copy the library to a folder, lib on the Pico.
- Click Close to return to the main interface.
Note – Only partial installed, with error code 1
I installed ssd1308 second time and had good luck.
Appendix C – Pico version of Rpi4B OS buster’s command “i2cdetect -y 1”
I am using the Pico Thonny Python function to detect and list the I2C devices on I2C bus 1 and 2. The following sample output show two i2c pcf8574 devices are detected.
Note – The Thonny sample is badly formatted in RpiSE here. So I am going to use PenZu to write a better formatted file (to be include in next Appendix D).
MicroPython v1.14 on 2021-02-02; Raspberry Pi Pico with RP2040
Type “help()” for more information.
%Run -c $EDITOR_CONTENT Begin scanI2cBuses(), tlfong01 2021apr03hkt1431, …
Begin testPcf8574(), … >>>>>>>>>>
*** Set up I2C bus list [i2cBus0, i2cBus1] ***
*** I2C Bus List Config *** I2C Bus Num = 0 Bus nick name = Amy Frequency = 100 kHz sdaPin = 0 sclPin = 1
I2C Bus Num = 1 Bus nick name = Betty Frequency = 400 kHz sdaPin = 2 sclPin = 3
*** I2c Device Dict *** i2cDevNum = 0 DeviceName = PCF8574 #1 NickName = Connie I2cBusNum = 0 I2cDevAddr = 0x23 i2cDevNum = 1 DeviceName = PCF8574 #2 NickName = Daisy I2cBusNum = 1 I2cDevAddr = 0x24 i2cDevNum = 2 DeviceName = LCD2004 #1 NickName = Emily I2cBusNum = 0 I2cDevAddr = 0x27 i2cDevNum = 3 DeviceName = LCD1602 #1 NickName = Fanny I2cBusNum = 1 I2cDevAddr = 0x22
*** Scan and print I2C devices I2C bus list [i2cBus0, i2cBus1] *** I2C Bus Num = 0 I2cDeviceList = 0x23
I2C Bus Num = 1 I2cDeviceList = 0x24
End testPcf8574(). >>>>>>>>>>
End scanI2cBuses(), tlfong01 2021apr03hkt1431, …
/ to continue, …
Appendix D – Full program listing of I2C Bus Scan program discussed in Appendix C above.
Appendix E – MicroPython ssd1306.py Listing v0.1
- Windows 10 Thonny Program and Data Folder Locations:Program Folder = c: > user > AppData > Local > Programs > Thonny > Lib > site-packages > thonnyData Folder = c: > user > AppData > Roaming > Thonny
- This ssd130.6py is only 150 python statement long, and contains two classes, one for I2C, an another for SPI.
Appendix F – Rpi4B Python Hello World Program for SSD1306
- yes, I have the same OLED as you. 128×32 pixels I2C… – Zeno yesterday
- It appears that you have a rasp pi 4, I am doing this on windows with thonny, and this is the tutorial (one of many tutorials that i have tried to get the oled working) tomshardware.com/how-to/oled-display-raspberry-pi-pico – Zeno yesterday
- perhaps, i should also mention that I have gotten the oled to work on a pro micro which is a copy of adafruit’s pro micro – Zeno yesterday
- Ah, some misunderstanding here. As I said, the setup I showed was 2 years ago on Rpi4B Thonny. I am showing this for your reference and also to refresh my memory. I am glad that you are using Windows Thonny Micro Python and not ESP32 or AdaFruit Circuit Python. I am using both Rpi4B and Windows Thonny. So I will try to use Windows for you to compare and contrast, to troublsshoot. – tlfong01 yesterday
- here is one of the websites discussing adding a small delay that i mentioned earlier forum.micropython.org/viewtopic.php?t=4746 – Zeno yesterday
- Ah, your successful testing on AdaFruit Pro Micro is very useful to our troubleshooting. So I won’t guess your OLED is bad. – tlfong01 yesterday
- Just to confirm, so you have already installed the SSD1306 micropython library in your Pico? – tlfong01 yesterday
- 1yes, i have selected micropython ssd1306 and not circuitpythonand not ssd1327. the website suggests taking this to chat. should we? – Zeno yesterday
- 1i added a picture that might help you see what i chose, just in case. – Zeno yesterday
- Ha, your pic shows you have a long and thin SSD1306. But mine is a short, fat guy. I forgot the details of what I did two years ago. So I need to refresh my memory. Ah locking down lunch time. I need to go and eat. See you later. PS – And let us move to chat room – tlfong01 yesterday
- Let us continue this discussion in chat. – Zeno yesterday