• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Heltec V3
#1
Witam wszystkich użytkowników,

Mam pewien problem. Chciałbym połączyć moduł Heltec WiFi LoRa V3 z modułem CC1101 z anteną. Ma ktoś spis jakie gdzie dany pin powinien być podpięty ? Na stronie są schematy ale ciężko z nich wczytać który pin
 
Odpowiedź
#2
CC1101 używa SPI, to szukasz w Google ESP32S3 i SPI, który GPIO jest do tego, programowo może być każdy wolny, ale najlepiej sprzętowy.
Na diagramie modulu HELTEC są zaznaczone piny użyte na płytce: 1,37,21,35,36,43,44,0,rst - więc te odpadają, a dalej to już zaglądasz w posiadany przykład uruchomienia radia, zależy jaką masz bibliotekę, czy można w niej użyć SPI programowego, czy trzeba szukać pinów sprzętowych.
Akurat w tej płytce HELTEC masz już użyte SPI do podłączenia radia i nie możesz go  ruszyć jeśli chcesz używać radia LoRa.
W definicji płytki masz zdefiniowane to na pinach, które nie są wyprowadzone na listwy grzebieniowe:
static const uint8_t SS    = 8;
static const uint8_t MOSI  = 10;
static const uint8_t MISO  = 11;
static const uint8_t SCK  = 9;
Jeśli nie używasz lora możesz te piny przedefiniować na sensowne na płytce.
Jest poza tym przykład w ESP32 "SPI_Multiple_BUses" gdzie jest pokazane jak przemapować piny istniejącej definicji SPI oraz dodać kolejny SPI. To też zależy od biblioteki użytej do radia, zainstalowałem sobie Radiolib, otworzylem przyklad do CC1101 Transmit Blocking, zgodnie z intrukcją zmodyfikowałem konstruktora obiektu radia tak by mu podać inne SPI, stworzyłem klasę dla HSPI, zdefiniowalem do tego piny radia po prawej stronie płytki pomijajac już zajęte i skompilowałem. Czy to zadziała nie mam pojęcia, bo nigdy nie miałem potrzeby tego robić i nie mam na czym przetestować:
Kod:
/*
  RadioLib CC1101 Blocking Transmit Example

  This example transmits packets using CC1101 FSK radio module.
  Each packet contains up to 64 bytes of data, in the form of:
  - Arduino String
  - null-terminated char array (C-string)
  - arbitrary binary data (byte array)

  Using blocking transmit is not recommended, as it will lead
  to inefficient use of processor time!
  Instead, interrupt transmit is recommended.

  For default module settings, see the wiki page
  https://github.com/jgromes/RadioLib/wiki/Default-configuration#cc1101

  For full API reference, see the GitHub Pages
  https://jgromes.github.io/RadioLib/
*/

// include the library
#include <RadioLib.h>

// CC1101 has the following connections:
// CS pin:    10
// GDO0 pin:  2
// RST pin:   unused
// GDO2 pin:  3
  #define HSPI_MISO   26
  #define HSPI_MOSI   33
  #define HSPI_SCLK   34
  #define HSPI_SS     48
 
static const int spiClk = 2000000; // 1 MHz
const uint8_t irq=19;
const uint8_t cs= HSPI_SS;
const uint8_t rst=20;
const uint8_t gpio=47;

//uninitalised pointers to SPI objects
//SPIClass * vspi = NULL;
SPIClass * hspi = NULL;

SPIClass spi(HSPI);
SPISettings spiSettings(spiClk, MSBFIRST, SPI_MODE0);

SX1278 radio = new Module(cs, irq, rst, gpio, spi, spiSettings);

//CC1101 radio = new Module(10, 2, RADIOLIB_NC, 3);

// or using RadioShield
// https://github.com/jgromes/RadioShield
//CC1101 radio = RadioShield.ModuleA;

void setup() {
  Serial.begin(115200);
  spi.begin();
  // initialize CC1101 with default settings
  Serial.print(F("[CC1101] Initializing ... "));
  int state = radio.begin();
  if (state == RADIOLIB_ERR_NONE) {
    Serial.println(F("success!"));
  } else {
    Serial.print(F("failed, code "));
    Serial.println(state);
    while (true);
  }
}

// counter to keep track of transmitted packets
int count = 0;

void loop() {
  Serial.print(F("[CC1101] Transmitting packet ... "));

  // you can transmit C-string or Arduino string up to 63 characters long
  String str = "Hello World! #" + String(count++);
  int state = radio.transmit(str);

  // you can also transmit byte array up to 63 bytes long
  /*
    byte byteArr[] = {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF};
    int state = radio.transmit(byteArr, 8);
  */

  if (state == RADIOLIB_ERR_NONE) {
    // the packet was successfully transmitted
    Serial.println(F("success!"));

  } else if (state == RADIOLIB_ERR_PACKET_TOO_LONG) {
    // the supplied packet was longer than 64 bytes
    Serial.println(F("too long!"));

  } else {
    // some other error occurred
    Serial.print(F("failed, code "));
    Serial.println(state);

  }

  // wait for a second before transmitting again
  delay(1000);
}
Szkic używa 323165 bajtów (9%) pamięci programu. Maksimum to 3342336 bajtów.
Zmienne globalne używają 20064 bajtów (6%) pamięci dynamicznej, pozostawiając 307616 bajtów dla zmiennych lokalnych. Maksimum to 327680 bajtów.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości