Skip to content

Commit

Permalink
Merge pull request #395 from andreagilardoni/ping
Browse files Browse the repository at this point in the history
Add WiFi.ping()
  • Loading branch information
pennam authored Nov 27, 2024
2 parents 9006eab + 3a81b22 commit 9f0dc38
Show file tree
Hide file tree
Showing 5 changed files with 161 additions and 0 deletions.
119 changes: 119 additions & 0 deletions libraries/WiFiS3/examples/WiFiPing/WiFiPing.ino
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
/*
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 at least version 0.5.0 of USB Wifi bridge firmware 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.");
// 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 1
int res = WiFi.ping(remote_ip);

if (res > 0) {
Serial.print("Ping response time: ");
Serial.print(res);
Serial.println(" ms");
}
else {
Serial.println("Timeout on IP!");
Serial.println("Make sure your WiFi firmware version is greater than 0.5.0");
}

// Ping Host
const char* remote_host = "www.google.com";
Serial.print("Trying to ping host: ");
Serial.println(remote_host);

// setting ttl to 128 and ping count to 10
int res1 = WiFi.ping(remote_host, 128, 10);

if (res1 > 0) {
Serial.print("Ping average response time: ");
Serial.print(res1);
Serial.println(" ms");
}
else {
Serial.println("Timeout on host!");
Serial.println("Make sure your WiFi firmware version is greater than 0.5.0");
}

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");
}
2 changes: 2 additions & 0 deletions libraries/WiFiS3/examples/WiFiPing/arduino_secrets.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
#define SECRET_SSID ""
#define SECRET_PASS ""
27 changes: 27 additions & 0 deletions libraries/WiFiS3/src/WiFi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -561,6 +561,33 @@ void CWifi::setTimeout(unsigned long timeout) {
_timeout = timeout;
}

/* -------------------------------------------------------------------------- */
int CWifi::ping(IPAddress ip, uint8_t ttl, uint8_t count) {
/* -------------------------------------------------------------------------- */
return ping(ip.toString().c_str(), ttl, count);
}

/* -------------------------------------------------------------------------- */
int CWifi::ping(const String &hostname, uint8_t ttl, uint8_t count)
/* -------------------------------------------------------------------------- */
{
return ping(hostname.c_str(), ttl);
}

/* -------------------------------------------------------------------------- */
int CWifi::ping(const char* host, uint8_t ttl, uint8_t count) {
/* -------------------------------------------------------------------------- */
int ret = WL_PING_ERROR;
modem.begin();
/* ping timeout is 1s and interval another 1s */
modem.timeout((count * 2000) + MODEM_TIMEOUT);
string res = "";
if (modem.write(string(PROMPT(_PING)), res, "%s,%s,%d,%d\r\n", CMD_WRITE(_PING), host, ttl, count)) {
ret = atoi(res.c_str());
}
modem.timeout(MODEM_TIMEOUT);
return ret;
}

CWifi WiFi;

6 changes: 6 additions & 0 deletions libraries/WiFiS3/src/WiFi.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,12 @@ class CWifi {
*/
static const char* firmwareVersion();

/*
* PING
*/
int ping(IPAddress ip, uint8_t ttl = 128, uint8_t count = 1);
int ping(const String &hostname, uint8_t ttl = 128, uint8_t count = 1);
int ping(const char* host, uint8_t ttl = 128, uint8_t count = 1);

/*
* Start WiFi connection for OPEN networks
Expand Down
7 changes: 7 additions & 0 deletions libraries/WiFiS3/src/WiFiTypes.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,11 @@ enum wl_enc_type {
ENC_TYPE_UNKNOWN = 255
};

typedef enum {
WL_PING_DEST_UNREACHABLE = -1,
WL_PING_TIMEOUT = -2,
WL_PING_UNKNOWN_HOST = -3,
WL_PING_ERROR = -4
} wl_ping_result_t;

#endif

0 comments on commit 9f0dc38

Please sign in to comment.