esp_interface.cpp 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. #include "esp_interface.h"
  2. HardwareSerial MySerial(1);
  3. void EspInterface::begin() {
  4. pinMode(ESP_RST, OUTPUT);
  5. pinMode(ESP_ZERO, OUTPUT);
  6. delay(100);
  7. digitalWrite(ESP_ZERO, HIGH);
  8. Serial.println("Checking for ESP8266...");
  9. MySerial.begin(BAUD, SERIAL_8N1, 27, 26);
  10. delay(100);
  11. #ifdef HAS_SCREEN
  12. display_obj.tft.println("Checking for ESP8266...");
  13. #endif
  14. this->bootRunMode();
  15. delay(500);
  16. while (MySerial.available())
  17. MySerial.read();
  18. MySerial.write("PING");
  19. delay(2000);
  20. String display_string = "";
  21. while (MySerial.available()) {
  22. display_string.concat((char)MySerial.read());
  23. }
  24. display_string.trim();
  25. Serial.println("\nDisplay string: " + (String)display_string);
  26. if (display_string == "ESP8266 Pong") {
  27. #ifdef HAS_SCREEN
  28. display_obj.tft.setTextColor(TFT_GREEN, TFT_BLACK);
  29. display_obj.tft.println("ESP8266 Found!");
  30. display_obj.tft.setTextColor(TFT_CYAN, TFT_BLACK);
  31. #endif
  32. Serial.println("ESP8266 Found!");
  33. this->supported = true;
  34. }
  35. else {
  36. #ifdef HAS_SCREEN
  37. display_obj.tft.setTextColor(TFT_RED, TFT_BLACK);
  38. display_obj.tft.println("ESP8266 Not Found");
  39. display_obj.tft.setTextColor(TFT_CYAN, TFT_BLACK);
  40. #endif
  41. }
  42. this->initTime = millis();
  43. }
  44. void EspInterface::RunUpdate() {
  45. this->bootProgramMode();
  46. #ifdef HAS_SCREEN
  47. display_obj.tft.setTextWrap(true);
  48. display_obj.tft.setFreeFont(NULL);
  49. display_obj.tft.setCursor(0, 100);
  50. display_obj.tft.setTextSize(1);
  51. display_obj.tft.setTextColor(TFT_GREEN);
  52. display_obj.tft.println("Waiting for serial data...");
  53. display_obj.tft.setTextColor(TFT_WHITE);
  54. #endif
  55. }
  56. void EspInterface::bootProgramMode() {
  57. Serial.println("[!] Setting ESP12 in program mode...");
  58. digitalWrite(ESP_ZERO, LOW);
  59. delay(100);
  60. digitalWrite(ESP_RST, LOW);
  61. delay(100);
  62. digitalWrite(ESP_RST, HIGH);
  63. delay(100);
  64. digitalWrite(ESP_ZERO, HIGH);
  65. Serial.println("[!] Complete");
  66. Serial.end();
  67. Serial.begin(57600);
  68. }
  69. void EspInterface::bootRunMode() {
  70. Serial.end();
  71. Serial.begin(115200);
  72. Serial.println("[!] Setting ESP12 in run mode...");
  73. digitalWrite(ESP_ZERO, HIGH);
  74. delay(100);
  75. digitalWrite(ESP_RST, LOW);
  76. delay(100);
  77. digitalWrite(ESP_RST, HIGH);
  78. delay(100);
  79. digitalWrite(ESP_ZERO, HIGH);
  80. Serial.println("[!] Complete");
  81. }
  82. void EspInterface::program() {
  83. if (MySerial.available()) {
  84. Serial.write((uint8_t)MySerial.read());
  85. }
  86. if (Serial.available()) {
  87. #ifdef HAS_SCREEN
  88. display_obj.tft.print(".");
  89. #endif
  90. while (Serial.available()) {
  91. MySerial.write((uint8_t)Serial.read());
  92. }
  93. }
  94. }
  95. void EspInterface::main(uint32_t current_time) {
  96. if (current_time - this->initTime >= 1000) {
  97. this->initTime = millis();
  98. //MySerial.write("PING");
  99. }
  100. while (MySerial.available()) {
  101. Serial.print((char)MySerial.read());
  102. }
  103. if (Serial.available()) {
  104. MySerial.write((uint8_t)Serial.read());
  105. }
  106. }