Advertisement
Guest User

Untitled

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