Merhaba!

Bugün Nodemcu’da etrafımızdaki Wi-Fi ağlarına bakıyoruz. Kaç tane ağın var olduğunu, ağların gösterimlerini ve ağların çekim güçlerini gözlemleyeceğiz.

Haydi başlayalım!

Artık konsepti değiştiriyorum ve ilk önce ana kodu verip, daha sonra koddaki satırları teker teker açıklayacağım.

#include "ESP8266WiFi.h"

void setup() 
{
  Serial.begin(115200);
  WiFi.mode(WIFI_STA);
  WiFi.disconnect();
  Serial.println("Kurulum bitti.");
}

void loop() 
{
  int WiFiSayac = WiFi.scanNetworks();
 
  if(WiFiSayac == 0)
  {
    Serial.println("Wi-Fi agi bulunamadi.");
  }
  
  else
  {
    Serial.print(WiFiSayac);
    Serial.println(" tane Wi-Fi agi bulundu.");
    Serial.println("------------------------------");
    
    for(int x = 1; x < WiFiSayac; x++)
    {
      Serial.print(x);
      Serial.print(": ");
      Serial.print(WiFi.SSID(x));
      Serial.print(" (%");
      Serial.print(WiFi.RSSI(x));
      Serial.println(")");
    }
	
    Serial.println("");
  }
  
  delay(100);
}


 

Tüm kod satırlarını açıklayalım:

#include <ESP8266WiFi.h>

#include: Dahil etmek, aktarmak demektir. Nodemcu’ya Wi-Fi özelliğini kazandırmak için <ESP8266WiFi.h> kütüphanesini Nodemcu’ya dahil ediyoruz.

Kullanımı ise şu şekilde olacaktır:

#include <Kütüphaneİsmi.h>   veya   #include "Kütüphaneİsmi.h" şeklinde olacaktır.


Kütüphanemizi ekledikten sonra setup() kısmındaki yazılıma geçelim.

İlk önce Nodemcu’nun internete bağlandığını anlamamız için Seri haberleşme ekranını başlatmamız gerekiyor. Seri haberleşme ekranını başlatmak için şu kodu yazalım:

Serial.begin(115200);


WiFi.mode(WIFI_STA);

Wi-Fi mode kavramını İnternet dünyasında araştırırsanız, aşağı-yukarı aynı sonuçları bulacaksınız. Bir çok mod vardır, bu kodumuzda “STA” modunu kullanıyoruz.

STA: “STAtion” yani “İstasyon” kavramına karşılık bulmaktadır. Kısacası STA = İnternet bağlantısı sağlamak için, oluşturulan bir alt bağlantı parçasıdır.

Wi-Fi modları hakkında daha fazla bilgi isterseniz, şu siteyi ziyaret edebilirsiniz. Bende bu kısmı yazarken oradan yararlandım.


WiFi.disconnect();

Eğer Nodemcu önceden bir ağa bağlanmışsa, bu bağlantıyı koparmamız gerekiyor. Bu kodu yazmamızın sebebi aslında bi nevi önlem almaktır.


Serial.println("Kurulum Bitti.");

Eğer bu kısım seri haberleşme ekranında gözükürse, kurulum dediğimiz Wi-Fi modunun başarıyla çalıştığını ve aktive edildiğini anlayabiliriz. Bu kısmı ekleyemeyebilirdik, fakat mod ayarlama sırasında herhangi bir hata olduğu takdirde, yani ekrana bir çıktı vermezse, bu Wi-Fi modunun maalesef çalışmadığını ve aktive edilmediğini söyleyecektir.


WiFi.scanNetworks(); fonksiyonu ile etraftaki Wi-Fi sayısının toplamını alıyoruz. Bu sayıyı aldıktan sonra bir sayısal değişkene aktarıyoruz. Bu değişkenin ismi ise WiFiSayac olacaktır. Fark ettiyseniz; değişkenin veri tipi sayısal, yani “int (integer)”dir. 


if(WiFiSayac == 0)
{
  Serial.println("Wi-Fi agi bulunamadi.");
}

Bu kısımda ise etrafta hiçbir ağ bulamamış veya etraftaki ağ miktarı 0’a eşit ise, seri port ekranına “Wi-Fi agi bulunamadi.” yazacaktır. Bu durumda etrafta hiçbir ağ bulunmadığını, modülünüzün bozuk olduğunu veya seri port hızınızın (baudrate) uyumlu olmadığını anlayabilirsiniz.


  else
  {
    Serial.print(WiFiSayac);
    Serial.println(" tane Wi-Fi agi bulundu.");
    Serial.println("------------------------------");
  }

Bu kısımda eğer Wi-Fi ağı bulunmuş ise, kaç adet bulunduğunu gösterip, en alt kısmına “—-” yazıp sonlandıracaktır. Örneğin “3 tane Wi-Fi agi bulundu.” yazacaktır. Buradaki sayısal bilgi (3)   WiFi.scanNetworks(); fonksiyonundan bilgi alır.


    for(int x = 1; x < WiFiSayac; x++)
    {
      Serial.print(x);
      Serial.print(": ");
      Serial.print(WiFi.SSID(x));
      Serial.print(" (%");
      Serial.print(WiFi.RSSI(x));
      Serial.println(")");
    }
    Serial.println("");
  }
  delay(100);
}

Galiba en önemli kısım burası. Dikkatli okumanızda fayda var, olabildiğince açık anlatmaya çalışacağım;

İlk olarak bu kısmın genel olarak ne yaptığını anlatayım.  Wi-Fi isimlerini ve çekim güçlerini sırasıyla yazdıran bir döngüdür. Döngünün sınırını “WiFiSayac” adlı değişken belirliyor. Yani etrafta toplam kaç adet Wi-Fi ağı çekiyorsa, o kadar döngü dönüyor ve ekrana WiFiSayac değişkenin miktarı kadar, WiFi isimleri geliyor.

Evet, şimdi biraz daha detaya inelim.

Bu kısma girmeden önce, belirtmem gereken önemli bir nokta var. WiFiSayac değişkeni, etraftaki ağların toplam sayısını verdiği durumda, nasıl teker teker yazdırma söz konusu olur? İşte bu sorunun cevabı “indisleme” mantığı ile çalışmasıdır.

Fotoğrafta gördüğünüz üzere toplam 4 adet Wi-Fi ağı bulunmuş. WiFi.SSID()  ve  WiFi.RSSI() fonksiyonları  WİFi.scanNetworks()  fonksiyonu ile arka planda beraber çalışmaktadır. Bu çalışma sonucu toplam ağ sayısı teker teker yazdırılırken, indisleme mantığı ile kayıt edilir. Yani ağlar çekim güçlerine yada adına göre sıralanır. Bu sıralanış teker teker  WiFi.SSID()  ve  WiFi.RSSI() kısmına kayıt olur. Bize düşen  WiFi.SSID()  ve  WiFi.RSSI() kısmındaki paranteze hangi ağı seçeceksek onun indis numarasına yazıp, çağırmak olacaktır. En son yazılacak olan hiçbir ağ kalmayınca, yazılmış olan ağların toplamı WİFi.scanNetworks()  ağına kayıt edilir. İşte indisleme mantığı bu ve belirli fonksiyonlarda, programlarda bunu kullanıyoruz. Bilmemizde fayda var.

  • İlk önce sayısal türünde bir “x” değişkeni oluşturup, değerini sıfır yapıyoruz. Bu “x” değişkenini, döngünün sayımınında kullanacağız.
  • “x” değeri < WiFiSayac değerinden küçükse, döngünün içerisine değilse; döngüye girmeyecektir.
  • “x” değeri < WiFiSayac değerinden küçük olduğunu varsayarsak, döngünün içerisine başarıyla giriş yapacaktır.
  • Döngüye giriş yaptıktan sonra, direkt olarak ekrana “x: ” yazacaktır.
  • Hemen yanına WiFi.SSID(x) fonksiyonuna yazacaktır. Yani; Wi-Fi ağının adı yazacaktır.
    • Örneğin; “1: R2D2” gibi.
  • Bu kısmın yanına ise, sol taraftaki ağ adına ait Wi-Fi ağının çekim gücü yazılacaktır.
    • Örneğin; “(%85)” gibi.
  • 4, 6 ve 8’inci satırlarda ise tamamen görsellik sunmak için yaptım. Eğer onları eklemeseydim, “1WiFiAdiWiFiCekimGücü” şeklinde gözükecekti. Ama birazcık düzeltme ile “1: WiFiAdi (%WiFiCekimGücü)” şeklinde gözüküyor.
  • 10.satırda ise boşluk bıraktım. Her seferinde Wi-Fi ağı yenileceği ve değişeceği için peş peşe olmasın, arada boşluk bırakalım diye ekledim.
  • 12.satırda ise, Wi-Fi ağlarını gösterdikten sonra belirli bir gecikme süresi koyuyoruz. Bu gecikme süresi sayesinde bir nebze olsun hiçbir şey yapmadan beklemesini sağlıyoruz. Bu süre bittikten sonra ise, tekrar görevini icra edecektir.
  • Bu işlemler bittikten sonra döngüyü tekrar kontrol edecek ve şart sağlanırsa, yine ekrana Wi-Fi ağ adını, çekim güçlerini ve toplamlarını listeleyecek.

Paylaşmayı ve merak ettiğiniz yerleri sormayı unutmayın. Bir sonraki blogda görüşmek üzere! 🙃 ❤️