You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
116 lines
2.9 KiB
116 lines
2.9 KiB
/* WiFi
|
|
*
|
|
* Arduino ESP32 mDNS responder sample
|
|
*/
|
|
|
|
#include "Arduino.h"
|
|
|
|
#include <WiFi.h>
|
|
#include <WiFiMulti.h>
|
|
#include <ESPmDNS.h>
|
|
#include <WiFiClient.h>
|
|
|
|
// ToDo: check if https://github.com/me-no-dev/ESPAsyncWebServer/ becomes available
|
|
|
|
#include "hardware.h"
|
|
|
|
#include "wifi.h"
|
|
|
|
using namespace std;
|
|
|
|
Wifi::Wifi() {
|
|
this->server = WiFiServer(80);
|
|
}
|
|
|
|
void Wifi::init() {
|
|
WiFiMulti wifiMulti;
|
|
|
|
wifiMulti.addAP(WIFI_SSID, WIFI_PASSWORD);
|
|
|
|
Serial.println("Connecting Wifi");
|
|
if(wifiMulti.run() == WL_CONNECTED) {
|
|
Serial.println("");
|
|
Serial.println("WiFi connected");
|
|
Serial.println("IP address: ");
|
|
Serial.println(WiFi.localIP());
|
|
}
|
|
|
|
/* // Wait for connection
|
|
for (int i=0; i<20 && WiFi.status() != WL_CONNECTED; i++) {
|
|
delay(500);
|
|
Serial.print(".");
|
|
}
|
|
*/
|
|
|
|
// Set up mDNS responder:
|
|
// - first argument is the domain name, in this example
|
|
// the fully-qualified domain name is "esp8266.local"
|
|
// - second argument is the IP address to advertise
|
|
// we send our IP address on the WiFi network
|
|
if (!MDNS.begin("soundboard")) {
|
|
Serial.println("Error setting up MDNS responder!");
|
|
} else {
|
|
Serial.println("mDNS responder started");
|
|
}
|
|
|
|
// Start TCP (HTTP) server
|
|
server.begin();
|
|
Serial.println("TCP server started");
|
|
|
|
// Add service to MDNS-SD
|
|
MDNS.addService("http", "tcp", 80);
|
|
}
|
|
|
|
void Wifi::loop() {
|
|
// Check if a client has connected
|
|
WiFiClient client = server.available();
|
|
if (!client) {
|
|
return;
|
|
}
|
|
Serial.println("");
|
|
Serial.println("New client");
|
|
|
|
// Wait for data from client to become available
|
|
while(client.connected() && !client.available()){
|
|
delay(1);
|
|
}
|
|
|
|
// Read the first line of HTTP request
|
|
String req = client.readStringUntil('\r');
|
|
|
|
// First line of HTTP request looks like "GET /path HTTP/1.1"
|
|
// Retrieve the "/path" part by finding the spaces
|
|
int addr_start = req.indexOf(' ');
|
|
int addr_end = req.indexOf(' ', addr_start + 1);
|
|
if (addr_start == -1 || addr_end == -1) {
|
|
Serial.print("Invalid request: ");
|
|
Serial.println(req);
|
|
return;
|
|
}
|
|
req = req.substring(addr_start + 1, addr_end);
|
|
Serial.print("Request: ");
|
|
Serial.println(req);
|
|
client.flush();
|
|
|
|
String s;
|
|
if (req == "/")
|
|
{
|
|
IPAddress ip = WiFi.localIP();
|
|
String ipStr = String(ip[0]) + '.' + String(ip[1]) + '.' + String(ip[2]) + '.' + String(ip[3]);
|
|
s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>Hello from ESP32 at ";
|
|
s += ipStr;
|
|
s += "</html>\r\n\r\n";
|
|
Serial.println("Sending 200");
|
|
}
|
|
else
|
|
{
|
|
s = "HTTP/1.1 404 Not Found\r\n\r\n";
|
|
Serial.println("Sending 404");
|
|
}
|
|
client.print(s);
|
|
|
|
Serial.println("Done with client");
|
|
}
|
|
|
|
void Wifi::end() {
|
|
}
|
|
|