From 7c92c7bbf1c3bb87dffd3f0a63e1d8a5a381ce98 Mon Sep 17 00:00:00 2001 From: Mike Causer Date: Sun, 25 Jun 2017 00:25:16 +1000 Subject: [PATCH 1/6] Update readme --- LICENSE.md => LICENSE.txt | 2 +- README.md | 20 +++++++++----------- 2 files changed, 10 insertions(+), 12 deletions(-) rename LICENSE.md => LICENSE.txt (97%) diff --git a/LICENSE.md b/LICENSE.txt similarity index 97% rename from LICENSE.md rename to LICENSE.txt index 30de3b9..f1f7203 100644 --- a/LICENSE.md +++ b/LICENSE.txt @@ -1,4 +1,4 @@ -The MIT License (MIT) +MIT License Copyright (c) 2016 Mike Causer diff --git a/README.md b/README.md index ccdee91..3adb979 100644 --- a/README.md +++ b/README.md @@ -44,14 +44,14 @@ from machine import Pin, SPI spi = SPI(1) spi.init(baudrate=8000000, polarity=0, phase=0) -CE = Pin(2) -DC = Pin(15) -RST = Pin(4) +cs = Pin(2) +dc = Pin(15) +rst = Pin(0) # backlight on -BL = Pin(12, Pin.OUT, value=1) +bl = Pin(12, Pin.OUT, value=1) -lcd = pcd8544.PCD8544(spi, CE, DC, RST) +lcd = pcd8544.PCD8544(spi, cs, dc, rst) # test pattern (50% on) lcd.data(bytearray([0x55, 0xAA] * 42 * 6)) @@ -77,6 +77,7 @@ lcd.invert(True) lcd.invert(False) lcd.reset() +lcd.init() # adjust contrast, bias and temp lcd.contrast(0x1f, pcd8544.BIAS_1_40, pcd8544.TEMP_COEFF_0) @@ -87,11 +88,8 @@ lcd.contrast(0x3f, pcd8544.BIAS_1_40, pcd8544.TEMP_COEFF_2) # use the framebuf import framebuf -width = 84 -height = 48 -pages = height // 8 -buffer = bytearray(pages * width) -framebuf = framebuf.FrameBuffer1(buffer, width, height) +buffer = bytearray((lcd.height // 8) * lcd.width) +framebuf = framebuf.FrameBuffer1(buffer, lcd.width, lcd.height) framebuf.text('Hello', 0, 0, 1) framebuf.pixel(30, 30, 1) @@ -136,7 +134,7 @@ In horizontal mode you can use framebuf with MONO_VLSB format. Vertical mode doe WeMos D1 Mini | PCD8544 LCD ------------- | ---------- -D2 (GPIO4) | 0 RST +D3 (GPIO0) | 0 RST D4 (GPIO2) | 1 CE D8 (GPIO15) | 2 DC D7 (GPIO13) | 3 Din From 5f95c70d30ec2a9404a1bdec902cacc6cf2069a2 Mon Sep 17 00:00:00 2001 From: Mike Causer Date: Sun, 25 Jun 2017 22:54:47 +1000 Subject: [PATCH 2/6] Fix init not setting vertical addressing when switching --- pcd8544.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pcd8544.py b/pcd8544.py index 66fe40c..aa0656d 100644 --- a/pcd8544.py +++ b/pcd8544.py @@ -64,6 +64,7 @@ def init(self, horizontal=True, contrast=0x3f, bias=BIAS_1_40, temp=TEMP_COEFF_2 # switch to vertical addressing if not horizontal: self.fn |= ADDRESSING_VERT + self.cmd(self.fn) self.contrast(contrast, bias, temp) self.cmd(DISPLAY_NORMAL) From cfc384942859fc8826b2fa9719d60017c1d82fae Mon Sep 17 00:00:00 2001 From: Mike Causer Date: Wed, 8 Aug 2018 02:20:50 +1000 Subject: [PATCH 3/6] Add license --- README.md | 7 ++++++- pcd8544.py | 26 +++++++++++++++++++++++++- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 3adb979..dd7ca04 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,7 @@ A MicroPython library for the PCD8544 84x48 LCD, used by the Nokia 5110 display. ![demo](docs/demo.jpg) #### Pinout + ``` +-----------------+ | | @@ -38,7 +39,7 @@ $ ampy put pcd8544.py **Hello World** -``` +```python import pcd8544 from machine import Pin, SPI @@ -149,3 +150,7 @@ G | 7 Gnd * [micropython.org](http://micropython.org) * [Adafruit Ampy](https://learn.adafruit.com/micropython-basics-load-files-and-run-code/install-ampy) * [PCD8544 Datasheet](docs/PCD8544.pdf) + +## License + +Licensed under the [MIT License](http://opensource.org/licenses/MIT). diff --git a/pcd8544.py b/pcd8544.py index aa0656d..c6fc60f 100644 --- a/pcd8544.py +++ b/pcd8544.py @@ -1,4 +1,28 @@ -# MicroPython PCD8544 84x48 LCD driver, eg Nokia 5110 LCD. +""" +MicroPython Nokia 5110 PCD8544 84x48 LCD driver +https://github.com/mcauser/micropython-pcd8544 + +MIT License +Copyright (c) 2016 Mike Causer + +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. +""" from micropython import const from ustruct import pack From a591984fede6379e9d011d45cdd98429a744e790 Mon Sep 17 00:00:00 2001 From: Mike Causer Date: Sun, 19 Aug 2018 04:48:56 +1000 Subject: [PATCH 4/6] Add more examples --- .gitignore | 1 + README.md | 93 ++++++--------- docs/esp8266_pinout.jpg | Bin 0 -> 104814 bytes docs/horizontal-addressing.png | Bin 0 -> 19229 bytes docs/nokia-splash.gif | Bin 0 -> 534 bytes docs/nokia5110_pinout.jpg | Bin 0 -> 65700 bytes docs/vertical-addressing.png | Bin 0 -> 13613 bytes examples/3d_cube.py | 74 ++++++++++++ examples/addressing/README.md | 175 ++++++++++++++++++++++++++++ examples/backlight_pwm.py | 25 ++++ examples/framebuf.py | 74 ++++++++++++ examples/framebuf_extend.py | 26 +++++ examples/framebuf_inherit.py | 25 ++++ examples/http-get/http_get_image.py | 33 ++++++ examples/http-get/urequests.py | 124 ++++++++++++++++++++ examples/http-get/wemos.dat | Bin 0 -> 504 bytes examples/http-get/wemos.gif | Bin 0 -> 315 bytes examples/http-get/wemos.py | 2 + examples/qr-code/qr-code.gif | Bin 0 -> 150 bytes examples/qr-code/qr_code.py | 29 +++++ examples/screen_saver.py | 63 ++++++++++ examples/sine_wave.py | 59 ++++++++++ pcd8544.py | 68 +++++++++-- pcd8544_fb.py | 167 ++++++++++++++++++++++++++ 24 files changed, 967 insertions(+), 71 deletions(-) create mode 100644 .gitignore create mode 100644 docs/esp8266_pinout.jpg create mode 100644 docs/horizontal-addressing.png create mode 100644 docs/nokia-splash.gif create mode 100644 docs/nokia5110_pinout.jpg create mode 100644 docs/vertical-addressing.png create mode 100644 examples/3d_cube.py create mode 100644 examples/addressing/README.md create mode 100644 examples/backlight_pwm.py create mode 100644 examples/framebuf.py create mode 100644 examples/framebuf_extend.py create mode 100644 examples/framebuf_inherit.py create mode 100644 examples/http-get/http_get_image.py create mode 100644 examples/http-get/urequests.py create mode 100644 examples/http-get/wemos.dat create mode 100644 examples/http-get/wemos.gif create mode 100644 examples/http-get/wemos.py create mode 100644 examples/qr-code/qr-code.gif create mode 100644 examples/qr-code/qr_code.py create mode 100644 examples/screen_saver.py create mode 100644 examples/sine_wave.py create mode 100644 pcd8544_fb.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..cd78447 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +temp/ \ No newline at end of file diff --git a/README.md b/README.md index dd7ca04..b1b5cb9 100644 --- a/README.md +++ b/README.md @@ -1,50 +1,42 @@ # MicroPython PCD8544 -A MicroPython library for the PCD8544 84x48 LCD, used by the Nokia 5110 display. +A MicroPython library for the Philips PCD8544 84x48 monochrome LCD, used by the Nokia 5110 display. ![demo](docs/demo.jpg) #### Pinout -``` -+-----------------+ -| | -| +-------------+ | -| | Nokia 5110 | | -| | PCD8544 | | -| | 84x48 | | -| | | | -| +-------------+ | -+-----------------+ - | | | | | | | | - 1 2 3 4 5 6 7 8 -``` +![demo](docs/nokia5110_pinout.jpg) + +![demo](docs/esp8266_pinout.jpg) -* 1 RST -* 2 CE -* 3 DC -* 4 DIN -* 5 CLK -* 6 VCC -* 7 BL -* 8 GND +Pin | Name | Description +:--:|:----:|:-------------------------------- +1 | RST | External reset input, active low +2 | CE | Chip enable, active low +3 | D/C | Data high / Command low +4 | DIN | Serial data input +5 | CLK | Serial clock, up to 4 Mbits/s +6 | VCC | Supply voltage 2.7-3.3V +7 | BL | Backlight +8 | GND | Ground ## Example Copy the file to your device, using ampy, webrepl or compiling and deploying. eg. -``` +```bash $ ampy put pcd8544.py ``` -**Hello World** +**Basic Example** ```python import pcd8544 from machine import Pin, SPI spi = SPI(1) -spi.init(baudrate=8000000, polarity=0, phase=0) +spi.init(baudrate=2000000, polarity=0, phase=0) cs = Pin(2) dc = Pin(15) rst = Pin(0) @@ -59,14 +51,14 @@ lcd.data(bytearray([0x55, 0xAA] * 42 * 6)) # bitmap smiley (horzontal msb) lcd.clear() -# draw 8x16 in bank 0 +# draw 8x16 in bank 0 (rows 0..7) lcd.position(0, 0) lcd.data(bytearray(b'\xE0\x38\xE4\x22\xA2\xE1\xE1\x61\xE1\x21\xA2\xE2\xE4\x38\xE0\x00')) -# draw 8x16 in bank 1 +# draw 8x16 in bank 1 (rows 8..15) lcd.position(0, 1) lcd.data(bytearray(b'\x03\x0C\x10\x21\x21\x41\x48\x48\x48\x49\x25\x21\x10\x0C\x03\x00')) -# toggle display, DDRAM persists image +# toggle display, image persists in DDRAM lcd.power_off() lcd.power_on() @@ -80,37 +72,18 @@ lcd.invert(False) lcd.reset() lcd.init() +# swtich to vertical addressing +lcd.init(horizontal=False) + # adjust contrast, bias and temp lcd.contrast(0x1f, pcd8544.BIAS_1_40, pcd8544.TEMP_COEFF_0) lcd.contrast(0x3f, pcd8544.BIAS_1_48, pcd8544.TEMP_COEFF_0) lcd.contrast(0x3c, pcd8544.BIAS_1_40, pcd8544.TEMP_COEFF_0) lcd.contrast(0x42, pcd8544.BIAS_1_48, pcd8544.TEMP_COEFF_0) lcd.contrast(0x3f, pcd8544.BIAS_1_40, pcd8544.TEMP_COEFF_2) - -# use the framebuf -import framebuf -buffer = bytearray((lcd.height // 8) * lcd.width) -framebuf = framebuf.FrameBuffer1(buffer, lcd.width, lcd.height) - -framebuf.text('Hello', 0, 0, 1) -framebuf.pixel(30, 30, 1) -framebuf.pixel(31, 31, 1) -framebuf.pixel(32, 32, 1) -framebuf.pixel(33, 33, 1) -framebuf.pixel(34, 34, 1) -framebuf.hline(0, 20, 8, 1) -framebuf.vline(30, 8, 8, 1) -framebuf.rect(40, 16, 8, 8, 1) -framebuf.fill_rect(16, 32, 8, 8, 1) - -lcd.position(0, 0) -lcd.data(buffer) - -framebuf.fill(0) -lcd.data(buffer) ``` -See [pcd8544_examples.py](pcd8544_examples.py) for more. +See [/examples](/examples) for more. ## Addressing @@ -126,6 +99,8 @@ In horizontal mode you can use framebuf with MONO_VLSB format. Vertical mode doe ![Vertical](docs/pcd8544-vertical.gif) +See [/examples/addressing](/examples/addressing) for more details. + ## Parts * [WeMos D1 Mini](https://www.aliexpress.com/store/product/D1-mini-Mini-NodeMcu-4M-bytes-Lua-WIFI-Internet-of-Things-development-board-based-ESP8266/1331105_32529101036.html) $4.00 USD @@ -135,14 +110,14 @@ In horizontal mode you can use framebuf with MONO_VLSB format. Vertical mode doe WeMos D1 Mini | PCD8544 LCD ------------- | ---------- -D3 (GPIO0) | 0 RST -D4 (GPIO2) | 1 CE -D8 (GPIO15) | 2 DC -D7 (GPIO13) | 3 Din -D5 (GPIO14) | 4 Clk -3V3 | 5 Vcc -D6 (GPIO12) | 6 BL -G | 7 Gnd +D3 (GPIO0) | 1 RST +D4 (GPIO2) | 2 CE +D8 (GPIO15) | 3 DC +D7 (GPIO13) | 4 Din +D5 (GPIO14) | 5 Clk +3V3 | 6 Vcc +D6 (GPIO12) | 7 BL +G | 8 Gnd ## Links diff --git a/docs/esp8266_pinout.jpg b/docs/esp8266_pinout.jpg new file mode 100644 index 0000000000000000000000000000000000000000..afe34f242d5899ec79b37b1e765f90ed9b0ca2e3 GIT binary patch literal 104814 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

pyst`8HWE1AZJzp|$YxgE>$Jd9l5XdI%Ofmjb$t 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

01X=$Ly_ypHzKxjq?!rSLj% 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 L*DfFbHUB>VgJ8aN literal 0 HcmV?d00001 diff --git a/docs/horizontal-addressing.png b/docs/horizontal-addressing.png new file mode 100644 index 0000000000000000000000000000000000000000..1b6adae67240952d548eee56190d10f63d10a6ac GIT binary patch literal 19229 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%0D6EUX(eQqGvL=31)-|AMg%p2W{x#UWiiUS5&A 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 Y1BWd%y!i3t%bP!sKE3+&G710yJK^vBYXATM literal 0 HcmV?d00001 diff --git a/docs/nokia5110_pinout.jpg b/docs/nokia5110_pinout.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1cf6176aa187e714fdca69ff209f8e0a3f59e0c9 GIT binary patch literal 65700 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 KrXlqQ{C@$QFKB51 literal 0 HcmV?d00001 diff --git a/docs/vertical-addressing.png b/docs/vertical-addressing.png new file mode 100644 index 0000000000000000000000000000000000000000..8065f682747ebe0c6e083767416ffbcb147b70e8 GIT binary patch literal 13613 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 360.0 * pi / 180.0): + r[0] = 0 + if (r[1] >= 360.0 * pi / 180.0): + r[1] = 0 + if (r[2] >= 360.0 * pi / 180.0): + r[2] = 0 + + for i in range(8): + px2 = px[i] + py2 = math.cos(r[0]) * py[i] - math.sin(r[0]) * pz[i] + pz2 = math.sin(r[0]) * py[i] + math.cos(r[0]) * pz[i] + + px3 = math.cos(r[1]) * px2 + math.sin(r[1]) * pz2 + py3 = py2 + pz3 = -math.sin(r[1]) * px2 + math.cos(r[1]) * pz2 + + ax = math.cos(r[2]) * px3 - math.sin(r[2]) * py3 + ay = math.sin(r[2]) * px3 + math.cos(r[2]) * py3 + az = pz3 - 150 + + p2x[i] = width / 2 + ax * size / az + p2y[i] = height / 2 + ay * size / az + + lcd.fill(0) + + for i in range(3): + lcd.line(int(p2x[i]), int(p2y[i]), int(p2x[i+1]), int(p2y[i+1]), 1) + lcd.line(int(p2x[i+4]), int(p2y[i+4]), int(p2x[i+5]), int(p2y[i+5]), 1) + lcd.line(int(p2x[i]), int(p2y[i]), int(p2x[i+4]), int(p2y[i+4]), 1) + + lcd.line(int(p2x[3]), int(p2y[3]), int(p2x[0]), int(p2y[0]), 1) + lcd.line(int(p2x[7]), int(p2y[7]), int(p2x[4]), int(p2y[4]), 1) + lcd.line(int(p2x[3]), int(p2y[3]), int(p2x[7]), int(p2y[7]), 1) + lcd.show() + +while(True): + drawCube() diff --git a/examples/addressing/README.md b/examples/addressing/README.md new file mode 100644 index 0000000..0a9ee8f --- /dev/null +++ b/examples/addressing/README.md @@ -0,0 +1,175 @@ +# Addressing + +The display is 84x48 pixels, 504 bytes, divided into 6 banks of 84x8 pixels, 84 bytes each. + +You can configure the display to draw consecutive bytes moving horizontally or vertically. + +In both modes, each byte is drawn to the display as a vertical column of 8 pixels. +You are unable to draw 8 horizontal pixels from a single byte. +The least significant bit in each byte is displayed at the top. + +In horizontal mode, every subsequent byte is drawn beside the current byte until the end of the bank, then moves to the start of the next bank. + +![Horizontal](../../docs/pcd8544-horizontal.gif) + +In vertical mode, every subsequent byte is drawn in the same column on the next bank until the last bank, where it wraps back to the first bank and moves across one column. + +![Vertical](../../docs/pcd8544-vertical.gif) + +Changing the addressing mode does not affect what is already displayed on the screen. It only affects the position the next bytes are drawn. + +## Example 1 + +The Nokia example image: + +![Nokia](../../docs/nokia-splash.gif) + +### Horizontal addressing mode: + +![Horizontal](../../docs/horizontal-addressing.png) + +Horizontal addressing is compatible with framebuf.MONO_VLSB + +```python +0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x40, 0x80, 0x80, 0xC0, 0xC0, 0x40, 0xC0, 0xA0, 0xE0, 0xC0, 0xE0, 0xE0, 0xF0, 0xF0, 0xF8, 0xF8, 0xF8, 0xFC, 0xFC, 0xFE, 0xEE, 0xF4, 0xF0, 0xF0, 0x70, 0x30, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x0C, 0x9C, 0x1C, 0x38, 0xB8, 0x38, 0x38, 0xB8, 0xF8, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF8, 0xF8, 0xF8, 0xF8, +0x88, 0x20, 0x8A, 0x20, 0x08, 0x22, 0x08, 0x00, 0x0A, 0x00, 0x00, 0x02, 0x80, 0x71, 0xBA, 0xDA, 0xFD, 0xDD, 0xED, 0xDE, 0xEE, 0xF7, 0xFF, 0xFB, 0xFD, 0xFD, 0xFE, 0xFF, 0x7F, 0x3F, 0x1F, 0x9F, 0x3F, 0x7F, 0x6F, 0x0F, 0xAF, 0x1F, 0xBF, 0x3E, 0x3C, 0x7A, 0x78, 0x70, 0x22, 0x88, 0xA0, 0x2A, 0x80, 0x08, 0x62, 0xE0, 0xE0, 0xF2, 0xF0, 0x58, 0xDA, 0xF8, 0xFC, 0x92, 0xFE, 0xFF, 0xFF, 0xD3, 0xFF, 0xFD, 0xF3, 0xE1, 0xF0, 0xF9, 0x7F, 0xBF, 0x3F, 0x8F, 0x2F, 0x4F, 0xAF, 0x0F, 0x4F, 0xA7, 0x0F, 0xAF, 0x87, 0x2F, +0x82, 0x80, 0x20, 0xC0, 0x80, 0x80, 0x50, 0x40, 0xC4, 0xD0, 0xA0, 0xE8, 0xE4, 0xEA, 0xFF, 0xFB, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x4F, 0x27, 0x53, 0xA8, 0x54, 0x29, 0x4A, 0xB5, 0x82, 0xAC, 0xA1, 0x8A, 0xB6, 0x50, 0x4D, 0x32, 0xA4, 0x4A, 0xB4, 0xA9, 0x4A, 0x52, 0xB4, 0xAA, 0x45, 0xA8, 0xDA, 0x22, 0xAC, 0xD2, 0x2A, 0x52, 0xA8, 0x52, 0x4C, 0xB0, 0xAD, 0x43, 0x5B, 0xB3, 0x45, 0xA8, 0x5B, 0xA3, 0xAB, 0x55, 0xA8, 0x52, 0x54, 0xA9, 0x56, 0xA8, 0x45, 0xBA, 0xA4, 0x49, 0x5A, 0xA2, 0x54, 0xAA, 0x52, +0xFE, 0xFF, 0xFF, 0xFE, 0xFD, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFE, 0xBF, 0x7F, 0xBF, 0xBF, 0xFF, 0xDF, 0xBF, 0x5F, 0xDF, 0x7F, 0xDF, 0x7F, 0xDF, 0xAF, 0x7F, 0xEE, 0x8E, 0xF1, 0x6E, 0x99, 0xF7, 0x6A, 0xDD, 0xB2, 0x6E, 0xD5, 0x7A, 0xD7, 0xAC, 0x75, 0xDB, 0x6D, 0xD5, 0x7A, 0xD7, 0xAC, 0x7B, 0xE5, 0xDE, 0xA9, 0x77, 0xDA, 0xB5, 0xEE, 0x59, 0xB6, 0xEB, 0xDD, 0xB6, 0x69, 0xD6, 0xBF, 0xE8, 0x55, 0xEF, 0xB9, 0xD6, 0xED, 0xB5, 0x5B, +0xAB, 0xFF, 0xFD, 0xF7, 0xFF, 0x01, 0x01, 0x01, 0x01, 0xE1, 0xC1, 0x81, 0x03, 0x05, 0x0F, 0x1D, 0x2F, 0x7E, 0x01, 0x00, 0x01, 0x01, 0xFF, 0xFE, 0x03, 0x01, 0x01, 0x00, 0xF1, 0xF0, 0xF1, 0x71, 0xF1, 0xF1, 0xB1, 0xF1, 0x01, 0x01, 0x01, 0x03, 0xFE, 0xFF, 0x01, 0x01, 0x01, 0x01, 0xBE, 0x1B, 0x0D, 0x07, 0x03, 0x41, 0xE1, 0xF1, 0xF9, 0x6D, 0xFF, 0xFF, 0x00, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xEB, 0x3E, 0x0D, 0x03, 0x01, 0x41, 0x71, 0x70, 0x41, 0x01, 0x03, 0x0E, 0x3B, 0xEF, 0xFE, 0xFB, 0xEE, 0x7D, 0xF7, 0xFF, +0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xF0, 0xF0, 0xF0, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFC, 0xF8, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xFF, 0xFF, 0xF8, 0xF0, 0xF0, 0xF0, 0xF1, 0xF1, 0xF1, 0xF1, 0xF1, 0xF1, 0xF1, 0xF1, 0xF0, 0xF0, 0xF0, 0xF8, 0xFF, 0xFF, 0xF0, 0xF0, 0xF0, 0xF0, 0xFF, 0xFF, 0xFE, 0xFC, 0xF8, 0xF0, 0xF0, 0xF1, 0xF3, 0xF7, 0xFF, 0xFF, 0xF0, 0xF0, 0xF0, 0xF0, 0xFF, 0xF3, 0xF0, 0xF0, 0xF0, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xF0, 0xF0, 0xF0, 0xF3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +``` + +```python +import pcd8544 +from machine import Pin, SPI + +spi = SPI(1) +spi.init(baudrate=2000000, polarity=0, phase=0) +cs = Pin(2) +dc = Pin(15) +rst = Pin(0) +bl = Pin(12, Pin.OUT, value=1) + +lcd = pcd8544.PCD8544(spi, cs, dc, rst) + +lcd.init(horizontal=True) +lcd.data(bytearray(b'\x80\x00\x00\x80\x00\x00\x80\x00\x00\x80\x00\x00\x80\x00\x00\x80\x00\x00\x80\x80\x40\x40\x40\x80\x80\xC0\xC0\x40\xC0\xA0\xE0\xC0\xE0\xE0\xF0\xF0\xF8\xF8\xF8\xFC\xFC\xFE\xEE\xF4\xF0\xF0\x70\x30\x00\x80\x00\x00\x80\x00\x0C\x9C\x1C\x38\xB8\x38\x38\xB8\xF8\xF0\xF0\xF0\xF0\xF0\xF0\xF0\xF0\xF0\xF0\xF0\xF0\xF0\xF0\xF0\xF0\xF0\xF8\xF8\xF8\xF8\x88\x20\x8A\x20\x08\x22\x08\x00\x0A\x00\x00\x02\x80\x71\xBA\xDA\xFD\xDD\xED\xDE\xEE\xF7\xFF\xFB\xFD\xFD\xFE\xFF\x7F\x3F\x1F\x9F\x3F\x7F\x6F\x0F\xAF\x1F\xBF\x3E\x3C\x7A\x78\x70\x22\x88\xA0\x2A\x80\x08\x62\xE0\xE0\xF2\xF0\x58\xDA\xF8\xFC\x92\xFE\xFF\xFF\xD3\xFF\xFD\xF3\xE1\xF0\xF9\x7F\xBF\x3F\x8F\x2F\x4F\xAF\x0F\x4F\xA7\x0F\xAF\x87\x2F\x82\x80\x20\xC0\x80\x80\x50\x40\xC4\xD0\xA0\xE8\xE4\xEA\xFF\xFB\xFD\xFF\xFF\xFF\xFF\xFF\xEF\x4F\x27\x53\xA8\x54\x29\x4A\xB5\x82\xAC\xA1\x8A\xB6\x50\x4D\x32\xA4\x4A\xB4\xA9\x4A\x52\xB4\xAA\x45\xA8\xDA\x22\xAC\xD2\x2A\x52\xA8\x52\x4C\xB0\xAD\x43\x5B\xB3\x45\xA8\x5B\xA3\xAB\x55\xA8\x52\x54\xA9\x56\xA8\x45\xBA\xA4\x49\x5A\xA2\x54\xAA\x52\xFE\xFF\xFF\xFE\xFD\xFF\xFF\xFF\xFE\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xFF\xFE\xBF\x7F\xBF\xBF\xFF\xDF\xBF\x5F\xDF\x7F\xDF\x7F\xDF\xAF\x7F\xEE\x8E\xF1\x6E\x99\xF7\x6A\xDD\xB2\x6E\xD5\x7A\xD7\xAC\x75\xDB\x6D\xD5\x7A\xD7\xAC\x7B\xE5\xDE\xA9\x77\xDA\xB5\xEE\x59\xB6\xEB\xDD\xB6\x69\xD6\xBF\xE8\x55\xEF\xB9\xD6\xED\xB5\x5B\xAB\xFF\xFD\xF7\xFF\x01\x01\x01\x01\xE1\xC1\x81\x03\x05\x0F\x1D\x2F\x7E\x01\x00\x01\x01\xFF\xFE\x03\x01\x01\x00\xF1\xF0\xF1\x71\xF1\xF1\xB1\xF1\x01\x01\x01\x03\xFE\xFF\x01\x01\x01\x01\xBE\x1B\x0D\x07\x03\x41\xE1\xF1\xF9\x6D\xFF\xFF\x00\x01\x01\x01\xFF\xFF\xEB\x3E\x0D\x03\x01\x41\x71\x70\x41\x01\x03\x0E\x3B\xEF\xFE\xFB\xEE\x7D\xF7\xFF\xFF\xFF\xFF\xFE\xFF\xF0\xF0\xF0\xF0\xFF\xFF\xFF\xFF\xFE\xFC\xF8\xF0\xF0\xF0\xF0\xF0\xF0\xFF\xFF\xF8\xF0\xF0\xF0\xF1\xF1\xF1\xF1\xF1\xF1\xF1\xF1\xF0\xF0\xF0\xF8\xFF\xFF\xF0\xF0\xF0\xF0\xFF\xFF\xFE\xFC\xF8\xF0\xF0\xF1\xF3\xF7\xFF\xFF\xF0\xF0\xF0\xF0\xFF\xF3\xF0\xF0\xF0\xFC\xFC\xFC\xFC\xFC\xFC\xFC\xFC\xF0\xF0\xF0\xF3\xFF\xFF\xFF\xFF\xFF')) +``` + + +### Vertical addressing mode: + +![Vertical](../../docs/vertical-addressing.png) + +```python +0x80, 0x88, 0x82, 0xFE, 0xAB, 0xFF, 0x00, 0x20, 0x80, 0xFF, 0xFF, 0xFF, 0x00, 0x8A, 0x20, 0xFF, 0xFD, 0xFF, 0x80, 0x20, 0xC0, 0xFE, 0xF7, 0xFE, 0x00, 0x08, 0x80, 0xFD, 0xFF, 0xFF, 0x00, 0x22, 0x80, 0xFF, 0x01, 0xF0, 0x80, 0x08, 0x50, 0xFF, 0x01, 0xF0, 0x00, 0x00, 0x40, 0xFF, 0x01, 0xF0, 0x00, 0x0A, 0xC4, 0xFE, 0x01, 0xF0, 0x80, 0x00, 0xD0, 0xFF, 0xE1, 0xFF, 0x00, 0x00, 0xA0, 0xFF, 0xC1, 0xFF, 0x00, 0x02, 0xE8, 0xFF, 0x81, 0xFF, 0x80, 0x80, 0xE4, 0xFF, 0x03, 0xFF, 0x00, 0x71, 0xEA, 0xFF, 0x05, 0xFE, 0x00, 0xBA, 0xFF, 0xFF, +0x0F, 0xFC, 0x80, 0xDA, 0xFB, 0xFF, 0x1D, 0xF8, 0x00, 0xFD, 0xFD, 0xFF, 0x2F, 0xF0, 0x00, 0xDD, 0xFF, 0xFF, 0x7E, 0xF0, 0x80, 0xED, 0xFF, 0xFF, 0x01, 0xF0, 0x80, 0xDE, 0xFF, 0xFF, 0x00, 0xF0, 0x40, 0xEE, 0xFF, 0xFF, 0x01, 0xF0, 0x40, 0xF7, 0xFF, 0x7F, 0x01, 0xF0, 0x40, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0x80, 0xFB, 0x4F, 0xFE, 0xFE, 0xFF, 0x80, 0xFD, 0x27, 0xBF, 0x03, 0xF8, 0xC0, 0xFD, 0x53, 0x7F, 0x01, 0xF0, 0xC0, 0xFE, 0xA8, 0xBF, 0x01, 0xF0, 0x40, 0xFF, 0x54, 0xBF, 0x00, 0xF0, 0xC0, 0x7F, 0x29, 0xFF, 0xF1, 0xF1, 0xA0, 0x3F, +0x4A, 0xDF, 0xF0, 0xF1, 0xE0, 0x1F, 0xB5, 0xBF, 0xF1, 0xF1, 0xC0, 0x9F, 0x82, 0x5F, 0x71, 0xF1, 0xE0, 0x3F, 0xAC, 0xDF, 0xF1, 0xF1, 0xE0, 0x7F, 0xA1, 0x7F, 0xF1, 0xF1, 0xF0, 0x6F, 0x8A, 0xDF, 0xB1, 0xF1, 0xF0, 0x0F, 0xB6, 0x7F, 0xF1, 0xF1, 0xF8, 0xAF, 0x50, 0xDF, 0x01, 0xF0, 0xF8, 0x1F, 0x4D, 0xAF, 0x01, 0xF0, 0xF8, 0xBF, 0x32, 0x7F, 0x01, 0xF0, 0xFC, 0x3E, 0xA4, 0xEE, 0x03, 0xF8, 0xFC, 0x3C, 0x4A, 0x8E, 0xFE, 0xFF, 0xFE, 0x7A, 0xB4, 0xF1, 0xFF, 0xFF, 0xEE, 0x78, 0xA9, 0x6E, 0x01, 0xF0, 0xF4, 0x70, 0x4A, 0x99, 0x01, 0xF0, +0xF0, 0x22, 0x52, 0xF7, 0x01, 0xF0, 0xF0, 0x88, 0xB4, 0x6A, 0x01, 0xF0, 0x70, 0xA0, 0xAA, 0xDD, 0xBE, 0xFF, 0x30, 0x2A, 0x45, 0xB2, 0x1B, 0xFF, 0x00, 0x80, 0xA8, 0x6E, 0x0D, 0xFE, 0x80, 0x08, 0xDA, 0xD5, 0x07, 0xFC, 0x00, 0x62, 0x22, 0x7A, 0x03, 0xF8, 0x00, 0xE0, 0xAC, 0xD7, 0x41, 0xF0, 0x80, 0xE0, 0xD2, 0xAC, 0xE1, 0xF0, 0x00, 0xF2, 0x2A, 0x75, 0xF1, 0xF1, 0x0C, 0xF0, 0x52, 0xDB, 0xF9, 0xF3, 0x9C, 0x58, 0xA8, 0x6D, 0x6D, 0xF7, 0x1C, 0xDA, 0x52, 0xD5, 0xFF, 0xFF, 0x38, 0xF8, 0x4C, 0x7A, 0xFF, 0xFF, 0xB8, 0xFC, 0xB0, 0xD7, +0x00, 0xF0, 0x38, 0x92, 0xAD, 0xAC, 0x01, 0xF0, 0x38, 0xFE, 0x43, 0x7B, 0x01, 0xF0, 0xB8, 0xFF, 0x5B, 0xE5, 0x01, 0xF0, 0xF8, 0xFF, 0xB3, 0xDE, 0xFF, 0xFF, 0xF0, 0xD3, 0x45, 0xA9, 0xFF, 0xF3, 0xF0, 0xFF, 0xA8, 0x77, 0xEB, 0xF0, 0xF0, 0xFD, 0x5B, 0xDA, 0x3E, 0xF0, 0xF0, 0xF3, 0xA3, 0xB5, 0x0D, 0xF0, 0xF0, 0xE1, 0xAB, 0xEE, 0x03, 0xFC, 0xF0, 0xF0, 0x55, 0x59, 0x01, 0xFC, 0xF0, 0xF9, 0xA8, 0xB6, 0x41, 0xFC, 0xF0, 0x7F, 0x52, 0xEB, 0x71, 0xFC, 0xF0, 0xBF, 0x54, 0xDD, 0x70, 0xFC, 0xF0, 0x3F, 0xA9, 0xB6, 0x41, 0xFC, 0xF0, 0x8F, +0x56, 0x69, 0x01, 0xFC, 0xF0, 0x2F, 0xA8, 0xD6, 0x03, 0xFC, 0xF0, 0x4F, 0x45, 0xBF, 0x0E, 0xF0, 0xF0, 0xAF, 0xBA, 0xE8, 0x3B, 0xF0, 0xF0, 0x0F, 0xA4, 0x55, 0xEF, 0xF0, 0xF0, 0x4F, 0x49, 0xEF, 0xFE, 0xF3, 0xF0, 0xA7, 0x5A, 0xB9, 0xFB, 0xFF, 0xF8, 0x0F, 0xA2, 0xD6, 0xEE, 0xFF, 0xF8, 0xAF, 0x54, 0xED, 0x7D, 0xFF, 0xF8, 0x87, 0xAA, 0xB5, 0xF7, 0xFF, 0xF8, 0x2F, 0x52, 0x5B, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +``` + +```python +import pcd8544 +from machine import Pin, SPI + +spi = SPI(1) +spi.init(baudrate=2000000, polarity=0, phase=0) +cs = Pin(2) +dc = Pin(15) +rst = Pin(0) +bl = Pin(12, Pin.OUT, value=1) + +lcd = pcd8544.PCD8544(spi, cs, dc, rst) + +lcd.init(horizontal=False) +lcd.data(bytearray(b'\x80\x88\x82\xFE\xAB\xFF\x00\x20\x80\xFF\xFF\xFF\x00\x8A\x20\xFF\xFD\xFF\x80\x20\xC0\xFE\xF7\xFE\x00\x08\x80\xFD\xFF\xFF\x00\x22\x80\xFF\x01\xF0\x80\x08\x50\xFF\x01\xF0\x00\x00\x40\xFF\x01\xF0\x00\x0A\xC4\xFE\x01\xF0\x80\x00\xD0\xFF\xE1\xFF\x00\x00\xA0\xFF\xC1\xFF\x00\x02\xE8\xFF\x81\xFF\x80\x80\xE4\xFF\x03\xFF\x00\x71\xEA\xFF\x05\xFE\x00\xBA\xFF\xFF\x0F\xFC\x80\xDA\xFB\xFF\x1D\xF8\x00\xFD\xFD\xFF\x2F\xF0\x00\xDD\xFF\xFF\x7E\xF0\x80\xED\xFF\xFF\x01\xF0\x80\xDE\xFF\xFF\x00\xF0\x40\xEE\xFF\xFF\x01\xF0\x40\xF7\xFF\x7F\x01\xF0\x40\xFF\xEF\xFF\xFF\xFF\x80\xFB\x4F\xFE\xFE\xFF\x80\xFD\x27\xBF\x03\xF8\xC0\xFD\x53\x7F\x01\xF0\xC0\xFE\xA8\xBF\x01\xF0\x40\xFF\x54\xBF\x00\xF0\xC0\x7F\x29\xFF\xF1\xF1\xA0\x3F\x4A\xDF\xF0\xF1\xE0\x1F\xB5\xBF\xF1\xF1\xC0\x9F\x82\x5F\x71\xF1\xE0\x3F\xAC\xDF\xF1\xF1\xE0\x7F\xA1\x7F\xF1\xF1\xF0\x6F\x8A\xDF\xB1\xF1\xF0\x0F\xB6\x7F\xF1\xF1\xF8\xAF\x50\xDF\x01\xF0\xF8\x1F\x4D\xAF\x01\xF0\xF8\xBF\x32\x7F\x01\xF0\xFC\x3E\xA4\xEE\x03\xF8\xFC\x3C\x4A\x8E\xFE\xFF\xFE\x7A\xB4\xF1\xFF\xFF\xEE\x78\xA9\x6E\x01\xF0\xF4\x70\x4A\x99\x01\xF0\xF0\x22\x52\xF7\x01\xF0\xF0\x88\xB4\x6A\x01\xF0\x70\xA0\xAA\xDD\xBE\xFF\x30\x2A\x45\xB2\x1B\xFF\x00\x80\xA8\x6E\x0D\xFE\x80\x08\xDA\xD5\x07\xFC\x00\x62\x22\x7A\x03\xF8\x00\xE0\xAC\xD7\x41\xF0\x80\xE0\xD2\xAC\xE1\xF0\x00\xF2\x2A\x75\xF1\xF1\x0C\xF0\x52\xDB\xF9\xF3\x9C\x58\xA8\x6D\x6D\xF7\x1C\xDA\x52\xD5\xFF\xFF\x38\xF8\x4C\x7A\xFF\xFF\xB8\xFC\xB0\xD7\x00\xF0\x38\x92\xAD\xAC\x01\xF0\x38\xFE\x43\x7B\x01\xF0\xB8\xFF\x5B\xE5\x01\xF0\xF8\xFF\xB3\xDE\xFF\xFF\xF0\xD3\x45\xA9\xFF\xF3\xF0\xFF\xA8\x77\xEB\xF0\xF0\xFD\x5B\xDA\x3E\xF0\xF0\xF3\xA3\xB5\x0D\xF0\xF0\xE1\xAB\xEE\x03\xFC\xF0\xF0\x55\x59\x01\xFC\xF0\xF9\xA8\xB6\x41\xFC\xF0\x7F\x52\xEB\x71\xFC\xF0\xBF\x54\xDD\x70\xFC\xF0\x3F\xA9\xB6\x41\xFC\xF0\x8F\x56\x69\x01\xFC\xF0\x2F\xA8\xD6\x03\xFC\xF0\x4F\x45\xBF\x0E\xF0\xF0\xAF\xBA\xE8\x3B\xF0\xF0\x0F\xA4\x55\xEF\xF0\xF0\x4F\x49\xEF\xFE\xF3\xF0\xA7\x5A\xB9\xFB\xFF\xF8\x0F\xA2\xD6\xEE\xFF\xF8\xAF\x54\xED\x7D\xFF\xF8\x87\xAA\xB5\xF7\xFF\xF8\x2F\x52\x5B\xFF\xFF')) +``` + +## Example 2 + +Draw one byte at a time. + +```python +import pcd8544 +from machine import Pin, SPI + +spi = SPI(1) +spi.init(baudrate=2000000, polarity=0, phase=0) +cs = Pin(2) +dc = Pin(15) +rst = Pin(0) +bl = Pin(12, Pin.OUT, value=1) + +lcd = pcd8544.PCD8544(spi, cs, dc, rst) +lcd.init() +``` + +### Horizontal addressing mode: + +```python +lcd.clear() +lcd.position(0, 0) +lcd.addressing(horizontal=True) + +# pixels 0,0 to 0,7 +lcd.data(bytearray(b'\xff')) + +# pixels 1,0 to 1,7 +lcd.data(bytearray(b'\xff')) + +# pixels 2,0 to 2,7 +lcd.data(bytearray(b'\xff')) + +# pixels 3,0 to 3,7 +lcd.data(bytearray(b'\xff')) +``` + +### Vertical addressing mode: + +```python +lcd.clear() +lcd.position(0, 0) +lcd.addressing(horizontal=False) + +# pixels 0,0 to 0,7 +lcd.data(bytearray(b'\xff')) + +# pixels 0,8 to 0,15 +lcd.data(bytearray(b'\xff')) + +# pixels 0,16 to 0,23 +lcd.data(bytearray(b'\xff')) + +# pixels 0,24 to 0,31 +lcd.data(bytearray(b'\xff')) + +# pixels 0,32 to 0,39 +lcd.data(bytearray(b'\xff')) + +# pixels 0,40 to 0,47 +lcd.data(bytearray(b'\xff')) + +# pixels 1,0 to 1,7 +lcd.data(bytearray(b'\xff')) +``` + +## Example 3 + +### Stripes + +```python +lcd.clear() +lcd.addressing(horizontal=True) +# \\\\ +lcd.data(bytearray([0x11,0x22,0x44,0x88]*126)) +# //// +lcd.data(bytearray([0x88,0x44,0x22,0x11]*126)) +# \/\/ +lcd.data(bytearray([0x81,0x42,0x24,0x18]*126)) +# |||| +lcd.data(bytearray([0xff,0x00]*252)) +# ==== +lcd.data(bytearray([0x55]*504)) +``` diff --git a/examples/backlight_pwm.py b/examples/backlight_pwm.py new file mode 100644 index 0000000..64aa56d --- /dev/null +++ b/examples/backlight_pwm.py @@ -0,0 +1,25 @@ +# Backlight PWM + +import pcd8544 +from machine import Pin, SPI, PWM + +spi = SPI(1) +spi.init(baudrate=2000000, polarity=0, phase=0) +cs = Pin(2) +dc = Pin(15) +rst = Pin(0) + +# backlight on +bl = Pin(12, Pin.OUT, value=1) + +# backlight dimming +bl_pwm = PWM(bl) +bl_pwm.freq(500) +bl_pwm.duty(0) # off +bl_pwm.duty(512) # dim +bl_pwm.duty(1024) # bright + +lcd = pcd8544.PCD8544(spi, cs, dc, rst) + +# test pattern (50% on) +lcd.data(bytearray([0x55, 0xAA] * 42 * 6)) diff --git a/examples/framebuf.py b/examples/framebuf.py new file mode 100644 index 0000000..f647446 --- /dev/null +++ b/examples/framebuf.py @@ -0,0 +1,74 @@ +# Using the MicroPython 1.9 framebuffer + +import pcd8544 +from machine import Pin, SPI + +spi = SPI(1) +spi.init(baudrate=2000000, polarity=0, phase=0) +cs = Pin(2) +dc = Pin(15) +rst = Pin(0) +bl = Pin(12, Pin.OUT, value=1) + +lcd = pcd8544.PCD8544(spi, cs, dc, rst) + +import framebuf +buffer = bytearray((pcd8544.HEIGHT // 8) * pcd8544.WIDTH) +framebuf = framebuf.FrameBuffer(buffer, pcd8544.WIDTH, pcd8544.HEIGHT, framebuf.MONO_VLSB) + +# fill(color) +framebuf.fill(1) +lcd.data(buffer) + +# text(string, x, y, color) +framebuf.fill(0) +framebuf.text('Nokia 5110', 0, 0, 1) +framebuf.text('PCD8544', 0, 10, 1) +framebuf.text('84x48', 0, 20, 1) +framebuf.text('uPython1.9', 0, 30, 1) +framebuf.text('ESP8266', 0, 40, 1) +lcd.data(buffer) + +# pixel(x, y, colour) +framebuf.fill(0) +framebuf.pixel(0, 0, 1) +framebuf.pixel(0, 2, 1) +framebuf.pixel(2, 0, 1) +framebuf.pixel(2, 2, 1) +lcd.data(buffer) + +# line(x1, y1, x2, y2, color) +framebuf.fill(0) +framebuf.line(0, 47, 83, 0, 1) +framebuf.line(83, 47, 0, 0, 1) +lcd.data(buffer) + +# hline(x, y, w, color) +framebuf.fill(0) +framebuf.hline(0, 10, 20, 1) +framebuf.hline(0, 20, 41, 1) +framebuf.hline(0, 30, 62, 1) +framebuf.hline(0, 40, 83, 1) +lcd.data(buffer) + +# vline(x, y, h, color) +framebuf.fill(0) +framebuf.vline(10, 0, 11, 1) +framebuf.vline(20, 0, 23, 1) +framebuf.vline(30, 0, 35, 1) +framebuf.vline(40, 0, 47, 1) +lcd.data(buffer) + +# rect(x, y, w, h, c) +framebuf.fill(0) +framebuf.rect(0, 0, 20, 20, 1) +framebuf.rect(10, 10, 20, 20, 1) +framebuf.rect(20, 20, 20, 20, 1) +lcd.data(buffer) + +# fill_rect(x, y, w, h, c) +framebuf.fill(0) +framebuf.fill_rect(0, 0, 20, 20, 1) +framebuf.fill_rect(20, 20, 20, 20, 1) +framebuf.fill_rect(10, 10, 20, 20, 0) +lcd.data(buffer) diff --git a/examples/framebuf_extend.py b/examples/framebuf_extend.py new file mode 100644 index 0000000..de61b8d --- /dev/null +++ b/examples/framebuf_extend.py @@ -0,0 +1,26 @@ +# Extending PCD8544 with Framebuf methods + +import pcd8544 +from machine import Pin, SPI + +spi = SPI(1) +spi.init(baudrate=2000000, polarity=0, phase=0) +cs = Pin(2) +dc = Pin(15) +rst = Pin(0) +bl = Pin(12, Pin.OUT, value=1) + +lcd = pcd8544.PCD8544_FRAMEBUF(spi, cs, dc, rst) + +# fill(color) +lcd.fill(1) +lcd.show() + +# text(string, x, y, color) +lcd.fill(0) +lcd.text('Nokia 5110', 0, 0, 1) +lcd.text('PCD8544', 0, 10, 1) +lcd.text('84x48', 0, 20, 1) +lcd.text('uPython1.9', 0, 30, 1) +lcd.text('ESP8266', 0, 40, 1) +lcd.show() diff --git a/examples/framebuf_inherit.py b/examples/framebuf_inherit.py new file mode 100644 index 0000000..2294a4b --- /dev/null +++ b/examples/framebuf_inherit.py @@ -0,0 +1,25 @@ +# Inherting the framebuffer + +import pcd8544_fb +from machine import Pin, SPI + +spi = SPI(1) +spi.init(baudrate=2000000, polarity=0, phase=0) +cs = Pin(2) +dc = Pin(15) +rst = Pin(0) +bl = Pin(12, Pin.OUT, value=1) + +lcd = pcd8544_fb.PCD8544_FB(spi, cs, dc, rst) + +lcd.text('Hello', 0, 0, 1) +lcd.pixel(30, 30, 1) +lcd.pixel(31, 31, 1) +lcd.pixel(32, 32, 1) +lcd.pixel(33, 33, 1) +lcd.pixel(34, 34, 1) +lcd.hline(0, 20, 8, 1) +lcd.vline(30, 8, 8, 1) +lcd.rect(40, 16, 8, 8, 1) +lcd.fill_rect(16, 32, 8, 8, 1) +lcd.show() diff --git a/examples/http-get/http_get_image.py b/examples/http-get/http_get_image.py new file mode 100644 index 0000000..d03590e --- /dev/null +++ b/examples/http-get/http_get_image.py @@ -0,0 +1,33 @@ +# Load a remote image with urequests + +# You need to be connected to the internet to fetch the image +import network +sta_if = network.WLAN(network.STA_IF) +sta_if.active(True) +sta_if.scan() +sta_if.connect('SSID', 'PASSWORD') # change me + + +# Install urequests with upip, or simply copy the file to your board +import urequests + +import pcd8544 +from machine import Pin, SPI + +spi = SPI(1) +spi.init(baudrate=2000000, polarity=0, phase=0) +cs = Pin(2) +dc = Pin(15) +rst = Pin(0) +bl = Pin(12, Pin.OUT, value=1) + +lcd = pcd8544.PCD8544(spi, cs, dc, rst) + +lcd.init() + +# fetch remote image and display +# image is 84x48 pixels, 504 bytes, in horizontal address format +# see wemos.gif +r = urequests.get('http://202.4.227.150/wemos.dat') +lcd.data(r.content) +r.close() diff --git a/examples/http-get/urequests.py b/examples/http-get/urequests.py new file mode 100644 index 0000000..acb220e --- /dev/null +++ b/examples/http-get/urequests.py @@ -0,0 +1,124 @@ +import usocket + +class Response: + + def __init__(self, f): + self.raw = f + self.encoding = "utf-8" + self._cached = None + + def close(self): + if self.raw: + self.raw.close() + self.raw = None + self._cached = None + + @property + def content(self): + if self._cached is None: + try: + self._cached = self.raw.read() + finally: + self.raw.close() + self.raw = None + return self._cached + + @property + def text(self): + return str(self.content, self.encoding) + + def json(self): + import ujson + return ujson.loads(self.content) + + +def request(method, url, data=None, json=None, headers={}, stream=None): + try: + proto, dummy, host, path = url.split("/", 3) + except ValueError: + proto, dummy, host = url.split("/", 2) + path = "" + if proto == "http:": + port = 80 + elif proto == "https:": + import ussl + port = 443 + else: + raise ValueError("Unsupported protocol: " + proto) + + if ":" in host: + host, port = host.split(":", 1) + port = int(port) + + ai = usocket.getaddrinfo(host, port, 0, usocket.SOCK_STREAM) + ai = ai[0] + + s = usocket.socket(ai[0], ai[1], ai[2]) + try: + s.connect(ai[-1]) + if proto == "https:": + s = ussl.wrap_socket(s, server_hostname=host) + s.write(b"%s /%s HTTP/1.0\r\n" % (method, path)) + if not "Host" in headers: + s.write(b"Host: %s\r\n" % host) + # Iterate over keys to avoid tuple alloc + for k in headers: + s.write(k) + s.write(b": ") + s.write(headers[k]) + s.write(b"\r\n") + if json is not None: + assert data is None + import ujson + data = ujson.dumps(json) + s.write(b"Content-Type: application/json\r\n") + if data: + s.write(b"Content-Length: %d\r\n" % len(data)) + s.write(b"\r\n") + if data: + s.write(data) + + l = s.readline() + #print(l) + l = l.split(None, 2) + status = int(l[1]) + reason = "" + if len(l) > 2: + reason = l[2].rstrip() + while True: + l = s.readline() + if not l or l == b"\r\n": + break + #print(l) + if l.startswith(b"Transfer-Encoding:"): + if b"chunked" in l: + raise ValueError("Unsupported " + l) + elif l.startswith(b"Location:") and not 200 <= status <= 299: + raise NotImplementedError("Redirects not yet supported") + except OSError: + s.close() + raise + + resp = Response(s) + resp.status_code = status + resp.reason = reason + return resp + + +def head(url, **kw): + return request("HEAD", url, **kw) + +def get(url, **kw): + return request("GET", url, **kw) + +def post(url, **kw): + return request("POST", url, **kw) + +def put(url, **kw): + return request("PUT", url, **kw) + +def patch(url, **kw): + return request("PATCH", url, **kw) + +def delete(url, **kw): + return request("DELETE", url, **kw) diff --git a/examples/http-get/wemos.dat b/examples/http-get/wemos.dat new file mode 100644 index 0000000000000000000000000000000000000000..5abd7305bd3eba138e90d97fbe8372d398125800 GIT binary patch literal 504 zcmcIfp$>yE5IusZERtm#{f&xd{1Otegc8)ubj7mom}Fmooos@bJzT{?cO@V|Z_ixc zyZ7#{0RMn>pYvfoIFY5pRf|v=zv+Po91#; z*|qE50bO@LsWghitjc@0*Z^pCJ7)kqts@EXVT^HTCxz#uYeC~EIQ7Z<><7eQ=xYFr z?qy7x&_P^eN=coI0jI*KGcn3D&KV2$rR3TR!Rh&Pd;!;P BTOR-b literal 0 HcmV?d00001 diff --git a/examples/http-get/wemos.gif b/examples/http-get/wemos.gif new file mode 100644 index 0000000000000000000000000000000000000000..df58b0ab0c56103c2b040edf8ec68ee281e9e53e GIT binary patch literal 315 zcmV-B0mS}CNk%w1VN?Jx0Du4h|Ns90001HR1ONa4001li0000~05AXm0{?`MsmtvT zqnxzbi?iOm`wxcVNS5Y_rs~Ra!P~AcEY0$a+YeszXAbl&gb|`Bh%_3MJKZtY04kgm zrbY^Z9;{8;hnPfAx!pj>n-qEh)C&2U)=t-!wkMdtitSati=JoqRz_mBrDhli=(Y$F z7S-67n8l)0=p_M$1MA8tOBq{Hc6f%NtCJd5xumY<=5}-RQdKE8I-&$t`UuXc}(59iF@l zAD@o=m_KP{{BI80xiE1?p-Xp7UZ6Rq(y;TVr=3Dd<>-y#cQJ;>jS?I?di)47q{xvZ NOPV~1GG&Yc06Vnnlt=&o literal 0 HcmV?d00001 diff --git a/examples/http-get/wemos.py b/examples/http-get/wemos.py new file mode 100644 index 0000000..76cd717 --- /dev/null +++ b/examples/http-get/wemos.py @@ -0,0 +1,2 @@ +# horizontal addressing +bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xE0\xF8\xFC\x7C\x1C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x38\x78\xF8\xF0\xC0\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\xC0\xE0\xE0\xF0\x70\x78\x38\x38\x38\x38\x38\x38\x38\x38\x38\x78\x70\xF0\xE0\xE0\xC0\x80\x00\x00\x00\xF0\xFF\xFF\x7F\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x07\x3F\xFF\xFE\xF0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\x80\x80\x00\x00\x00\x00\x00\x00\x00\x81\x83\x83\x89\x9C\x3C\x1E\x8E\xCF\xCF\xE7\xE7\xE7\xE7\xE7\xCF\xCF\x9E\x3E\x3C\x18\x01\x03\x03\x00\x00\x00\x7F\xFF\xFF\xF8\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xE0\xE0\xC0\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\x7F\x00\x00\xC0\xF0\xF0\xB8\x98\x98\x98\xF8\xF0\xE0\x00\x00\xFF\xFF\xFF\x0F\x3F\xFE\xF8\xC0\x00\x80\xF0\xFE\x1F\x0F\xFF\xFF\xFF\x00\x00\x00\xC1\xE3\xF1\xF0\xF0\xF1\xF1\xE3\x81\x00\x00\xE0\xF0\xF8\xD8\x98\x98\x18\x10\x00\x01\x07\x0F\x1F\x1E\x3C\x3C\x38\x3C\x3C\x3C\x1E\x1F\x0F\x07\x0F\x1F\x1E\x3C\x3C\x38\x38\x38\x3C\x1E\x1F\x0F\x07\x01\x00\x00\x00\x07\x0F\x1F\x1D\x19\x19\x19\x19\x19\x01\x00\x00\x1F\x1F\x1F\x00\x00\x01\x0F\x1F\x1F\x1F\x07\x00\x00\x00\x1F\x1F\x1F\x00\x00\x00\x01\x07\x07\x0F\x0F\x07\x07\x03\x00\x00\x00\x18\x19\x19\x19\x1B\x1F\x1F\x0F\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') diff --git a/examples/qr-code/qr-code.gif b/examples/qr-code/qr-code.gif new file mode 100644 index 0000000000000000000000000000000000000000..41d00de305f5be7d2c03b5998ad48eaec7f94be9 GIT binary patch literal 150 zcmZ?wbhEHblw^=(XkY+=|Ns9h{$v3&bwDIYhJh)!g@57Bo)t+}myU|P*t7a|W{T{y z)@3v2F8Wa@y<#W-uT944OI6lc_vA9aY;&BUI3aHQYULLl#kE_% yEy$Y{^H4-8Y}2+|S}K|Ml5`!Pmrva{bxq{&eJ@#5N*I~H7gsbNy%xa0U=0AH&p+`1 literal 0 HcmV?d00001 diff --git a/examples/qr-code/qr_code.py b/examples/qr-code/qr_code.py new file mode 100644 index 0000000..d1047f0 --- /dev/null +++ b/examples/qr-code/qr_code.py @@ -0,0 +1,29 @@ +# QR Code +# You'll have to scan it to find out what it is. + +import pcd8544 +from machine import Pin, SPI + +spi = SPI(1) +spi.init(baudrate=2000000, polarity=0, phase=0) +cs = Pin(2) +dc = Pin(15) +rst = Pin(0) +bl = Pin(12, Pin.OUT, value=1) +lcd = pcd8544.PCD8544(spi, cs, dc, rst) + +import framebuf +buffer = bytearray((pcd8544.HEIGHT // 8) * pcd8544.WIDTH) +fbuf = framebuf.FrameBuffer(buffer, pcd8544.WIDTH, pcd8544.HEIGHT, framebuf.MONO_VLSB) + +fbuf.fill(0) + +# QR Code - col major msb +# See qr-code.gif +qr = bytearray(b'\x7F\x41\x5D\x5D\x5D\x41\x7F\x00\xF6\x1A\xF3\x80\x70\x38\xEB\xB7\x60\x00\x7F\x41\x5D\x5D\x5D\x41\x7F\x47\x8B\xA4\xF5\x96\xF6\x55\x89\x98\x8A\x18\xCB\x72\x9B\x73\x00\xD3\x1E\x7B\x79\xC5\x30\x61\x95\x76\xFD\x05\x74\x75\x75\x04\xFD\x01\xA6\xBD\x96\x91\xBA\xD6\x68\x4F\x9F\xD1\x15\x71\x7F\xBF\x69\x0C\x46\x01\x01\x01\x01\x01\x01\x01\x00\x01\x00\x00\x00\x00\x00\x00\x01\x01\x00\x01\x01\x00\x00\x00\x01\x01') +qr_fbuf = framebuf.FrameBuffer(qr, 25, 25, framebuf.MONO_VLSB) + +fbuf.blit(qr_fbuf, int((pcd8544.WIDTH-25)/2), int((pcd8544.HEIGHT-25)/2), 0) + +lcd.clear() +lcd.data(buffer) diff --git a/examples/screen_saver.py b/examples/screen_saver.py new file mode 100644 index 0000000..12764b5 --- /dev/null +++ b/examples/screen_saver.py @@ -0,0 +1,63 @@ +# Screen Saver +# Move a bitmap around, bounce it off walls like an old screensaver + +import pcd8544 +from machine import Pin, SPI + +spi = SPI(1) +spi.init(baudrate=2000000, polarity=0, phase=0) +cs = Pin(2) +dc = Pin(15) +rst = Pin(0) +bl = Pin(12, Pin.OUT, value=1) +lcd = pcd8544.PCD8544(spi, cs, dc, rst) + +import framebuf +buffer = bytearray((pcd8544.HEIGHT // 8) * pcd8544.WIDTH) +fbuf = framebuf.FrameBuffer(buffer, pcd8544.WIDTH, pcd8544.HEIGHT, framebuf.MONO_VLSB) + +# smiley 15x15 - col major msb +smiley = bytearray(b'\xE0\x38\xE4\x22\xA2\xE1\xE1\x61\xE1\x21\xA2\xE2\xE4\x38\xE0\x03\x0C\x10\x21\x21\x41\x48\x48\x48\x49\x25\x21\x10\x0C\x03') +smiley_w = 15 +smiley_h = 15 +smiley_fbuf = framebuf.FrameBuffer(smiley, smiley_w, smiley_h, framebuf.MONO_VLSB) + +# area the smiley can move in +bounds_w = pcd8544.WIDTH - smiley_w +bounds_h = pcd8544.HEIGHT - smiley_h + +# direction smiley is moving +move_x = 1 +move_y = 1 + +# pause between displaying frames +from time import sleep_ms +pause = 100 + +# start position +x = 1 +y = 1 + +def render(): + global x + global y + global move_x + global move_y + # Draw the bitmap + fbuf.fill(0) + fbuf.blit(smiley_fbuf, x, y, 0) + lcd.data(buffer) + + sleep_ms(pause) + + # Move down right until hit bounds + # Then flip increment to decrement to bounce off the wall + x = x + move_x + y = y + move_y + if (x <= 0 or x >= bounds_w): + move_x = -move_x + if (y <= 0 or y >= bounds_h): + move_y = -move_y + +while(True): + render() diff --git a/examples/sine_wave.py b/examples/sine_wave.py new file mode 100644 index 0000000..5b497c0 --- /dev/null +++ b/examples/sine_wave.py @@ -0,0 +1,59 @@ +# Sine waves + +import time +import math + +import pcd8544_fb +from machine import Pin, SPI + +spi = SPI(1) +spi.init(baudrate=2000000, polarity=0, phase=0) +cs = Pin(2) +dc = Pin(15) +rst = Pin(0) +bl = Pin(12, Pin.OUT, value=1) + +lcd = pcd8544_fb.PCD8544_FB(spi, cs, dc, rst) + + +def draw_sin(amplitude, freq, phase, yoffset=24): + for i in range(freq): + y = int((math.sin((i + phase) * 0.017453) * amplitude) + yoffset) + x = int((84 / freq) * i) + lcd.pixel(x, y, 1) + lcd.show() + +def draw_cos(amplitude, freq, phase, yoffset=24): + for i in range(freq): + y = int((math.cos((i + phase) * 0.017453) * amplitude) + yoffset) + x = int((84 / freq) * i) + lcd.pixel(x, y, 1) + lcd.show() + + +# big wave +lcd.fill(0) +draw_sin(20, 360, 0) + +# little wave +lcd.fill(0) +draw_sin(10, 5*360, 0) + +# tiny wave +draw_sin(5, 10*360, 0) + +# two waves +lcd.fill(0) +draw_sin(10, 4*360, 0, 12*1) +draw_cos(10, 4*360, 0, 12*3) + +# three waves +lcd.fill(0) +draw_sin(20, 360, 0) +draw_sin(15, 2*360, 30) +draw_sin(10, 4*360, 60) + +# lots of waves +lcd.fill(0) +for i in range(0,360,30): + draw_sin(20, 360, i) diff --git a/pcd8544.py b/pcd8544.py index c6fc60f..9daede1 100644 --- a/pcd8544.py +++ b/pcd8544.py @@ -3,7 +3,7 @@ https://github.com/mcauser/micropython-pcd8544 MIT License -Copyright (c) 2016 Mike Causer +Copyright (c) 2016-2018 Mike Causer Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -27,6 +27,7 @@ from micropython import const from ustruct import pack from utime import sleep_us +import framebuf # Function set 0010 0xxx FUNCTION_SET = const(0x20) @@ -63,11 +64,12 @@ COL_ADDR = const(0x80) # x pos (0~83) BANK_ADDR = const(0x40) # y pos, in banks of 8 rows (0~5) +# Display dimensions +WIDTH = const(0x54) # 84 +HEIGHT = const(0x30) # 48 + class PCD8544: def __init__(self, spi, cs, dc, rst=None): - self.width = 84 - self.height = 48 - self.spi = spi self.cs = cs # chip enable, active LOW self.dc = dc # data HIGH, command LOW @@ -84,18 +86,14 @@ def __init__(self, spi, cs, dc, rst=None): def init(self, horizontal=True, contrast=0x3f, bias=BIAS_1_40, temp=TEMP_COEFF_2): # power up, horizontal addressing, basic instruction set self.fn = FUNCTION_SET - - # switch to vertical addressing - if not horizontal: - self.fn |= ADDRESSING_VERT - self.cmd(self.fn) - + self.addressing(horizontal) self.contrast(contrast, bias, temp) self.cmd(DISPLAY_NORMAL) self.clear() def reset(self): # issue reset impulse to reset the display + # you need to call power_on() or init() to resume self.rst(1) sleep_us(100) self.rst(0) @@ -133,12 +131,20 @@ def invert(self, invert): def clear(self): # clear DDRAM, reset x,y position to 0,0 - self.data([0] * (self.height * self.width // 8)) + self.data([0] * (HEIGHT * WIDTH // 8)) self.position(0, 0) + def addressing(self, horizontal=True): + # vertical or horizontal addressing + if horizontal: + self.fn &= ~ADDRESSING_VERT + else: + self.fn |= ADDRESSING_VERT + self.cmd(self.fn) + def position(self, x, y): # set cursor to column x (0~83), bank y (0~5) - self.cmd(COL_ADDR | x) # set x pos (0~83) + self.cmd(COL_ADDR | x) # set x pos (0~83) self.cmd(BANK_ADDR | y) # set y pos (0~5) def cmd(self, command): @@ -152,3 +158,41 @@ def data(self, data): self.cs(0) self.spi.write(pack('B'*len(data), *data)) self.cs(1) + + +class PCD8544_FRAMEBUF(PCD8544): + def __init__(self, spi, cs, dc, rst=None): + super().__init__(spi, cs, dc, rst) + self.buf = bytearray((HEIGHT // 8) * WIDTH) + self.fbuf = framebuf.FrameBuffer(self.buf, WIDTH, HEIGHT, framebuf.MONO_VLSB) + + def fill(self, col): + self.fbuf.fill(col) + + def pixel(self, x, y, col): + self.fbuf.pixel(x, y, col) + + def scroll(self, dx, dy): + self.fbuf.scroll(dx, dy) + # software scroll + + def text(self, string, x, y, col): + self.fbuf.text(string, x, y, col) + + def line(self, x1, y1, x2, y2, col): + self.fbuf.line(x1, y1, x2, y2, col) + + def hline(self, x, y, w, col): + self.fbuf.hline(x, y, w, col) + + def vline(self, x, y, h, col): + self.fbuf.vline(x, y, h, col) + + def rect(self, x, y, w, h, col): + self.fbuf.rect(x, y, w, h, col) + + def fill_rect(self, x, y, w, h, col): + self.fbuf.fill_rect(x, y, w, h, col) + + def show(self): + self.data(self.buf) diff --git a/pcd8544_fb.py b/pcd8544_fb.py new file mode 100644 index 0000000..c81cdb7 --- /dev/null +++ b/pcd8544_fb.py @@ -0,0 +1,167 @@ +""" +MicroPython Nokia 5110 PCD8544 84x48 LCD driver +https://github.com/mcauser/micropython-pcd8544 + +MIT License +Copyright (c) 2016-2018 Mike Causer + +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. +""" + +from micropython import const +from ustruct import pack +from utime import sleep_us +import framebuf + +# Function set 0010 0xxx +FUNCTION_SET = const(0x20) +POWER_DOWN = const(0x04) +ADDRESSING_VERT = const(0x02) +EXTENDED_INSTR = const(0x01) + +# Display control 0000 1x0x +DISPLAY_BLANK = const(0x08) +DISPLAY_ALL = const(0x09) +DISPLAY_NORMAL = const(0x0c) +DISPLAY_INVERSE = const(0x0d) + +# Temperature control 0000 01xx +TEMP_COEFF_0 = const(0x04) +TEMP_COEFF_1 = const(0x05) +TEMP_COEFF_2 = const(0x06) # default +TEMP_COEFF_3 = const(0x07) + +# Bias system 0001 0xxx +BIAS_1_100 = const(0x10) +BIAS_1_80 = const(0x11) +BIAS_1_65 = const(0x12) +BIAS_1_48 = const(0x13) +BIAS_1_40 = const(0x14) # default +BIAS_1_24 = const(0x15) +BIAS_1_18 = const(0x16) +BIAS_1_10 = const(0x17) + +# Set operation voltage +SET_VOP = const(0x80) + +# DDRAM addresses +COL_ADDR = const(0x80) # x pos (0~83) +BANK_ADDR = const(0x40) # y pos, in banks of 8 rows (0~5) + +# Display dimensions +WIDTH = const(0x54) # 84 +HEIGHT = const(0x30) # 48 + +class PCD8544_FB(framebuf.FrameBuffer): + def __init__(self, spi, cs, dc, rst=None): + self.spi = spi + self.cs = cs # chip enable, active LOW + self.dc = dc # data HIGH, command LOW + self.rst = rst # reset, active LOW + + self.cs.init(self.cs.OUT, value=1) + self.dc.init(self.dc.OUT, value=0) + + if self.rst: + self.rst.init(self.rst.OUT, value=1) + + self.buf = bytearray((HEIGHT // 8) * WIDTH) + super().__init__(self.buf, WIDTH, HEIGHT, framebuf.MONO_VLSB) + + self.reset() + self.init() + + def init(self, horizontal=True, contrast=0x3f, bias=BIAS_1_40, temp=TEMP_COEFF_2): + # power up, horizontal addressing, basic instruction set + self.fn = FUNCTION_SET + self.addressing(horizontal) + self.contrast(contrast, bias, temp) + self.cmd(DISPLAY_NORMAL) + self.clear() + + def reset(self): + # issue reset impulse to reset the display + # you need to call power_on() or init() to resume + self.rst(1) + sleep_us(100) + self.rst(0) + sleep_us(100) # reset impulse has to be >100 ns and <100 ms + self.rst(1) + sleep_us(100) + + def power_on(self): + self.cs(1) + self.fn &= ~POWER_DOWN + self.cmd(self.fn) + + def power_off(self): + self.fn |= POWER_DOWN + self.cmd(self.fn) + + def contrast(self, contrast=0x3f, bias=BIAS_1_40, temp=TEMP_COEFF_2): + for cmd in ( + # extended instruction set is required to set temp, bias and vop + self.fn | EXTENDED_INSTR, + # set temperature coefficient + temp, + # set bias system (n=3 recommended mux rate 1:40/1:34) + bias, + # set contrast with operating voltage (0x00~0x7f) + # 0x00 = 3.00V, 0x3f = 6.84V, 0x7f = 10.68V + # starting at 3.06V, each bit increments voltage by 0.06V at room temperature + SET_VOP | contrast, + # revert to basic instruction set + self.fn & ~EXTENDED_INSTR): + self.cmd(cmd) + + def invert(self, invert): + self.cmd(DISPLAY_INVERSE if invert else DISPLAY_NORMAL) + + def clear(self): + # clear DDRAM, reset x,y position to 0,0 + self.data([0] * (HEIGHT * WIDTH // 8)) + self.position(0, 0) + + def addressing(self, horizontal=True): + # vertical or horizontal addressing + if horizontal: + self.fn &= ~ADDRESSING_VERT + else: + self.fn |= ADDRESSING_VERT + self.cmd(self.fn) + + def position(self, x, y): + # set cursor to column x (0~83), bank y (0~5) + self.cmd(COL_ADDR | x) # set x pos (0~83) + self.cmd(BANK_ADDR | y) # set y pos (0~5) + + def cmd(self, command): + self.dc(0) + self.cs(0) + self.spi.write(bytearray([command])) + self.cs(1) + + def data(self, data): + self.dc(1) + self.cs(0) + self.spi.write(pack('B'*len(data), *data)) + self.cs(1) + + def show(self): + self.data(self.buf) From d842017d9bac9784ee8b09cdf2b9644cb64013a4 Mon Sep 17 00:00:00 2001 From: Mike Causer Date: Tue, 21 Aug 2018 09:57:57 +1000 Subject: [PATCH 5/6] Fix images in readme --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index b1b5cb9..089976b 100644 --- a/README.md +++ b/README.md @@ -6,9 +6,8 @@ A MicroPython library for the Philips PCD8544 84x48 monochrome LCD, used by the #### Pinout -![demo](docs/nokia5110_pinout.jpg) - -![demo](docs/esp8266_pinout.jpg) +| ![demo](docs/nokia5110_pinout.jpg) | ![demo](docs/esp8266_pinout.jpg) | +|-|-| Pin | Name | Description :--:|:----:|:-------------------------------- From 791d4239d77b0d06192c7ab7903d81a72a53f992 Mon Sep 17 00:00:00 2001 From: Mike Causer Date: Thu, 23 Aug 2018 10:03:50 +1000 Subject: [PATCH 6/6] Make compatible with Writer class --- pcd8544.py | 3 +++ pcd8544_fb.py | 3 +++ 2 files changed, 6 insertions(+) diff --git a/pcd8544.py b/pcd8544.py index 9daede1..bac58e8 100644 --- a/pcd8544.py +++ b/pcd8544.py @@ -75,6 +75,9 @@ def __init__(self, spi, cs, dc, rst=None): self.dc = dc # data HIGH, command LOW self.rst = rst # reset, active LOW + self.height = HEIGHT # For Writer class + self.width = WIDTH + self.cs.init(self.cs.OUT, value=1) self.dc.init(self.dc.OUT, value=0) diff --git a/pcd8544_fb.py b/pcd8544_fb.py index c81cdb7..f7fc5a0 100644 --- a/pcd8544_fb.py +++ b/pcd8544_fb.py @@ -75,6 +75,9 @@ def __init__(self, spi, cs, dc, rst=None): self.dc = dc # data HIGH, command LOW self.rst = rst # reset, active LOW + self.height = HEIGHT # For Writer class + self.width = WIDTH + self.cs.init(self.cs.OUT, value=1) self.dc.init(self.dc.OUT, value=0)