From e5f488ae91a7d7862efad5762794206b701ea25c Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Thu, 8 Apr 2021 15:06:44 +0200 Subject: add ssd1306 (I2C OLED display) examples --- commandline/examples/ssd1306-getpixels | 27 ++++++++++++++++++++ commandline/examples/ssd1306-init | 45 ++++++++++++++++++++++++++++++++++ commandline/examples/ssd1306-show | 37 ++++++++++++++++++++++++++++ 3 files changed, 109 insertions(+) create mode 100755 commandline/examples/ssd1306-getpixels create mode 100755 commandline/examples/ssd1306-init create mode 100755 commandline/examples/ssd1306-show 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 -- cgit v1.2.3