Modulo M1101s (CC1101) con Esp32s3 Matrix IMPOSIBLE¡

Buenos dias.
Estoy aprendiendo y procuro resolver las dudas leyendo o con la ayuda de la IA, pero en este caso me esta sobrepasando.
Tengo un proyecto donde tengo una ESP32S3 Matrix a la que tambien tengo conectada una Oled de 32x128 y un modulo M1101s (CC1101). El proyecyo tiene un menu general para que haga varia cosas a partir de un menu. Quiero recibir y emitir señales con el modulo para hacer un mando. Estoy probando con un codigo simple para leugo agregarlo al codigo general, pero no me pasa de la linea ELECHOUSE_cc1101.Init(); , por lo que el problema es ese. En los leds me muestra OK en la deteccion del modulo, pero cuando intento iniciarle no lo hace. He leido "cambiar cable", "iniciar con reset presionado el monitor", etc, y nada.
Algun consejo?, os dejo el codigo:

#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <ELECHOUSE_CC1101_SRC_DRV.h>

// Pines para la matriz NeoPixel
#define MATRIX_PIN 14  // Cambia este pin según tu conexión

// Pines del CC1101
//#define PIN_GDO0  35
#define PIN_CS    36
#define PIN_SCK   37
#define PIN_MOSI  38
#define PIN_MISO  39
//#define PIN_GDO2  40

// Configura la matriz NeoPixel (8x8)
Adafruit_NeoMatrix Matrix = Adafruit_NeoMatrix(8, 8, MATRIX_PIN, 
  NEO_MATRIX_BOTTOM + NEO_MATRIX_LEFT +
  NEO_MATRIX_COLUMNS + NEO_MATRIX_PROGRESSIVE,
  NEO_GRB + NEO_KHZ800);

byte buffer[61] = {0};  // Buffer para almacenar los datos recibidos

// Función para mostrar texto desplazándose en la matriz
void mostrarScroll(String texto, uint16_t color) {
  int anchoTexto = texto.length() * 6;  // Ancho del texto (6 píxeles por carácter)
  for (int x = 8; x >= -anchoTexto; x--) {
    Matrix.clear();
    Matrix.setCursor(x, 0);
    Matrix.setTextColor(color);
    Matrix.print(texto);
    Matrix.show();
    delay(50);  // Ajusta la velocidad del scroll
  }
}

void setup() {
  // Inicializar matriz
  Matrix.begin();
  Matrix.setBrightness(25);  // Ajusta la intensidad de los LEDs
  Matrix.setTextWrap(false);

  // Inicializar serial y CC1101
  Serial.begin(115200);  // Opcional, para depuración futura
  mostrarScroll("Init...", Matrix.Color(255, 255, 0));  // Mostrar mensaje de inicio

  // Configurar pines SPI del CC1101
  //ELECHOUSE_cc1101.setSpiPin(PIN_SCK, PIN_MISO, PIN_MOSI, PIN_CS);
  ELECHOUSE_cc1101.setSpiPin(37, 39, 38, 36);

  // Verifica si el CC1101 está conectado
  if (ELECHOUSE_cc1101.getCC1101()) {
    mostrarScroll("CC OK", Matrix.Color(0, 255, 0));  // Verde si OK
    printf("CC1101 detectado correctamente.\n");
  } else {
    mostrarScroll("CC ERR", Matrix.Color(255, 0, 0));  // Rojo si error
    printf("ERROR: No se detectó el CC1101.\n");
    while (1);  // Detener si hay error
  }

  // Configuración del CC1101
printf("Llamando a Init...\n");
ELECHOUSE_cc1101.Init();
printf("Init completado.\n");

printf("Estableciendo CCMode...\n");
ELECHOUSE_cc1101.setCCMode(1);
printf("CCMode establecido.\n");

printf("Estableciendo Modulation...\n");
ELECHOUSE_cc1101.setModulation(0);
printf("Modulation establecido.\n");

printf("Estableciendo frecuencia...\n");
ELECHOUSE_cc1101.setMHZ(433.92);
printf("Frecuencia establecida.\n");

printf("Estableciendo SyncMode...\n");
ELECHOUSE_cc1101.setSyncMode(2);
printf("SyncMode establecido.\n");

printf("Estableciendo SyncWord...\n");
ELECHOUSE_cc1101.setSyncWord(211, 145);
printf("SyncWord establecido.\n");

printf("Activando CRC...\n");
ELECHOUSE_cc1101.setCrc(1);
printf("CRC activado.\n");

printf("Configuración CC1101 completada.\n");

  // Esperar 1 segundo para asegurar que el CC1101 esté listo
  delay(10000);

  // Mostrar el valor de getMode() en el monitor serial
  int mode = ELECHOUSE_cc1101.getMode();
  printf("Modo del CC1101 después de configuración: %d\n", mode);
  if (mode == 0) {
    printf("Modo: Transmisión (Tx)\n");
  } else if (mode == 1) {
    printf("Modo: Recepción (Rx)\n");
  } else if (mode == 2) {
    printf("Modo: Espera (Idle)\n");
  } else {
    printf("Modo desconocido\n");
  }

  mostrarScroll("Rx Mode", Matrix.Color(0, 0, 255));  // Azul: modo recepción
}

