SSD1306: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
| (18 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
= Samples = | |||
[[File:DSC00046.JPG|400px]] | |||
[[File:DSC00048.JPG|400px]] | |||
[[File:DSC00040.JPG|400px]] | |||
= Wiring = | |||
see also {{Link|target=i2c bus}} | |||
* https://learn.adafruit.com/monochrome-oled-breakouts/python-wiring | |||
<pre> | <pre> | ||
Color | Color SSD1306 Raspberry Pi | ||
yellow SCL GPIO 3 / SCL (Pin 5) | yellow SCL GPIO 3 / SCL (Pin 5) | ||
orange SDA GPIO 2 / SDA (Pin 3) | orange SDA GPIO 2 / SDA (Pin 3) | ||
| Line 6: | Line 14: | ||
Black GND GND (Pin 6) | Black GND GND (Pin 6) | ||
</pre> | </pre> | ||
<source lang='bash'> | = Software = | ||
* https://github.com/adafruit/Adafruit_CircuitPython_SSD1306 | |||
<source lang='bash' highlight='1,3,13'> | |||
sudo raspi-config | |||
# enable i2c in Interfacing options | |||
sudo 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: -- -- -- -- -- -- -- -- | |||
pip3 install adafruit-circuitpython-ssd1306 | |||
mkdir display | |||
cd display | |||
# fix missing font | |||
curl -sL https://github.com/adafruit/Adafruit_CircuitPython_framebuf/blob/master/examples/font5x8.bin?raw=true -o font5x8.bin | |||
</source> | </source> | ||
== show.py == | |||
<source lang='python'> | |||
# Basic example of clearing and drawing pixels on a SSD1306 OLED display. | |||
# This example and library is meant to work with Adafruit CircuitPython API. | |||
# Author: Tony DiCola | |||
# Author: Wolfgang Fahl | |||
# License: Public Domain | |||
# Import all board pins. | |||
from board import SCL, SDA | |||
import busio | |||
# Import the SSD1306 module. | |||
import adafruit_ssd1306 | |||
# time helpers | |||
import time | |||
from time import strftime | |||
class TestOLED(object): | |||
""" test the OLED SSD1306 display""" | |||
def __init__(self,width,height): | |||
""" construct me with the given width and height""" | |||
# Create the I2C interface. | |||
self.i2c = busio.I2C(SCL, SDA) | |||
# Create the SSD1306 OLED class. | |||
# The first two parameters are the pixel width and pixel height. Change these | |||
# to the right size for your display! | |||
self.oled= adafruit_ssd1306.SSD1306_I2C(width, height, self.i2c) | |||
# Alternatively you can change the I2C address of the device with an addr parameter: | |||
#display = adafruit_ssd1306.SSD1306_I2C(128, 32, i2c, addr=0x31) | |||
def white(self): | |||
""" show all white pixels""" | |||
# Clear the display. Always call show after changing pixels to make the display | |||
# update visible! | |||
self.oled.fill(1) | |||
self.oled.show() | |||
def black(self): | |||
""" show all black pixels""" | |||
self.oled.fill(0) | |||
self.oled.show() | |||
def pattern(self): | |||
""" show some pixel patterns""" | |||
for p in range(32,2,-2): | |||
self.oled.fill(0) | |||
for y in range(self.oled.height): | |||
for x in range(self.oled.width): | |||
if x%(2*p)==0 and y%p==0: | |||
self.oled.pixel(x,y,1) | |||
self.oled.show() | |||
def shapes(self): | |||
""" show some shapes""" | |||
w=self.oled.width | |||
h=self.oled.height | |||
for d in range(0,h//2,2): | |||
self.oled.fill(0) | |||
self.oled.rect(d, d, w-2*d,h-2*d, True) | |||
self.oled.line(d, d, w-d,h-d, True) | |||
self.oled.line(d, h-d, w-d, d, True) | |||
self.oled.fill_rect((w-d-1)//2, (h-d-1)//2, d+1, d+1, True) | |||
self.oled.show() | |||
def text(self,lines,size=1): | |||
""" show the given lines of text at the given size""" | |||
self.oled.fill(0) | |||
yp=0 | |||
for line in lines: | |||
self.oled.text(line,0,yp,True,size=size) | |||
yp=yp+10*size | |||
self.oled.show() | |||
def clock(self): | |||
# please note that the order of lines is in reverse at size 2 | |||
while True: | |||
curDate=strftime("%Y-%m-%d") | |||
curTime=strftime("%H:%M:%S") | |||
test.text({curTime,curDate},size=2) | |||
time.sleep(1) | |||
test=TestOLED(128,64) | |||
time.sleep(1) | |||
test.black() | |||
time.sleep(1) | |||
test.shapes() | |||
time.sleep(1) | |||
test.pattern() | |||
time.sleep(1) | |||
test.text({"Good morning","Dear Maria!","How are you?"}) | |||
time.sleep(3) | |||
test.clock() | |||
</source> | |||
<source lang='bash' highlight='1'> | |||
python3 show.py | |||
</source> | |||
[[File:DSC00040.JPG]] | |||
= Datasheet = | |||
<pdf>https://cdn-shop.adafruit.com/datasheets/SSD1306.pdf</pdf> | <pdf>https://cdn-shop.adafruit.com/datasheets/SSD1306.pdf</pdf> | ||
<headertabs/> | |||
[[Category:Raspberry]] | |||