I'm trying to turn on and off my pc remotely and trough wireless.
In order to do this, i used the code shown below.
Code: Select all
#include <WiFi.h>
const char* ssid = "ssid";
const char* password = "passwifi";
unsigned long check_wifi = 30000;
WiFiServer server(49152);
const int led1 = 22; // the number of the LED pin
// Client variables
char linebuf[80];
int charcount=0;
byte mac[6];
void setup() {
// initialize the LEDs pins as an output:
pinMode(led1, OUTPUT);
//Initialize serial and wait for port to open:
Serial.begin(115200);
while(!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
// We start by connecting to a WiFi network
Serial.println();
Serial.println();
Serial.print("In connessione a: ");
Serial.println(ssid);
WiFi.begin(ssid, password);
// attempt to connect to Wifi network:
while(WiFi.status() != WL_CONNECTED) {
// Connect to WPA/WPA2 network. Change this line if using open or WEP network:
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("Connesso al WiFi");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
WiFi.macAddress(mac);
Serial.print("MAC: ");
Serial.print(mac[0],HEX);
Serial.print(":");
Serial.print(mac[1],HEX);
Serial.print(":");
Serial.print(mac[2],HEX);
Serial.print(":");
Serial.print(mac[3],HEX);
Serial.print(":");
Serial.print(mac[4],HEX);
Serial.print(":");
Serial.println(mac[5],HEX);
server.begin();
}
void loop() {
// listen for incoming clients
if ((WiFi.status() != WL_CONNECTED) && (millis() > check_wifi)) {
Serial.println("Riconnessione al WiFi...");
WiFi.disconnect();
WiFi.begin(ssid, password);
check_wifi = millis() + 30000;
}
WiFiClient client = server.available();
if (client) {
Serial.println("Nuovo accesso");
memset(linebuf,0,sizeof(linebuf));
charcount=0;
// an http request ends with a blank line
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
//read char by char HTTP request
linebuf[charcount]=c;
if (charcount<sizeof(linebuf)-1) charcount++;
// if you've gotten to the end of the line (received a newline
// character) and the line is blank, the http request has ended,
// so you can send a reply
if (c == '\n' && currentLineIsBlank) {
// send a standard http response header
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close"); // the connection will be closed after completion of the response
client.println();
client.println("<!DOCTYPE HTML><html><head>");
client.println("<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"></head>");
client.println("<h1>ESP32 - Accensione Remota PC V2.0</h1>");
client.println("<p>Relay 1: <a href=\"on1\"><button>Triggera</button></a> ");
client.println("</html>");
break;
}
if (c == '\n') {
// you're starting a new line
currentLineIsBlank = true;
if (strstr(linebuf,"GET /on1") > 0){
Serial.println("LED 1 ON");
digitalWrite(led1, HIGH);
delay(100);
Serial.println("LED 1 OFF");
digitalWrite(led1, LOW);
}
// you're starting a new line
currentLineIsBlank = true;
memset(linebuf,0,sizeof(linebuf));
charcount=0;
} else if (c != '\r') {
// you've gotten a character on the current line
currentLineIsBlank = false;
}
}
}
// give the web browser time to receive the data
delay(1);
// close the connection:
//client.stop();
//Serial.println("client disconnected");
}
}
This code is loaded in ESP32 that is connected to a relay.
If access to the ESP32 Webpage, and if i press the button "trigger", the relay will switch on and off, and it turn on my pc.
I made a port forwarding on a random port in order to use this outside home.
This system works, but have 1 issue.
Randomly if i use my cellphone to navigate in wifi LAN, the relay turn on my pc.
This is annoying, because i don't want to turn on my pc.
I want turn on my pc only if i access to my webpage and if i press the "Trigger" button.
In attached you can see my router configuration.
Someone can help me resolving this issue?
Thank you all
Davide