Теперь вы знаете адрес вашего датчика 28 17 … … - поместите его в
12 DeviceAddress sensor = {0x28, 0xFF, 0x68, 0x6A, 0x84, 0x16, 0x5, 0x69}; //адрес датчика.
73 градуса - он у вас к батарее отопления прикручен ?
он лежит на столе, температура в этом месте около 30
А если к кипящему чайнику прижать ?
Видимо отзывается, но измерения у него на “своей волне” …
ввел адрес датчика, загрузил, в мониторе первое число было 26, т.е. примерно правильная температура, а потом пошло 72,0 72,5 чередуются
Пробуйте реже считывать данные.
вместо 500 поставил delay5000 даже первое число было 72,5 а дальше чередование. Только по времени реже а так то же самое
в схеме подключения датчика между сигнальным проводом и + ставится резистор 4,7к, у меня стоит 4,3к. это не будет так сильно влиять?
Прошу меня извинить, на сегодня я вынужден закончить. Выйду только завтра.Всем спасибо, и все-таки, как я могу проверить датчик ds18b20?
нет, не должно.
Добрый день всем! Похоже , что мой датчик накрылся. Пробовал опускать его в горячую воду, в холодную воду, никаких изменений. Новый ждать около месяца. Займусь пока приемником.
Добрый день всем! Датчик еще не пришел, передатчик пока не трогаю. Так же на основе примеров составил скетч для приемника:
01 #include <SPI.h>
02 #include "nRF24L01.h"
03 #include "RF24.h"
04
05 const uint64_t pipe = 0xF0F1F2F3F4LL; //первый идентификатор передачи данных.
06 RF24 radio(9, 10); //указываем пины подключения передатчика.
07
08 void setup(){
09 Serial.begin(9600); //открываем пот обмена данными.
10 radio.begin(); //делаем инициализацию.
11 delay(2); //ждем реакции модуля передачи данных.
12 radio.setChannel(5); // канал для передачи данных (0-127).
13 radio.setDataRate(RF24_1MBPS); //указываем на какой скорости будут общаться модули.
14 radio.setPALevel(RF24_PA_HIGH); //указываем мощность передатчика.
15
16 radio.openReadingPipe(1,pipe); //Можно открыть все трубы разом.
17 radio.startListening(); //включаем приемник и начинаем слушать трубу.
18 }
19
20
21 void loop(){
22 float data ; //создаем массив.
23 if (radio.available()){ //проверяем не пришло ли чего в буфер.
24 radio.read(&data, sizeof(data)); //читаем массив и указываем сколько пришло.
25 Serial.println(data); //выводим данные в сериал порт для проверки.
26
27 Serial.println(); //пробел.
28 }
29 }
вставил его в скетч метеостанции, в итоге получилось:
#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
#include <SFE_BMP180.h>
#include "RTClib.h"
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <nRF24L01.h>;// Файл конфигурации для библиотеки RF24
#include <RF24.h>; // Библиотека для работы с модулем NRF24L01
#include <SPI.h>; // Библиотека для работы с шиной SPI
RTC_DS3231 rtc;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
SFE_BMP180 pressure;
#include <UTFT.h>
extern uint8_t nadianne[];
extern uint8_t DotMatrix_M[]; //Подключаем шрифт DotMatrix_M
extern uint8_t DotMatrix_XL_Num[]; //Подключаем шрифт SevenSeg_XXXL_Num
extern uint8_t GroteskBold32x64[];
extern uint8_t GroteskBold24x48[];
extern uint8_t SevenSegNumFontPlusPlus[];
extern uint8_t Dingbats1_XL[];
extern uint8_t GroteskBold16x32[];
extern uint8_t arial_italic[];
extern uint8_t nadianne[];
extern uint8_t hallfetica_normal[];
extern uint8_t various_symbols[];
extern uint8_t Various_Symbols_16x32[];
//extern uint8_t SmallFont[];
#define PIN_CE 53 // Номер пина Arduino, к которому подключен вывод CE радиомодуля
#define PIN_CSN 10// Номер пина Arduino, к которому подключен вывод CSN радиомодуля
RF24 radio(53, 10);
UTFT myGLCD(CTE40,38,39,40,41); // Remember to change the model parameter to suit your display module!
const uint64_t pipe = 0xF0F1F2F3F4LL;
void setup()
{
Serial.begin(9600);
Serial.println("REBOOT");
if (pressure.begin())
Serial.println("BMP180 init success");
else
{
Serial.println("BMP180 init fail\n\n");
while(1);
}
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
Serial.flush();
while (1) delay(10);
}
if (rtc.lostPower()) {
Serial.println("RTC lost power, let's set the time!");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
Serial.println(F("DHT11"));
dht.begin();
radio.begin(); // Инициализация радиомодуля NRF24L01
radio.setChannel(5); // Обмен данными будет вестись на пятом канале (2,405 ГГц)
radio.setDataRate (RF24_1MBPS); // Скорость обмена данными 1 Мбит/сек
radio.setPALevel(RF24_PA_HIGH); // Выбираем высокую мощность передатчика (-6dBm)
radio.openReadingPipe(1, 0x787878787890); // Открываем трубу с ID передатчика
radio.startListening(); // Включаем прослушивание открытой трубы
myGLCD.InitLCD(); //Инициализируем дисплей
myGLCD.clrScr();
myGLCD.setColor(255, 255, 255);
myGLCD.fillRect(0,4,450,0);
myGLCD.fillRect(1,272,5,0);
myGLCD.fillRect(218,272,220,0);
myGLCD.fillRect(0,90,450,92);
myGLCD.fillRect(0,272,450,270);
myGLCD.fillRect(0,182,450,180);
myGLCD.fillRect(450,272,452,0);
myGLCD.setColor(255, 0, 255);
myGLCD.setFont(hallfetica_normal);
myGLCD.print("Street temp", 40, 5);
myGLCD.print("mm", 182,110);
myGLCD.print("Hg", 186,125);
myGLCD.print("Pressure", 20,94);
myGLCD.print("o", 180,20);
myGLCD.print("C", 195,30);
myGLCD.setColor(0, 255, 255);
myGLCD.setFont(hallfetica_normal);
myGLCD.print("Home temp", 235, 5);
myGLCD.print("o", 365,20);
myGLCD.print("C", 380,30);
myGLCD.print("%", 370,110);
myGLCD.print("Humidity", 235,94);
}
// }
void loop()
{
char status;
double T,P,p0,a;
status = pressure.startTemperature(); // Считывание показания
if(status!=0){ // Если значение status не 0, выполняем следующию команду.
delay(status); // Ждем
status = pressure.getTemperature(T); // Полученые показания, сохраняем в переменную T
// if(status!=0){ // Если все хорошо, функция вернет 1, иначе вернет 0
Serial.print("Temperature: "); // Вывод текста "Температура"
Serial.print(T,2); // Вывод показания переменной "Т"
Serial.println(" C, ");
status = pressure.startPressure(3); // Считывание показания
//if(status!=0){ // Если значение status не 0, выполняем следующию команду.
delay(status); // Ждем
status = pressure.getPressure(P,T); // Полученные показания, сохраняем в переменную P
//if(status!=0){ // Если все хорошо, функция вернет 1, иначе вернет 0
Serial.print("Absolute pressure: "); // Вывод текста "Атмосферное давление"
Serial.print(P,2); // Вывод показания переменной mBar
Serial.print(" mbar, "); // ПВывод текста "mBar"
Serial.println(P*0.7500637554192,2); // Вывод показания в mmHg
//Serial.println(" mmHg");} // Вывод текста "mmHg"
delay(5000); // Пауза в 5с
}
float data ;
// if(radio.available()){ // Если по рпдиоканалу поступили данные
radio.read(&data, sizeof(data)); // Чтение данных и запись в массив
Serial.println(data);
DateTime now = rtc.now();
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(" (");
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
Serial.print(") ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
Serial.print("Temperature: ");
Serial.print(rtc.getTemperature());
Serial.println(" C");
Serial.println();
delay(3000);
int h = dht.readHumidity(); // чтение датчика на пине 2
int t = dht.readTemperature(); // чтение датчика на пине 2
//float h = dht.readHumidity(); // чтение датчика на пине 2
// float t = dht.readTemperature(); // чтение датчика на пине 2
if (isnan(h) || isnan(t))
{
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
Serial.print(F("Humidity: "));
Serial.print(h);
Serial.print(F("% Temperature: "));
Serial.println(t);
{
myGLCD.setColor(255, 0, 255);
myGLCD.setFont(GroteskBold16x32);
myGLCD.print(String(h),295,141);
myGLCD.print(String(t),295,50);
}
{
myGLCD.setColor(0, 255, 255);
myGLCD.setFont(GroteskBold16x32);
myGLCD.print(String(now.hour()),30,230);
myGLCD.print(String((':')),70,230);
myGLCD.print(String(now.minute()),100,230);
myGLCD.print(String((':')),140,230);
myGLCD.print(String(now.second()),160,230);
myGLCD.print(String(daysOfTheWeek[now.dayOfTheWeek()]),270,190);
myGLCD.print(String(P*0.7500637554192,2),50,141);
myGLCD.print(String(('/')),320,230);
myGLCD.print(String(now.year()),250,230);
myGLCD.print(String(now.month()),340,230);
myGLCD.print(String(('/')),360,230);
myGLCD.print(String(now.day()),380,230);
myGLCD.print(String(data),50,50);
}
}
включил передатчик и приемник, но на дисплее уличная температура нули, а я так понимаю, при неисправном датчике должна 72,5 . Значит не работает или передатчик, или приемник, или и то и другое. Подскажите, где искать?
Начать, естественно, нужно с локализации проблемы, т.е. с выяснения, что именно не работает.
Не очень понял - “передатчик не трогаю”… Лучше как раз потрогать!
Сначала проверяйте работу радиожелезок. Опять возьмите маленькие скетчики из примеров. Чтобы ничего лишнего.
Передатчик пусть передаёт какое-нибудь одно заданное число (или фиксированный набор чисел), а приёмник пусть кидает полученное в сериал.
А как конкретно я могу выяснить?
Передатчик каждые полсекунды выдает в монитор порта температуру 72,5, приемник даже отдельный скетч ничего не ловит. Виноват передатчик или приемник? как узнать передатчик передает то, что в мониторе пора или нет?
Я понимаю, что надо сначала убедиться, что передатчик передает, а потом заниматься приемником. Но как это сделать?
нет надо залить два скетча, примеры передатчика и приёмника и убедится, что примеры работают
Скетч для передатчика почти полностью взят из примера. Там только было на 2 датчика, я убрал второй и свой адрес датчика поставил. Это мы здесь уже разбирали. Он и залит сейчас в передатчик и он выдает в монитор порта температуру. Но приемник, скетч которого я сегодня выше выложил, ничего не ловит. Посмотрите скетч приемника, может я что-то не то сделал.
Скетча передатчика никто здесь не видел. Может он там так написан, что если с датчика ничего не получено, то и передавать нечего!
Поэтому Вам и говорят, для теста выкинуть всё про датчики, или показать скетч передатчика. Лучше сделать и то и другое.