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.