[Часть 2] Домашний веб сервер на Ардуино [Рабочий код]
 
  1. //Основной цикл, Веселье начинается
  2. void loop() {
  3. esp_serial.readBytesUntil('\n', buffer, BUFFER_SIZE); //Считываем в буфер все что говорит нам модуль
  4. if(strncmp(buffer, "+IPD,", 5)==0) {
  5. monitor.print("\nBuffer");
  6. // Запрос: +IPD,ch,len:data
  7. sscanf(buffer+5, "%d,%d", &ch_id, &packet_len);
  8. if (packet_len > 0) {
  9. monitor.print("\nlen> 0");
  10. pb = buffer+5;
  11. while(*pb!=':') pb++;
  12. pb++;
  13. //Получили все что получили и парсим на наличие в данных необходимых параметров
  14. //Отслеживаем реле 1 включение
  15. if (strncmp(pb, "GET /?relay1on", 14) == 0) {
  16. //monitor.print(millis()); //Отладочная информация в консоль компьютера
  17. //monitor.print(" : ");
  18. //monitor.println(buffer);
  19. //monitor.print( "get led from ch :" );
  20. //monitor.println(ch_id);
  21. delay(100);
  22. clearSerialBuffer();
  23. digitalWrite(relay1, HIGH);
  24. homepage(ch_id);
  25. }
  26. ////Отслеживаем реле 1 выключение
  27. if (strncmp(pb, "GET /?relay1off", 14) == 0) {
  28. //monitor.print(millis());
  29. //monitor.print(" : ");
  30. //monitor.println(buffer);
  31. //monitor.print( "get led from ch :" );
  32. //monitor.println(ch_id);
  33. delay(100);
  34. clearSerialBuffer();
  35. digitalWrite(relay1, LOW);
  36. homepage(ch_id);
  37. }
  38. if (strncmp(pb, "GET /?relay2on", 14) == 0) {
  39. //monitor.print(millis());
  40. //monitor.print(" : ");
  41. //monitor.println(buffer);
  42. //monitor.print( "get led from ch :" );
  43. //monitor.println(ch_id);
  44. delay(100);
  45. clearSerialBuffer();
  46. digitalWrite(relay2, HIGH);
  47. homepage(ch_id);
  48. }
  49. if (strncmp(pb, "GET /?relay2off", 14) == 0) {
  50. //monitor.print(millis());
  51. // monitor.print(" : ");
  52. // monitor.println(buffer);
  53. // monitor.print( "get led from ch :" );
  54. // monitor.println(ch_id);
  55. delay(100);
  56. clearSerialBuffer();
  57. digitalWrite(relay2, LOW);
  58. homepage(ch_id);
  59. }
  60. //Если нет никаких параметров в GET запросе
  61. if (strncmp(pb, "GET / ", 6) == 0) {
  62. // monitor.print(millis());
  63. // monitor.print(" : ");
  64. // monitor.println(buffer);
  65. // monitor.print( "get Status from ch:" );
  66. // monitor.println(ch_id);
  67. delay(100);
  68. clearSerialBuffer();
  69. homepage(ch_id);
  70. }
  71. }
  72. }
  73. clearBuffer();
  74. monitor.print( "\nLoop ");
  75. }
  76. //Основная функция и при вызове выдается страница
  77. void homepage(int ch_id) {
  78. String Header;
  79. //Спрашиваем у датчика температуру как и в остальных примерах
  80. int chk;
  81. chk = DHT.read(DHT11_PIN);
  82. String Hum = String(DHT.humidity,DEC);
  83. String Temp = String(DHT.temperature,DEC);
  84. //Ниже идут знания HTML.
  85. Header = "HTTP/1.1 200 OK\r\n";
  86. Header += "Content-Type: text/html\r\n";
  87. Header += "Connection: close\r\n";
  88. Header += "Refresh: 20\r\n";
  89. String Content;
  90. Content = "<html><header><meta charset=\"utf-8\"><title>Строим сервер</title></header>";
  91. Content += "<center> <p> <h3 style=\"color: #FFFFFF; background: #6699FF\">Мой сервер 1injener.ru</h3></p>";
  92. Content += "<center> <h4 style=\"color: #FFFFFF; background: #6699FF\"><p> Цифровой: Влажность: "+Hum+" | Температура: "+Temp+" </p>";
  93. Content += "<a href=\"/?relay1on\"> <button > Освещение ON </button> </a>";
  94. Content += "<a href=\"/?relay1off\"> <button > Освещение OFF </button> </a> <br/><br/>";
  95. Content += "<a href=\"/?relay2on\"> <button > Что то 2 ON </button> </a>";
  96. Content += "<a href=\"/?relay2off\"> <button> Что то 2 OFF </button> </a> <br/><br/>";
  97. Content += "<hr> <p>Мой дом. для 1injener.ru</p></a>";
  98. Content += "</body></html>";
  99. Header += "Content-Length: ";
  100. Header += (int)(Content.length());
  101. Header += "\r\n\r\n";
  102. //Отправка данных
  103. START_SENT:
  104. esp_serial.print("AT+CIPSEND=");
  105. esp_serial.print(ch_id);
  106. esp_serial.print(",");
  107. esp_serial.println(Header.length()+Content.length());
  108. // monitor.print("AT+CIPSEND=");
  109. // monitor.print(ch_id);
  110. // monitor.print(",");
  111. // monitor.println(Header.length()+Content.length());
  112. delay(10);
  113. if (esp_serial.find(">")) {
  114. esp_serial.print(Header);
  115. esp_serial.print(Content);
  116. delay(10);
  117. }
  118. }
  119. void clearSerialBuffer(void) {
  120. while ( esp_serial.available() > 0 ) {
  121. esp_serial.read();
  122. }
  123. }
  124. void clearBuffer(void) {
  125. for (int i = 0;i<BUFFER_SIZE;i++ ) {
  126. buffer[i]=0;
  127. }
  128. }
  129. //Чтение данных
  130. int readSerial(){
  131. int i = 0;
  132. while(1){
  133. while (esp_serial.available() > 0){
  134. char inChar = esp_serial.read();
  135. if(i > 0){
  136. if (inChar == '\n'){
  137. inputChar[i] = '\0';
  138. esp_serial.flush();
  139. return 0;
  140. //break;
  141. }
  142. }
  143. if(inChar!='\r'){
  144. inputChar[i] = inChar;
  145. i++;
  146. }
  147. }
  148. }
  149. }
  150. //Заветная функция определения ответа модуля ОК
  151. int CheckResponse(){
  152. for(m=0;m<500;m++){
  153. if(esp_serial.read()=='K'){ // Check "OK"
  154. return OK;
  155. }
  156. delay(10);
  157. }
  158. return TIMEOUT;
  159. }

[Часть 1] Домашний веб сервер на Ардуино [Рабочий код]

В статью:
Домашний веб сервер на Аrduino. Температура и Реле [Проверенно]
 

Новые изобретения инженеров и техников, дизайнеров и обычных людей, все то что может изменить наш мир к лучшему. Новая техника и оружие, спасателей и спецназа. Гаджеты и девайсы, устройства для отдыха и работы. Советы для экономии семейного состояния. Все гениальные изобретения в простом формате! Ведь "Все - Просто!"
Copyright © 2013–2024
Автоматизация и проектирование - 1injener.ru