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)