You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
AirTrapMine/src/unitdev04/coordinator_api.py

48 lines
1.5 KiB
Python

import threading
import time
from digi.xbee.devices import XBeeDevice
# Configure XBee connection
PORT = "/dev/ttyUSB1"
BAUD_RATE = 57600
# Initialize XBee device
device = XBeeDevice(PORT, BAUD_RATE)
device.open()
# Callback function to handle incoming messages
def data_received_callback(xbee_message):
sender = xbee_message.remote_device.get_64bit_addr()
try:
data = xbee_message.data.decode("utf-8") # Attempt UTF-8 decoding
except UnicodeDecodeError:
data = xbee_message.data.hex() # Fallback to HEX if decoding fails
print(f"\nReceived from {sender}: {data}\nEnter message: ", end="")
# Register callback for incoming data
device.add_data_received_callback(data_received_callback)
# Function to send broadcast messages (runs in a separate thread)
def send_messages():
while True:
user_input = input("\nEnter message: ") # User input
status = device.send_data_broadcast(user_input) # Broadcast message
if status:
print("Broadcast message sent successfully!")
else:
print("Failed to send broadcast message.")
# Start the message sending thread
send_thread = threading.Thread(target=send_messages, daemon=True)
send_thread.start()
print("Broadcast chat mode activated. Type a message and press Enter to send.\n")
# Keep the program running
try:
while True:
time.sleep(0.1) # Reduce CPU usage and ensure stability
except KeyboardInterrupt:
print("\nProgram terminated.")
device.close()