diff --git a/libraries/WiFi/src/WiFiSTA.cpp b/libraries/WiFi/src/WiFiSTA.cpp
index b2ae6a28a94..e3f033c0165 100644
--- a/libraries/WiFi/src/WiFiSTA.cpp
+++ b/libraries/WiFi/src/WiFiSTA.cpp
@@ -716,14 +716,23 @@ String WiFiSTAClass::psk() const
  * Return the current bssid / mac associated with the network if configured
  * @return bssid uint8_t *
  */
-uint8_t* WiFiSTAClass::BSSID(void)
+uint8_t* WiFiSTAClass::BSSID(uint8_t* buff)
 {
     static uint8_t bssid[6];
     wifi_ap_record_t info;
     if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){
         return NULL;
     }
-    if(!esp_wifi_sta_get_ap_info(&info)) {
+    esp_err_t err = esp_wifi_sta_get_ap_info(&info);
+    if (buff != NULL) {
+        if(err) {
+          memset(buff, 0, 6);
+        } else {
+          memcpy(buff, info.bssid, 6);
+        }
+        return  buff;
+    }
+    if(!err) {
         memcpy(bssid, info.bssid, 6);
         return reinterpret_cast<uint8_t*>(bssid);
     }
diff --git a/libraries/WiFi/src/WiFiSTA.h b/libraries/WiFi/src/WiFiSTA.h
index 0b8f9daf053..6f65f6ff7e1 100644
--- a/libraries/WiFi/src/WiFiSTA.h
+++ b/libraries/WiFi/src/WiFiSTA.h
@@ -98,7 +98,7 @@ class WiFiSTAClass
     String SSID() const;
     String psk() const;
 
-    uint8_t * BSSID();
+    uint8_t * BSSID(uint8_t* bssid = NULL);
     String BSSIDstr();
 
     int8_t RSSI();
diff --git a/libraries/WiFi/src/WiFiScan.cpp b/libraries/WiFi/src/WiFiScan.cpp
index f4a32e49a6b..37e86a198df 100644
--- a/libraries/WiFi/src/WiFiScan.cpp
+++ b/libraries/WiFi/src/WiFiScan.cpp
@@ -243,11 +243,20 @@ int32_t WiFiScanClass::RSSI(uint8_t i)
 /**
  * return MAC / BSSID of scanned wifi
  * @param i specify from which network item want to get the information
+ * @param buff optional buffer for the result uint8_t array with length 6
  * @return uint8_t * MAC / BSSID of scanned wifi
  */
-uint8_t * WiFiScanClass::BSSID(uint8_t i)
+uint8_t * WiFiScanClass::BSSID(uint8_t i, uint8_t* buff)
 {
     wifi_ap_record_t* it = reinterpret_cast<wifi_ap_record_t*>(_getScanInfoByIndex(i));
+    if(buff != NULL) {
+        if(!it) {
+            memset(buff, 0, 6);
+        } else {
+            memcpy(buff, it->bssid, 6);
+        }
+        return buff;
+    }
     if(!it) {
         return 0;
     }
diff --git a/libraries/WiFi/src/WiFiScan.h b/libraries/WiFi/src/WiFiScan.h
index b838dc17574..ec3ee155e7e 100644
--- a/libraries/WiFi/src/WiFiScan.h
+++ b/libraries/WiFi/src/WiFiScan.h
@@ -42,7 +42,7 @@ class WiFiScanClass
     String SSID(uint8_t networkItem);
     wifi_auth_mode_t encryptionType(uint8_t networkItem);
     int32_t RSSI(uint8_t networkItem);
-    uint8_t * BSSID(uint8_t networkItem);
+    uint8_t * BSSID(uint8_t networkItem, uint8_t* bssid = NULL);
     String BSSIDstr(uint8_t networkItem);
     int32_t channel(uint8_t networkItem);
     static void * getScanInfoByIndex(int i) { return _getScanInfoByIndex(i); };