techposts

HMI Display CrowPanel 5.79 Inch MQTT

Jan 29th, 2025
43
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.45 KB | None | 0 0
  1. // main.cpp
  2. #include <WiFi.h>
  3. #include <PubSubClient.h>
  4. #include "display.h"
  5. #include "mqtt.h"
  6. #include "buttons.h"
  7. #include "EPD_Init.h"
  8.  
  9. void setup() {
  10. Serial.begin(115200);
  11. EPD_Init(); // Ensure e-paper display initializes properly
  12. setupDisplay();
  13. setupWiFi();
  14. setupMQTT();
  15. setupButtons();
  16. displayMenu();
  17. }
  18.  
  19. void loop() {
  20. handleMQTT();
  21. handleButtons();
  22. delay(100);
  23. }
  24.  
  25. // display.h
  26. #ifndef DISPLAY_H
  27. #define DISPLAY_H
  28. #include <GxEPD2_BW.h>
  29. #include <Fonts/FreeMonoBold9pt7b.h>
  30. #include "pic_scenario.h" // Include images/icons
  31.  
  32. void setupDisplay();
  33. void displayMenu();
  34. void displayData(int page);
  35. void updateSelection(int direction);
  36. void showSelectedPage();
  37.  
  38. #endif
  39.  
  40. // display.cpp
  41. #include "display.h"
  42. #define CS_PIN 5
  43. #define DC_PIN 17
  44. #define RST_PIN 16
  45. #define BUSY_PIN 4
  46. GxEPD2_BW<GxEPD2_270, GxEPD2_270::HEIGHT> display(GxEPD2_270(CS_PIN, DC_PIN, RST_PIN, BUSY_PIN));
  47.  
  48. int selectedOption = 0;
  49.  
  50. void setupDisplay() {
  51. display.init();
  52. EPD_Init();
  53. }
  54.  
  55. void displayMenu() {
  56. display.setFullWindow();
  57. display.firstPage();
  58. do {
  59. display.fillScreen(GxEPD_WHITE);
  60. display.drawBitmap(10, 10, gImage_1, 50, 50, GxEPD_BLACK); // Display an icon
  61. display.setCursor(70, 30);
  62. display.print("Select Data:");
  63. display.setCursor(10, 70);
  64. display.print(selectedOption == 0 ? "-> Temp & Humidity" : " Temp & Humidity");
  65. display.setCursor(10, 100);
  66. display.print(selectedOption == 1 ? "-> Power Usage" : " Power Usage");
  67. display.setCursor(10, 130);
  68. display.print(selectedOption == 2 ? "-> Air Quality" : " Air Quality");
  69. display.setCursor(10, 160);
  70. display.print(selectedOption == 3 ? "-> Water Level" : " Water Level");
  71. } while (display.nextPage());
  72. }
  73.  
  74. void updateSelection(int direction) {
  75. selectedOption = (selectedOption + direction + 4) % 4;
  76. displayMenu();
  77. }
  78.  
  79. void showSelectedPage() {
  80. displayData(selectedOption);
  81. }
  82.  
  83. void displayData(int page) {
  84. display.setFullWindow();
  85. display.firstPage();
  86. do {
  87. display.fillScreen(GxEPD_WHITE);
  88. display.setCursor(10, 30);
  89. if (page == 0) display.print("Temperature: " + data_store[0] + " C\nHumidity: " + data_store[1] + "%");
  90. else if (page == 1) display.print("Power Usage: " + data_store[2] + " W");
  91. else if (page == 2) display.print("PM2.5: " + data_store[3] + " ug/m3\nPurifier RPM: " + data_store[4]);
  92. else if (page == 3) display.print("Water Level: " + data_store[5] + "%");
  93. } while (display.nextPage());
  94. EPD_Update(); // Ensure display refresh
  95. }
  96.  
  97. // buttons.h
  98. #ifndef BUTTONS_H
  99. #define BUTTONS_H
  100. void setupButtons();
  101. void handleButtons();
  102. #endif
  103.  
  104. // buttons.cpp
  105. #include "buttons.h"
  106. #include "display.h"
  107. #include <Arduino.h>
  108. #define MENU_BUTTON 2
  109. #define UP_BUTTON 4
  110. #define DOWN_BUTTON 6
  111. #define SELECT_BUTTON 5
  112.  
  113. void setupButtons() {
  114. pinMode(MENU_BUTTON, INPUT_PULLUP);
  115. pinMode(UP_BUTTON, INPUT_PULLUP);
  116. pinMode(DOWN_BUTTON, INPUT_PULLUP);
  117. pinMode(SELECT_BUTTON, INPUT_PULLUP);
  118. }
  119.  
  120. void handleButtons() {
  121. if (digitalRead(UP_BUTTON) == LOW) {
  122. updateSelection(-1);
  123. delay(200);
  124. }
  125. if (digitalRead(DOWN_BUTTON) == LOW) {
  126. updateSelection(1);
  127. delay(200);
  128. }
  129. if (digitalRead(SELECT_BUTTON) == LOW) {
  130. showSelectedPage();
  131. delay(500);
  132. }
  133. }
  134.  
Advertisement
Add Comment
Please, Sign In to add comment