Skip to content

Commit

Permalink
Merge pull request #2699 from adafruit/Matrix-Bluetooth-Controlled-Sign
Browse files Browse the repository at this point in the history
Adding Bluetooth-Controlled LED Sign code
  • Loading branch information
TheKitty authored Jan 3, 2024
2 parents f55e7ce + 0bca800 commit cdb71d4
Showing 1 changed file with 90 additions and 0 deletions.
90 changes: 90 additions & 0 deletions Matrix_Bluetooth_Controlled_LED_Sign/code.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
# SPDX-FileCopyrightText: 2023 Trevor Beaton for Adafruit Industries
# SPDX-License-Identifier: MIT


import time
import board
import displayio
import framebufferio
import rgbmatrix
import terminalio
from adafruit_display_text import label
from adafruit_ble import BLERadio
from adafruit_ble.advertising.standard import ProvideServicesAdvertisement
from adafruit_ble.services.nordic import UARTService

SEND_RATE = 10 # how often in seconds to send text

count = 0

SCROLL_DELAY = 0.05 # delay between scrolls, in seconds

ble = BLERadio()
uart_server = UARTService()
advertisement = ProvideServicesAdvertisement(uart_server)

# Release any previously allocated displays
displayio.release_displays()

matrix = rgbmatrix.RGBMatrix(
width=64, height=32, bit_depth=1,
rgb_pins=[board.D6, board.A5, board.A1, board.A0, board.A4, board.D11],
addr_pins=[board.D10, board.D5, board.D13, board.D9],
clock_pin=board.D12, latch_pin=board.RX, output_enable_pin=board.TX,
)
display = framebufferio.FramebufferDisplay(matrix, auto_refresh=True)

main_group = displayio.Group()

def scroll(line):
line.x -= 1
line_width = line.bounding_box[2]
if line.x < -line_width:
line.x = display.width

def update_display(text, color=0xFFFFFF):
"""Update the display with the provided text and color."""
if len(main_group) > 0:
main_group.pop()
text_area = label.Label(terminalio.FONT, text=text, color=color)
text_area.x = display.width
text_area.y = 13
main_group.append(text_area)
display.show(main_group)

while True:
print("WAITING...")
update_display("WAITING...")
ble.start_advertising(advertisement)

while not ble.connected:
scroll(main_group[0])
display.refresh(minimum_frames_per_second=0)
time.sleep(SCROLL_DELAY)

# Connected
ble.stop_advertising()
print("CONNECTED")
update_display("CONNECTED")

# Loop and read packets
last_send = time.monotonic()
while ble.connected:
if uart_server.in_waiting:
raw_bytes = uart_server.read(uart_server.in_waiting)
received_text = raw_bytes.decode().strip()
print("RX:", received_text)
update_display(received_text, color=0x26B7FF)

if time.monotonic() - last_send > SEND_RATE:
transmit_text = "COUNT = {}".format(count)
print("TX:", transmit_text)
uart_server.write((transmit_text + "\r\n").encode())
count += 1
last_send = time.monotonic()

scroll(main_group[0])
display.refresh(minimum_frames_per_second=0)
time.sleep(SCROLL_DELAY)

print("DISCONNECTED")

0 comments on commit cdb71d4

Please sign in to comment.