Comunicación LoRa con Ebyte E22: guía maestra para macOS

¿Tienes un par de módulos Ebyte E22-400T22U (o similares) y quieres ponerlos a hablar entre ellos usando tu Mac? A diferencia de Windows, macOS gestiona los puertos seriales de forma distinta. En esta guía, configuraremos un sistema Emisor/Receptor utilizando Python de manera limpia y profesional.


🛠️ Requisitos Previos


1️⃣ Preparar el Entorno Virtual (venv)

Para evitar conflictos con otras librerías, crearemos un entorno aislado. Abre tu Terminal y ejecuta:

Bash

# Crear el entorno virtual
python3 -m venv env

# Activar el entorno en macOS
source env/bin/activate

# Instalar librerías necesarias
pip install pyserial python-dotenv

2️⃣ Identificar los Puertos en macOS

En Mac, los dispositivos no aparecen como COM1. Debemos buscarlos en el directorio de dispositivos:

Bash

ls /dev/cu.usbserial*

Anota los resultados. Deberías ver algo como: /dev/cu.usbserial-110 /dev/cu.usbserial-120


3️⃣ Configuración mediante variables de entorno

No «hardcodees» los puertos en el código. Crea un archivo llamado .env en la raíz de tu proyecto para gestionar la configuración fácilmente:

Fragmento de código

PUERTO_EMISOR=/dev/cu.usbserial-110
PUERTO_RECEPTOR=/dev/cu.usbserial-120
BAUD_RATE=9600

4️⃣ Implementación de los Scripts

📤 El Emisor (emisor.py)

Este script enviará un paquete de datos cada 2 segundos.

Python

import serial
import time
import os
from dotenv import load_dotenv

load_dotenv()
PUERTO = os.getenv('PUERTO_EMISOR')
BAUD = int(os.getenv('BAUD_RATE', 9600))

try:
    with serial.Serial(PUERTO, BAUD, timeout=1) as lora:
        print(f"🚀 EMISOR MAC iniciado en {PUERTO}")
        idx = 0
        while True:
            mensaje = f"Hola desde Mac - Pack {idx}\n"
            lora.write(mensaje.encode('utf-8'))
            print(f"Enviando: {mensaje.strip()}")
            idx += 1
            time.sleep(2)
except Exception as e:
    print(f"❌ Error: {e}")

📥 El Receptor (receptor.py)

Este script se quedará escuchando y mostrará los mensajes entrantes por pantalla.

Python

import serial
import os
from dotenv import load_dotenv

load_dotenv()
PUERTO = os.getenv('PUERTO_RECEPTOR')
BAUD = int(os.getenv('BAUD_RATE', 9600))

try:
    with serial.Serial(PUERTO, BAUD, timeout=1) as lora:
        print(f"👂 RECEPTOR MAC escuchando en {PUERTO}...")
        while True:
            if lora.in_waiting > 0:
                linea = lora.readline().decode('utf-8', errors='ignore').strip()
                if linea:
                    print(f"✅ Recibido: {linea}")
except Exception as e:
    print(f"❌ Error: {e}")

🏁 Cómo ponerlo en marcha

  1. Abre dos pestañas de la Terminal.
  2. En ambas, asegúrate de haber activado el entorno: source env/bin/activate.
  3. En la primera pestaña, lanza el receptor: python3 receptor.py.
  4. En la segunda pestaña, lanza el emisor: python3 emisor.py.