Skip to content

Commit 84e0c20

Browse files
committed
transmitter
1 parent 0624b3f commit 84e0c20

File tree

7 files changed

+97
-16
lines changed

7 files changed

+97
-16
lines changed

.receiver.cpp.swp

1 KB
Binary file not shown.

data

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Hello world!

publish.py

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import paho.mqtt.client as mqtt
2+
from time import sleep
3+
4+
client = mqtt.Client()
5+
client.username_pw_set('pi', password='123')
6+
client.connect('192.168.43.244', 1883)
7+
8+
#client.loop_forever()
9+
10+
while (True):
11+
with open('data') as file:
12+
data = str(file.read())
13+
client.publish("Python", data)
14+
print("send : " + data)
15+
sleep(1)

receiver

-248 Bytes
Binary file not shown.

receiver.cpp

+8-16
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
#include <iostream>
2-
// #include <RF24/nRF24L01.h>
3-
#include <RF24/RF24.h>
2+
//#include <RF24/nRF24L01.h>
3+
#include <RF24/RF24.h> // SPI и работа с GPIO (BCM номерация) реализована уже в библиотеке
44

55
using namespace std;
66

7-
#define PIN_CE 17
8-
#define PIN_CSN 0
7+
#define PIN_CE 17 // (chip enable)
8+
#define PIN_CSN 0 // (chip select not)
99

1010
uint8_t pipeNumber;
1111
uint8_t payloadSize;
@@ -52,22 +52,15 @@ int main() {
5252
// Читаем принятые данные в массив payload указав размер этого массива в байтах
5353
radio.read(&payload, payloadSize);
5454

55-
cout << "Pipe number : " << (int) pipeNumber << " ";
56-
cout << "Payload size : " << (int) payloadSize << " ";
57-
cout << "Data: ";
58-
5955
for (uint8_t i = 0; i < payloadSize; i++) {
6056
receivedData += payload[i];
6157
}
6258

63-
cout << receivedData << endl;
64-
65-
string FIFObuffer = "Data from buffer";
66-
char ackData[sizeof(FIFObuffer)];
59+
cout << "Pipe number : " << (int) pipeNumber << " ";
60+
cout << "Payload size : " << (int) payloadSize << " ";
61+
cout << "Data: " << receivedData << endl;
6762

68-
for (uint8_t i = 0; i < sizeof(ackData); i++) {
69-
ackData[i] = FIFObuffer[i];
70-
}
63+
char ackData[] = "Data from buffer";
7164

7265
// Помещаем данные в буфер FIFO. Как только будет получен пакет то данные из буфера
7366
// будут отправлены этому передатчику вместе с пакетом подтверждения приема его данных
@@ -76,4 +69,3 @@ int main() {
7669
}
7770
return 0;
7871
}
79-

transmitter

15.4 KB
Binary file not shown.

transmitter.cpp

+73
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
#include <iostream>
2+
//#include <RF24/nRF24L01.h>
3+
#include <RF24/RF24.h> // SPI и работа с GPIO (BCM номерация) реализована уже в библиотеке
4+
5+
using namespace std;
6+
7+
#define PIN_CE 17 // (chip enable)
8+
#define PIN_CSN 0 // (chip select not)
9+
10+
int main() {
11+
12+
RF24 radio(PIN_CE, PIN_CSN); // создаём объект radio (CE, SCN)
13+
radio.begin();
14+
// канал передачи данных (от 0 до 125), 5 - на частоте 2,405 ГГц
15+
radio.setChannel(5);
16+
// уровень усиления передатчика (RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm)
17+
radio.setPALevel(RF24_PA_HIGH);
18+
// скорость передачи данных (RF24_250KBPS, RF24_1MBPS, RF24_2MBPS), RF24_1MBPS - 1Мбит/сек
19+
radio.setDataRate(RF24_1MBPS);
20+
// разрешаем получение пакета подтверждения приема данных (по умолчанию true)
21+
radio.setAutoAck(true);
22+
// разрешаем динамически изменяемый размер блока полезных данных
23+
radio.enableDynamicPayloads();
24+
25+
// Если передатчик не получил ответ от приёмника, то он повторит отправку данных.
26+
// Ожидание между каждой повторной попыткой, в кратных 250,
27+
// максимальное составляет 15. 0 означает 250 мкс, (15*250)+250 = 4000мкс
28+
// и количество попыток перед сдачей, максимальное 15
29+
radio.setRetries(15, 15); // метод доступен только для передатчика
30+
31+
// открываем трубу с уникальным ID (одновременно может быть открыта только одна труба для передачи данных)
32+
radio.openWritingPipe(0x7878787878LL);
33+
34+
// блок полезных данных может быть до 32 байт
35+
char text[] = "Hello world!";
36+
char ackData[24];
37+
38+
while (true) {
39+
40+
// По умолчанию передатчик запрашивает у приемника подтверждение получения данных,
41+
// а приёмник получив данные и проверив CRC, возвращает передатчику пакет подтверждения приема данных.
42+
43+
// Передаем адрес переменной и его размер в байтах, значение которой будет в качестве полезных данных
44+
// И проверяем наличие возвращенного пакета подтверждения приема данных
45+
if (radio.write(&text, sizeof(text))) {
46+
cout << "Delivered " << (int) sizeof(text) << " byte" << endl;
47+
}
48+
else {
49+
cout << "Data not delivered" << endl; // данные передатчика не приняты или дошли с ошибкой CRC
50+
}
51+
52+
// Если в буфере имеются принятые данные из пакета подтверждения приема
53+
if (radio.isAckPayloadAvailable()) {
54+
// читаем данные из буфера в массив ackData указывая сколько всего байт может поместиться в массив
55+
radio.read(&ackData, sizeof(ackData));
56+
string FIFO;
57+
for (uint8_t i = 0; i < sizeof(ackData); i++) {
58+
FIFO += ackData[i];
59+
}
60+
Serial.println(FIFO);
61+
62+
// Если все три буфера FIFO заполнены то очищаем
63+
if (radio.rxFifoFull()) {
64+
cout << "Buffer full" << endl;
65+
radio.flush_rx(); // очиска буфера
66+
}
67+
}
68+
69+
delay(1000);
70+
}
71+
72+
}
73+

0 commit comments

Comments
 (0)