思路

将esp8266的mac改为一个已经连上校园网的设备的mac

实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

#include <ESP8266WiFi.h>

// Set your new MAC Address
uint8_t newMACAddress[] = {0x4c,0xe0,0xdb,0x5c,0x3d,0xe8};

void setup(){
Serial.begin(9600);
Serial.println();

WiFi.mode(WIFI_STA);
Serial.print("[OLD] ESP8266 Board MAC Address: ");
Serial.println(WiFi.macAddress());

// For Soft Access Point (AP) Mode
//wifi_set_macaddr(SOFTAP_IF, &newMACAddress[0]);
// For Station Mode
wifi_set_macaddr(STATION_IF, &newMACAddress[0]);

Serial.print("[NEW] ESP8266 Board MAC Address: ");
Serial.println(WiFi.macAddress());
}

void loop(){
Serial.println(WiFi.macAddress());
}

注意:reset后mac会变回默认地址

然后,搞不赢。。。。

翻了翻各个论坛,发现他们也没有解决方案。。。。。。。

下次试试模拟网络请求?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <ESP8266WiFi.h>          
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h>
uint8_t newMACAddress[] = {0x4c,0xe0,0xdb,0x5c,0x3d,0xe8};
void setup() {
Serial.begin(9600);
// 建立WiFiManager对象
WiFiManager wifiManager;
wifi_set_macaddr(STATION_IF, &newMACAddress[0]);
wifiManager.resetSettings();
// 自动连接WiFi。以下语句的参数是连接ESP8266时的WiFi名称
wifiManager.autoConnect("AutoConnectAP");

// 如果您希望该WiFi添加密码,可以使用以下语句:
// wifiManager.autoConnect("AutoConnectAP", "12345678");
// 以上语句中的12345678是连接AutoConnectAP的密码

// WiFi连接成功后将通过串口监视器输出连接成功信息
Serial.println("");
Serial.print("ESP8266 Connected to ");
Serial.println(WiFi.SSID()); // WiFi名称
Serial.print("IP address:\t");
Serial.println(WiFi.localIP()); // IP
}

void loop() {}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <ESP8266WiFi.h>          
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h>
ESP8266WebServer esp8266_server(80);// 建立ESP8266WebServer对象,对象名称为esp8266_server
// 括号中的数字是网路服务器响应http请求的端口号
// 网络服务器标准http端口号为80,因此这里使用80为端口号
uint8_t newMACAddress[] = {0x4c,0xe0,0xdb,0x5c,0x3d,0xe8};
void setup() {
Serial.begin(9600);
// 建立WiFiManager对象
WiFiManager wifiManager;
wifi_set_macaddr(STATION_IF, &newMACAddress[0]);
wifiManager.resetSettings();
// 自动连接WiFi。以下语句的参数是连接ESP8266时的WiFi名称
wifiManager.autoConnect("AutoConnectAP");
Serial.println("");
Serial.print("ESP8266 Connected to ");
Serial.println(WiFi.SSID()); // WiFi名称
Serial.print("IP address:\t");
Serial.println(WiFi.localIP()); // IP
esp8266_server.begin(); // 详细讲解请参见太极创客网站《零基础入门学用物联网》

esp8266_server.on("/", handleRoot); // 第3章-第2节 ESP8266-NodeMCU网络服务器-1
//"\"表示首页 handleRoot是函数名
esp8266_server.onNotFound(handleNotFound);
//--------"启动网络服务功能"程序部分结束--------
Serial.println("HTTP esp8266_server started");// 告知用户ESP8266网络服务功能已经启动
}


void loop(void){
esp8266_server.handleClient(); // 处理http服务器访问
}


void handleRoot() { //处理网站根目录“/”的访问请求
esp8266_server.send(200, "text/plain", "Hello from ESP8266"); // NodeMCU将调用此函数。
}//200是状态码 “txt/plain” 纯文本

// 设置处理404情况的函数'handleNotFound'
void handleNotFound(){ // 当浏览器请求的网络资源无法在服务器找到时,
esp8266_server.send(404, "text/plain", "404: Not found"); // NodeMCU将调用此函数。
}