Передатчик:
// SimpleTxAckPayload - the master or the transmitter 06.02.2024
#include <Adafruit_GFX.h>
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
// ILI9341
#include <Adafruit_ILI9341.h> // Hardware-specific library for ILI9341 240x320
#include <Adafruit_ST7789.h> // Hardware-specific library for ST7789
// Some ready-made 16-bit ('565') color settings:
#define ST77XX_BLACK 0x0000 ///< 0, 0, 0
#define ST77XX_NAVY 0x000F ///< 0, 0, 123
#define ST77XX_DARKGREEN 0x03E0 ///< 0, 125, 0
#define ST77XX_DARKCYAN 0x03EF ///< 0, 125, 123
#define ST77XX_MAROON 0x7800 ///< 123, 0, 0
#define ST77XX_PURPLE 0x780F ///< 123, 0, 123
#define ST77XX_OLIVE 0x7BE0 ///< 123, 125, 0
#define ST77XX_LIGHTGREY 0xC618 ///< 198, 195, 198
#define ST77XX_DARKGREY 0x7BEF ///< 123, 125, 123
#define ST77XX_BLUE 0x001F ///< 0, 0, 255
#define ST77XX_GREEN 0x07E0 ///< 0, 255, 0
#define ST77XX_CYAN 0x07FF ///< 0, 255, 255
#define ST77XX_RED 0xF800 ///< 255, 0, 0
#define ST77XX_MAGENTA 0xF81F ///< 255, 0, 255
#define ST77XX_YELLOW 0xFFE0 ///< 255, 255, 0
#define ST77XX_WHITE 0xFFFF ///< 255, 255, 255
#define ST77XX_ORANGE 0xFD20 ///< 255, 165, 0
#define ST77XX_GREENYELLOW 0xAFE5 ///< 173, 255, 41
#define ST77XX_PINK 0xFC18 ///< 255, 130, 198
#if ( defined(ARDUINO_NANO_RP2040_CONNECT) || defined(ARDUINO_RASPBERRY_PI_PICO) || defined(ARDUINO_ADAFRUIT_FEATHER_RP2040) || \
defined(ARDUINO_GENERIC_RP2040) ||defined(ARDUINO_RASPBERRY_PI_PICO_W) )
// замаркировать если используем наоборот
#define SPI01 // Дисплей на SPIO1, NRF24L01 на SPI0 (выбор между SPI0 и SPI1)
#if defined(SPI01) // для RP2040 SPI1
#define TFT_CS 13 // GP13 - CS (hard - 13)
#define TFT_RST 10 // GP14 - RESET (10)
#define TFT_DC 11 // GP15 - A0 (11)
#define TFT_MISO 12 // GP12 - MISO (MISO, RX) (hard - 12)
#define TFT_MOSI 15 // GP11 - SDA (MOSI, TX) (hard - 15)
#define TFT_SCLK 14 // GP10 - SCK (hard - 14)
#else // для RP2040 SPI0
#define TFT_CS 17 //5 // GP5 - CS (hard - 17)
#define TFT_RST 20 //6 // GP6 - RESET
#define TFT_DC 21 //7 // GP7 - A0
#define TFT_MISO 16 //4 // GP4 - MISO (MISO, RX) (hard - 16)
#define TFT_MOSI 19 //3 // GP3 - SDA (MOSI, TX) (hard - 19)
#define TFT_SCLK 18 //2 // GP2 - SCK (hard - 18)
#endif
// SPI definitions and macros то NRF24L01
#if defined(SPI01)
#define CE_pin 21 //7
#define RST_pin 20 // не используется
#define CS_pin 17 //5
#define MOSI_pin 19 //3
#define MISO_pin 16 //4
#define SCK_pin 18 //2
#else
#define CE_pin 11 //15
#define RST_pin 10 // не используется
#define CS_pin 13
#define MOSI_pin 15 //11
#define MISO_pin 12
#define SCK_pin 14 //10
#endif
#include "api/HardwareSPI.h"
#endif
//hard SPI01 для RP2040
Adafruit_ILI9341 tft = Adafruit_ILI9341(&SPI1, TFT_DC, TFT_CS, TFT_RST); //via hard SPI1 old LIB
const byte SlaveAddress[5] = {'R', 'x', 'A', 'A', 'A'};
RF24 radio(CE_pin, CS_pin);
char dataToSend[10] = "Message 0";
char txNum = '0';
int ackData[2] = {-1, -1}; // to hold the two values coming from the slave
bool newData = false;
unsigned long currentMillis;
unsigned long prevMillis;
unsigned long txIntervalMillis = 1000; // send once per second
//===============
void setup() {
Serial.begin(115200);
delay(5000);
Serial.println(F("Source File /mnt/sdb1/SGT-Prog/Arduino/ForumDemos/nRF24Tutorial/SimpleTxAckPayload.ino"));
Serial.println("SimpleTxAckPayload Starting");
radio.begin();
radio.setDataRate( RF24_250KBPS );
radio.enableAckPayload();
radio.setRetries(5,5); // delay, count
// 5 gives a 1500 µsec delay which is needed for a 32 byte ackPayload
radio.openWritingPipe(SlaveAddress);
}
//=============
void loop() {
currentMillis = millis();
if (currentMillis - prevMillis >= txIntervalMillis) {
send();
}
showData();
}
//================
void send() {
bool rslt;
rslt = radio.write( &dataToSend, sizeof(dataToSend) );
// Always use sizeof() as it gives the size as the number of bytes.
// For example if dataToSend was an int sizeof() would correctly return 2
Serial.print("Data Sent ");
Serial.print(dataToSend);
if (rslt) {
if ( radio.isAckPayloadAvailable() ) {
radio.read(&ackData, sizeof(ackData));
newData = true;
}
else {
Serial.println(" Acknowledge but no data ");
}
updateMessage();
}
else {
Serial.println(" Tx failed");
}
prevMillis = millis();
}
//=================
void showData() {
if (newData == true) {
Serial.print(" Acknowledge data ");
Serial.print(ackData[0]);
Serial.print(", ");
Serial.println(ackData[1]);
Serial.println();
newData = false;
}
}
//================
void updateMessage() {
// so you can see that new data is being sent
txNum += 1;
if (txNum > '9') {
txNum = '0';
}
dataToSend[8] = txNum;
}