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