2016-11-15 08:54:19 +00:00
|
|
|
# ssd1306: Introduction
|
|
|
|
|
|
|
|
The official SSD1306 OLED display driver supports a single 8x8 pixel monospaced
|
|
|
|
font. Users of the 128x64 displays in particular may wish to use larger fonts.
|
|
|
|
This provides a means of extending the official driver to support this. Suitable
|
2018-02-20 08:12:03 +00:00
|
|
|
font files may be created from standard `ttf` or `otf` files using the utility
|
2016-11-15 08:54:19 +00:00
|
|
|
presented [here](https://github.com/peterhinch/micropython-font-to-py.git).
|
|
|
|
|
2018-05-09 07:18:15 +00:00
|
|
|
Requires firmware dated Jan 2018 or later.
|
2016-11-15 08:54:19 +00:00
|
|
|
|
2018-02-20 08:12:03 +00:00
|
|
|
A few users have pointed out limitations in the `Writer` class. While it works
|
|
|
|
it is a rather minimal "proof of concept" for the font creator. PR's offering
|
|
|
|
enhancements will be gratefully considered.
|
|
|
|
|
|
|
|
The font file format is something of a "given" as it is used elsewhere. So any
|
|
|
|
PR requiring this to be changed is unlikely to find favour.
|
|
|
|
|
2016-11-15 08:54:19 +00:00
|
|
|

|
|
|
|
|
2018-02-21 06:10:37 +00:00
|
|
|
###### [Main README](../README.md)
|
2018-02-20 08:12:03 +00:00
|
|
|
|
2016-12-17 12:14:50 +00:00
|
|
|
## Release notes
|
|
|
|
|
2018-02-20 08:12:03 +00:00
|
|
|
V0.21 21st March 2017 The `Writer` class now uses the framebuf blit method.
|
2017-03-21 11:51:49 +00:00
|
|
|
This works for monochrome devices using 1-bit colour mapping. Example code is
|
|
|
|
provided for rendering to colour devices: the framebuf class does not yet offer
|
|
|
|
an effective way to handle colour mapping when blitting between buffers with
|
|
|
|
differing colour maps.
|
2016-12-17 12:14:50 +00:00
|
|
|
|
2016-12-17 12:17:32 +00:00
|
|
|
Note that framebuf scrolling does not clear the exposed region of the screen.
|
|
|
|
This is by design but see issue #2692.
|
|
|
|
|
2016-11-15 08:54:19 +00:00
|
|
|
# Files
|
|
|
|
|
2018-02-20 08:12:03 +00:00
|
|
|
1. ssd1306_test.py A simple test program.
|
|
|
|
2. ssd1306.py A snapshot of the current official driver.
|
|
|
|
3. writer.py A generic Writer class. Keeps track of the text insertion point
|
|
|
|
over multiple fonts, handles newline and vertical scrolling if required.
|
2016-11-15 08:54:19 +00:00
|
|
|
|
|
|
|
In addition several font files are provided as samples.
|
|
|
|
|
|
|
|
# Getting started
|
|
|
|
|
2018-02-20 08:12:03 +00:00
|
|
|
The file `ssd1306_test.py` may need editing to match your hardware notably
|
2017-12-23 17:43:10 +00:00
|
|
|
the values of WIDTH and HEIGHT which are set to 128x64 (w*h) pixels. Wiring
|
|
|
|
details are included in code comments but may be changed if required as soft
|
|
|
|
I2C and SPI interfaces are specified.
|
|
|
|
|
|
|
|
Its principal testing was performed on Pyboards but I'd expect it to be
|
|
|
|
portable to any device supporting the official driver and the `machine` module.
|
2016-11-15 08:54:19 +00:00
|
|
|
|
2018-02-20 08:12:03 +00:00
|
|
|
Copy files 1-3 and `freesans20.py` to the target and issue
|
2016-11-15 08:54:19 +00:00
|
|
|
|
|
|
|
```python
|
|
|
|
import ssd1306_test
|
2017-12-23 17:43:10 +00:00
|
|
|
ssd1306_test.test() # If it uses an I2C connection
|
|
|
|
ssd1306_test.test(True) # If it uses SPI
|
2016-11-15 08:54:19 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
# Principle of Operation
|
|
|
|
|
|
|
|
Font files are converted to Python modules for ease of use and also (optionally)
|
|
|
|
to enable the modules to be frozen as bytecode to reduce RAM requirements.
|
|
|
|
|
|
|
|
The user program should import all fonts which are to be used and declare a
|
2018-02-20 08:12:03 +00:00
|
|
|
`Writer` instance for each one. Rendering text at the current insertion point
|
|
|
|
is then simply a matter of issuing the appropriate writer's `printstring`
|
2016-11-15 08:54:19 +00:00
|
|
|
method. After issuing all such calls required by your application the display
|
|
|
|
should be updated by issuing
|
|
|
|
|
|
|
|
```python
|
|
|
|
ssd.show()
|
|
|
|
```
|
|
|
|
|
|
|
|
# The Writer class
|
|
|
|
|
|
|
|
The principal interaction with the driver is via this class. One instance should
|
|
|
|
be created for each font in use. Its function is to keep track of the text
|
|
|
|
insertion point over successive uses with multiple fonts and to handle newline
|
|
|
|
characters and vertical scrolling. Its behaviour when text overruns the end of
|
2018-02-20 08:12:03 +00:00
|
|
|
a line or the bottom of the screen may be controlled using its `set_clip`
|
2016-11-15 08:54:19 +00:00
|
|
|
method.
|
|
|
|
|
|
|
|
## Methods
|
|
|
|
|
2018-02-20 08:12:03 +00:00
|
|
|
1. `Constructor` This takes the `ssd` display instance and the font module
|
|
|
|
as mandatory args.
|
|
|
|
2. `printstring` Takes a text string as argument and renders it at the current
|
|
|
|
insertion point. Respects newline characters.
|
2016-11-15 08:54:19 +00:00
|
|
|
|
|
|
|
## Class methods
|
|
|
|
|
2018-02-20 08:12:03 +00:00
|
|
|
1. `set_textpos` Mandatory integer args `row`, `col` defined in pixels
|
|
|
|
relative to the top left hand corner of the display. Sets the current text
|
|
|
|
insertion point. The coordinates of a glyph refer to its top left corner. The
|
2016-11-15 08:54:19 +00:00
|
|
|
initial default is (0,0) with text being rendered at the top left of the display.
|
2018-02-20 08:12:03 +00:00
|
|
|
2. `set_clip` Mandatory boolean args `row_clip`, `col_clip`. These define
|
|
|
|
behaviour when text overruns the physical width or height of the display. By
|
|
|
|
default text overrunning the display width will continue on the next row. Setting
|
|
|
|
`col_clip` overrides this such that overrunning text is lost. Similarly, by
|
|
|
|
default text overrunning the bottom of the display will cause text above to
|
|
|
|
scroll up to accommodate it. Setting `row_clip` will override this behaviour
|
|
|
|
causing text to be clipped.
|
2016-11-15 08:54:19 +00:00
|
|
|
|
2016-11-15 13:27:18 +00:00
|
|
|
# Use of font_to_py.py
|
|
|
|
|
|
|
|
To convert font files to Python for use with this driver the default (vertical)
|
|
|
|
mapping and bit order should be used. The only optional argument which may be
|
2018-02-20 08:12:03 +00:00
|
|
|
needed is `-f` if fixed-width rendering is desired.
|
2016-11-15 13:27:18 +00:00
|
|
|
|
2016-11-15 08:54:19 +00:00
|
|
|
# License
|
|
|
|
|
|
|
|
Any code placed here is released under the MIT License (MIT).
|
|
|
|
The MIT License (MIT)
|
|
|
|
Copyright (c) 2016 Peter Hinch
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
|
|
of this software and associated documentation files (the "Software"), to deal
|
|
|
|
in the Software without restriction, including without limitation the rights
|
|
|
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
|
|
copies of the Software, and to permit persons to whom the Software is
|
|
|
|
furnished to do so, subject to the following conditions:
|
|
|
|
The above copyright notice and this permission notice shall be included in
|
|
|
|
all copies or substantial portions of the Software.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
|
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
|
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
|
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
|
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
|
|
THE SOFTWARE.
|