Skip to content

Commit dd86244

Browse files
feat(net): Add NAPT examples (espressif#10100)
* feat(net): Add NAPT examples for STA and ETH * feat(net): Add NAPT example for PPP * feat(net): Add CI configs to skip H2 * ci(pre-commit): Apply automatic fixes --------- Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
1 parent 9339c00 commit dd86244

File tree

6 files changed

+314
-0
lines changed

6 files changed

+314
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
#include <WiFi.h>
2+
#include <ETH.h>
3+
#include <SPI.h>
4+
5+
#define ETH_TYPE ETH_PHY_W5500
6+
#define ETH_ADDR 1
7+
#define ETH_CS 15
8+
#define ETH_IRQ 4
9+
#define ETH_RST 5
10+
#define ETH_SPI_SCK 14
11+
#define ETH_SPI_MISO 12
12+
#define ETH_SPI_MOSI 13
13+
14+
#define AP_SSID "ESP32-ETH-WIFI-BRIDGE"
15+
#define AP_PASS "password"
16+
17+
IPAddress ap_ip(192, 168, 4, 1);
18+
IPAddress ap_mask(255, 255, 255, 0);
19+
IPAddress ap_leaseStart(192, 168, 4, 2);
20+
IPAddress ap_dns(8, 8, 4, 4);
21+
22+
void setup() {
23+
Serial.begin(115200);
24+
Serial.setDebugOutput(true);
25+
Network.onEvent(onEvent);
26+
27+
WiFi.AP.begin();
28+
WiFi.AP.config(ap_ip, ap_ip, ap_mask, ap_leaseStart, ap_dns);
29+
WiFi.AP.create(AP_SSID, AP_PASS);
30+
if (!WiFi.AP.waitStatusBits(ESP_NETIF_STARTED_BIT, 1000)) {
31+
Serial.println("Failed to start AP!");
32+
return;
33+
}
34+
delay(100);
35+
36+
SPI.begin(ETH_SPI_SCK, ETH_SPI_MISO, ETH_SPI_MOSI);
37+
ETH.begin(ETH_TYPE, ETH_ADDR, ETH_CS, ETH_IRQ, ETH_RST, SPI);
38+
}
39+
40+
void loop() {
41+
delay(20000);
42+
}
43+
44+
void onEvent(arduino_event_id_t event, arduino_event_info_t info) {
45+
switch (event) {
46+
case ARDUINO_EVENT_ETH_START: Serial.println("ETH Started"); break;
47+
case ARDUINO_EVENT_ETH_CONNECTED: Serial.println("ETH Connected"); break;
48+
case ARDUINO_EVENT_ETH_GOT_IP:
49+
Serial.println("ETH Got IP");
50+
Serial.println(ETH);
51+
WiFi.AP.enableNAPT(true);
52+
break;
53+
case ARDUINO_EVENT_ETH_LOST_IP:
54+
Serial.println("ETH Lost IP");
55+
WiFi.AP.enableNAPT(false);
56+
break;
57+
case ARDUINO_EVENT_ETH_DISCONNECTED:
58+
Serial.println("ETH Disconnected");
59+
WiFi.AP.enableNAPT(false);
60+
break;
61+
case ARDUINO_EVENT_ETH_STOP: Serial.println("ETH Stopped"); break;
62+
63+
case ARDUINO_EVENT_WIFI_AP_START:
64+
Serial.println("AP Started");
65+
Serial.println(WiFi.AP);
66+
break;
67+
case ARDUINO_EVENT_WIFI_AP_STACONNECTED: Serial.println("AP STA Connected"); break;
68+
case ARDUINO_EVENT_WIFI_AP_STADISCONNECTED: Serial.println("AP STA Disconnected"); break;
69+
case ARDUINO_EVENT_WIFI_AP_STAIPASSIGNED:
70+
Serial.print("AP STA IP Assigned: ");
71+
Serial.println(IPAddress(info.wifi_ap_staipassigned.ip.addr));
72+
break;
73+
case ARDUINO_EVENT_WIFI_AP_PROBEREQRECVED: Serial.println("AP Probe Request Received"); break;
74+
case ARDUINO_EVENT_WIFI_AP_STOP: Serial.println("AP Stopped"); break;
75+
76+
default: break;
77+
}
78+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"targets": {
3+
"esp32h2": false
4+
}
5+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
#include <PPP.h>
2+
#include <WiFi.h>
3+
4+
#define PPP_MODEM_APN "internet"
5+
#define PPP_MODEM_PIN "0000" // or NULL
6+
7+
// WaveShare SIM7600 HW Flow Control
8+
#define PPP_MODEM_RST 25
9+
#define PPP_MODEM_RST_LOW false //active HIGH
10+
#define PPP_MODEM_RST_DELAY 200
11+
#define PPP_MODEM_TX 21
12+
#define PPP_MODEM_RX 22
13+
#define PPP_MODEM_RTS 26
14+
#define PPP_MODEM_CTS 27
15+
#define PPP_MODEM_FC ESP_MODEM_FLOW_CONTROL_HW
16+
#define PPP_MODEM_MODEL PPP_MODEM_SIM7600
17+
18+
// SIM800 basic module with just TX,RX and RST
19+
// #define PPP_MODEM_RST 0
20+
// #define PPP_MODEM_RST_LOW true //active LOW
21+
// #define PPP_MODEM_TX 2
22+
// #define PPP_MODEM_RX 19
23+
// #define PPP_MODEM_RTS -1
24+
// #define PPP_MODEM_CTS -1
25+
// #define PPP_MODEM_FC ESP_MODEM_FLOW_CONTROL_NONE
26+
// #define PPP_MODEM_MODEL PPP_MODEM_SIM800
27+
28+
// WiFi Access Point Config
29+
#define AP_SSID "ESP32-ETH-WIFI-BRIDGE"
30+
#define AP_PASS "password"
31+
32+
IPAddress ap_ip(192, 168, 4, 1);
33+
IPAddress ap_mask(255, 255, 255, 0);
34+
IPAddress ap_leaseStart(192, 168, 4, 2);
35+
IPAddress ap_dns(8, 8, 4, 4);
36+
37+
void setup() {
38+
Serial.begin(115200);
39+
Serial.setDebugOutput(true);
40+
41+
// Listen for modem events
42+
Network.onEvent(onEvent);
43+
44+
// Start the Access Point
45+
WiFi.AP.begin();
46+
WiFi.AP.config(ap_ip, ap_ip, ap_mask, ap_leaseStart, ap_dns);
47+
WiFi.AP.create(AP_SSID, AP_PASS);
48+
if (!WiFi.AP.waitStatusBits(ESP_NETIF_STARTED_BIT, 1000)) {
49+
Serial.println("Failed to start AP!");
50+
return;
51+
}
52+
53+
// Configure the modem
54+
PPP.setApn(PPP_MODEM_APN);
55+
PPP.setPin(PPP_MODEM_PIN);
56+
PPP.setResetPin(PPP_MODEM_RST, PPP_MODEM_RST_LOW, PPP_MODEM_RST_DELAY);
57+
PPP.setPins(PPP_MODEM_TX, PPP_MODEM_RX, PPP_MODEM_RTS, PPP_MODEM_CTS, PPP_MODEM_FC);
58+
59+
Serial.println("Starting the modem. It might take a while!");
60+
PPP.begin(PPP_MODEM_MODEL);
61+
62+
Serial.print("Manufacturer: ");
63+
Serial.println(PPP.cmd("AT+CGMI", 10000));
64+
Serial.print("Model: ");
65+
Serial.println(PPP.moduleName());
66+
Serial.print("IMEI: ");
67+
Serial.println(PPP.IMEI());
68+
69+
bool attached = PPP.attached();
70+
if (!attached) {
71+
int i = 0;
72+
unsigned int s = millis();
73+
Serial.print("Waiting to connect to network");
74+
while (!attached && ((++i) < 600)) {
75+
Serial.print(".");
76+
delay(100);
77+
attached = PPP.attached();
78+
}
79+
Serial.print((millis() - s) / 1000.0, 1);
80+
Serial.println("s");
81+
attached = PPP.attached();
82+
}
83+
84+
Serial.print("Attached: ");
85+
Serial.println(attached);
86+
Serial.print("State: ");
87+
Serial.println(PPP.radioState());
88+
if (attached) {
89+
Serial.print("Operator: ");
90+
Serial.println(PPP.operatorName());
91+
Serial.print("IMSI: ");
92+
Serial.println(PPP.IMSI());
93+
Serial.print("RSSI: ");
94+
Serial.println(PPP.RSSI());
95+
int ber = PPP.BER();
96+
if (ber > 0) {
97+
Serial.print("BER: ");
98+
Serial.println(ber);
99+
Serial.print("NetMode: ");
100+
Serial.println(PPP.networkMode());
101+
}
102+
103+
Serial.println("Switching to data mode...");
104+
PPP.mode(ESP_MODEM_MODE_CMUX); // Data and Command mixed mode
105+
if (!PPP.waitStatusBits(ESP_NETIF_CONNECTED_BIT, 1000)) {
106+
Serial.println("Failed to connect to internet!");
107+
} else {
108+
Serial.println("Connected to internet!");
109+
}
110+
} else {
111+
Serial.println("Failed to connect to network!");
112+
}
113+
}
114+
115+
void loop() {
116+
delay(20000);
117+
}
118+
119+
void onEvent(arduino_event_id_t event, arduino_event_info_t info) {
120+
switch (event) {
121+
case ARDUINO_EVENT_PPP_START: Serial.println("PPP Started"); break;
122+
case ARDUINO_EVENT_PPP_CONNECTED: Serial.println("PPP Connected"); break;
123+
case ARDUINO_EVENT_PPP_GOT_IP:
124+
Serial.println("PPP Got IP");
125+
Serial.println(PPP);
126+
WiFi.AP.enableNAPT(true);
127+
break;
128+
case ARDUINO_EVENT_PPP_LOST_IP:
129+
Serial.println("PPP Lost IP");
130+
WiFi.AP.enableNAPT(false);
131+
break;
132+
case ARDUINO_EVENT_PPP_DISCONNECTED:
133+
Serial.println("PPP Disconnected");
134+
WiFi.AP.enableNAPT(false);
135+
break;
136+
case ARDUINO_EVENT_PPP_STOP: Serial.println("PPP Stopped"); break;
137+
138+
case ARDUINO_EVENT_WIFI_AP_START:
139+
Serial.println("AP Started");
140+
Serial.println(WiFi.AP);
141+
break;
142+
case ARDUINO_EVENT_WIFI_AP_STACONNECTED: Serial.println("AP STA Connected"); break;
143+
case ARDUINO_EVENT_WIFI_AP_STADISCONNECTED: Serial.println("AP STA Disconnected"); break;
144+
case ARDUINO_EVENT_WIFI_AP_STAIPASSIGNED:
145+
Serial.print("AP STA IP Assigned: ");
146+
Serial.println(IPAddress(info.wifi_ap_staipassigned.ip.addr));
147+
break;
148+
case ARDUINO_EVENT_WIFI_AP_PROBEREQRECVED: Serial.println("AP Probe Request Received"); break;
149+
case ARDUINO_EVENT_WIFI_AP_STOP: Serial.println("AP Stopped"); break;
150+
151+
default: break;
152+
}
153+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"targets": {
3+
"esp32h2": false
4+
}
5+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
#include <WiFi.h>
2+
3+
#define STA_SSID "YOUR-SSID"
4+
#define STA_PASS "YOUR-PASS"
5+
6+
#define AP_SSID "ESP32-WIFI-EXTENDER"
7+
#define AP_PASS "password"
8+
9+
IPAddress ap_ip(192, 168, 4, 1);
10+
IPAddress ap_mask(255, 255, 255, 0);
11+
IPAddress ap_leaseStart(192, 168, 4, 2);
12+
IPAddress ap_dns(8, 8, 4, 4);
13+
14+
void setup() {
15+
Serial.begin(115200);
16+
Serial.setDebugOutput(true);
17+
Network.onEvent(onEvent);
18+
19+
WiFi.AP.begin();
20+
WiFi.AP.config(ap_ip, ap_ip, ap_mask, ap_leaseStart, ap_dns);
21+
WiFi.AP.create(AP_SSID, AP_PASS);
22+
if (!WiFi.AP.waitStatusBits(ESP_NETIF_STARTED_BIT, 1000)) {
23+
Serial.println("Failed to start AP!");
24+
return;
25+
}
26+
27+
WiFi.begin(STA_SSID, STA_PASS);
28+
}
29+
30+
void loop() {
31+
delay(20000);
32+
}
33+
34+
void onEvent(arduino_event_id_t event, arduino_event_info_t info) {
35+
switch (event) {
36+
case ARDUINO_EVENT_WIFI_STA_START: Serial.println("STA Started"); break;
37+
case ARDUINO_EVENT_WIFI_STA_CONNECTED: Serial.println("STA Connected"); break;
38+
case ARDUINO_EVENT_WIFI_STA_GOT_IP:
39+
Serial.println("STA Got IP");
40+
Serial.println(WiFi.STA);
41+
WiFi.AP.enableNAPT(true);
42+
break;
43+
case ARDUINO_EVENT_WIFI_STA_LOST_IP:
44+
Serial.println("STA Lost IP");
45+
WiFi.AP.enableNAPT(false);
46+
break;
47+
case ARDUINO_EVENT_WIFI_STA_DISCONNECTED:
48+
Serial.println("STA Disconnected");
49+
WiFi.AP.enableNAPT(false);
50+
break;
51+
case ARDUINO_EVENT_WIFI_STA_STOP: Serial.println("STA Stopped"); break;
52+
53+
case ARDUINO_EVENT_WIFI_AP_START:
54+
Serial.println("AP Started");
55+
Serial.println(WiFi.AP);
56+
break;
57+
case ARDUINO_EVENT_WIFI_AP_STACONNECTED: Serial.println("AP STA Connected"); break;
58+
case ARDUINO_EVENT_WIFI_AP_STADISCONNECTED: Serial.println("AP STA Disconnected"); break;
59+
case ARDUINO_EVENT_WIFI_AP_STAIPASSIGNED:
60+
Serial.print("AP STA IP Assigned: ");
61+
Serial.println(IPAddress(info.wifi_ap_staipassigned.ip.addr));
62+
break;
63+
case ARDUINO_EVENT_WIFI_AP_PROBEREQRECVED: Serial.println("AP Probe Request Received"); break;
64+
case ARDUINO_EVENT_WIFI_AP_STOP: Serial.println("AP Stopped"); break;
65+
66+
default: break;
67+
}
68+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"targets": {
3+
"esp32h2": false
4+
}
5+
}

0 commit comments

Comments
 (0)