82 lines
2.6 KiB
Python
82 lines
2.6 KiB
Python
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() |