kopia lustrzana https://github.com/stlehmann/micropython-ssd1306
Add example usage and installation to README
rodzic
61f5636448
commit
facca9af0a
52
README.md
52
README.md
|
@ -1,2 +1,52 @@
|
|||
# micropython-ssd1306
|
||||
A fork of the driver for SSD1306 displays to make it available on PyPi
|
||||
This is a fork of the driver for SSD1306 displays which is hosted in the
|
||||
[Micropython package](https://github.com/micropython/micropython). The purpose
|
||||
of this fork is to make the driver available on PyPi and thus installable via
|
||||
the upip package manager.
|
||||
|
||||
## Installation
|
||||
Use the upip package manager:
|
||||
|
||||
upip.install('micropython-ssd1306')
|
||||
|
||||
If your board or your computer doesn't have an active internet connection you
|
||||
can also clone this project on your local drive and copy the *ssd1306.py* to
|
||||
your board.
|
||||
|
||||
## Example Usage
|
||||
This shows an example usage on an *ESP32* board with an *SSD1306* display
|
||||
with an resolution of 128x32 pixels. The display is connected via I2C. On the
|
||||
*ESP32* the I2C pins are: SDA: 23, SCL: 22.
|
||||
|
||||
First we set up the I2C bus on our *ESP32* and scan for devices.
|
||||
|
||||
>>> import machine
|
||||
>>> i2c = machine.I2C(sda=machine.Pin(23), scl=machine.Pin(22))
|
||||
>>> i2c.scan()
|
||||
[60]
|
||||
|
||||
This shows us that there is a device on address 60 which is 3C in Hex. That is
|
||||
where our display is supposed to live. Now we create an object for our OLED
|
||||
display.
|
||||
|
||||
>>> from ssd1306 import SSD1306_I2C
|
||||
>>> oled = SSD1306_I2C(128, 32, i2c)
|
||||
|
||||
This is it. Now we can use our OLED display:
|
||||
|
||||
>>> oled.fill(1)
|
||||
>>> oled.show()
|
||||
|
||||
This fills the whole display with white pixels. To clear the display do:
|
||||
|
||||
>>> oled.fill(0)
|
||||
>>> oled.show()
|
||||
|
||||
Now we can also write some text:
|
||||
|
||||
>>> oled.text('Hello', 0, 0)
|
||||
>>> oled.text('World', 0, 10)
|
||||
>>> oled.show()
|
||||
|
||||
Find more information on how to use the SSD1306 on the great [tutorial about
|
||||
the OLED featherwing from Adafruit](https://learn.adafruit.com/adafruit-oled-featherwing/circuitpython#usage-6-4).
|
||||
|
|
|
@ -0,0 +1,145 @@
|
|||
#
|
||||
# This module overrides distutils (also compatible with setuptools) "sdist"
|
||||
# command to perform pre- and post-processing as required for MicroPython's
|
||||
# upip package manager.
|
||||
#
|
||||
# Preprocessing steps:
|
||||
# * Creation of Python resource module (R.py) from each top-level package's
|
||||
# resources.
|
||||
# Postprocessing steps:
|
||||
# * Removing metadata files not used by upip (this includes setup.py)
|
||||
# * Recompressing gzip archive with 4K dictionary size so it can be
|
||||
# installed even on low-heap targets.
|
||||
#
|
||||
import sys
|
||||
import os
|
||||
import zlib
|
||||
from subprocess import Popen, PIPE
|
||||
import glob
|
||||
import tarfile
|
||||
import re
|
||||
import io
|
||||
|
||||
from distutils.filelist import FileList
|
||||
from setuptools.command.sdist import sdist as _sdist
|
||||
|
||||
|
||||
def gzip_4k(inf, fname):
|
||||
comp = zlib.compressobj(level=9, wbits=16 + 12)
|
||||
with open(fname + ".out", "wb") as outf:
|
||||
while 1:
|
||||
data = inf.read(1024)
|
||||
if not data:
|
||||
break
|
||||
outf.write(comp.compress(data))
|
||||
outf.write(comp.flush())
|
||||
os.rename(fname, fname + ".orig")
|
||||
os.rename(fname + ".out", fname)
|
||||
|
||||
|
||||
FILTERS = [
|
||||
# include, exclude, repeat
|
||||
(r".+\.egg-info/(PKG-INFO|requires\.txt)", r"setup.py$"),
|
||||
(r".+\.py$", r"[^/]+$"),
|
||||
(None, r".+\.egg-info/.+"),
|
||||
]
|
||||
|
||||
|
||||
outbuf = io.BytesIO()
|
||||
|
||||
def filter_tar(name):
|
||||
fin = tarfile.open(name, "r:gz")
|
||||
fout = tarfile.open(fileobj=outbuf, mode="w")
|
||||
for info in fin:
|
||||
# print(info)
|
||||
if not "/" in info.name:
|
||||
continue
|
||||
fname = info.name.split("/", 1)[1]
|
||||
include = None
|
||||
|
||||
for inc_re, exc_re in FILTERS:
|
||||
if include is None and inc_re:
|
||||
if re.match(inc_re, fname):
|
||||
include = True
|
||||
|
||||
if include is None and exc_re:
|
||||
if re.match(exc_re, fname):
|
||||
include = False
|
||||
|
||||
if include is None:
|
||||
include = True
|
||||
|
||||
if include:
|
||||
print("including:", fname)
|
||||
else:
|
||||
print("excluding:", fname)
|
||||
continue
|
||||
|
||||
farch = fin.extractfile(info)
|
||||
fout.addfile(info, farch)
|
||||
fout.close()
|
||||
fin.close()
|
||||
|
||||
|
||||
def make_resource_module(manifest_files):
|
||||
resources = []
|
||||
# Any non-python file included in manifest is resource
|
||||
for fname in manifest_files:
|
||||
ext = fname.rsplit(".", 1)
|
||||
if len(ext) > 1:
|
||||
ext = ext[1]
|
||||
else:
|
||||
ext = ""
|
||||
if ext != "py":
|
||||
resources.append(fname)
|
||||
|
||||
if resources:
|
||||
print("creating resource module R.py")
|
||||
resources.sort()
|
||||
last_pkg = None
|
||||
r_file = None
|
||||
for fname in resources:
|
||||
try:
|
||||
pkg, res_name = fname.split("/", 1)
|
||||
except ValueError:
|
||||
print("not treating %s as a resource" % fname)
|
||||
continue
|
||||
if last_pkg != pkg:
|
||||
last_pkg = pkg
|
||||
if r_file:
|
||||
r_file.write("}\n")
|
||||
r_file.close()
|
||||
r_file = open(pkg + "/R.py", "w")
|
||||
r_file.write("R = {\n")
|
||||
|
||||
with open(fname, "rb") as f:
|
||||
r_file.write("%r: %r,\n" % (res_name, f.read()))
|
||||
|
||||
if r_file:
|
||||
r_file.write("}\n")
|
||||
r_file.close()
|
||||
|
||||
|
||||
class sdist(_sdist):
|
||||
|
||||
def run(self):
|
||||
self.filelist = FileList()
|
||||
self.get_file_list()
|
||||
make_resource_module(self.filelist.files)
|
||||
|
||||
r = super().run()
|
||||
|
||||
assert len(self.archive_files) == 1
|
||||
print("filtering files and recompressing with 4K dictionary")
|
||||
filter_tar(self.archive_files[0])
|
||||
outbuf.seek(0)
|
||||
gzip_4k(outbuf, self.archive_files[0])
|
||||
|
||||
return r
|
||||
|
||||
|
||||
# For testing only
|
||||
if __name__ == "__main__":
|
||||
filter_tar(sys.argv[1])
|
||||
outbuf.seek(0)
|
||||
gzip_4k(outbuf, sys.argv[1])
|
Ładowanie…
Reference in New Issue