Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <ESP8266WiFi.h> // библиотека Wi-Fi
- #include <UTFT.h> // библиотека для ILI9341 дисплея
- #include <SPI.h> // для дисплея
- #include <PubSubClient.h> // библиотека для MQTT
- extern uint8_t SmallFont[]; // подключаем стандартный малый шрифт
- extern uint8_t GroteskBold24x48[]; // подключаем шрифт для больших цефр
- UTFT myGLCD ( ILI9341_S5P, 0, 15, 2 ); // назначаем пины для дисплея
- const char *ssid = "SSID";
- const char *pass = "PASSWIFI";
- const char *mqtt_server = "XXXXX.org"; // адрес MQTT сервера
- const int mqtt_port = 1883; // порт MQTT сервера
- const char *mqtt_user = "XXXXXXXXXXXXXX"; // логин на сервере
- const char *mqtt_pass = "YYYYYYYYYY"; // пароль на сервере
- #define BUFFER_SIZE 100
- WiFiClient wclient;
- PubSubClient client(wclient, mqtt_server, mqtt_port);
- float line1[193];
- float line2[193];
- unsigned long startTime = 0;
- unsigned int TFT_Time = 300; // интервал обновления экрана в секундах
- void callback(const MQTT::Publish& pub)
- { String payload = pub.payload_string();
- if(String(pub.topic()) == "ZZZZZZZZZZZZZZZZZ/parnik/temp1") {
- line1[0] = payload.toFloat(), Serial.println (line1[0]);
- }
- if(String(pub.topic()) == "ZZZZZZZZZZZZZZZZZ/parnik/temp2"){
- line2[0]= payload.toFloat(), Serial.println (line2[0]);
- }
- }
- void setup ( )
- {
- Serial.begin(115200);
- myGLCD.InitLCD ( );
- myGLCD.clrScr ( ); // очищаем дисплей
- myGLCD.setFont ( GroteskBold24x48 ); // задаем шрифт 23 на 64
- myGLCD.setColor ( VGA_YELLOW ); // желтый цвет
- myGLCD.print("CTAPT",CENTER,88);
- myGLCD.setFont ( SmallFont ); // задаем малый шрифт
- myGLCD.print("ESP8266-ILI9341 termometr ",CENTER,160);
- myGLCD.print("v 1.9, 26/03/2017 ",CENTER,180);
- }
- void tftPrint(){ // функция вывода на дисплей.
- if (millis() - startTime > TFT_Time * 1000){
- Serial.println ("Refresch TFT display ");
- float t1_max = -10.00;
- float t2_max = -10.00; // устанавливаем запредельные значения
- float t1_min = 50.00;
- float t2_min = 50.00;
- for (int x=191; x>-1; x--) { // ищем диапазон отображения
- Serial.print("line1["),Serial.print(x),Serial.print("] = "),Serial.print(line1[x]);
- Serial.print(" line2["),Serial.print(x),Serial.print("] = "),Serial.print(line2[x]), Serial.println(" ");
- if (line1[x] !=0 && line1[x] > t1_max) t1_max = line1[x]; // получаем максимальное значение переменной в массиве
- if (line2[x] !=0 && line2[x] > t2_max) t2_max = line2[x]; // получаем максимальное значение переменной в массиве
- if (line1[x] !=0 && line1[x] < t1_min) t1_min = line1[x]; // получаем минимальное значение переменной в массиве
- if (line2[x] !=0 && line2[x] < t2_min) t2_min = line2[x]; // получаем минимальное значение переменной в массиве
- line1[x+1] = line1[x];
- line2[x+1] = line2[x];
- }
- myGLCD.clrScr ( );
- myGLCD.setFont ( SmallFont ), myGLCD.setColor ( VGA_WHITE ); // печатаем минимумы и максимумы графиков
- myGLCD.printNumF(t1_max,2, 198,4,'.'), myGLCD.printNumF(t1_min,2, 198,105,'.');
- myGLCD.printNumF(t2_max,2, 198,125,'.');
- myGLCD.printNumI(millis()/60000,250,125);
- myGLCD.printNumF(t2_min,2, 198,224,'.');
- myGLCD.setFont ( GroteskBold24x48 );
- myGLCD.setColor ( VGA_YELLOW ); // желтый цвет
- myGLCD.printNumF(line1[1],2, 194,28,'.'); // выводим число во Float
- myGLCD.drawRoundRect(191,0,319,118); // рисуем прямоугольник со скругленными краями
- myGLCD.setColor ( VGA_LIME ); // зеленый цвет
- myGLCD.printNumF(line2[0],2, 194,150,'.'); // выводим число во Float
- myGLCD.drawRoundRect(191,121,319,239); // рисуем прямоугольник со скругленными краями
- delay(300);
- for (int x=0; x<192; x++) { // прогоняем весь массив
- if (line1[x] !=0 && t1_min != t1_max) {
- int y1 = map(line1[x]*100, t1_min*100, t1_max*100, 0, 118); // мапим температуру в точки экрана
- myGLCD.setColor ( VGA_YELLOW ); // желтый цвет
- myGLCD.drawLine(192-x,119-y1,192-x,119); // рисуем линию с кординатами
- }
- if (line2[x] !=0 && t2_min != t2_max) {
- int y2 = map(line2[x]*100, t2_min*100, t2_max*100, 0, 118); // мапим температуру в точки экрана
- myGLCD.setColor ( VGA_LIME ); // зеленый цвет
- myGLCD.drawLine(192-x,239-y2,192-x,239); // рисуем линию с кординатами
- }
- }
- startTime = millis();
- }
- }
- void loop()
- {
- if (WiFi.status() != WL_CONNECTED)
- {
- WiFi.begin(ssid, pass);
- if (WiFi.waitForConnectResult() != WL_CONNECTED)
- delay(500);
- Serial.println("No Wi-Fi");
- myGLCD.clrScr ( ); // очищаем дисплей
- myGLCD.setFont ( GroteskBold24x48 ); // задаем шрифт 23 на 64
- myGLCD.setColor ( VGA_YELLOW ); // голубой цвет
- myGLCD.print("HET",CENTER,48);
- myGLCD.print("Wi-Fi",CENTER,128);
- return;
- }
- if (WiFi.status() == WL_CONNECTED)
- {
- if (!client.connected())
- {
- if (client.connect(MQTT::Connect("TFT-R")
- .set_auth(mqtt_user, mqtt_pass)))
- {
- client.set_callback(callback);
- client.subscribe("ZZZZZZZZZZZZZZZZZ/parnik/temp1");
- client.subscribe("ZZZZZZZZZZZZZZZZZ/parnik/temp2");
- }
- }
- if (client.connected()){
- client.loop();
- tftPrint();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement