summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Friesel <derf@finalrewind.org>2021-04-08 15:06:44 +0200
committerDaniel Friesel <derf@finalrewind.org>2021-04-08 15:06:44 +0200
commite5f488ae91a7d7862efad5762794206b701ea25c (patch)
tree429adb25462ac6011e446a1be550f898ffc91354
parentf777d3db298b99ecb28558bbc5f24494e825d328 (diff)
add ssd1306 (I2C OLED display) examples
-rwxr-xr-xcommandline/examples/ssd1306-getpixels27
-rwxr-xr-xcommandline/examples/ssd1306-init45
-rwxr-xr-xcommandline/examples/ssd1306-show37
3 files changed, 109 insertions, 0 deletions
diff --git a/commandline/examples/ssd1306-getpixels b/commandline/examples/ssd1306-getpixels
new file mode 100755
index 0000000..8527b7a
--- /dev/null
+++ b/commandline/examples/ssd1306-getpixels
@@ -0,0 +1,27 @@
+#!/usr/bin/env python3
+
+from PIL import Image
+import sys
+
+buf_w = 128
+buf_h = 64
+
+
+def load_image(filename):
+ im = Image.open(filename)
+ w, h = im.size
+ buf = [0 for i in range(buf_w * buf_h // 8)]
+ for y in range(min(h, buf_h)):
+ for x in range(min(w, buf_w)):
+ if im.getpixel((x, y)):
+ buf[(y // 8) * buf_w + x] |= 1 << (y % 8)
+ return buf
+
+
+filename = sys.argv[1]
+offset = int(sys.argv[2])
+
+buf = load_image(filename)
+buf = buf[offset : offset + 128]
+
+print(" ".join(map(str, buf)))
diff --git a/commandline/examples/ssd1306-init b/commandline/examples/ssd1306-init
new file mode 100755
index 0000000..56e77e5
--- /dev/null
+++ b/commandline/examples/ssd1306-init
@@ -0,0 +1,45 @@
+#!/bin/sh
+
+WR_CMD=0x80
+WR_DATA=0x40
+
+WIDTH=128
+HEIGHT=64
+
+SET_CONTRAST=0x81
+SET_ENTIRE_ON=0xa4
+SET_NORM_INV=0xa6
+SET_DISP_OFF=0xae
+SET_DISP_ON=0xaf
+SET_MEM_ADDR=0x20
+SET_COL_ADDR=0x21
+SET_PAGE_ADDR=0x22
+SET_DISP_START_LINE=0x40
+SET_SEG_REMAP_ON=0xa1
+SET_MUX_RATIO=0xa8
+SET_COM_OUT_DIR_08=0xc8
+SET_DISP_OFFSET=0xd3
+SET_COM_PIN_CFG=0xda
+SET_DISP_CLK_DIV=0xd5
+SET_PRECHARGE=0xd9
+SET_VCOM_DESEL=0xdb
+SET_CHARGE_PUMP=0x8d
+
+for cmd in $SET_DISP_OFF \
+ $SET_MEM_ADDR 0x00 \
+ $SET_DISP_START_LINE \
+ $SET_SEG_REMAP_ON \
+ $SET_MUX_RATIO $(( HEIGHT - 1 )) \
+ $SET_COM_OUT_DIR_08 \
+ $SET_DISP_OFFSET 0x00 \
+ $SET_COM_PIN_CFG 0x12 \
+ $SET_DISP_CLK_DIV 0x80 \
+ $SET_PRECHARGE 0xf1 \
+ $SET_VCOM_DESEL 0x30 \
+ $SET_CONTRAST 0xff \
+ $SET_ENTIRE_ON \
+ $SET_NORM_INV \
+ $SET_CHARGE_PUMP 0x14 \
+ $SET_DISP_ON; do
+ vusb-i2cset 0x3c $WR_CMD $cmd
+done
diff --git a/commandline/examples/ssd1306-show b/commandline/examples/ssd1306-show
new file mode 100755
index 0000000..bac18da
--- /dev/null
+++ b/commandline/examples/ssd1306-show
@@ -0,0 +1,37 @@
+#!/bin/sh
+
+WR_CMD=0x80
+WR_DATA=0x40
+
+WIDTH=128
+HEIGHT=64
+
+SET_CONTRAST=0x81
+SET_ENTIRE_ON=0xa4
+SET_NORM_INV=0xa6
+SET_DISP_OFF=0xae
+SET_DISP_ON=0xaf
+SET_MEM_ADDR=0x20
+SET_COL_ADDR=0x21
+SET_PAGE_ADDR=0x22
+SET_DISP_START_LINE=0x40
+SET_SEG_REMAP_ON=0xa1
+SET_MUX_RATIO=0xa8
+SET_COM_OUT_DIR_08=0xc8
+SET_DISP_OFFSET=0xd3
+SET_COM_PIN_CFG=0xda
+SET_DISP_CLK_DIV=0xd5
+SET_PRECHARGE=0xd9
+SET_VCOM_DESEL=0xdb
+SET_CHARGE_PUMP=0x8d
+
+BASE="$(dirname "$0")"
+
+for cmd in $SET_COL_ADDR 0 $(( WIDTH - 1 )) \
+ $SET_PAGE_ADDR 0 $(( (HEIGHT / 8) - 1 )); do
+ vusb-i2cset 0x3c $WR_CMD $cmd
+done
+
+for offset in $(seq 0 7); do
+ vusb-i2cset 0x3c $WR_DATA $("${BASE}/ssd1306-getpixels" "$1" $(( offset * 128 )))
+done