Advertisement
horyna

HTTP 1.1 Webserver for ESP8266 rele

Sep 10th, 2017
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.42 KB | None | 0 0
  1. /*--------------------------------------------------
  2. HTTP 1.1 Webserver for ESP8266
  3. --------------------------------------------------*/
  4.  
  5. #include <ESP8266WiFi.h>
  6.  
  7. const char* ssid = "xxxxxxxxxx";
  8. const char* password = "xxxxxxxxxxxx";
  9.  
  10. unsigned long ulReqcount;
  11. unsigned long ulReconncount;
  12.  
  13. int LED1 = D0; // LED connected to D1
  14. int LED2 = D1;
  15. int LED3 = D2;
  16. int LED4 = D3;
  17. int LED5 = D4;
  18. int LED6 = D5;
  19. int LED7 = D6;
  20.  
  21. // Create an instance of the server on Port 80
  22. WiFiServer server(80);
  23.  
  24. void setup()
  25. {
  26. // setup globals
  27. ulReqcount=0;
  28. ulReconncount=0;
  29.  
  30. // prepare GPIO2
  31. pinMode(LED1, OUTPUT); // zvol pin jako output
  32. pinMode(LED2, OUTPUT);
  33. pinMode(LED3, OUTPUT);
  34. pinMode(LED4, OUTPUT);
  35. pinMode(LED5, OUTPUT);
  36. pinMode(LED6, OUTPUT);
  37. pinMode(LED7, OUTPUT); //spina pouze pri vypinani,prepina polaritu
  38. digitalWrite(D0, HIGH); //Vychozi stav
  39. digitalWrite(D1, HIGH);
  40. digitalWrite(D2, HIGH);
  41. digitalWrite(D3, HIGH);
  42. digitalWrite(D4, HIGH);
  43. digitalWrite(D5, HIGH);
  44. digitalWrite(D6, HIGH);
  45.  
  46. Serial.begin(115200); // start serial
  47. delay(1);
  48.  
  49. WiFi.mode(WIFI_STA); // inital connect
  50. WiFiStart();
  51. }
  52.  
  53. void WiFiStart()
  54. {
  55. ulReconncount++;
  56.  
  57. // Connect to WiFi network
  58. Serial.println();
  59. Serial.println();
  60. Serial.print("Connecting to ");
  61. Serial.println(ssid);
  62.  
  63. WiFi.begin(ssid, password);
  64.  
  65. while (WiFi.status() != WL_CONNECTED) {
  66. delay(500);
  67. Serial.print(".");
  68. }
  69. Serial.println("");
  70. Serial.println("WiFi connected");
  71.  
  72. server.begin(); // Start server
  73. Serial.println("Server started");
  74. Serial.println(WiFi.localIP()); // Vypis IP adresy
  75. }
  76.  
  77. void loop()
  78. {
  79. // check if WLAN is connected
  80. if (WiFi.status() != WL_CONNECTED)
  81. {
  82. WiFiStart();
  83. }
  84.  
  85. // Check if a client has connected
  86. WiFiClient client = server.available();
  87. if (!client)
  88. {
  89. return;
  90. }
  91.  
  92. // Wait until the client sends some data
  93. Serial.println("new client");
  94. unsigned long ultimeout = millis()+250;
  95. while(!client.available() && (millis()<ultimeout) )
  96. {
  97. delay(1);
  98. }
  99. if(millis()>ultimeout)
  100. {
  101. Serial.println("client connection time-out!");
  102. return;
  103. }
  104.  
  105. // Read the first line of the request
  106. String sRequest = client.readStringUntil('\r');
  107. //Serial.println(sRequest);
  108. client.flush();
  109.  
  110. // stop client, if request is empty
  111. if(sRequest=="")
  112. {
  113. Serial.println("empty request! - stopping client");
  114. client.stop();
  115. return;
  116. }
  117.  
  118. // get path; end of path is either space or ?
  119. // Syntax is e.g. GET /?pin=MOTOR1STOP HTTP/1.1
  120. String sPath="",sParam="", sCmd="";
  121. String sGetstart="GET ";
  122. int iStart,iEndSpace,iEndQuest;
  123. iStart = sRequest.indexOf(sGetstart);
  124. if (iStart>=0)
  125. {
  126. iStart+=+sGetstart.length();
  127. iEndSpace = sRequest.indexOf(" ",iStart);
  128. iEndQuest = sRequest.indexOf("?",iStart);
  129.  
  130. // are there parameters?
  131. if(iEndSpace>0)
  132. {
  133. if(iEndQuest>0)
  134. {
  135. // there are parameters
  136. sPath = sRequest.substring(iStart,iEndQuest);
  137. sParam = sRequest.substring(iEndQuest,iEndSpace);
  138. }
  139. else
  140. {
  141. // NO parameters
  142. sPath = sRequest.substring(iStart,iEndSpace);
  143. }
  144. }
  145. }
  146.  
  147. ///////////////////////////////////////////////////////////////////////////////
  148. // output parameters to serial, you may connect e.g. an Arduino and react on it
  149. ///////////////////////////////////////////////////////////////////////////////
  150. if(sParam.length()>0)
  151. {
  152. int iEqu=sParam.indexOf("=");
  153. if(iEqu>=0)
  154. {
  155. sCmd = sParam.substring(iEqu+1,sParam.length());
  156. Serial.println(sCmd);
  157. }
  158. }
  159.  
  160. ///////////////////////////
  161. // format the html response
  162. ///////////////////////////
  163. String sResponse,sHeader;
  164.  
  165. ////////////////////////////
  166. // 404 for non-matching path
  167. ////////////////////////////
  168. if(sPath!="/")
  169. {
  170. sResponse="<html><head><title>404 Not Found</title></head><body><h1>Not Found</h1><p>The requested URL was not found on this server.</p></body></html>";
  171.  
  172. sHeader = "HTTP/1.1 404 Not found\r\n";
  173. sHeader += "Content-Length: ";
  174. sHeader += sResponse.length();
  175. sHeader += "\r\n";
  176. sHeader += "Content-Type: text/html\r\n";
  177. sHeader += "Connection: close\r\n";
  178. sHeader += "\r\n";
  179. }
  180. ///////////////////////
  181. // format the html page
  182. ///////////////////////
  183. else
  184. {
  185. ulReqcount++;
  186. sResponse = "<html><head><title>Ovladani ES ESP8266 </title></head><body>";
  187. sResponse += "<font color=\"#00BFFF\"><body bgcolor=\"#000000\">";
  188. sResponse += "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=yes\">";
  189. sResponse += "<h1><center>Ovladani ES </center></h1>";
  190. sResponse += "<h1><center>Arduino ESP8266</center></h1>";
  191. sResponse += "<FONT SIZE=+1>";
  192. sResponse += "<p><center>VZT______________<a href=\"?pin=1_ON\"><button>ON</button></a>&nbsp;<a href=\"?pin=1_OFF\"><button>OFF</button></a></p>";
  193. sResponse += "<p>BALKON__________<a href=\"?pin=2_ON\"><button>ON</button></a>&nbsp;<a href=\"?pin=2_OFF\"><button>OFF</button></a></p>";
  194. sResponse += "<p>POD BALKON_____<a href=\"?pin=3_ON\"><button>ON</button></a>&nbsp;<a href=\"?pin=3_OFF\"><button>OFF</button></a></p>";
  195. sResponse += "<p>MALY PRACAK____<a href=\"?pin=4_ON\"><button>ON</button></a>&nbsp;<a href=\"?pin=4_OFF\"><button>OFF</button></a></p>";
  196. sResponse += "<p>VELKY PRACAK___<a href=\"?pin=5_ON\"><button>ON</button></a>&nbsp;<a href=\"?pin=5_OFF\"><button>OFF</button></a></p>";
  197. sResponse += "<p>LED POD BALKON_<a href=\"?pin=6_ON\"><button>ON</button></a>&nbsp;<a href=\"?pin=6_OFF\"><button>OFF</button></a></p>";
  198. sResponse += "<p> <a href=\"?pin=7_ON\"><button>*****VSECHNY SVETLA ZAPNOUT*******</button></a>&nbsp;</p>";
  199. sResponse += "<p> <a href=\"?pin=8_OFF\"><button>*****VSECHNY SVETLA VYPNOUT*******</button></a>&nbsp;</p>";
  200.  
  201. //////////////////////
  202. // react on parameters
  203. //////////////////////
  204. if (sCmd.length()>0)
  205. {
  206. // write received command to html page
  207. sResponse += "Posledni prikaz:" + sCmd + "<BR>";
  208. //---------------------------VZT-------------------------------
  209. if(sCmd.indexOf("1_ON")>=0)
  210. {
  211. digitalWrite(LED1, LOW);
  212. delay(500); // waits for 500mS
  213. digitalWrite(LED1, HIGH); // sets the LED off
  214. }
  215. else if(sCmd.indexOf("1_OFF")>=0)
  216. {
  217.  
  218. digitalWrite(LED7, LOW);
  219. delay(50);
  220. digitalWrite(LED1, LOW);
  221. delay(500);
  222. digitalWrite(LED1, HIGH);
  223. digitalWrite(LED7, HIGH);
  224. }
  225. //-------------------------BALKON----------------------------
  226. if(sCmd.indexOf("2_ON")>=0)
  227. {
  228. digitalWrite(LED2, LOW);
  229. delay(500);
  230. digitalWrite(LED2, HIGH);
  231. }
  232. else if(sCmd.indexOf("2_OFF")>=0)
  233. {
  234. digitalWrite(LED7, LOW);
  235. delay(50);
  236. digitalWrite(LED2, LOW);
  237. delay(500);
  238. digitalWrite(LED2, HIGH);
  239. digitalWrite(LED7, HIGH);
  240. }
  241. // ------------------------POD BALKON-------------------
  242. if(sCmd.indexOf("3_ON")>=0)
  243. {
  244. digitalWrite(LED3, LOW);
  245. delay(500);
  246. digitalWrite(LED3, HIGH);
  247. }
  248. else if(sCmd.indexOf("3_OFF")>=0)
  249. {
  250. digitalWrite(LED7, LOW);
  251. delay(50);
  252. digitalWrite(LED3, LOW);
  253. delay(500);
  254. digitalWrite(LED3, HIGH);
  255. digitalWrite(LED7, HIGH);
  256. }
  257. // ------------------------MALY PRACAK----------------------
  258. if(sCmd.indexOf("4_ON")>=0)
  259. {
  260. digitalWrite(LED4, LOW);
  261. delay(500);
  262. digitalWrite(LED4, HIGH);
  263. }
  264. else if(sCmd.indexOf("4_OFF")>=0)
  265. {
  266. digitalWrite(LED7, LOW);
  267. delay(50);
  268. digitalWrite(LED4, LOW);
  269. delay(500);
  270. digitalWrite(LED4, HIGH);
  271. digitalWrite(LED7, HIGH);
  272. }
  273. // -----------------------VELKY PRACAK-------------------------
  274. if(sCmd.indexOf("5_ON")>=0)
  275. {
  276. digitalWrite(LED5, LOW);
  277. delay(500);
  278. digitalWrite(LED5, HIGH);
  279. }
  280. else if(sCmd.indexOf("5_OFF")>=0)
  281. {
  282. digitalWrite(LED7, LOW);
  283. delay(50);
  284. digitalWrite(LED5, LOW);
  285. delay(500);
  286. digitalWrite(LED5, HIGH);
  287. digitalWrite(LED7, HIGH);
  288. }
  289. // -----------------------LED POD BALKON-------------------
  290. if(sCmd.indexOf("6_ON")>=0)
  291. {
  292. digitalWrite(LED6, LOW);
  293. delay(500);
  294. digitalWrite(LED6, HIGH);
  295. }
  296. else if(sCmd.indexOf("6_OFF")>=0)
  297. {
  298. digitalWrite(LED7, LOW);
  299. delay(50);
  300. digitalWrite(LED6, LOW);
  301. delay(500);
  302. digitalWrite(LED6, HIGH);
  303. digitalWrite(LED7, HIGH);
  304. }
  305.  
  306. //__________________________vsechny svetla zapnout________________________________________
  307. if(sCmd.indexOf("7_ON")>=0)
  308. {
  309. digitalWrite(LED2, LOW);
  310. delay(1000);
  311. digitalWrite(LED2, HIGH);
  312. digitalWrite(LED3, LOW);
  313. delay(1000);
  314. digitalWrite(LED3, HIGH);
  315. digitalWrite(LED4, LOW);
  316. delay(1000);
  317. digitalWrite(LED4, HIGH);
  318. digitalWrite(LED5, LOW);
  319. delay(1000);
  320. digitalWrite(LED5, HIGH);
  321. digitalWrite(LED6, LOW);
  322. delay(1000);
  323. digitalWrite(LED6, HIGH);
  324. }
  325.  
  326. //__________________________vsechny svetla vypnout________________________________________
  327. if(sCmd.indexOf("8_OFF")>=0)
  328. {
  329. digitalWrite(LED7, LOW);
  330. delay(50);
  331. digitalWrite(LED2, LOW);
  332. delay(1000);
  333. digitalWrite(LED2, HIGH);
  334. digitalWrite(LED3, LOW);
  335. delay(1000);
  336. digitalWrite(LED3, HIGH);
  337. digitalWrite(LED4, LOW);
  338. delay(1000);
  339. digitalWrite(LED4, HIGH);
  340. digitalWrite(LED5, LOW);
  341. delay(1000);
  342. digitalWrite(LED5, HIGH);
  343. digitalWrite(LED6, LOW);
  344. delay(1000);
  345. digitalWrite(LED6, HIGH);
  346. delay(50);
  347. digitalWrite(LED7, HIGH);
  348. }
  349. }
  350.  
  351. sResponse += "<FONT SIZE=-2>";
  352. sResponse += "<BR>Pocet prikazu=";
  353. sResponse += ulReqcount;
  354. sResponse += " - Pocet spojeni=";
  355. sResponse += ulReconncount;
  356. sResponse += "<BR>";
  357. sResponse += "©Michal Hornak 27.8.2017<BR>";
  358. sResponse += "</body></html>";
  359.  
  360. sHeader = "HTTP/1.1 200 OK\r\n";
  361. sHeader += "Content-Length: ";
  362. sHeader += sResponse.length();
  363. sHeader += "\r\n";
  364. sHeader += "Content-Type: text/html\r\n";
  365. sHeader += "Connection: close\r\n";
  366. sHeader += "\r\n";
  367. }
  368.  
  369. // Send the response to the client
  370. client.print(sHeader);
  371. client.print(sResponse);
  372.  
  373. // and stop the client
  374. client.stop();
  375. Serial.println("Client disonnected");
  376. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement