Метеостанция на Arduino mega nrf24l01+ цветной tft дисплей 3,5"

Спасибо, посмотрю, может быть поменяю, если она лучше.

@ua6em так сказать на первоисточник этой библиотеки ссылку дал. У неё есть множество форков. Разбираться, какой вариант лучше, можно до посинения. Если экран работает, то я бы пока с этим сильно не заморачивался. У Вас и без этого ещё много интересного :slight_smile:
Хотя с другой стороны, может он и прав…
Вот в исходном скетче упоминается iarduino_RTC. Так библиотеки от iarduino у многих здесь приводили к проблемам. Не любит их никто. Лучше что-нибудь другое найти.

Всем привет. подключил часы. Разобрал пример из библиотеки RTClib , по аналогии дописал в скетч с датчиком. В монитор порта все выводится нормально, на дисплей не соображу как вывести. По аналогии с выводом данных датчика не получается.

#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);

#include "RTClib.h"

RTC_DS3231 rtc;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

#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[];


UTFT myGLCD(CTE40,38,39,40,41);   // Remember to change the model parameter to suit your display module!


  void setup()
{
  Serial.begin(115200);

 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();
 

  myGLCD.InitLCD(); //Инициализируем дисплей

  myGLCD.clrScr();
  
  myGLCD.setColor(255, 255, 255);
  myGLCD.fillRect(0,4,450,0);
  
  myGLCD.setColor(255, 255, 255);
  myGLCD.fillRect(1,272,5,0);
   
    myGLCD.setColor(255, 255, 255); //розовый, 255,225,225 синий,255,225,255 светло голубой
  myGLCD.fillRect(218,272,220,0);
  
   myGLCD.setColor(255, 255, 255); //розовый, 255,225,225 синий,255,225,255 светло голубой
  myGLCD.fillRect(0,90,450,92);

  myGLCD.setColor(255, 255, 255);
  myGLCD.fillRect(0,272,450,270);

  myGLCD.setColor(255, 255, 255);
  myGLCD.fillRect(0,182,450,180);

 myGLCD.setColor(255, 255, 255);
 myGLCD.fillRect(450,272,452,0);
  
  myGLCD.setColor(255, 0, 255);
  myGLCD.setFont(hallfetica_normal);
  myGLCD.print("Street temp", 40, 5);
  
  myGLCD.setColor(255, 0, 255);
   myGLCD.setFont(hallfetica_normal);
   myGLCD.print("mm", 182,110);
   
   myGLCD.setColor(255, 0, 255);
   myGLCD.setFont(hallfetica_normal);
   myGLCD.print("Hg", 186,125);
   
   myGLCD.setColor(255, 0, 255);
   myGLCD.setFont(hallfetica_normal);
   myGLCD.print("Pressure", 20,94);
     
  myGLCD.setColor(0, 255, 255);
  myGLCD.setFont(hallfetica_normal);
  myGLCD.print("Home temp", 235, 5);
  
  myGLCD.setColor(0, 255, 255);
   myGLCD.setFont(hallfetica_normal);
   myGLCD.print("o", 365,20);
      
   myGLCD.setColor(0, 255, 255);
   myGLCD.setFont(hallfetica_normal);
   myGLCD.print("C", 380,30);
   
   myGLCD.setColor(0, 255, 255);
   myGLCD.setFont(hallfetica_normal);
   myGLCD.print("%", 370,110);
   
   myGLCD.setColor(0, 255, 255);
   myGLCD.setFont(hallfetica_normal);
   myGLCD.print("Humidity", 235,94);
   
    myGLCD.setColor(255, 0, 255);
   myGLCD.setFont(hallfetica_normal);
   myGLCD.print("o", 180,20);
   
   
   myGLCD.setColor(255, 0, 255);
   myGLCD.setFont(hallfetica_normal);
   myGLCD.print("C", 195,30);
   }
  
  void loop()
{

   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);
 delay(2000);
  
  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.setColor(255, 0, 255);
   myGLCD.setFont(GroteskBold16x32);
  myGLCD.print(String(t),295,50);
   }
  
  {
   myGLCD.setColor(255, 0, 255);
   myGLCD.setFont(GroteskBold16x32);
 // myGLCD.print(,30,250);
   }

        
   }

А что это?

почему эти три куска выделены в отдельные блоки? Зачем трижды устанавливать один и тот же цвет? В третьем блоке вообще ничего не выводится на экран - зачем он?

вот тут еще лучше… Семь раз один и тот же цвет?
Как говорится в анекдоте - идите уже, зеленее не будет!

@Влад47 Вы бы скетч-то привели именно тот, в котором пытались вывести, но не получилось.
А то в последнем приведённом варианте вроде как и нет попытки вывода времени на экран.
Ну и да, чтобы всё это легче смотрелось, можно часть, рисующую всякие рамки и статический текст подсократить существенно по строчкам - выкинуть те, которые ничего не меняют (одинаковый цвет, одинаковый шрифт).

