Adminhs пишет:
Как баги есп8266 относятся к теме DHT+Arduino+NRF24LO1 ??
Прошу создавать или хотя бы писать в соотвествующих темах форума, а не в первой попавшейся.
Рекомендую проверить на тестовом скетче датчик DHT, который есть в его примерах.
Похоже что модуль передает данные, но есть где-то ошибки в чтении датчика.
Виноват, исправлюсь.
Проблему решил, запутался как включено/выключено:
radio.setAutoAck(false); // выключить аппаратное потверждение.
скетч
NRF24L01 + Arduino + DHT11 + Analog 0-3 для NRF24L01 + ESP8266 (ESP-07) получился такой:
/*
Пример работы клиента
*/
#define chclient 1 // номер клиента 1...
#define timeoutper 400 // таймаут запросов от сервера.
#define timesend 300 // интервал отправки данных,для обычных датчиков можно установить время выше.
#include <SPI.h>
#include "DHT.h"
DHT dht;
#include "nRF24L01.h"
#include "RF24.h"
unsigned long time1=0;
unsigned long time2=0;
#define RELE_1 6 //
#define RELE_2 7
//
// Set up nRF24L01 radio on SPI bus plus pins 9 & 10
RF24 radio(9,10);
//
// 0 -прием , 1 -передача
const uint64_t pipes[2] = { 0xF0F0F0F0E1LL,0xF0F0F0F0D2LL};
//
// структура принятых данных.МЕНЯТЬ НЕЛЬЗЯ
typedef struct{
byte identifier;
byte val1;
byte val2;
byte val3;
byte val4;
}
nf0;
nf0 servernf;
// структура отправляемых данных.Изменяемые данные.Размер структуры должен быть не больше 32 байт !
typedef struct{
byte identifier;// номер передатчика.МЕНЯТЬ НЕЛЬЗЯ
int temperature_Sensor;// передаём температуру.
int Humidity_Sensor;// передаём влажность
int Analog;
int Analog1;
int Analog2;
int Analog3;
unsigned int Error_Message; // счетчик ошибок
unsigned long count;// счетчик передач для контроля качества канала
//boolean test_data;
}
nf1;
nf1 clientnf;
void setup() {
Serial.begin(9600);
dht.setup(3); // DHT датчик на пине 3
pinMode(RELE_1, OUTPUT);
pinMode(RELE_2, OUTPUT);
radio.begin();
// выбор скорости
// radio.setDataRate(RF24_250KBPS);
radio.setDataRate(RF24_1MBPS);
// radio.setDataRate(RF24_2MBPS);
radio.setPALevel(RF24_PA_MAX);
radio.setChannel(100); //тут установка канала
radio.setCRCLength(RF24_CRC_16);
radio.setAutoAck(false); // выключить аппаратное потверждение
// radio.enableDynamicPayloads(); // разрешить Dynamic Payloads
// radio.enableAckPayload(); // разрешить AckPayload
radio.setRetries(15,15);
radio.openReadingPipe(1,pipes[0]); // Открываем канал приема
radio.openWritingPipe(pipes[1]); // Открываем канал передачи
clientnf.identifier = chclient;
}
byte errorstate;
void loop() {
//
для чтения сенсоров
if ((millis()-time1) >= 1000) { // обновляем сенсоры раз в секунду (1000млс)
// тут будут опросы сенсоров
clientnf.temperature_Sensor = dht.getTemperature() * 10;
clientnf.Humidity_Sensor = dht.getHumidity() * 10;
clientnf.Analog=analogRead(0); //пример передачи int данных
clientnf.Analog1=analogRead(1); //пример передачи int данных
clientnf.Analog2=analogRead(2); //пример передачи int данных
clientnf.Analog3=analogRead(3); //пример передачи int данных
time1 = millis();
}
//************************************************************************************************/
if ((millis() - time2) >= timesend || errorstate !=0) {
if (clientnf.count <= 2147483646) clientnf.count++; // счетчик передач для контроля качества канала
else clientnf.count = 0;
radio.stopListening();
bool ok = radio.write( &clientnf, sizeof(clientnf) );
radio.startListening();
unsigned long started_waiting_at = millis();
bool timeout = false;
while ( ! radio.available() && ! timeout )
if (millis() - started_waiting_at > timeoutper ) timeout = true;
if ( timeout ) {
// счетчик ошибок
clientnf.Error_Message++;
errorstate++; // счетчик ошибок для повтора
}
else {
radio.read( &servernf, sizeof(servernf) );
errorstate=0;
}
if (errorstate>=50) errorstate=0; // не более 3 попыток для повтора
//************************************************************************************************/
if (servernf.identifier == chclient) { // выполнение команд с сервера,если данные предназначены для этого клиента:
// val1= 10 -значит дергаем пинами, val2 - номер пина, val3 - состояние пина
// не забудте установить режим OUTPUT для нужных пинов.
// nRF-USB write 1 10 7 1 1 - что значит установить на 7 выводе логический уровень 1
if (servernf.val1==10) digitalWrite(servernf.val2,servernf.val3);
// val1= 11 -значит управляем ШИМ пинами, val2 - номер пина, val3 - уровень 0..255.
// не забудте установить режим OUTPUT для нужных пинов.
// ШИМ возможен только на некоторых пинах !!
if (servernf.val1==11) analogWrite(servernf.val2,servernf.val3);
}
time2 = millis();
}
Serial.println (clientnf.temperature_Sensor);
} // конец loop
Data Structure:
THAAAA
подключал так: