import serial import time import threading # Configurações da porta serial SERIAL_PORT = 'COM12' # Altere para a porta correta BAUD_RATE = 9600 # Taxa de baud padrão do módulo my_address = 0 # Inicializa a conexão serial ser = serial.Serial(SERIAL_PORT, BAUD_RATE, timeout=1) def send_command(command): """Envia um comando para o módulo LoRa.""" ser.write(command) time.sleep(0.1) response = ser.read_all() return response def configure_module(address): """Configura o módulo LoRa com parâmetros específicos.""" # Configura o endereço do módulo, canal, taxa de dados, etc. command = bytes([0xc0, 0x00, 0x08, 0x00, address, 0x62, 0x00, 0x17, 0x43, 0x00, 0x00]) response = send_command(command) print(f"Configuração enviada, resposta: {response}") def send_data(data, target_address): """Envia dados através do módulo LoRa.""" # Adiciona os três bytes iniciais para o modo de transmissão fixa address_high = 0x00 address_low = target_address # Endereço do módulo de destino channel = 0x17 # Canal 23 # Concatena o caractere '@', o endereço decimal e os dados combined_data = "@" + str(my_address) + ";" + str(target_address) + ";" + data + "$" message = bytes([address_high, address_low, channel]) + combined_data.encode() ser.write(message) print(f"Dados enviados: {data}") time.sleep(0.1) def receive_data(): """Recebe dados do módulo LoRa.""" while True: data = ser.read_all() if data: try: # Tenta decodificar os dados como UTF-8 decoded_data = data.decode('utf-8') print(f"Amigo: {decoded_data}") except UnicodeDecodeError: # Se falhar, exibe os dados brutos em hexadecimal print(f"Dados recebidos (brutos): {data.hex()}") time.sleep(1) def chat(target_address): """Função principal do chat.""" while True: message = input("Você: ") send_data(message, target_address) if __name__ == "__main__": try: # Configura o módulo my_address = int(input("Digite o endereço do seu módulo (1 ou 2): ")) target_address = 2 if my_address == 1 else 1 #configure_module(my_address) # Inicia a thread para receber dados receive_thread = threading.Thread(target=receive_data) receive_thread.daemon = True receive_thread.start() # Inicia o chat chat(target_address) except Exception as e: print(f"Ocorreu um erro: {e}") finally: # Fecha a conexão serial ser.close()