diff --git a/README.rst b/README.rst index 31407c2..e947d3c 100644 --- a/README.rst +++ b/README.rst @@ -38,7 +38,7 @@ or individual libraries can be installed using -Works with any CircuitPython device that supports WIFI or Ethernet networking. +Works with any CircuitPython device has built-in WIFI. `Purchase one from the Adafruit shop `_ diff --git a/adafruit_wiz.py b/adafruit_wiz.py index 4f88ad8..ebc1af1 100644 --- a/adafruit_wiz.py +++ b/adafruit_wiz.py @@ -15,7 +15,15 @@ **Hardware:** -Any CircuitPython device that supports WIFI or Ethernet networking. +CircuitPython devices with built-in WIFI + +* `Adafruit Feather ESP32-S2 `_ +* `Adafruit Feather ESP32-S3 `_ +* `Adafruit Feather ESP32-C6 `_ +* `Raspberry Pi Pico W `_ +* `Raspberry Pi Pico 2W `_ +* `Adafruit Feather ESP32-S2 TFT `_ +* `Adafruit Feather ESP32-S3 TFT `_ **Software and Dependencies:** @@ -126,7 +134,6 @@ class WizConnectedLight: :param str ip: IP address of the Wiz connected light. Can be found in the smartphone app. :param int port: UDP port the Wiz connected light listens on. Default is 38899 :param radio: WIFI radio object. It will attempt to use ``wifi.radio`` if not passed. - Pass Radio objects for ESP32SPI or Wiznet ethernet networking to use them. :param bool debug: Enable additional debugging output. """ diff --git a/examples/wiz_buttons_controller.py b/examples/wiz_buttons_controller.py new file mode 100644 index 0000000..5d4db25 --- /dev/null +++ b/examples/wiz_buttons_controller.py @@ -0,0 +1,83 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 Tim Cocks for Adafruit Industries +# +# SPDX-License-Identifier: MIT +""" +Basic demonstration of Wiz light control using 4 push buttons each +wired to their own pin. +""" + +import time + +import board +import wifi +from digitalio import DigitalInOut, Direction, Pull + +from adafruit_wiz import SCENE_IDS, WizConnectedLight + +udp_host = "192.168.1.143" # IP of UDP Wiz connected light +udp_port = 38899 # Default port is 38899, change if your light is configured differently + +my_lamp = WizConnectedLight(udp_host, udp_port, wifi.radio, debug=True) + +# Basic push buttons initialization +btn_1 = DigitalInOut(board.D11) +btn_1.direction = Direction.INPUT +btn_1.pull = Pull.UP + +btn_2 = DigitalInOut(board.D12) +btn_2.direction = Direction.INPUT +btn_2.pull = Pull.UP + +btn_3 = DigitalInOut(board.A1) +btn_3.direction = Direction.INPUT +btn_3.pull = Pull.UP + +btn_4 = DigitalInOut(board.A0) +btn_4.direction = Direction.INPUT +btn_4.pull = Pull.UP + +# list of colors to cycle through +colors = [(255, 0, 0), (0, 255, 0), (0, 0, 255), (255, 255, 0), (0, 255, 255), (255, 0, 255)] +# current index in the color cycle +cur_rgb_index = 0 + +# list of temperatures to cycle through +temperatures = [2200, 2800, 3600, 4800, 6200] +# current index in the temperature cycle +cur_temp_index = 0 + +while True: + # if btn 1 pressed + if not btn_1.value: + print("Button 1") + # toggle the on/off state + my_lamp.state = not my_lamp.state + time.sleep(0.5) + + # if btn 2 pressed + if not btn_2.value: + print("Button 2") + # set the current RGB color + my_lamp.rgb_color = colors[cur_rgb_index] + # increment the index for next time and wrap around to zero as needed + cur_rgb_index = (cur_rgb_index + 1) % len(colors) + time.sleep(0.5) + + # if btn 3 pressed + if not btn_3.value: + print("Button 3") + # set the current light color temperature + my_lamp.temperature = temperatures[cur_temp_index] + # increment the index for next time and wrap around to zero as needed + cur_temp_index = (cur_temp_index + 1) % len(temperatures) + time.sleep(0.5) + + # if btn 4 pressed + if not btn_4.value: + print("Button 4") + # uncomment to see the available scenes + # print(SCENE_IDS.keys()) + + # set the scene + my_lamp.scene = "Party" + time.sleep(0.5) diff --git a/examples/wiz_neokey1x4_controller.py b/examples/wiz_neokey1x4_controller.py new file mode 100644 index 0000000..c2dc4a7 --- /dev/null +++ b/examples/wiz_neokey1x4_controller.py @@ -0,0 +1,71 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 Tim Cocks for Adafruit Industries +# +# SPDX-License-Identifier: MIT +""" +Demonstration of Wiz light control using a Neokey 1x4 QT I2C +https://www.adafruit.com/product/4980 +""" + +import json +import time + +import board +import wifi +from adafruit_neokey.neokey1x4 import NeoKey1x4 + +from adafruit_wiz import SCENE_IDS, WizConnectedLight + +udp_host = "192.168.1.143" # IP of UDP Wiz connected light +udp_port = 38899 # Default port is 38899, change if your light is configured differently + +my_lamp = WizConnectedLight(udp_host, udp_port, wifi.radio, debug=True) + +# use default I2C bus +i2c_bus = board.STEMMA_I2C() + +# Create a NeoKey object +neokey = NeoKey1x4(i2c_bus, addr=0x30) + +# list of colors to cycle through +colors = [(255, 0, 0), (0, 255, 0), (0, 0, 255), (255, 255, 0), (0, 255, 255), (255, 0, 255)] +# current index in the color cycle +cur_rgb_index = 0 + +# list of temperatures to cycle through +temperatures = [2200, 2800, 3600, 4800, 6200] +# current index in the temperature cycle +cur_temp_index = 0 + +while True: + # if btn A pressed + if neokey[0]: + print("Button A") + # toggle the on/off state + my_lamp.state = not my_lamp.state + time.sleep(0.5) + + # if btn B pressed + if neokey[1]: + print("Button B") + # set the current RGB color + my_lamp.rgb_color = colors[cur_rgb_index] + # increment the index for next time and wrap around to zero as needed + cur_rgb_index = (cur_rgb_index + 1) % len(colors) + time.sleep(0.5) + + # if btn C pressed + if neokey[2]: + print("Button C") + # set the current light color temperature + my_lamp.temperature = temperatures[cur_temp_index] + # increment the index for next time and wrap around to zero as needed + cur_temp_index = (cur_temp_index + 1) % len(temperatures) + time.sleep(0.5) + # if btn D pressed + if neokey[3]: + print("Button D") + # uncomment to see the available scenes + # print(SCENE_IDS.keys()) + + # set the scene + my_lamp.scene = "Party"