Simple test

Ensure your device works with this simple test.

examples/softkeyboard_simpletest.py
  1# SPDX-FileCopyrightText: 2023 DJDevon3
  2# SPDX-License-Identifier: MIT
  3# Started as ESP32-S3 Feather Weather MQTT Touchscreen
  4# Coded for Circuit Python 8.2.x
  5# Modified for SoftKeyboard by Tim C
  6import os
  7import time
  8import board
  9import displayio
 10import terminalio
 11from adafruit_display_text import label
 12from adafruit_bitmap_font import bitmap_font
 13import adafruit_touchscreen
 14from softkeyboard.softkeyboard import SoftKeyboard, PRINTABLE_CHARACTERS
 15
 16_now = time.monotonic()
 17
 18DISPLAY_WIDTH = 480
 19DISPLAY_HEIGHT = 320
 20
 21display = board.DISPLAY
 22
 23_touch_flip = (False, True)
 24
 25# Initialize 3.5" TFT Featherwing Touchscreen
 26# ts_cs_pin = digitalio.DigitalInOut(board.D6)
 27# touchscreen = adafruit_stmpe610.Adafruit_STMPE610_SPI(
 28#     board.SPI(),
 29#     ts_cs_pin,
 30#     calibration=((231, 3703), (287, 3787)),
 31#     size=(display.width, display.height),
 32#     disp_rotation=display.rotation,
 33#     touch_flip=_touch_flip,
 34# )
 35
 36
 37print("Init touchscreen")
 38# pylint: disable=no-member
 39touchscreen = adafruit_touchscreen.Touchscreen(
 40    board.TOUCH_XL,
 41    board.TOUCH_XR,
 42    board.TOUCH_YD,
 43    board.TOUCH_YU,
 44    calibration=((6584, 59861), (9505, 57492)),
 45    size=(board.DISPLAY.width, board.DISPLAY.height),
 46)
 47
 48
 49def _format_date(datetime):
 50    return "{:02}/{:02}/{:02}".format(
 51        datetime.tm_year,
 52        datetime.tm_mon,
 53        datetime.tm_mday,
 54    )
 55
 56
 57def _format_time(datetime):
 58    return "{:02}:{:02}".format(
 59        datetime.tm_hour,
 60        datetime.tm_min,
 61        # datetime.tm_sec,
 62    )
 63
 64
 65# Quick Colors for Labels
 66TEXT_BLACK = 0x000000
 67TEXT_BLUE = 0x0000FF
 68TEXT_CYAN = 0x00FFFF
 69TEXT_GRAY = 0x8B8B8B
 70TEXT_GREEN = 0x00FF00
 71TEXT_LIGHTBLUE = 0x90C7FF
 72TEXT_MAGENTA = 0xFF00FF
 73TEXT_ORANGE = 0xFFA500
 74TEXT_PURPLE = 0x800080
 75TEXT_RED = 0xFF0000
 76TEXT_WHITE = 0xFFFFFF
 77TEXT_YELLOW = 0xFFFF00
 78
 79forkawesome_font = bitmap_font.load_font("/fonts/forkawesome-12.pcf")
 80
 81input_lbl = label.Label(
 82    terminalio.FONT, scale=2, text="", color=0xFFFFFF, background_color=0x00000
 83)
 84input_lbl.x = 10
 85input_lbl.y = 10
 86
 87# Create subgroups
 88splash = displayio.Group()
 89text_group = displayio.Group()
 90main_group = displayio.Group()
 91
 92main_group.append(input_lbl)
 93board.DISPLAY.root_group = main_group
 94
 95soft_kbd = SoftKeyboard(
 96    2, 100, DISPLAY_WIDTH - 2, DISPLAY_HEIGHT - 100, terminalio.FONT, forkawesome_font, layout_file="mobile_layout.json"
 97)
 98
 99main_group.append(soft_kbd)
100
101print(f"size: {soft_kbd.width}, {soft_kbd.height}")
102print(f"cell size: {soft_kbd.layout.cell_size_pixels}")
103
104while True:
105    p = touchscreen.touch_point
106
107    # print(p)
108    key_value = soft_kbd.check_touches(p)
109
110    if key_value is not None:
111        if isinstance(key_value, str) and not key_value.startswith("layout:"):
112            input_lbl.text += key_value
113        elif isinstance(key_value, str) and key_value.startswith("layout:"):
114            layout_file = key_value.replace("layout:", "")
115            soft_kbd.layout_file = layout_file
116            display.root_group = None
117            display.root_group = main_group
118
119        elif key_value == 42:  # 0x2a backspace key
120            input_lbl.text = input_lbl.text[:-1]