HighInBC

Untitled

May 8th, 2017
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.75 KB | None | 0 0
  1. #include <ESP8266WiFi.h>
  2. #include <WiFiClient.h>
  3. #include <ESP8266WebServer.h>
  4.  
  5. const char* ssid = "...";
  6. const char* password = "...";
  7.  
  8. bool snooze = false;
  9. long snooze_time = 0;
  10.  
  11. ESP8266WebServer server(80);
  12.  
  13. void setup() {
  14.   pinMode( D1, OUTPUT );
  15.   Serial.begin( 115200 );
  16.   Serial.print( "\n" );
  17.   WiFi.begin( ssid, password );
  18.   Serial.print( "Connecting to " );
  19.   Serial.println( ssid );
  20.  
  21.   // Wait for connection
  22.   uint8_t i = 0;
  23.   while ( WiFi.status() != WL_CONNECTED && i++ < 20 ) {
  24.     delay( 500 );
  25.   }
  26.   if( i == 21 ){
  27.     Serial.print( "Could not connect to" );
  28.     Serial.println( ssid );
  29.     while( 1 ) delay( 500 );
  30.   }
  31.   Serial.print( "Connected! IP address: " );
  32.   Serial.println( WiFi.localIP() );
  33.  
  34.   server.on( "/beep", HTTP_GET, do_beep );
  35.   server.on( "/snooze", HTTP_GET, do_snooze );
  36.   server.on( "/unsnooze", HTTP_GET, undo_snooze );
  37.   server.on( "/debug", HTTP_GET, do_debug );
  38.   server.begin();
  39.   Serial.println( "HTTP server started" );
  40. }
  41.  
  42. void loop() {
  43.   snooze = ( snooze_time > millis() );
  44.   server.handleClient();
  45. }
  46.  
  47. void do_debug() {
  48.   String response;
  49.   response = "Snooze state: ";
  50.   response += snooze ? "ON" : "OFF";
  51.   response += "\nSnooze time: ";
  52.   response += snooze_time;
  53.   response += "\nCurrent time: ";
  54.   response += millis();
  55.   response += "\n";
  56.   server.send( 200, "text/plain", response );
  57. }
  58.  
  59. void do_snooze() {
  60.   String unit = server.arg( "unit" );
  61.   long snooze_delay = server.arg( "time" ).toInt();
  62. Serial.print( "Inputed time: " );
  63. Serial.println( snooze_delay );
  64. Serial.print( "Inputed unit: " );
  65. Serial.println( unit );
  66.  
  67.   long offset = snooze_delay;
  68. Serial.print( "Offset start in ms: " );
  69. Serial.println( offset );
  70.  
  71.   if      ( unit == "s" ) { offset *= 1000; }
  72.   else if ( unit == "m" ) { offset *= 60000; }
  73.   else if ( unit == "h" ) { offset *= 3600000; }
  74.   else { server.send( 400, "text/plain", "Invalid unit, use s, m, h for second, minute, hour\n" ); }
  75.  
  76. Serial.print( "Offset finish in ms: " );
  77. Serial.println( offset );
  78. Serial.print( "Current millis(): " );
  79. Serial.println( millis() );
  80.  
  81.   snooze_time = millis() + offset;
  82.  
  83. Serial.print( "Target time: " );
  84. Serial.println( snooze_time );
  85.  
  86.   server.send( 200, "text/plain", "Delay set\n" );
  87. }
  88.  
  89. void undo_snooze() {
  90.   snooze_time = 0;
  91.   server.send( 200, "text/plain", "Snooze cleared\n" );
  92. }
  93.  
  94. void do_beep() {
  95.     bool force = ( server.arg( "force" ) == "1" );
  96.    
  97.     if( snooze && !force ) {
  98.       server.send( 401, "text/plain", "Snooze mode prohibits beeping. To override use /beep?force=1\n" );
  99.       return;
  100.     }
  101.     Serial.println (server.arg( "plain" ) );
  102.     server.send( 200, "text/plain", "Okay, beeped\n" );
  103.     digitalWrite( D1, HIGH );
  104.     delay( 250 );
  105.     digitalWrite( D1, LOW );
  106. }
Advertisement
Add Comment
Please, Sign In to add comment