Advertisement
Guest User

ino1234

a guest
Dec 9th, 2019
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.13 KB | None | 0 0
  1. /*
  2. * ESP8266 WiFi and Voice Remote
  3. * Dan Cogliano
  4. *
  5. * Modify ircodes.h with the codes needed for your TV and cable box
  6. * More info on this project can be found at DanTheGeek.com
  7. *
  8. */
  9. #include <ESP8266WebServer.h>
  10. #include <IRremoteESP8266.h>
  11. #include <IRsend.h>
  12. #include <ESP8266HTTPClient.h>
  13. #include "ircodes.h"
  14.  
  15. // not sure why this is needed, should already be defined
  16. #define min(a,b) ((a)<(b)?(a):(b))
  17. #define max(a,b) ((a)>(b)?(a):(b))
  18.  
  19. const char* ssid = "Grobot.gr";
  20. const char* password = "DLTA2104513322";
  21.  
  22. // Enter your custom buttons here
  23. String custombuttons[][2] =
  24. {
  25. {"Lights ON","240"},
  26. {"Lights OFF","239"}
  27. };
  28.  
  29. ///////////////////////////////////////////////////////////
  30.  
  31. //Battery Monitor START
  32. int BAT= A0; //Analog channel A0 as used to measure battery voltage
  33. float RatioFactor=5.28; //Resistors Ration Factor
  34. String batteryStatus;
  35. int value = LOW;
  36. float Tvoltage=0.0;
  37. float Vvalue=0.0,Rvalue=0.0;
  38. //Battery Monitor END
  39. ///////////////////////////////////////////////////////////
  40.  
  41. String lightStatus = "ON";
  42. HTTPClient http;
  43. String URL_ON = "https://maker.ifttt.com/trigger/Dimos1/with/key/DhgS_tOGrJesNTsJt8JBdXF2Je_1Jsoc0tN3EP2eZK";
  44. String URL_OFF = "https://maker.ifttt.com/trigger/Dimos2/with/key/DhgS_tOGrJesNTsJt8JBdXF2Je_1Jsoc0tN3EP2eZK";
  45.  
  46. IRsend irsend(12); // An IR LED is controlled by D6
  47. ESP8266WebServer server(80);
  48.  
  49. // set the specified channel
  50. void set_channel(String value, String *message)
  51. {
  52. if(message != NULL)
  53. {
  54. *message += value;
  55. }
  56. for(int i =0; i < value.length(); i++)
  57. {
  58. switch(value.charAt(i))
  59. {
  60. case '0':
  61. irsend.sendRaw(rawData0, sizeof(rawData0)/sizeof(uint16_t), 38);
  62. break;
  63. case '1':
  64. irsend.sendRaw(rawData1, sizeof(rawData1)/sizeof(uint16_t), 38);
  65. break;
  66. case '2':
  67. irsend.sendRaw(rawData2, sizeof(rawData2)/sizeof(uint16_t), 38);
  68. break;
  69. case '3':
  70. irsend.sendRaw(rawData3, sizeof(rawData3)/sizeof(uint16_t), 38);
  71. break;
  72. case '4':
  73. irsend.sendRaw(rawData4, sizeof(rawData4)/sizeof(uint16_t), 38);
  74. break;
  75. case '5':
  76. irsend.sendRaw(rawData5, sizeof(rawData5)/sizeof(uint16_t), 38);
  77. break;
  78. case '6':
  79. irsend.sendRaw(rawData6, sizeof(rawData6)/sizeof(uint16_t), 38);
  80. break;
  81. case '7':
  82. irsend.sendRaw(rawData7, sizeof(rawData7)/sizeof(uint16_t), 38);
  83. break;
  84. case '8':
  85. irsend.sendRaw(rawData8, sizeof(rawData8)/sizeof(uint16_t), 38);
  86. break;
  87. case '9':
  88. irsend.sendRaw(rawData9, sizeof(rawData9)/sizeof(uint16_t), 38);
  89. break;
  90. }
  91. delay(100);
  92. }
  93. irsend.sendRaw(rawDataOK, sizeof(rawDataOK)/sizeof(uint16_t), 38);
  94. }
  95.  
  96. // root web page
  97. void handle_root() {
  98.  
  99. ///BAT START
  100. value = LOW;
  101. Tvoltage=0.0;
  102. Vvalue=0.0,Rvalue=0.0;
  103. for(unsigned int i=0;i<10;i++){
  104. Vvalue=Vvalue+analogRead(BAT); //Read analog Voltage
  105. delay(5); //ADC stable
  106. }
  107. Vvalue=(float)Vvalue/10.0; //Find average of 10 values
  108. Rvalue=(float)(Vvalue/1024); //Convert Voltage in 5v factor
  109. Tvoltage=Rvalue*RatioFactor; //Find original voltage by multiplying with factor
  110. /////////////////////////////////////Battery Voltage//////////////////////////////////
  111. value = HIGH;
  112. /*if(value == HIGH) {
  113. client.println("Updated");
  114. } else {
  115. client.print("Not Updated");
  116. }*/
  117.  
  118. if(Tvoltage<=2.5){
  119. batteryStatus = "Battery dead";
  120. }
  121. else if(Tvoltage>2.5 && Tvoltage<=3){
  122. batteryStatus = "Need Imediate recharge";
  123. }
  124. else if(Tvoltage>3 && Tvoltage<3.8){
  125. batteryStatus = "Recharge";
  126. }
  127. else{
  128. batteryStatus = "Battery Full";
  129. }
  130. ///BAT END
  131.  
  132. String cbuttons = "";
  133. for(int i = 0; i < sizeof(custombuttons)/sizeof(custombuttons[0]); i++)
  134. {
  135. cbuttons += "<a href='#' onclick='pressButton(\"channel\",\"" + custombuttons[i][1] + "\");return false;'><div class='button channel_btn span6'>" + custombuttons[i][0] + "</div></a>\n";
  136. }
  137.  
  138. String message = "<!DOCTYPE html>\n"
  139. "<html>\n"
  140. "<head>\n"
  141. "<title>Web Remote Control</title>\n"
  142. "<script>\n"
  143. "function pressButton(btn,value){\n"
  144. " var xmlhttp = new XMLHttpRequest();\n"
  145. " xmlhttp.onreadystatechange=function() {\n"
  146. " if (xmlhttp.readyState==4 && xmlhttp.status==200) {\n"
  147. " var response = xmlhttp.responseText;\n"
  148. " }\n"
  149. " }\n"
  150. " xmlhttp.open('GET','/button?task=' + btn + '&value=' + value);\n"
  151. " xmlhttp.send();\n"
  152. " return false;\n"
  153. "}\n"
  154. "</script>\n"
  155. "</head>\n"
  156. "<body>\n"
  157. "<center>\n"
  158. "<h2>WiFi Home Remote Control</h2>"
  159. "<style type='text/css'>\n"
  160. "body {\n"
  161. " padding-left:20px;\n"
  162. " padding-right:20px;\n"
  163. " margin: 0;\n"
  164. " font-family: Geneva,'Lucida Sans','Lucida Grande',sans-serif;\n"
  165. " font-size: 40px;\n"
  166. " line-height: 40px;\n"
  167. " color: #575757;\n"
  168. " background-color: #fff;\n"
  169. "}\n"
  170. ".buttongroup {\n"
  171. " width:100%;\n"
  172. " max-width:800px;\n"
  173. "}\n"
  174. ".span6 {\n"
  175. " width:48%;\n"
  176. "}\n"
  177. ".span4 {\n"
  178. " width:31.5%;\n"
  179. "}\n"
  180. ".span12 {\n"
  181. " width:100%;\n"
  182. "}\n"
  183. ".button {\n"
  184. " border:3px solid #333;\n"
  185. " padding-top:50px;\n" //was 60px
  186. " padding-bottom:60px;\n"
  187. " margin:2px;\n"
  188. " text-align:center;\n"
  189. " font-weight:bold;\n"
  190. " max-width:380px;\n"
  191. " float:left;\n"
  192. " border-radius: 15px;\n"
  193. " background-color: #eee;\n"
  194. "}\n"
  195. "a {\n"
  196. " color: #333;\n"
  197. "}\n"
  198. ".buttonrow {\n"
  199. " clear: both;\n"
  200. "}\n"
  201. ".power_btn {\n"
  202. " background-color:#FA5858;\n" //power button color
  203. "}\n"
  204. ".number_btn {\n"
  205. " background-color:#aaa;\n" //number button color
  206. "}\n"
  207. ".channel_btn {\n"
  208. " background-color:#8f8;\n" //channel button color
  209. "}\n"
  210. ".airbutton {\n"
  211. " background-color:#81BEF7;\n" //Air button color
  212. " width:100%;"
  213. " max-width:508px;\n"
  214. "}\n"
  215. "</style>\n"
  216. "<div class='buttongroup span12'>\n"
  217. message += cbuttons;
  218. message +=
  219. //after top buttons:
  220. "<br>"
  221. "<a href='#' onclick='pressButton(\"tvpower\");return false;'><div class='button power_btn span4'>TV Power</div></a>\n"
  222. "<a href='#' onclick='pressButton(\"air\");return false;'><div class='button airbutton span4'>Air Condition On-Off</div></a>\n"
  223.  
  224. "</div>\n"
  225. "<div class='buttongroup span12'>\n"
  226. "<a href='#' onclick='pressButton(\"input\");return false;'><div class='button span6'>Menu</div></a>\n"
  227. "<a href='#' onclick='pressButton(\"mute\");return false;'><div class='button span6'>Mute</div></a>\n"
  228. "<a href='#' onclick='pressButton(\"volup\");return false;'><div class='button span6'>Volume +</div></a>\n"
  229. "<a href='#' onclick='pressButton(\"chanup\");return false;'><div class='button span6'>Channel +</div></a>\n"
  230. "<a href='#' onclick='pressButton(\"voldn\");return false;'><div class='button span6'>Volume -</div></a>\n"
  231. "<a href='#' onclick='pressButton(\"chandn\");return false;'><div class='button span6'>Channel -</div></a>\n"
  232. "<a href='#' onclick='pressButton(\"arup\");return false;'><div class='button span6'>&#8593</div></a>\n"
  233. "<a href='#' onclick='pressButton(\"ardown\");return false;'><div class='button span6'>&#8595</div></a>\n"
  234. "<a href='#' onclick='pressButton(\"arleft\");return false;'><div class='button span6'>&#8592</div></a>\n"
  235. "<a href='#' onclick='pressButton(\"arright\");return false;'><div class='button span6'>&#8594</div></a>\n"
  236. "</div>\n"
  237. "<div class='buttongroup span12'>\n"
  238.  
  239. "<a href='#' onclick='pressButton(\"num1\");'><div class='button number_btn span4'>1</div></a>\n"
  240. "<a href='#' onclick='pressButton(\"num2\");'><div class='button number_btn span4'>2</div></a>\n"
  241. "<a href='#' onclick='pressButton(\"num3\");'><div class='button number_btn span4'>3</div></a>\n"
  242. "<a href='#' onclick='pressButton(\"num4\");'><div class='button number_btn span4'>4</div></a>\n"
  243. "<a href='#' onclick='pressButton(\"num5\");'><div class='button number_btn span4'>5</div></a>\n"
  244. "<a href='#' onclick='pressButton(\"num6\");'><div class='button number_btn span4'>6</div></a>\n"
  245. "<a href='#' onclick='pressButton(\"num7\");'><div class='button number_btn span4'>7</div></a>\n"
  246. "<a href='#' onclick='pressButton(\"num8\");'><div class='button number_btn span4'>8</div></a>\n"
  247. "<a href='#' onclick='pressButton(\"num9\");'><div class='button number_btn span4'>9</div></a>\n"
  248. "<a href='#' onclick='pressButton(\"ok\");'><div class='button number_btn span4'>OK</div></a>\n"
  249. "<a href='#' onclick='pressButton(\"num0\");'><div class='button number_btn span4'>0</div></a>\n"
  250. "<a href='#' onclick='pressButton(\"tvguide\");'><div class='button number_btn span4'>Guide</div></a>\n"
  251. //BAT START
  252. "Battery Voltage: ";
  253. message+=Tvoltage;
  254. message+="<br>";
  255. message+="Battery Status: ";
  256. message+=batteryStatus;
  257. message+=
  258. //BAT END
  259. "</div>\n"
  260. "</center>\n"
  261. "</body>\n"
  262. "</html>\n";
  263. server.send(200, "text/html", message);
  264. delay(100);
  265. }
  266.  
  267. // button web page
  268. void handle_button() {
  269. digitalWrite(0, HIGH);
  270. String message = "button send: ";
  271. String task = "";
  272. String value = "";
  273. task="";
  274. value="";
  275. for ( uint8_t i = 0; i < server.args(); i++ ) {
  276. if(server.argName(i) == "task")
  277. {
  278. task = server.arg(i);
  279. }
  280. if(server.argName(i) == "value")
  281. {
  282. value = server.arg(i);
  283. }
  284. }
  285. if(task == "mute")
  286. {
  287. message += "{mute}";
  288. irsend.sendRaw(rawDataMute, sizeof(rawDataMute)/sizeof(uint16_t), 38);
  289. }
  290. else if(task == "input")
  291. {
  292. message += "{input:" + value + "}";
  293. irsend.sendRaw(rawDataInput, sizeof(rawDataInput)/sizeof(uint16_t), 38);
  294. if(value.toInt() > 0)
  295. {
  296. delay(1500);
  297. }
  298. for(int i = 1; i <= min(10,value.toInt()); i++)
  299. {
  300. irsend.sendRaw(rawDataInput, sizeof(rawDataInput)/sizeof(uint16_t), 38);
  301. delay(250);
  302. }
  303. }
  304. else if(task == "power")
  305. {
  306. message += "{power}";
  307. irsend.sendRaw(rawDataTVPower, sizeof(rawDataTVPower)/sizeof(uint16_t), 38);
  308. }
  309. else if(task == "tvpower")
  310. {
  311. message += "{tvpower}";
  312. irsend.sendRaw(rawDataTVPower, sizeof(rawDataTVPower)/sizeof(uint16_t), 38);
  313. }
  314. else if(task == "cablepower")
  315. {
  316. message += "{cablepower}";
  317. irsend.sendRaw(rawDataAirCondition, sizeof(rawDataAirCondition)/sizeof(uint16_t), 38);
  318. }
  319. else if(task == "volup")
  320. {
  321. message += "{volup:" + value + "}";
  322. for(int i =0; i <= min(29,value.toInt()); i++)
  323. {
  324. irsend.sendRaw(rawDataVolumeUp, sizeof(rawDataVolumeUp)/sizeof(uint16_t), 38);
  325. delay(100);
  326. }
  327.  
  328. }
  329. else if(task == "voldn")
  330. {
  331. message += "{voldn:" + value + "}";
  332. for(int i =0; i <= min(29,value.toInt()); i++)
  333. {
  334. irsend.sendRaw(rawDataVolumeDown, sizeof(rawDataVolumeDown)/sizeof(uint16_t), 38);
  335. delay(100);
  336. }
  337. }
  338. else if(task == "chanup")
  339. {
  340. message += "{chanup}";
  341. //for(int i =0; i < min(200,value.toInt()); i++)
  342. //{
  343. irsend.sendRaw(rawDataChannelUp, sizeof(rawDataChannelUp)/sizeof(uint16_t), 38);
  344. //delay(100);
  345. //}
  346.  
  347. }
  348. else if(task == "chandn")
  349. {
  350. message += "{chandn}";
  351. // for(int i =0; i < min(200,value.toInt()); i++)
  352. //{
  353. irsend.sendRaw(rawDataChannelDown, sizeof(rawDataChannelDown)/sizeof(uint16_t), 38);
  354. //delay(100);
  355. //}
  356. }
  357. else if(task == "num0")
  358. {
  359. message += "{0}";
  360. irsend.sendRaw(rawData0, sizeof(rawData0)/sizeof(uint16_t),38);
  361. }
  362. else if(task == "num1")
  363. {
  364. message += "{1}";
  365. irsend.sendRaw(rawData1, sizeof(rawData1)/sizeof(uint16_t),38);
  366. }
  367. else if(task == "num2")
  368. {
  369. message += "{2}";
  370. irsend.sendRaw(rawData2, sizeof(rawData2)/sizeof(uint16_t),38);
  371. }
  372. else if(task == "num3")
  373. {
  374. message += "{3}";
  375. irsend.sendRaw(rawData3, sizeof(rawData3)/sizeof(uint16_t),38);
  376. }
  377. else if(task == "num4")
  378. {
  379. message += "{4}";
  380. irsend.sendRaw(rawData4, sizeof(rawData4)/sizeof(uint16_t),38);
  381. }
  382. else if(task == "num5")
  383. {
  384. message += "{5}";
  385. irsend.sendRaw(rawData5, sizeof(rawData5)/sizeof(uint16_t),38);
  386. }
  387. else if(task == "num6")
  388. {
  389. message += "{6}";
  390. irsend.sendRaw(rawData6, sizeof(rawData6)/sizeof(uint16_t),38);
  391. }
  392. else if(task == "num7")
  393. {
  394. message += "{7}";
  395. irsend.sendRaw(rawData7, sizeof(rawData7)/sizeof(uint16_t),38);
  396. }
  397. else if(task == "num8")
  398. {
  399. message += "{8}";
  400. irsend.sendRaw(rawData8, sizeof(rawData8)/sizeof(uint16_t),38);
  401. }
  402. else if(task == "num9")
  403. {
  404. message += "{9}";
  405. irsend.sendRaw(rawData9, sizeof(rawData9)/sizeof(uint16_t),38);
  406. }
  407. else if(task == "{240}"){
  408. //Lights on
  409. lightStatus="ON"
  410. http.begin(URL_ON);
  411. http.GET();
  412. http.end();
  413. }
  414. else if(task == "{239}"){
  415. //Lights off
  416. lightStatus="OFF"
  417. http.begin(URL_OFF);
  418. http.GET();
  419. http.end();
  420. }
  421. else if(task == "ok")
  422. {
  423. message += "{ok}";
  424. irsend.sendRaw(rawDataOK, sizeof(rawDataOK)/sizeof(uint16_t),38);
  425. }
  426. else if(task == "tvguide")
  427. {
  428. message += "{tvguide}";
  429. irsend.sendRaw(rawDataTVGuide, sizeof(rawDataTVGuide)/sizeof(uint16_t),38);
  430. }
  431. else if(task == "channel")
  432. {
  433. message+= "{channel}";
  434. set_channel(value, &message);
  435. }
  436. else if(task == "random")
  437. {
  438. message += "{random}";
  439. char mem[1024];
  440. char *tvalue = mem;
  441. strncpy(mem,value.c_str(),min(1024,sizeof(value)));
  442. if(strchr(tvalue,'-'))
  443. {
  444. const char *range1 = strtok(tvalue,"-");
  445. const char *range2 = strtok(NULL,"-");
  446. int newchannel = random(max(atoi(range1),1),min(atoi(range2)+1,5000));
  447. set_channel(String(newchannel), &message);
  448. }
  449. else if(strchr(tvalue,','))
  450. {
  451. const char *channels[100];
  452. int ccount = 0;
  453. const char *token;
  454. channels[ccount++] = token = strtok(tvalue,",");
  455. while(token && ccount < 100)
  456. {
  457. channels[ccount++] = token = strtok(NULL,",");
  458. }
  459. const char *newchannel = channels[random(0,ccount-1)];
  460. set_channel(String(newchannel), &message);
  461. }
  462. }
  463. else if( task == "air"){
  464. message += "{air}";
  465. irsend.sendRaw(rawDataAirCondition, sizeof(rawDataAirCondition)/sizeof(uint16_t), 38);
  466. }
  467. else if( task == "arup"){
  468. message += "{arup}";
  469. irsend.sendRaw(ArrowUp, sizeof(ArrowUp)/sizeof(uint16_t), 38);
  470. }
  471. else if( task == "ardown"){
  472. message += "{ardown}";
  473. irsend.sendRaw(ArrowDown, sizeof(ArrowDown)/sizeof(uint16_t), 38);
  474. }
  475. else if( task == "arleft"){
  476. message += "{arleft}";
  477. irsend.sendRaw(ArrowLeft, sizeof(ArrowLeft)/sizeof(uint16_t), 38);
  478. }
  479. else if( task == "arright"){
  480. message += "{arright}";
  481. irsend.sendRaw(ArrowRight, sizeof(ArrowRight)/sizeof(uint16_t), 38);
  482. }
  483. else
  484. {
  485. message += " {unknown:" + task + "}";
  486. }
  487. Serial.print("button pressed: ");
  488. Serial.println(task);
  489. server.send(200, "text/plain", message);
  490. delay(100);
  491. digitalWrite(0, LOW);
  492. }
  493.  
  494. void setup() {
  495. Serial.begin(115200);
  496. pinMode(0, OUTPUT); // set red LED
  497. randomSeed(analogRead(0));
  498. irsend.begin();
  499. Serial.begin(115200, SERIAL_8N1, SERIAL_TX_ONLY);
  500.  
  501. Serial.println("");
  502. Serial.println("Huzzah TV Web Server");
  503. delay(2000);
  504. // Connect to WiFi network
  505. WiFi.begin(ssid, password);
  506.  
  507. //STATIC IP START
  508. IPAddress ip(192,168,1,15);
  509. IPAddress gateway(192,168,1,1);
  510. IPAddress subnet(255,255,255,0);
  511. WiFi.config(ip, gateway, subnet);
  512. //STATIC IP END
  513.  
  514. Serial.print("\n\r \n\rConnecting");
  515.  
  516. // Wait for connection
  517. while (WiFi.status() != WL_CONNECTED) {
  518. digitalWrite(0, HIGH);
  519. delay(500);
  520. digitalWrite(0, LOW);
  521. delay(500);
  522. Serial.print(".");
  523. }
  524. Serial.print("Connected to ");
  525. Serial.println(ssid);
  526. Serial.print("IP address: ");
  527. Serial.println(WiFi.localIP());
  528. server.on("/", handle_root);
  529. server.on("/button", handle_button);
  530. server.begin();
  531. Serial.println("HTTP server started");
  532. }
  533.  
  534. void loop() {
  535.  
  536. delay(500);
  537. server.handleClient();
  538. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement