Совместная работа датчика температуры и TFT дисплеея.
- Войдите на сайт для отправки комментариев
Ср, 17/02/2021 - 17:40
Доброго времени суток. Решил я приобщится к миру 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;
}
куда копать?
1. почитать хоть немного книжки о программировании
2. тупо вставить вывод tft.print в те же места где выводятся данные в консоли - но вариант плохой, т к последуют вопросы куда конкретно :(
а если строчки tft.begin(); и соответсвенно testText() оставить в коде и тупо подождать подольше - данные в консоли не появятся?
куда копать?
Копать в сторону проектов попроще. Для первых шагов лучше начинать с Arduino Uno и светодиодов. Потом попытаться подключить текстовый дисплей 1602. И так далее, главное - постепенно.
а если строчки tft.begin(); и соответсвенно testText() оставить в коде и тупо подождать подольше - данные в консоли не появятся?
нет не появятся. точнее будут всегда выводится нули. и код статуса =4 это я уже сам добавил его обработку.
а зачем вы пин дисплея
повесили на D4 ? на D4 у ЕСП8266 находится SDA от I2c
1. почитать хоть немного книжки о программировании
2. тупо вставить вывод tft.print в те же места где выводятся данные в консоли - но вариант плохой, т к последуют вопросы куда конкретно :(
Я читал правила форума и понимаю что у вас тут дедовщина, и Вы очевидно уважаемый старожил но в своё оправдание отвечу:
1. Опыт программирования 7 лет ( php, python, nodeJs + университетские Basic и Pascal)/
2 А смысл ставить tft.print? ну поставил я его - вывело ровно тоже что ив консоли. тоесть нулевые значения.
а если использовать:
а зачем вы пин дисплея
повесили на D4 ? на D4 у ЕСП8266 находится SDA от I2c
Это брал из примера. точьв точь как тут
https://simple-circuit.com/esp8266-nodemcu-ili9341-tft-display/
Это брал из примера. точьв точь как тут
https://simple-circuit.com/esp8266-nodemcu-ili9341-tft-display/
ну так в том примере I2C не используется, а у вас то он есть
Попробуйте перекинуть пины дисплея так, чтобы освободить шину I2C (пины D1 D2)
Так на которую из строчек 20-21 реагирует вывод в консоль?
Я бы попытался перенести эти строчки повыше. Такое впечатление, что у Вас конфликтуют дисплей и датчик.
Такое впечатление, что у Вас конфликтуют дисплей и датчик.
ага, по пинам.
Пин CS экрана включен на аппаратный I2C, при этом пины I2c отрепамплены неизвестно куда... Может так будет работать... но я бы эту чехарду убрал
ЗАРАБОТАЛО :)
Спасибо b707 я перекинул пин дисплея на D8 и заработало )
и попутно по совету ua6em другую библиотеку взял.
Спасибо всем кто пробовал помочь. А тем кто просто критикует - желаю чтобы в их жини стало больше приятных и добрых моментов - может они тоже подобреют )
1. почитать хоть немного книжки о программировании
2. тупо вставить вывод tft.print в те же места где выводятся данные в консоли - но вариант плохой, т к последуют вопросы куда конкретно :(
Я читал правила форума и понимаю что у вас тут дедовщина, и Вы очевидно уважаемый старожил но в своё оправдание отвечу:
1. Опыт программирования 7 лет ( php, python, nodeJs + университетские Basic и Pascal)/
2 А смысл ставить tft.print? ну поставил я его - вывело ровно тоже что ив консоли. тоесть нулевые значения.
да, да, мы крутые программисты , а погуглить к каким пинам соеденять датчики мы не можем, беда :(