всё время надо собрать в одну строку, добавить в нужное место незначащие нули и разделители, а потом единой строкой и вывести, я так делал когда-то, лет 6 назад

#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);

#include "RTClib.h"

RTC_DS3231 rtc;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

#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[];


UTFT myGLCD(CTE40,38,39,40,41);   // Remember to change the model parameter to suit your display module!


  void setup()
{
  Serial.begin(115200);

 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();
 

  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()
{

   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);
 delay(2000);
  
  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(255, 0, 255);
   myGLCD.setFont(GroteskBold16x32);
 // myGLCD.print(,30,250);
   }

        
   }

А как выводили время, что оно не вывелось - так и не показали. (Это видимо где-то в районе 142 строки по последнему скетчу было.) Чего бы ему не выводиться-то?

Добрый день всем! Пока не получается вывод на дисплей даты и время, я подключил датчик давления ВМР 180, на основе примеров из инета дописал измерение давления в скетч, вывел на дисплей. Все получилось. Что касается как я пробовал вывести на дисплей дату и время. Наверное я все пробовал неправильно. Я пробовал так: myGLCD.print(String(now.hour(),30,250)); пробовал так : myGLCD.print(String( hour()([now.hour()]) пробовал так RTC.read™; myGLCD. print(tm.Hour() и так далеею Я здесь пишу сокращенно, по одному числу. Очевидно все делал в корне неверно. Подскажите, в какую сторону идти

Смотрите внимательно, куда ставите скобки. У вас координаты дисплея оказались внутри инициализации класса String. Зачем они там?
Или вы вообще не понимаете, что тут написано?

now.hour() - по сути-то обычное целое число. Чего бы ему не выводиться? Так что ещё раз проверяйте синтаксис. Если в скетче скобки стояли, как здесь написали, то понятно, что ничего не вывелось. Видимо так надо было: myGLCD.print(String(now.hour()), 30, 250);

Нет, это я здесь ошибся, в скетч я ставил правильно

Во-первых, НИКОГДА не показывайте программный код в виде картинок с монитора. Это крайне неудобно для обсуждения и потому трактуется как неуважение к другим участникам.
А во-вторых - прямо в указанной строке на мониторе - ошибка, написано “string” вместо “String” - вы думаете это одно и то же???

И внизу именно про эту ошибку сообщает компилятор!
Поэтому тут всегда и просят точно приводить именно тот скетч о котором идёт речь и так же точно копировать сообщения об ошибках.

Критику принял. Прошу меня извинить, больше такого не повторится. Всем большое спасибо. Все получилось. Теперь буду разбираться с радиомодулем, приемник, передатчик.

Добрый день всем! На основе примеров из инета составил скетч для передатчика

01	#include <SPI.h>
02	#include "nRF24L01.h"
03	#include "RF24.h"
04	#include <OneWire.h>  //библиотека работы шины для ds18b20
05	#include <DallasTemperature.h> //библиотека для считывания температуры с ds18b20
06	   
07	const uint64_t pipe = 0xF0F1F2F3F4LL; //идентификатор передачи данных.
08	RF24 radio(9, 10); //указываем пины подключения передатчика.
09	OneWire  oneWire(2);  //указываем пины для подключения датчика ds18b20.
10	DallasTemperature ds(&oneWire); //активируем библиотеку ds.
11	 
12	DeviceAddress sensor = {0x28, 0xFF, 0x68, 0x6A, 0x84, 0x16, 0x5, 0x69}; //адрес датчика.
13	
14	 
15	void setup(){
16	  Serial.begin(9600); 
17	  ds.begin();  //запускаем функцию считывания температуры ds.
18	  radio.begin(); //делаем инициализацию.
19	  delay(2); //ждем реакции модуля передачи данных.
20	  radio.setChannel(5); // канал для передачи данных (0-127).
21	  radio.setDataRate(RF24_1MBPS); //указываем на какой скорости будут общаться модули.
22	  radio.setPALevel(RF24_PA_HIGH); //указываем мощность передатчика. 
23	  radio.openWritingPipe(pipe); // открываем трубу на передачу.
24	}
25	 
26	 
27	void loop(){ 
28	  ds.requestTemperatures(); // считываем температуру с датчика
29	  float data ;  //создаем массив
30	  data = float(ds.getTempC(sensor)); //присваиваем значению массива данные с sensor (за один раз можно отправить до 32 байт).
31	 
32	  radio.write(&data, sizeof(data)); // передаем массив и его размер.
33	   
34	   Serial.println(data); //выводим данные в сериал порт для проверки.
35	   Serial.println(); //пробел.
36	   delay(500); //ждем пол секунды. 
37	}

подскажите, где я накосячил. В монитор порта через каждые полсекунды выдает число 127 и все.

Перед загрузкой я дублирующие номера строк убирал