From 3cad13b24b961ce63a9e1a69ca5fa90a91707143 Mon Sep 17 00:00:00 2001 From: paulvha Date: Fri, 16 Feb 2024 17:51:58 +0100 Subject: [PATCH 1/2] add ping --- .../WiFiS3/examples/WiFiPing/WiFiPing.ino | 124 ++++++++++++++++++ .../examples/WiFiPing/arduino_secrets.h | 2 + libraries/WiFiS3/src/WiFi.cpp | 24 ++++ libraries/WiFiS3/src/WiFi.h | 5 + 4 files changed, 155 insertions(+) create mode 100755 libraries/WiFiS3/examples/WiFiPing/WiFiPing.ino create mode 100755 libraries/WiFiS3/examples/WiFiPing/arduino_secrets.h diff --git a/libraries/WiFiS3/examples/WiFiPing/WiFiPing.ino b/libraries/WiFiS3/examples/WiFiPing/WiFiPing.ino new file mode 100755 index 000000000..6aa00e6da --- /dev/null +++ b/libraries/WiFiS3/examples/WiFiPing/WiFiPing.ino @@ -0,0 +1,124 @@ +/* + Web ICMP Ping + + This sketch pings a device based on the IP address or the hostname + using the WiFi module. By default the attempt is performed 5 times, but can + be changed to max. 255 + + It requires the latest USB Wifi bridge firmware level and WiFiS3 library. + + This example is written for a network using WPA encryption. For + WEP or WPA, change the WiFi.begin() call accordingly. + + created 14 February 2024 + by paulvha + + */ + +#include "WiFiS3.h" +#include "arduino_secrets.h" + +///////please enter your sensitive data in the Secret tab/arduino_secrets.h +char ssid[] = SECRET_SSID; // your network SSID (name) +char pass[] = SECRET_PASS; // your network password (use for WPA, or use as key for WEP) +int keyIndex = 0; // your network key index number (needed only for WEP) + +int status = WL_IDLE_STATUS; + +/* -------------------------------------------------------------------------- */ +void setup() { +/* -------------------------------------------------------------------------- */ + //Initialize serial and wait for port to open: + Serial.begin(115200); + while (!Serial) { + ; // wait for serial port to connect. Needed for native USB port only + } + + // check for the WiFi module: + if (WiFi.status() == WL_NO_MODULE) { + Serial.println("Communication with WiFi module failed. freeze !"); + // don't continue + while (true); + } + + String fv = WiFi.firmwareVersion(); + if (fv < WIFI_FIRMWARE_LATEST_VERSION) { + Serial.println("Please upgrade to the WiFi USB bridge firmware. freeze !"); + // don't continue + while (true); + } + + // attempt to connect to WiFi network: + while (status != WL_CONNECTED) { + Serial.print("Attempting to connect to SSID: "); + Serial.println(ssid); + // Connect to WPA/WPA2 network. Change this line if using open or WEP network: + status = WiFi.begin(ssid, pass); + + // wait 10 seconds for connection: + delay(10000); + } + + printWifiStatus(); +} + +/* -------------------------------------------------------------------------- */ +void loop() { +/* -------------------------------------------------------------------------- */ + + // Ping IP + const IPAddress remote_ip(140,82,121,4); + Serial.print("Trying to ping github.com on IP: "); + Serial.println(remote_ip); + + // using default ping count of 5 + float res = WiFi.ping(remote_ip); + + if (res != 0) { + Serial.print("Pin average response time: "); + Serial.print(res); + Serial.println(" ms"); + } + else { + Serial.println("Timeout on IP!"); + } + + // Ping Host + const char* remote_host = "www.google.com"; + Serial.print("Trying to ping host: "); + Serial.println(remote_host); + + // setting ping count to 10 instead of default 5 + float res1 = WiFi.ping(remote_host,10); + + if (res1 != 0) { + Serial.print("Pin average response time: "); + Serial.print(res1); + Serial.println(" ms"); + } + else { + Serial.println("Timeout on host!"); + } + + Serial.println(); + delay(1000); +} + +/* -------------------------------------------------------------------------- */ +void printWifiStatus() { +/* -------------------------------------------------------------------------- */ + // print the SSID of the network you're attached to: + Serial.print("SSID: "); + Serial.println(WiFi.SSID()); + + // print your board's IP address: + IPAddress ip = WiFi.localIP(); + Serial.print("IP Address: "); + Serial.println(ip); + + // print the received signal strength: + long rssi = WiFi.RSSI(); + Serial.print("signal strength (RSSI):"); + Serial.print(rssi); + Serial.println(" dBm"); +} diff --git a/libraries/WiFiS3/examples/WiFiPing/arduino_secrets.h b/libraries/WiFiS3/examples/WiFiPing/arduino_secrets.h new file mode 100755 index 000000000..0c9fdd556 --- /dev/null +++ b/libraries/WiFiS3/examples/WiFiPing/arduino_secrets.h @@ -0,0 +1,2 @@ +#define SECRET_SSID "" +#define SECRET_PASS "" diff --git a/libraries/WiFiS3/src/WiFi.cpp b/libraries/WiFiS3/src/WiFi.cpp index 746ed3373..b14b64a76 100644 --- a/libraries/WiFiS3/src/WiFi.cpp +++ b/libraries/WiFiS3/src/WiFi.cpp @@ -558,6 +558,30 @@ void CWifi::setTimeout(unsigned long timeout) { (void)(timeout); } +/* -------------------------------------------------------------------------- */ +float CWifi::ping(IPAddress ip, unsigned int count) { +/* -------------------------------------------------------------------------- */ + modem.begin(); + string res = ""; + + if(modem.write(string(PROMPT(_PINGIP)),res, "%s,%s,%d\r\n", CMD_WRITE(_PINGIP), ip.toString().c_str(), count )) { + String rsl = res.c_str(); + return rsl.toFloat(); + } + return 0; +} + +/* -------------------------------------------------------------------------- */ +float CWifi::ping(const char* host, unsigned int count) { +/* -------------------------------------------------------------------------- */ + modem.begin(); + string res = ""; + if (modem.write(string(PROMPT(_PINGNAME)),res, "%s,%s,%d\r\n", CMD_WRITE(_PINGNAME), host, count)) { + String rsl = res.c_str(); + return rsl.toFloat(); + } + return 0; +} CWifi WiFi; diff --git a/libraries/WiFiS3/src/WiFi.h b/libraries/WiFiS3/src/WiFi.h index 9958b7c17..e8e49339e 100644 --- a/libraries/WiFiS3/src/WiFi.h +++ b/libraries/WiFiS3/src/WiFi.h @@ -53,6 +53,11 @@ class CWifi { */ static const char* firmwareVersion(); + /* + * PING + */ + float ping(IPAddress ip, unsigned int count = 5); + float ping(const char* host, unsigned int count = 5); /* * Start WiFi connection for OPEN networks From 0484d1d45a157560795da473d4f21e516f74021e Mon Sep 17 00:00:00 2001 From: paulvha Date: Sat, 17 Feb 2024 11:16:25 +0100 Subject: [PATCH 2/2] ping2 --- libraries/WiFiS3/src/WiFi.cpp | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/libraries/WiFiS3/src/WiFi.cpp b/libraries/WiFiS3/src/WiFi.cpp index b14b64a76..09830eb48 100644 --- a/libraries/WiFiS3/src/WiFi.cpp +++ b/libraries/WiFiS3/src/WiFi.cpp @@ -561,14 +561,7 @@ void CWifi::setTimeout(unsigned long timeout) { /* -------------------------------------------------------------------------- */ float CWifi::ping(IPAddress ip, unsigned int count) { /* -------------------------------------------------------------------------- */ - modem.begin(); - string res = ""; - - if(modem.write(string(PROMPT(_PINGIP)),res, "%s,%s,%d\r\n", CMD_WRITE(_PINGIP), ip.toString().c_str(), count )) { - String rsl = res.c_str(); - return rsl.toFloat(); - } - return 0; + return ping(ip.toString().c_str(), count); } /* -------------------------------------------------------------------------- */