Difference between revisions of "SSD1306"

From BITPlan Wiki
Jump to navigation Jump to search
 
(17 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  PCA9685 Raspberry Pi
+
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>
https://github.com/adafruit/Adafruit_Python_SSD1306.git
+
= 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>
 +
== 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)
  
<source lang='bash'>
+
  def white(self):
git clone https://github.com/adafruit/Adafruit_Python_SSD1306.git
+
    """ 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>
 +
<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]]

Latest revision as of 10:15, 7 February 2020

[edit]

DSC00046.JPG DSC00048.JPG DSC00040.JPG

[edit]

see also i2c bus

Color  SSD1306  Raspberry Pi
yellow SCL     	GPIO 3 / SCL (Pin 5)
orange SDA 	GPIO 2 / SDA (Pin 3)
Red    VCC / V 	3,3V (pin 1)
Black  GND     	GND (Pin 6)
[edit]
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

show.py

# 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()
python3 show.py

DSC00040.JPG