Вопрос по NRF24L01
- Войдите на сайт для отправки комментариев
Ср, 19/04/2017 - 18:06
Приемник и передатчик домашней метеостанции жена заставила связать посредством NRF24L01. Собрал тестовые передатчик и приемник с минимум кода.
Работает, но как-то странно.
Код передатчика:
// Библиотеки для работы с радиомодулем NRF24L01
#include <SPI.h>;
#include <nRF24L01.h>;
#include <RF24.h>;
// Переменные хранят считанную с датчиков температуру
float _tempD1;
float _tempD2;
float _tempMid;
// Переменные хранят данные освещенности, считанные с аналоговых входов A0 и A1
int _photoSens1;
int _photoSens2;
void fnReadLux(void)
{
// Счтываем освещенность
_photoSens1 = analogRead(A0);
_photoSens2 = analogRead(A1);
}
/*******************************************************************************************************************/
// Библиотеки для работы с датчиком темпереатуры
#include "OneWire.h"
#include "DallasTemperature.h"
/*******************************************************************************************************************/
/******************************************** Датчик температуры ***************************************************/
/*******************************************************************************************************************/
// Выход данных датчика температуры подключен к pin A2 (=16) Arduino
#define one_wire_bus 16
// Создаем экземпляр класса oneWire, передаевая ему параметр (номер пина Arduino)
OneWire oneWire(one_wire_bus);
DallasTemperature sensors(&oneWire);
// Функция считывания температуры
void fnGetTemp(void)
{
sensors.requestTemperatures();
_tempD1 = sensors.getTempCByIndex(0);
_tempD2 = sensors.getTempCByIndex(1);
_tempMid = (_tempD1 + _tempD2)/2;
}
/*******************************************************************************************************************/
/**************************************** Функции для работы с радиомодулем ***************************************/
/*******************************************************************************************************************/
// Сигналы CE и CSN на пинах 9 и 10 соответственно
// RF24 _mrRF24(CE,CSN);
RF24 _mrRF24(9,10);
// адрес трубы канала
const uint64_t _pipe = 0xAF1510009002LL;
// Функция инициализации модуля
void fnIniRF24(void)
{
_mrRF24.begin();
_mrRF24.setChannel(72);
_mrRF24.setDataRate(RF24_250KBPS);
_mrRF24.setPALevel(RF24_PA_HIGH);
_mrRF24.stopListening();
_mrRF24.openWritingPipe(_pipe);
}
// Функция передает данные
void fnSendData(void)
{
_mrRF24.write(&_tempMid, sizeof(_tempMid));
}
void setup()
{
// Начало работы с датчиками температуры
sensors.begin();
// Инициализация передатчика
fnIniRF24();
}
void loop()
{
fnGetTemp();
fnReadLux();
for(int i = 0; i < 100; i++)
{
fnSendData();
}
}
Код приемника:
// Библиотеки для работы с радиомодулем NRF24L01
#include <SPI.h>;
#include <nRF24L01.h>;
#include <RF24.h>;
/*******************************************************************************************************************/
/**************************************** Функции для работы с радиомодулем ***************************************/
/*******************************************************************************************************************/
// Сигналы CE и CSN на пинах 9 и 10 соответственно
// RF24 _mrRF24(CE,CSN);
RF24 _mrRF24(9,10);
float _tempO; // Температура на улице (outdoor)
// адрес трубы канала
const uint64_t _pipe = 0xAF1510009002LL;
// Функция инициализации модуля
void fnIniRF24(void)
{
_mrRF24.begin();
_mrRF24.setChannel(72);
_mrRF24.setDataRate(RF24_250KBPS);
_mrRF24.setPALevel(RF24_PA_HIGH);
_mrRF24.openReadingPipe(1,_pipe);
_mrRF24.startListening();
}
// Функция принимает данные
void fnReceiveData(void)
{
if(_mrRF24.available())
{
_mrRF24.read(&_tempO, sizeof(_tempO));
}
else
{
_tempO = -99.9;
}
}
void setup()
{
Serial.begin(9600);
fnIniRF24();
}
void loop()
{
fnReceiveData();
Serial.println(_tempO);
delay(500);
}
Так вот, если в передатчике убрать последний for, т.е. передавать данные просто в цикле loop, то данные не передаются, приемник возвращает в мониторе все время -99.9 .... Если for вернуть, то передается примерно 80% из этого for. Чего в супе не хватает?
откуда жена знает про NRF24L01?
откуда жена знает про NRF24L01?
Я ей во сне признался, что можно убрать провода, за которые она запинается ....
то есть проблема не в NRF24L01 изначально, а в проводах и ногах. может в эту сторону копать