feat(net): Add NAPT examples (#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>
This commit is contained in:
parent
9339c00d34
commit
dd86244b4f
6 changed files with 314 additions and 0 deletions
|
|
@ -0,0 +1,78 @@
|
|||
#include <WiFi.h>
|
||||
#include <ETH.h>
|
||||
#include <SPI.h>
|
||||
|
||||
#define ETH_TYPE ETH_PHY_W5500
|
||||
#define ETH_ADDR 1
|
||||
#define ETH_CS 15
|
||||
#define ETH_IRQ 4
|
||||
#define ETH_RST 5
|
||||
#define ETH_SPI_SCK 14
|
||||
#define ETH_SPI_MISO 12
|
||||
#define ETH_SPI_MOSI 13
|
||||
|
||||
#define AP_SSID "ESP32-ETH-WIFI-BRIDGE"
|
||||
#define AP_PASS "password"
|
||||
|
||||
IPAddress ap_ip(192, 168, 4, 1);
|
||||
IPAddress ap_mask(255, 255, 255, 0);
|
||||
IPAddress ap_leaseStart(192, 168, 4, 2);
|
||||
IPAddress ap_dns(8, 8, 4, 4);
|
||||
|
||||
void setup() {
|
||||
Serial.begin(115200);
|
||||
Serial.setDebugOutput(true);
|
||||
Network.onEvent(onEvent);
|
||||
|
||||
WiFi.AP.begin();
|
||||
WiFi.AP.config(ap_ip, ap_ip, ap_mask, ap_leaseStart, ap_dns);
|
||||
WiFi.AP.create(AP_SSID, AP_PASS);
|
||||
if (!WiFi.AP.waitStatusBits(ESP_NETIF_STARTED_BIT, 1000)) {
|
||||
Serial.println("Failed to start AP!");
|
||||
return;
|
||||
}
|
||||
delay(100);
|
||||
|
||||
SPI.begin(ETH_SPI_SCK, ETH_SPI_MISO, ETH_SPI_MOSI);
|
||||
ETH.begin(ETH_TYPE, ETH_ADDR, ETH_CS, ETH_IRQ, ETH_RST, SPI);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
delay(20000);
|
||||
}
|
||||
|
||||
void onEvent(arduino_event_id_t event, arduino_event_info_t info) {
|
||||
switch (event) {
|
||||
case ARDUINO_EVENT_ETH_START: Serial.println("ETH Started"); break;
|
||||
case ARDUINO_EVENT_ETH_CONNECTED: Serial.println("ETH Connected"); break;
|
||||
case ARDUINO_EVENT_ETH_GOT_IP:
|
||||
Serial.println("ETH Got IP");
|
||||
Serial.println(ETH);
|
||||
WiFi.AP.enableNAPT(true);
|
||||
break;
|
||||
case ARDUINO_EVENT_ETH_LOST_IP:
|
||||
Serial.println("ETH Lost IP");
|
||||
WiFi.AP.enableNAPT(false);
|
||||
break;
|
||||
case ARDUINO_EVENT_ETH_DISCONNECTED:
|
||||
Serial.println("ETH Disconnected");
|
||||
WiFi.AP.enableNAPT(false);
|
||||
break;
|
||||
case ARDUINO_EVENT_ETH_STOP: Serial.println("ETH Stopped"); break;
|
||||
|
||||
case ARDUINO_EVENT_WIFI_AP_START:
|
||||
Serial.println("AP Started");
|
||||
Serial.println(WiFi.AP);
|
||||
break;
|
||||
case ARDUINO_EVENT_WIFI_AP_STACONNECTED: Serial.println("AP STA Connected"); break;
|
||||
case ARDUINO_EVENT_WIFI_AP_STADISCONNECTED: Serial.println("AP STA Disconnected"); break;
|
||||
case ARDUINO_EVENT_WIFI_AP_STAIPASSIGNED:
|
||||
Serial.print("AP STA IP Assigned: ");
|
||||
Serial.println(IPAddress(info.wifi_ap_staipassigned.ip.addr));
|
||||
break;
|
||||
case ARDUINO_EVENT_WIFI_AP_PROBEREQRECVED: Serial.println("AP Probe Request Received"); break;
|
||||
case ARDUINO_EVENT_WIFI_AP_STOP: Serial.println("AP Stopped"); break;
|
||||
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
5
libraries/Ethernet/examples/ETH_WIFI_BRIDGE/ci.json
Normal file
5
libraries/Ethernet/examples/ETH_WIFI_BRIDGE/ci.json
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"targets": {
|
||||
"esp32h2": false
|
||||
}
|
||||
}
|
||||
153
libraries/PPP/examples/PPP_WIFI_BRIDGE/PPP_WIFI_BRIDGE.ino
Normal file
153
libraries/PPP/examples/PPP_WIFI_BRIDGE/PPP_WIFI_BRIDGE.ino
Normal file
|
|
@ -0,0 +1,153 @@
|
|||
#include <PPP.h>
|
||||
#include <WiFi.h>
|
||||
|
||||
#define PPP_MODEM_APN "internet"
|
||||
#define PPP_MODEM_PIN "0000" // or NULL
|
||||
|
||||
// WaveShare SIM7600 HW Flow Control
|
||||
#define PPP_MODEM_RST 25
|
||||
#define PPP_MODEM_RST_LOW false //active HIGH
|
||||
#define PPP_MODEM_RST_DELAY 200
|
||||
#define PPP_MODEM_TX 21
|
||||
#define PPP_MODEM_RX 22
|
||||
#define PPP_MODEM_RTS 26
|
||||
#define PPP_MODEM_CTS 27
|
||||
#define PPP_MODEM_FC ESP_MODEM_FLOW_CONTROL_HW
|
||||
#define PPP_MODEM_MODEL PPP_MODEM_SIM7600
|
||||
|
||||
// SIM800 basic module with just TX,RX and RST
|
||||
// #define PPP_MODEM_RST 0
|
||||
// #define PPP_MODEM_RST_LOW true //active LOW
|
||||
// #define PPP_MODEM_TX 2
|
||||
// #define PPP_MODEM_RX 19
|
||||
// #define PPP_MODEM_RTS -1
|
||||
// #define PPP_MODEM_CTS -1
|
||||
// #define PPP_MODEM_FC ESP_MODEM_FLOW_CONTROL_NONE
|
||||
// #define PPP_MODEM_MODEL PPP_MODEM_SIM800
|
||||
|
||||
// WiFi Access Point Config
|
||||
#define AP_SSID "ESP32-ETH-WIFI-BRIDGE"
|
||||
#define AP_PASS "password"
|
||||
|
||||
IPAddress ap_ip(192, 168, 4, 1);
|
||||
IPAddress ap_mask(255, 255, 255, 0);
|
||||
IPAddress ap_leaseStart(192, 168, 4, 2);
|
||||
IPAddress ap_dns(8, 8, 4, 4);
|
||||
|
||||
void setup() {
|
||||
Serial.begin(115200);
|
||||
Serial.setDebugOutput(true);
|
||||
|
||||
// Listen for modem events
|
||||
Network.onEvent(onEvent);
|
||||
|
||||
// Start the Access Point
|
||||
WiFi.AP.begin();
|
||||
WiFi.AP.config(ap_ip, ap_ip, ap_mask, ap_leaseStart, ap_dns);
|
||||
WiFi.AP.create(AP_SSID, AP_PASS);
|
||||
if (!WiFi.AP.waitStatusBits(ESP_NETIF_STARTED_BIT, 1000)) {
|
||||
Serial.println("Failed to start AP!");
|
||||
return;
|
||||
}
|
||||
|
||||
// Configure the modem
|
||||
PPP.setApn(PPP_MODEM_APN);
|
||||
PPP.setPin(PPP_MODEM_PIN);
|
||||
PPP.setResetPin(PPP_MODEM_RST, PPP_MODEM_RST_LOW, PPP_MODEM_RST_DELAY);
|
||||
PPP.setPins(PPP_MODEM_TX, PPP_MODEM_RX, PPP_MODEM_RTS, PPP_MODEM_CTS, PPP_MODEM_FC);
|
||||
|
||||
Serial.println("Starting the modem. It might take a while!");
|
||||
PPP.begin(PPP_MODEM_MODEL);
|
||||
|
||||
Serial.print("Manufacturer: ");
|
||||
Serial.println(PPP.cmd("AT+CGMI", 10000));
|
||||
Serial.print("Model: ");
|
||||
Serial.println(PPP.moduleName());
|
||||
Serial.print("IMEI: ");
|
||||
Serial.println(PPP.IMEI());
|
||||
|
||||
bool attached = PPP.attached();
|
||||
if (!attached) {
|
||||
int i = 0;
|
||||
unsigned int s = millis();
|
||||
Serial.print("Waiting to connect to network");
|
||||
while (!attached && ((++i) < 600)) {
|
||||
Serial.print(".");
|
||||
delay(100);
|
||||
attached = PPP.attached();
|
||||
}
|
||||
Serial.print((millis() - s) / 1000.0, 1);
|
||||
Serial.println("s");
|
||||
attached = PPP.attached();
|
||||
}
|
||||
|
||||
Serial.print("Attached: ");
|
||||
Serial.println(attached);
|
||||
Serial.print("State: ");
|
||||
Serial.println(PPP.radioState());
|
||||
if (attached) {
|
||||
Serial.print("Operator: ");
|
||||
Serial.println(PPP.operatorName());
|
||||
Serial.print("IMSI: ");
|
||||
Serial.println(PPP.IMSI());
|
||||
Serial.print("RSSI: ");
|
||||
Serial.println(PPP.RSSI());
|
||||
int ber = PPP.BER();
|
||||
if (ber > 0) {
|
||||
Serial.print("BER: ");
|
||||
Serial.println(ber);
|
||||
Serial.print("NetMode: ");
|
||||
Serial.println(PPP.networkMode());
|
||||
}
|
||||
|
||||
Serial.println("Switching to data mode...");
|
||||
PPP.mode(ESP_MODEM_MODE_CMUX); // Data and Command mixed mode
|
||||
if (!PPP.waitStatusBits(ESP_NETIF_CONNECTED_BIT, 1000)) {
|
||||
Serial.println("Failed to connect to internet!");
|
||||
} else {
|
||||
Serial.println("Connected to internet!");
|
||||
}
|
||||
} else {
|
||||
Serial.println("Failed to connect to network!");
|
||||
}
|
||||
}
|
||||
|
||||
void loop() {
|
||||
delay(20000);
|
||||
}
|
||||
|
||||
void onEvent(arduino_event_id_t event, arduino_event_info_t info) {
|
||||
switch (event) {
|
||||
case ARDUINO_EVENT_PPP_START: Serial.println("PPP Started"); break;
|
||||
case ARDUINO_EVENT_PPP_CONNECTED: Serial.println("PPP Connected"); break;
|
||||
case ARDUINO_EVENT_PPP_GOT_IP:
|
||||
Serial.println("PPP Got IP");
|
||||
Serial.println(PPP);
|
||||
WiFi.AP.enableNAPT(true);
|
||||
break;
|
||||
case ARDUINO_EVENT_PPP_LOST_IP:
|
||||
Serial.println("PPP Lost IP");
|
||||
WiFi.AP.enableNAPT(false);
|
||||
break;
|
||||
case ARDUINO_EVENT_PPP_DISCONNECTED:
|
||||
Serial.println("PPP Disconnected");
|
||||
WiFi.AP.enableNAPT(false);
|
||||
break;
|
||||
case ARDUINO_EVENT_PPP_STOP: Serial.println("PPP Stopped"); break;
|
||||
|
||||
case ARDUINO_EVENT_WIFI_AP_START:
|
||||
Serial.println("AP Started");
|
||||
Serial.println(WiFi.AP);
|
||||
break;
|
||||
case ARDUINO_EVENT_WIFI_AP_STACONNECTED: Serial.println("AP STA Connected"); break;
|
||||
case ARDUINO_EVENT_WIFI_AP_STADISCONNECTED: Serial.println("AP STA Disconnected"); break;
|
||||
case ARDUINO_EVENT_WIFI_AP_STAIPASSIGNED:
|
||||
Serial.print("AP STA IP Assigned: ");
|
||||
Serial.println(IPAddress(info.wifi_ap_staipassigned.ip.addr));
|
||||
break;
|
||||
case ARDUINO_EVENT_WIFI_AP_PROBEREQRECVED: Serial.println("AP Probe Request Received"); break;
|
||||
case ARDUINO_EVENT_WIFI_AP_STOP: Serial.println("AP Stopped"); break;
|
||||
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
5
libraries/PPP/examples/PPP_WIFI_BRIDGE/ci.json
Normal file
5
libraries/PPP/examples/PPP_WIFI_BRIDGE/ci.json
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"targets": {
|
||||
"esp32h2": false
|
||||
}
|
||||
}
|
||||
68
libraries/WiFi/examples/WiFiExtender/WiFiExtender.ino
Normal file
68
libraries/WiFi/examples/WiFiExtender/WiFiExtender.ino
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
#include <WiFi.h>
|
||||
|
||||
#define STA_SSID "YOUR-SSID"
|
||||
#define STA_PASS "YOUR-PASS"
|
||||
|
||||
#define AP_SSID "ESP32-WIFI-EXTENDER"
|
||||
#define AP_PASS "password"
|
||||
|
||||
IPAddress ap_ip(192, 168, 4, 1);
|
||||
IPAddress ap_mask(255, 255, 255, 0);
|
||||
IPAddress ap_leaseStart(192, 168, 4, 2);
|
||||
IPAddress ap_dns(8, 8, 4, 4);
|
||||
|
||||
void setup() {
|
||||
Serial.begin(115200);
|
||||
Serial.setDebugOutput(true);
|
||||
Network.onEvent(onEvent);
|
||||
|
||||
WiFi.AP.begin();
|
||||
WiFi.AP.config(ap_ip, ap_ip, ap_mask, ap_leaseStart, ap_dns);
|
||||
WiFi.AP.create(AP_SSID, AP_PASS);
|
||||
if (!WiFi.AP.waitStatusBits(ESP_NETIF_STARTED_BIT, 1000)) {
|
||||
Serial.println("Failed to start AP!");
|
||||
return;
|
||||
}
|
||||
|
||||
WiFi.begin(STA_SSID, STA_PASS);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
delay(20000);
|
||||
}
|
||||
|
||||
void onEvent(arduino_event_id_t event, arduino_event_info_t info) {
|
||||
switch (event) {
|
||||
case ARDUINO_EVENT_WIFI_STA_START: Serial.println("STA Started"); break;
|
||||
case ARDUINO_EVENT_WIFI_STA_CONNECTED: Serial.println("STA Connected"); break;
|
||||
case ARDUINO_EVENT_WIFI_STA_GOT_IP:
|
||||
Serial.println("STA Got IP");
|
||||
Serial.println(WiFi.STA);
|
||||
WiFi.AP.enableNAPT(true);
|
||||
break;
|
||||
case ARDUINO_EVENT_WIFI_STA_LOST_IP:
|
||||
Serial.println("STA Lost IP");
|
||||
WiFi.AP.enableNAPT(false);
|
||||
break;
|
||||
case ARDUINO_EVENT_WIFI_STA_DISCONNECTED:
|
||||
Serial.println("STA Disconnected");
|
||||
WiFi.AP.enableNAPT(false);
|
||||
break;
|
||||
case ARDUINO_EVENT_WIFI_STA_STOP: Serial.println("STA Stopped"); break;
|
||||
|
||||
case ARDUINO_EVENT_WIFI_AP_START:
|
||||
Serial.println("AP Started");
|
||||
Serial.println(WiFi.AP);
|
||||
break;
|
||||
case ARDUINO_EVENT_WIFI_AP_STACONNECTED: Serial.println("AP STA Connected"); break;
|
||||
case ARDUINO_EVENT_WIFI_AP_STADISCONNECTED: Serial.println("AP STA Disconnected"); break;
|
||||
case ARDUINO_EVENT_WIFI_AP_STAIPASSIGNED:
|
||||
Serial.print("AP STA IP Assigned: ");
|
||||
Serial.println(IPAddress(info.wifi_ap_staipassigned.ip.addr));
|
||||
break;
|
||||
case ARDUINO_EVENT_WIFI_AP_PROBEREQRECVED: Serial.println("AP Probe Request Received"); break;
|
||||
case ARDUINO_EVENT_WIFI_AP_STOP: Serial.println("AP Stopped"); break;
|
||||
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
5
libraries/WiFi/examples/WiFiExtender/ci.json
Normal file
5
libraries/WiFi/examples/WiFiExtender/ci.json
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"targets": {
|
||||
"esp32h2": false
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue