Совместная работа датчика температуры и TFT дисплеея.

rams
Offline
Зарегистрирован: 17.02.2021
Доброго времени суток. Решил я приобщится к миру Arduino и делаю первые шаги пока   получается с переменным успехом. Вот что у меня из обородувания есть:
 
Модуль ESP8266 NodeMcu v3 Lua с Wi-Fi,
Дисплей  для Arduino STM32, 2,8 дюйма, 240x320, SPI, TFT, ЖК-дисплей, ILI9341
датчик температуры и влажности am2320
 
что смог : 
1 написал скетч который считывает данные температуры и влажности и выводит в консоль
2 скачал тестовый пример работы с дисплеем
 
оба скрипта по отдельности работают но не могу их совместить вместе. помогите пожалуйста
 
Вот скрипт. сейчас дисплей работает НО в консоли температура и влажность по нулям.
если убрать строку    tft.begin(); и соответсвенно testText() - то в консоли появляется температура и влажность.
 
#include <Adafruit_GFX.h>       // include Adafruit graphics library
#include <Adafruit_ILI9341.h>   // include Adafruit ILI9341 TFT library
#include <AM2320.h>
AM2320 th(&Wire);

#define TFT_CS    D2     // TFT CS  pin is connected to NodeMCU pin D2
#define TFT_RST   D3     // TFT RST pin is connected to NodeMCU pin D3
#define TFT_DC    D4     // TFT DC  pin is connected to NodeMCU pin D4
// initialize ILI9341 TFT library with hardware SPI module
// SCK (CLK) ---> NodeMCU pin D5 (GPIO14)
// MOSI(DIN) ---> NodeMCU pin D7 (GPIO13)
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);


void setup() {
  Serial.begin(9600);
  Serial.println("ILI9341 Test!"); 
  Wire.pins(12,5); // SDA, SCL
  Wire.begin();
  tft.begin();
  testText();
  Serial.println(F("Done!"));
 
}
 
 
void loop(void) {

  Serial.println(F("Chip = AM2320"));
  Serial.println(th.Read());
  switch(th.Read()) {
    case 2:
      Serial.println(F("  CRC failed"));
      break;
    case 1:
      Serial.println(F("  Sensor offline"));
      break;
    case 0:
      Serial.print(F("  Humidity = "));
      Serial.print(th.Humidity);
      Serial.println(F("%"));
      Serial.print(F("  Temperature = "));
      Serial.print(th.cTemp);
      Serial.println(F("*C"));
      Serial.println();
      break;
          case 4:
      Serial.print(F("  Humidity = "));
      Serial.print(th.Humidity);
      Serial.println(F("%"));
      Serial.print(F("  Temperature = "));
      Serial.print(th.cTemp);
      Serial.println(F("*C"));
      Serial.println();
      break;
  }

 delay(1000);

  for(uint8_t rotation=0; rotation<4; rotation++) {
    tft.setRotation(rotation);
    testText();
    delay(1000);
  }
 
}
 

 
unsigned long testText() {
  tft.fillScreen(ILI9341_BLACK);
  unsigned long start = micros();
  tft.setCursor(0, 0);
  tft.setTextColor(ILI9341_WHITE);  tft.setTextSize(1);
  tft.println("Hello World!");
  tft.setTextColor(ILI9341_RED);    tft.setTextSize(3);
  tft.println("Its ALIVE :)");
  return micros() - start;
}
 

куда копать?

 

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

