B4R Question ESP8266 RSSI for particular AP

BertI

Member
Licensed User
Anyone know if there is a way to get the RSSI value for a given link between the ESP8266 and some access point to which it is connected without having to do a whole network scan process? For example to be able to regularly check the connection strength to the router in a non onerous way
 

BertI

Member
Licensed User
Indeed, but this just mentions using full network scan (as I understand it) which takes quite a bit of time. Just wondered if there was some way to get the RSSI level only of the network currently connected to a bit more neatly and less power consuming
 

thetahsk

Active Member
Licensed User

BertI

Member
Licensed User
Thank you for that pointer.

So for anyone else who bumbles through these things like myself, the following looks to do the job:

B4X:
#if C
void GetRSSI (B4R::Object* o) {
b4r_main::_rssi = WiFi.RSSI();
}
#End if

Where you first declare a variable to collect the RSSI value:

B4X:
Private RSSI as Int
and then

B4X:
RunNative("GetRSSI", Null)
will get the RSSI value as a -dB value into the variable RSSI
 

BertI

Member
Licensed User
Yes that's a good point. I tried it without being connected and got a value back of 31 (that's plus 31) so I guess also an indicator in itself that you are not connected - though it was just one test so can't assume, without knowing the underlying detail, that this is a reliable alternative to checking if connected first.
 

thetahsk

Active Member
Licensed User
Yes that's a good point.....
Convert this code snippet from above to B4R and check the return value against -1

B4X:
/*
   Return the quality (Received Signal Strength Indicator)
   of the WiFi network.
   Returns a number between 0 and 100 if WiFi is connected.
   Returns -1 if WiFi is disconnected.
*/
int getQuality() {
  if (WiFi.status() != WL_CONNECTED)
    return -1;
  int dBm = WiFi.RSSI();
  if (dBm <= -100)
    return 0;
  if (dBm >= -50)
    return 100;
  return 2 * (dBm + 100);
}
 
Top