Совместная работа датчика температуры и 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? ну поставил я его - вывело ровно тоже что ив консоли. тоесть нулевые значения.
да, да, мы крутые программисты , а погуглить к каким пинам соеденять датчики мы не можем, беда :(