NodeMCU, ESP8266-12 versiyonunu kullanan ve nesnelerin programlanmasını sanırım olabilecek en kolay hale getiren bir mikroişlemci. Hakkında pek çok kaynak var o yüzden fazla açıklama yapmayacağım ve direk uygulamaya geçeceğim. Zaten 8266-01'de olduğu gibi programlayıcı yapmamıza gerek yok çünkü NodeMCU'nun kendi üzerinde USB girişi zaten bulunuyor tek yapmak gereken programı yazıp mikroişlemciye yüklemek.
Bu yazıda Arduino IDE'nin, NodeMCU'yu programlayabilecek ayarlarının yapılmış olduğunu varsayıyorum. Eğer değilse http://cuneyt.aliustaoglu.biz/tr/esp8266webserver-kullanarak-kolay-yolla-web-sunucusu-kurmak/ adresinden "Arduino IDE" kısmına giderek ayarların nasıl yapılacağına bakabilirsiniz.
Gerekli donanımlar:
- NodeMCU ESP8266-12E
- 128x64 0.96 Inch OLED
Gerekli kütüphaneler yüklendikten sonra NodeMCU ile web sunucusu kurulumu da OLED ekranına yazdırmak da oldukça kolay.
Bağlantı Şeması:
ESP8266 | OLED |
---|---|
G | GND |
3V | VCC |
D1 | SDA |
D2 | SCL |
Kullanacağımız kütüphaneler:
- ESP8266WebServer.h
- SD1306.h
Kodu olabildiğince sade tutmaya çalıştım. İki tane ana işlem var. İlki modülü internete bağlamak, ikincisi ise NodeMCU ile OLED ekranına yazı yazdırmak. Bunları yaptıktan sonra; bu işlemleri birleştirecek, birbiriyle etkileşime sokacak mantığı kurmak gerekiyor.
Kodu biraz açıklayalım. Kod ve bağlantı şemasına ilk baktığımızda bir şeyler yanlış gibi duruyor:
SSD1306 display(0x3c, 5, 4);
Bağlantı şemasında OLED'in girişlerini NodeMCU'nun D1, D2 bacaklarına bağladık ama neden display(0x3x,1,2)
değil de display(0x3x,5,4)
şeklinde kullanma ihtiyacı duyduk. NodeMCU, ESP-8266 tabanlı bir geliştirme kiti. Ayak bağlantıları ESP ile birebir eşleşmiyor. IO1-D1, IO2-D2 şeklinde bir eşleşme bekliyoruz ancak durum bu şekilde değil. Kullandığımız kütüphane NodeMCU'nun ayaklarına göre değil de ESP8266'nın ayaklarına göre düzenlenmiş. Bu düzem şu şekilde:
static const uint8_t D0 = 16;
static const uint8_t D1 = 5;
static const uint8_t D2 = 4;
static const uint8_t D3 = 0;
static const uint8_t D4 = 2;
static const uint8_t D5 = 14;
static const uint8_t D6 = 12;
static const uint8_t D7 = 13;
static const uint8_t D8 = 15;
static const uint8_t D9 = 3;
static const uint8_t D10 = 1;
Yani OLED'i D1, D2'ye değil de D4, D5'e bağlamak isteseydik display(0x3x,2,14)
şeklinde bir atama yapmamız gerekecekti.
display.flipScreenVertically();
Bir tek bana mı öyle geliyor ama OLED ekranına varsayılan ayarlarla yazdırdığınızda yazılar ters basılıyor. Bana göre ekranın üst kısmı pinlerin bulunduğu kısım. O yüzden flip komutuyla ekranın üst kısmını istediğim şekilde ayarladım burada.
void mesajYaz(String message)
Burası gönderilen mesajı ekrana basan fonksiyon.
WiFi.begin(ssid, password);
server.on("/", ana_sayfa);
server.begin()
kısımlarıyla ise kablosuz ağa bağlanıyor ve ufak bir web sunucusu oluşturuyoruz. Bu sunucumuzun tek bir route'ı var ve kullanıcı bu route'a eriştiğinde ilgili fonksiyonu devreye sokuyoruz. İlgili fonksiyon "mesaj" querystring'ini okuyor ve OLED ekranına bastırıyor.
Denememizi yapalım. İlk önce ağa bağlanan mikroişlemcinin IP adresini bir şekilde edinmemiz gerekiyor. Bunun için Arduino'nun "Serial Monitor" aracını kullanabilir ya da "Advanced Port Scanner" gibi uygulamalarla arama yapabiliriz. Bende 192.168.1.65 adresine bağlandı. Sizde daha farklı bir adres olabilir. Bundan sonra ekran üzerindeki mesajı değiştirmek için tek yapmamız gereken aşağıdaki GET isteğini göndermek ya da tarayıcının adres çubuğuna yazmak.
http://192.168.1.65/?mesaj=iyi günler
Burada NodeMCU'ya yerel ağ üzerinden eriştik. Ancak router'ınıza gerekli ayarları yaparak evinizdeki OLED'e iş yerinde iken mesaj gönderebilirsiniz. Hatta chat uygulaması bile yapabilirsiniz. Bu ayarların nasıl yapılacağını Orange PI için anlatmıştım. Ancak Orange PI ya da ESP fark etmez ayarlar aynı. Aşağıdaki linkten bu ayarların nasıl yapıldığına bakabilirsiniz.
http://cuneyt.aliustaoglu.biz/tr/orange-pi-zero-kurulumu-ve-dinamik-dns-ile-dunyaya-acilmak/