void loop() {
  // Verifica y muestra el modo en cada ciclo
  int mode = ELECHOUSE_cc1101.getMode();
  printf("Modo actual del CC1101: %d\n", mode);

  if (ELECHOUSE_cc1101.CheckRxFifo(100)) {  // Verifica si hay datos en el FIFO
    if (ELECHOUSE_cc1101.CheckCRC()) {      // Verifica si el CRC es válido
      String mensaje = "";

      // Obtén los datos recibidos
      int len = ELECHOUSE_cc1101.ReceiveData(buffer);
      buffer[len] = '\0';  // Agrega el terminador de cadena
      mensaje += String((char *)buffer);  // Convierte los datos a texto

      // Mostrar mensaje en scroll (amarillo)
      mostrarScroll("Msg: " + mensaje, Matrix.Color(255, 255, 0));
    } else {
      // Si el CRC es inválido, mostrar error (rojo)
      mostrarScroll("CRC ERR", Matrix.Color(255, 0, 0));
    }
  }
}

He conseguido que me lo detecte y se ponga en modo recepcion, pero no consigo que me muestre el codigo recibido que emito desde mando de garaje para luego emitirlos:

#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <ELECHOUSE_CC1101_SRC_DRV.h>

unsigned long lastTime = 0;
unsigned long interval = 1000; // 1 segundo

#define MATRIX_PIN 14
#define PIN_CS    36
#define PIN_SCK   37
#define PIN_MOSI  38
#define PIN_MISO  39
#define PIN_GDO0  35

Adafruit_NeoMatrix Matrix = Adafruit_NeoMatrix(8, 8, MATRIX_PIN, 
  NEO_MATRIX_BOTTOM + NEO_MATRIX_LEFT +
  NEO_MATRIX_COLUMNS + NEO_MATRIX_PROGRESSIVE,
  NEO_GRB + NEO_KHZ800);

byte buffer[61] = {0};

void mostrarScroll(const char* texto, uint16_t color) {
  int anchoTexto = strlen(texto) * 6;
  for (int x = 8; x >= -anchoTexto; x--) {
    Matrix.clear();
    Matrix.setCursor(x, 0);
    Matrix.setTextColor(color);
    Matrix.print(texto);
    Matrix.show();
    delay(50);
  }
}

void setup() {
  Matrix.begin();
  Matrix.setBrightness(25);
  Matrix.setTextWrap(false);

  Serial.begin(115200);
  printf("Inicializando...\n");
  mostrarScroll("Init...", Matrix.Color(255, 255, 0));

  ELECHOUSE_cc1101.setSpiPin(37, 39, 38, 36);

  if (ELECHOUSE_cc1101.getCC1101()) {
    mostrarScroll("CC OK", Matrix.Color(0, 255, 0));
    printf("CC1101 detectado correctamente.\n");
  } else {
    mostrarScroll("CC ERR", Matrix.Color(255, 0, 0));
    printf("ERROR: No se detectó el CC1101.\n");
    while (1);
  }

  ELECHOUSE_cc1101.Init();
  ELECHOUSE_cc1101.setCCMode(1);
  ELECHOUSE_cc1101.setMHZ(433.92);  // Frecuencia común para mandos de garaje
  printf("CC1101 configurado en modo Recepción (Rx).\n");
  mostrarScroll("Rx Mode", Matrix.Color(0, 0, 255));
}

void loop() {
  // Verificar si hay datos recibidos
  if (ELECHOUSE_cc1101.CheckReceiveFlag()) {
    int len = ELECHOUSE_cc1101.ReceiveData(buffer);  // Recibir datos

    if (len > 0) {
      // Mostrar los datos crudos en el Monitor Serie
      printf("Datos crudos recibidos (%d bytes): ", len);
      for (int i = 0; i < len; i++) {
        printf("%02X ", buffer[i]);
      }
      printf("\n");

      // Mostrar los datos recibidos en el Matrix
      Matrix.clear();
      Matrix.setCursor(0, 0);
      Matrix.setTextColor(Matrix.Color(0, 255, 0));
      for (int i = 0; i < len && i < 8; i++) {  // Solo mostrar los primeros 8 bytes
        Matrix.print(buffer[i], HEX);  // Mostrar en formato hexadecimal
      }
      Matrix.show();
    } else {
      // Si no hay datos, imprimir un mensaje para indicar que estamos esperando
      printf("Esperando datos...\n");
    }
  } else {
    // Si el CC1101 no detecta datos en este ciclo
    printf("Esperando señal...\n");
  }
  
  delay(100);  // Ajusta la velocidad de lectura de la señal
}



nada, sigo sin dar con ello

Por favor, si alguien me puede orientar aunque no me lo solucione, por lo menos para saber que leer, por donde atacar, etc... Un saludo

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.