Simple test¶
Ensure your device works with this simple test.
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
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)