1. почитать хоть немного книжки о программировании
2. тупо вставить вывод tft.print в те же места где выводятся данные в консоли - но вариант плохой, т к последуют вопросы куда конкретно :(

b707
Offline
Зарегистрирован: 26.05.2017

rams пишет:

Вот скрипт. сейчас дисплей работает НО в консоли температура и влажность по нулям.
если убрать строку    tft.begin(); и соответсвенно testText() - то в консоли появляется температура и влажность.

а если строчки tft.begin(); и соответсвенно testText() оставить в коде и тупо подождать подольше - данные в консоли не появятся?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

rams пишет:

Доброго времени суток. Решил я приобщится к миру Arduino и делаю первые шаги пока   получается с переменным успехом. Вот что у меня из обородувания есть:
 
Модуль ESP8266 NodeMcu v3 Lua с Wi-Fi,
Дисплей  для Arduino STM32, 2,8 дюйма, 240x320, SPI, TFT, ЖК-дисплей, ILI9341
датчик температуры и влажности am2320
 
...

куда копать?

Копать в сторону проектов попроще. Для первых шагов лучше начинать с Arduino Uno и светодиодов. Потом попытаться подключить текстовый дисплей 1602. И так далее, главное - постепенно.

rams
Offline
Зарегистрирован: 17.02.2021

b707 пишет:

rams пишет:

Вот скрипт. сейчас дисплей работает НО в консоли температура и влажность по нулям.
если убрать строку    tft.begin(); и соответсвенно testText() - то в консоли появляется температура и влажность.

а если строчки tft.begin(); и соответсвенно testText() оставить в коде и тупо подождать подольше - данные в консоли не появятся?

 

нет не появятся. точнее будут всегда выводится нули. и код статуса =4  это я уже сам добавил его обработку. 

b707
Offline
Зарегистрирован: 26.05.2017

а зачем вы пин дисплея

#define TFT_DC    D4

повесили на D4 ? на D4 у ЕСП8266 находится SDA от I2c

 

rams
Offline
Зарегистрирован: 17.02.2021

andycat пишет:

1. почитать хоть немного книжки о программировании
2. тупо вставить вывод tft.print в те же места где выводятся данные в консоли - но вариант плохой, т к последуют вопросы куда конкретно :(

Я читал правила форума и понимаю что у вас тут дедовщина, и Вы очевидно уважаемый старожил но в своё оправдание отвечу:

1. Опыт программирования 7 лет ( php, python, nodeJs + университетские Basic и Pascal)/ 

2 А смысл ставить tft.print?  ну поставил я его - вывело ровно тоже что ив  консоли. тоесть нулевые значения.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

а если использовать:
 

 #include "Adafruit_AM2320.h"
 #include <Adafruit_Sensor.h>
   

 

rams
Offline
Зарегистрирован: 17.02.2021

b707 пишет:

а зачем вы пин дисплея

#define TFT_DC    D4

повесили на D4 ? на D4 у ЕСП8266 находится SDA от I2c

Это брал из примера. точьв  точь как тут 

https://simple-circuit.com/esp8266-nodemcu-ili9341-tft-display/

b707
Offline
Зарегистрирован: 26.05.2017

rams пишет:

Это брал из примера. точьв  точь как тут 

https://simple-circuit.com/esp8266-nodemcu-ili9341-tft-display/

ну так в том примере I2C не используется, а у вас то он есть

Попробуйте перекинуть пины дисплея так, чтобы освободить шину I2C (пины D1 D2)

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Так на которую из строчек 20-21 реагирует вывод в консоль?

Я бы попытался перенести эти строчки повыше. Такое впечатление, что у Вас конфликтуют дисплей и датчик.

b707
Offline
Зарегистрирован: 26.05.2017

andriano пишет:

Такое впечатление, что у Вас конфликтуют дисплей и датчик.

ага, по пинам.

Пин CS экрана включен на аппаратный I2C, при этом пины I2c отрепамплены неизвестно куда... Может так будет работать... но я бы эту чехарду убрал

rams
Offline
Зарегистрирован: 17.02.2021

ЗАРАБОТАЛО :)

Спасибо b707   я перекинул пин дисплея на D8  и заработало )

и попутно по совету ua6em  другую библиотеку взял.

Спасибо всем кто пробовал помочь. А тем кто просто критикует - желаю  чтобы в их жини стало больше приятных и добрых моментов - может они тоже подобреют )

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

rams пишет:
А тем кто просто критикует - желаю  чтобы в их жини стало больше приятных и добрых моментов - может они тоже подобреют )
Не. Я вот ежели по жизни казёл, то не подобрею. По крайней мере, от пожеланий. Вот ежели бы кто велосипед подарил, тогда может быть :-(

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

rams пишет:

andycat пишет:

1. почитать хоть немного книжки о программировании
2. тупо вставить вывод tft.print в те же места где выводятся данные в консоли - но вариант плохой, т к последуют вопросы куда конкретно :(

Я читал правила форума и понимаю что у вас тут дедовщина, и Вы очевидно уважаемый старожил но в своё оправдание отвечу:

1. Опыт программирования 7 лет ( php, python, nodeJs + университетские Basic и Pascal)/ 

2 А смысл ставить tft.print?  ну поставил я его - вывело ровно тоже что ив  консоли. тоесть нулевые значения.

да, да, мы крутые программисты , а погуглить к каким пинам соеденять датчики мы не можем, беда :(