Dependancies
Buy the components
mdns-access-point.ino
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
String AP_NamePrefix = "Cactus ";
const char WiFiAPPSK[] = "hutscape";
const char* DomainName = "cactus"; // set domain name domain.local
ESP8266WebServer server(80);
void setup() {
Serial.begin(115200);
initAccessPoint();
}
void loop() {
MDNS.update();
server.handleClient();
}
void initAccessPoint() {
Serial.println("\n[INFO] Configuring access point");
WiFi.mode(WIFI_AP);
WiFi.softAP(getAPName().c_str(), WiFiAPPSK);
startMDNS();
startServer();
MDNS.addService("http", "tcp", 80);
Serial.print("[INFO] Started access point at IP ");
Serial.println(WiFi.softAPIP());
}
void startMDNS() {
if (!MDNS.begin(DomainName, WiFi.softAPIP())) {
Serial.println("[ERROR] MDNS responder did not setup");
while (1) {
delay(1000);
}
} else {
Serial.println("[INFO] MDNS setup is successful!");
}
}
String getAPName() {
uint8_t mac[WL_MAC_ADDR_LENGTH];
WiFi.softAPmacAddress(mac);
String macID = String(mac[WL_MAC_ADDR_LENGTH - 2], HEX) +
String(mac[WL_MAC_ADDR_LENGTH - 1], HEX);
macID.toUpperCase();
return AP_NamePrefix + macID;
}
void startServer() {
server.on("/", handleRoot);
const char * headerkeys[] = {"User-Agent", "Cookie"};
size_t headerkeyssize = sizeof(headerkeys)/sizeof(char*);
server.collectHeaders(headerkeys, headerkeyssize);
server.begin();
}
void handleRoot() {
String content = "<h1>Welcome</h1>";
server.send(200, "text/html", content);
Serial.println("[INFO] Called /GET 200");
}
.PHONY: lint compile upload clean
lint:
cpplint --extensions=ino --filter=-legal/copyright,-readability/todo *.ino
compile:
arduino-cli compile --fqbn esp8266com:esp8266:d1_mini ./
upload: compile
arduino-cli upload -p /dev/cu.wchusbserial1410 --fqbn esp8266com:esp8266:d1_mini ./
clean:
rm -f .*.bin
rm -f .*.elf
flash: lint compile upload clean
Create an mDNS http://cactus.local
in the Access Point to visit a created web page instead of https://192.168.4.1
for easy user experience.
Only Arduino ESP8266 0da6906
tree works for mDNS in AP mode, so install only the current master branch.