Simple test

Ensure your device works with this simple test.

examples/dash_display_simpletest.py
  1# SPDX-FileCopyrightText: 2021 Eva Herrada for Adafruit Industries
  2# SPDX-License-Identifier: MIT
  3
  4import time
  5import ssl
  6from os import getenv
  7import board
  8from digitalio import DigitalInOut, Direction, Pull
  9import touchio
 10import socketpool
 11import wifi
 12import adafruit_minimqtt.adafruit_minimqtt as MQTT
 13from adafruit_io.adafruit_io import IO_MQTT
 14from adafruit_dash_display import Hub
 15
 16up = DigitalInOut(board.BUTTON_UP)
 17up.direction = Direction.INPUT
 18up.pull = Pull.DOWN
 19
 20select = DigitalInOut(board.BUTTON_SELECT)
 21select.direction = Direction.INPUT
 22select.pull = Pull.DOWN
 23
 24down = DigitalInOut(board.BUTTON_DOWN)
 25down.direction = Direction.INPUT
 26down.pull = Pull.DOWN
 27
 28back = touchio.TouchIn(board.CAP7)
 29submit = touchio.TouchIn(board.CAP8)
 30
 31# Get wifi details and more from a settings.toml file
 32# tokens used by this Demo: CIRCUITPY_WIFI_SSID, CIRCUITPY_WIFI_PASSWORD
 33#                           CIRCUITPY_AIO_USERNAME, CIRCUITPY_AIO_KEY
 34secrets = {}
 35for token in ["SSID", "PASSWORD"]:
 36    if getenv("CIRCUITPY_WIFI_" + token):
 37        secrets[token.lower()] = getenv("CIRCUITPY_WIFI_" + token)
 38for token in ["AIO_USERNAME", "AIO_KEY"]:
 39    if getenv("CIRCUITPY_" + token):
 40        secrets[token.lower()] = getenv("CIRCUITPY_" + token)
 41
 42if not secrets:
 43    try:
 44        # Fallback on secrets.py until depreciation is over and option is removed
 45        from secrets import secrets
 46    except ImportError:
 47        print("WiFi secrets are kept in settings.toml, please add them there!")
 48        raise
 49
 50display = board.DISPLAY
 51
 52# Set your Adafruit IO Username and Key in settings.toml
 53# (visit io.adafruit.com if you need to create an account,
 54# or if you need your Adafruit IO key.)
 55aio_username = secrets["aio_username"]
 56aio_key = secrets["aio_key"]
 57
 58print("Connecting to %s" % secrets["ssid"])
 59wifi.radio.connect(secrets["ssid"], secrets["password"])
 60print("Connected to %s!" % secrets["ssid"])
 61
 62# Create a socket pool
 63pool = socketpool.SocketPool(wifi.radio)
 64
 65# Initialize a new MQTT Client object
 66mqtt_client = MQTT.MQTT(
 67    broker="io.adafruit.com",
 68    username=secrets["aio_username"],
 69    password=secrets["aio_key"],
 70    socket_pool=pool,
 71    ssl_context=ssl.create_default_context(),
 72)
 73
 74# Initialize an Adafruit IO MQTT Client
 75io = IO_MQTT(mqtt_client)
 76
 77
 78def pub_lamp(lamp):
 79    if isinstance(lamp, str):
 80        lamp = eval(lamp)  # pylint: disable=eval-used
 81    iot.publish("lamp", str(not lamp))
 82    # funhouse.set_text(f"Lamp: {not lamp}", 0)
 83    time.sleep(0.3)
 84
 85
 86iot = Hub(display=display, io_mqtt=io, nav=(up, select, down, back, submit))
 87
 88iot.add_device(
 89    feed_key="lamp",
 90    default_text="Lamp: ",
 91    formatted_text="Lamp: {}",
 92    pub_method=pub_lamp,
 93)
 94iot.add_device(
 95    feed_key="temperature",
 96    default_text="Temperature: ",
 97    formatted_text="Temperature: {:.1f} C",
 98)
 99iot.add_device(
100    feed_key="humidity", default_text="Humidity: ", formatted_text="Humidity: {:.2f}%"
101)
102
103iot.get()
104
105while True:
106    iot.loop()
107    time.sleep(0.01)

Advanced example

This illustrates more features of the library

examples/dash_display_advancedtest.py
  1# SPDX-FileCopyrightText: 2021 Eva Herrada for Adafruit Industries
  2# SPDX-License-Identifier: MIT
  3
  4import time
  5import ssl
  6from os import getenv
  7import displayio
  8import board
  9from digitalio import DigitalInOut, Direction, Pull
 10from adafruit_display_text.label import Label
 11import terminalio
 12import touchio
 13import socketpool
 14import wifi
 15import adafruit_minimqtt.adafruit_minimqtt as MQTT
 16from adafruit_io.adafruit_io import IO_MQTT
 17from adafruit_dash_display import Hub
 18
 19up = DigitalInOut(board.BUTTON_UP)
 20up.direction = Direction.INPUT
 21up.pull = Pull.DOWN
 22
 23select = DigitalInOut(board.BUTTON_SELECT)
 24select.direction = Direction.INPUT
 25select.pull = Pull.DOWN
 26
 27down = DigitalInOut(board.BUTTON_DOWN)
 28down.direction = Direction.INPUT
 29down.pull = Pull.DOWN
 30
 31back = touchio.TouchIn(board.CAP7)
 32submit = touchio.TouchIn(board.CAP8)
 33
 34# Get wifi details and more from a settings.toml file
 35# tokens used by this Demo: CIRCUITPY_WIFI_SSID, CIRCUITPY_WIFI_PASSWORD
 36#                           CIRCUITPY_AIO_USERNAME, CIRCUITPY_AIO_KEY
 37secrets = {}
 38for token in ["SSID", "PASSWORD"]:
 39    if getenv("CIRCUITPY_WIFI_" + token):
 40        secrets[token.lower()] = getenv("CIRCUITPY_WIFI_" + token)
 41for token in ["AIO_USERNAME", "AIO_KEY"]:
 42    if getenv("CIRCUITPY_" + token):
 43        secrets[token.lower()] = getenv("CIRCUITPY_" + token)
 44
 45if not secrets:
 46    try:
 47        # Fallback on secrets.py until depreciation is over and option is removed
 48        from secrets import secrets
 49    except ImportError:
 50        print("WiFi secrets are kept in settings.toml, please add them there!")
 51        raise
 52
 53rgb_group = displayio.Group()
 54R_label = Label(
 55    terminalio.FONT,
 56    text="   +\nR:\n   -",
 57    color=0xFFFFFF,
 58    anchor_point=((0, 0.5)),
 59    anchored_position=((5, 120)),
 60    scale=2,
 61)
 62G_label = Label(
 63    terminalio.FONT,
 64    text="   +\nG:\n   -",
 65    color=0xFFFFFF,
 66    anchor_point=((0, 0.5)),
 67    anchored_position=((90, 120)),
 68    scale=2,
 69)
 70B_label = Label(
 71    terminalio.FONT,
 72    text="   +\nB:\n   -",
 73    color=0xFFFFFF,
 74    anchor_point=((0, 0.5)),
 75    anchored_position=((175, 120)),
 76    scale=2,
 77)
 78rgb_group.append(R_label)
 79rgb_group.append(G_label)
 80rgb_group.append(B_label)
 81R = Label(
 82    terminalio.FONT,
 83    text="00",
 84    color=0xFFFFFF,
 85    anchor_point=((0, 0.5)),
 86    anchored_position=((35, 120)),
 87    scale=2,
 88)
 89G = Label(
 90    terminalio.FONT,
 91    text="00",
 92    color=0xFFFFFF,
 93    anchor_point=((0, 0.5)),
 94    anchored_position=((120, 120)),
 95    scale=2,
 96)
 97B = Label(
 98    terminalio.FONT,
 99    text="00",
100    color=0xFFFFFF,
101    anchor_point=((0, 0.5)),
102    anchored_position=((205, 120)),
103    scale=2,
104)
105rgb_group.append(R)
106rgb_group.append(G)
107rgb_group.append(B)
108
109# pylint: disable=unused-argument
110
111
112def rgb(last):
113    display.root_group = None
114    rgb_group[3].text = "00"
115    rgb_group[4].text = "00"
116    rgb_group[5].text = "00"
117    display.root_group = rgb_group
118    time.sleep(0.2)
119    index = 0
120    colors = [00, 00, 00]
121
122    while True:
123        if select.value:
124            index += 1
125            if index == 3:
126                index = 0
127            time.sleep(0.3)
128            continue
129
130        if up.value:
131            colors[index] += 1
132            if colors[index] == 256:
133                colors[index] = 0
134            rgb_group[index + 3].text = hex(colors[index])[2:]
135            time.sleep(0.01)
136            continue
137
138        if down.value:
139            colors[index] -= 1
140            if colors[index] == -1:
141                colors[index] = 255
142            rgb_group[index + 3].text = hex(colors[index])[2:]
143            time.sleep(0.01)
144            continue
145
146        if submit.value:
147            color = ["{:02x}".format(colors[i]) for i in range(len(colors))]
148            color = "#" + "".join(color)
149            iot.publish("neopixel", color)
150            break
151
152        if back.value:
153            break
154        time.sleep(0.1)
155
156    display.root_group = None
157    time.sleep(0.1)
158
159
160def rgb_set_color(message):  # pylint: disable=unused-argument
161    return int(message[1:], 16)
162
163
164def door_color(message):
165    door = bool(int(message))
166    if door:
167        return int(0x00FF00)
168    return int(0xFF0000)
169
170
171def on_door(client, feed_id, message):
172    door = bool(int(message))
173    if door:
174        return "Door: Closed"
175    return "Door: Open"
176
177
178def pub_lamp(lamp):
179    if isinstance(lamp, str):
180        lamp = eval(lamp)  # pylint: disable=eval-used
181    iot.publish("lamp", str(not lamp))
182    # funhouse.set_text(f"Lamp: {not lamp}", 0)
183    time.sleep(0.3)
184
185
186display = board.DISPLAY
187
188# Set your Adafruit IO Username and Key in settings.toml
189# (visit io.adafruit.com if you need to create an account,
190# or if you need your Adafruit IO key.)
191aio_username = secrets["aio_username"]
192aio_key = secrets["aio_key"]
193
194print("Connecting to %s" % secrets["ssid"])
195wifi.radio.connect(secrets["ssid"], secrets["password"])
196print("Connected to %s!" % secrets["ssid"])
197
198# Create a socket pool
199pool = socketpool.SocketPool(wifi.radio)
200
201# Initialize a new MQTT Client object
202mqtt_client = MQTT.MQTT(
203    broker="io.adafruit.com",
204    username=secrets["aio_username"],
205    password=secrets["aio_key"],
206    socket_pool=pool,
207    ssl_context=ssl.create_default_context(),
208)
209
210# Initialize an Adafruit IO MQTT Client
211io = IO_MQTT(mqtt_client)
212
213iot = Hub(display=display, io_mqtt=io, nav=(up, select, down, back, submit))
214
215iot.add_device(
216    feed_key="lamp",
217    default_text="Lamp: ",
218    formatted_text="Lamp: {}",
219    pub_method=pub_lamp,
220)
221iot.add_device(
222    feed_key="temperature",
223    default_text="Temperature: ",
224    formatted_text="Temperature: {:.1f} C",
225)
226iot.add_device(
227    feed_key="humidity", default_text="Humidity: ", formatted_text="Humidity: {:.2f}%"
228)
229iot.add_device(
230    feed_key="neopixel",
231    default_text="LED: ",
232    formatted_text="LED: {}",
233    color_callback=rgb_set_color,
234    pub_method=rgb,
235)
236iot.add_device(
237    feed_key="battery",
238    default_text="Battery: ",
239    formatted_text="Battery: {}%",
240)
241iot.add_device(
242    feed_key="door",
243    default_text="Door: ",
244    formatted_text="Door: {}",
245    color_callback=door_color,
246    callback=on_door,
247)
248
249iot.get()
250
251while True:
252    iot.loop()
253    time.sleep(0.01)