Advertisement
Guest User

Untitled

a guest
Apr 22nd, 2017
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.36 KB | None | 0 0
  1. #include <ESP8266WiFi.h> // библиотека Wi-Fi
  2. #include <UTFT.h> // библиотека для ILI9341 дисплея
  3. #include <SPI.h> // для дисплея
  4. #include <PubSubClient.h> // библиотека для MQTT
  5.  
  6. extern uint8_t SmallFont[]; // подключаем стандартный малый шрифт
  7. extern uint8_t GroteskBold24x48[]; // подключаем шрифт для больших цефр
  8.  
  9. UTFT myGLCD ( ILI9341_S5P, 0, 15, 2 ); // назначаем пины для дисплея
  10.  
  11. const char *ssid = "SSID";
  12. const char *pass = "PASSWIFI";
  13. const char *mqtt_server = "XXXXX.org"; // адрес MQTT сервера
  14. const int mqtt_port = 1883; // порт MQTT сервера
  15. const char *mqtt_user = "XXXXXXXXXXXXXX"; // логин на сервере
  16. const char *mqtt_pass = "YYYYYYYYYY"; // пароль на сервере
  17.  
  18. #define BUFFER_SIZE 100
  19. WiFiClient wclient;
  20. PubSubClient client(wclient, mqtt_server, mqtt_port);
  21.  
  22. float line1[193];
  23. float line2[193];
  24.  
  25. unsigned long startTime = 0;
  26. unsigned int TFT_Time = 300; // интервал обновления экрана в секундах
  27.  
  28. void callback(const MQTT::Publish& pub)
  29. { String payload = pub.payload_string();
  30.  
  31. if(String(pub.topic()) == "XXXXXXXXXXXXXX/parnik/temp1") {
  32. line1[0] = payload.toFloat(), Serial.println (line1[0]);
  33. }
  34.  
  35. if(String(pub.topic()) == "XXXXXXXXXXXXXX/parnik/temp2"){
  36. line2[0]= payload.toFloat(), Serial.println (line2[0]);
  37. }
  38.  
  39.  
  40. }
  41.  
  42. void setup ( )
  43. {
  44. Serial.begin(115200);
  45. myGLCD.InitLCD ( );
  46.  
  47. myGLCD.clrScr ( ); // очищаем дисплей
  48. myGLCD.setFont ( GroteskBold24x48 ); // задаем шрифт 23 на 64
  49. myGLCD.setColor ( VGA_YELLOW ); // желтый цвет
  50. myGLCD.print("CTAPT",CENTER,88);
  51. myGLCD.setFont ( SmallFont ); // задаем малый шрифт
  52. myGLCD.print("ESP8266-ILI9341 termometr ",CENTER,160);
  53. myGLCD.print("v 1.8, 21/04/2017 ",CENTER,180);
  54.  
  55. }
  56.  
  57. void tftPrint(){ // функция вывода на печать.
  58.  
  59. if (millis() - startTime > TFT_Time * 1000){
  60. Serial.println ("Refresch TFT display ");
  61.  
  62. float t1_max = -10.00;
  63. float t2_max = -10.00; // устанавливаем запредельные значения
  64. float t1_min = 50.00;
  65. float t2_min = 50.00;
  66.  
  67. for (int x=191; x>-1; x--) { // ищем диапазон отображения
  68. Serial.print("line1["),Serial.print(x),Serial.print("] = "),Serial.print(line1[x]);
  69. Serial.print(" line2["),Serial.print(x),Serial.print("] = "),Serial.print(line2[x]), Serial.println(" ");
  70. if (line1[x] !=0 && line1[x] > t1_max) t1_max = line1[x]; // получаем максимальное значение переменной в массиве
  71. if (line2[x] !=0 && line2[x] > t2_max) t2_max = line2[x]; // получаем максимальное значение переменной в массиве
  72.  
  73. if (line1[x] !=0 && line1[x] < t1_min) t1_min = line1[x]; // получаем минимальное значение переменной в массиве
  74. if (line2[x] !=0 && line2[x] < t2_min) t2_min = line2[x]; // получаем минимальное значение переменной в массиве
  75.  
  76. line1[x+1] = line1[x];
  77. line2[x+1] = line2[x];
  78. }
  79. // Serial.print("t1_min = "),Serial.print(t1_min),Serial.print(" t1_max = "),Serial.print(t1_max), Serial.print (" ");
  80. // Serial.print("t2_min = "),Serial.print(t2_min),Serial.print(" t2_max = "),Serial.print(t2_max), Serial.println(" ");
  81.  
  82. myGLCD.clrScr ( );
  83.  
  84. myGLCD.setFont ( SmallFont ), myGLCD.setColor ( VGA_WHITE ); // печатаем минимумы и максимумы графиков
  85. myGLCD.setColor ( VGA_WHITE ), myGLCD.drawLine(48,0,48,239), myGLCD.drawLine(96,0,96,239), myGLCD.drawLine(144,0,144,239);
  86. myGLCD.printNumF(t1_max,2, 198,4,'.'), myGLCD.print(" Max", 250,4);
  87. myGLCD.printNumF(t1_min,2, 198,105,'.'), myGLCD.print(" Min", 250,105);
  88. myGLCD.printNumF(t2_max,2, 198,125,'.'); myGLCD.print(" Max", 250,125);
  89. myGLCD.printNumF(t2_min,2, 198,224,'.'), myGLCD.print(" Min", 250,224);
  90. myGLCD.printNumI(millis()/60000,230,138), myGLCD.print(" MINUT", 260,138);
  91. myGLCD.setFont ( GroteskBold24x48 );
  92. myGLCD.setColor ( VGA_YELLOW ); // голубой цвет
  93. myGLCD.printNumF(line1[1],2, 195,28,'.'); // выводим число во Float
  94. myGLCD.drawRoundRect(193,0,319,118); // рисуем прямоугольник со скругленными краями
  95. myGLCD.setColor ( VGA_LIME ); // белый цвет
  96. myGLCD.printNumF(line2[0],2, 195,150,'.'); // выводим число во Float
  97. myGLCD.drawRoundRect(193,121,319,239); // рисуем прямоугольник со скругленными краями
  98.  
  99.  
  100. delay(300);
  101. for (int x=0; x<192; x++) { // прогоняем весь массив
  102. if (line1[x] !=0 && t1_min != t1_max) {
  103. int y1 = map(line1[x]*100, t1_min*100, t1_max*100, 0, 118); // мапим температуру в точки экрана
  104. //y1 = constrain(y1, 0, 118);
  105. // int z =
  106. myGLCD.setColor ( VGA_YELLOW ); // желтый цвет
  107. myGLCD.drawLine(192-x,119-y1,192-x,119); // рисуем линию с кординатами
  108. }
  109.  
  110.  
  111. if (line2[x] !=0 && t2_min != t2_max) {
  112. int y2 = map(line2[x]*100, t2_min*100, t2_max*100, 0, 118); // мапим температуру в точки экрана
  113. myGLCD.setColor ( VGA_LIME ); // зеленый цвет
  114. //y2 = constrain(y2, 0, 118);
  115. myGLCD.drawLine(192-x,239-y2,192-x,239); // рисуем линию с кординатами
  116. // Serial.print (" line2[x] = "),Serial.print (line2[x]), Serial.print (" y2 = "), Serial.println(y2);
  117. }
  118. }
  119.  
  120. // myGLCD.setColor ( VGA_RED );
  121. // myGLCD.drawLine(0,0,0,239); // красный курсор
  122. Serial.print(millis()/60000), Serial.println(" min.");
  123. startTime = millis();
  124. }
  125. }
  126.  
  127.  
  128.  
  129. void loop()
  130. {
  131. if (WiFi.status() != WL_CONNECTED)
  132. {
  133. WiFi.begin(ssid, pass);
  134. if (WiFi.waitForConnectResult() != WL_CONNECTED)
  135. delay(500);
  136. Serial.println("No Wi-Fi");
  137. myGLCD.clrScr ( ); // очищаем дисплей
  138. myGLCD.setFont ( GroteskBold24x48 ); // задаем шрифт 23 на 64
  139. myGLCD.setColor ( VGA_YELLOW ); // голубой цвет
  140. myGLCD.print("HET",CENTER,48);
  141. myGLCD.print("Wi-Fi",CENTER,128);
  142. return;
  143. }
  144.  
  145.  
  146. if (WiFi.status() == WL_CONNECTED)
  147. {
  148. if (!client.connected())
  149. {
  150. if (client.connect(MQTT::Connect("TFT-russ")
  151. .set_auth(mqtt_user, mqtt_pass)))
  152. {
  153. client.set_callback(callback);
  154. client.subscribe("XXXXXXXXXXXXXX/parnik/temp1");
  155. client.subscribe("XXXXXXXXXXXXXX/parnik/temp2");
  156. }
  157. }
  158. if (client.connected()){
  159. client.loop();
  160. tftPrint();
  161. }
  162. }
  163. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement