ESP8266 wifi modül kullanımı
Son günlerde ağırlıklı olarak arduino platformunda IoT temelli geliştirmeler yapmaya çalışıyorum. Tasarlamaya çalıştığım yapı genel olarak düşük güç ile çalışan sıcaklık, nem ve ışıklılık seviyesi gibi bilgileri wi-fi üzerinden bir merkezi birime ileten mobil bir birim. Bu mobil birimi denetleyen ve yöneten merkezi bir istasyon ve bu merkezi istasyonun konuştuğu bir WEB servis. Merkezi istasyonu RaspberryPI platformu üzerine kurdum. Çünkü burada java ile daha esnek ve arduino platformuna göre daha gelişkin yapılar adapte ediyorum. Zaten merkezi bir birim olduğu için de güç beslemesi kablo ile olacak ve düşük güç tüketimi ihtiyacı bulunmuyor. WEB servis ise java ile geliştirilmiş genel olarak merkezi istasyonun iletişim halinde olduğu, merkezi istasyon verilerinin MySQL veritabanına bu WEB servisler yardımıyla işlendiği, kullanıcı ayarlarının tutulduğu bir arayüz işlevini görmekte. Son olarak ise tüm bu sistemin kullanıcı yönetiminin sağlandığı bir android yazılımı. Bu bahsetmiş olduğum yapı şuan kullanılabilir durumda ve bu yapı yardımıyla kendi evimdeki kombi cihazını ev sıcaklığına göre (Günlük program, haftalık program, anlık sıcaklık kontrolü…) kontrol edebiliyorum. Ev sıcaklığının istediğim sıcaklıkta sabit kalmasını sağlayabiliyorum ve istediğim sıcaklığa geldiğinde kombimin gereksiz yakıt tüketmesini engelleyebiliyorum. Günlük ve haftalık programlar sayesinde evde olmadığım zamanlar otomatik olarak ev sıcaklığım 19-20 derecelere iniyor, evde olduğum zamanlarda ise 22-23 derecelere çıkıyor. Bu kararları android yazılımı ile belirtilen değerlere uygun olarak merkezi birim veriyor ve uyguluyor.
Bu yazıda ise asıl odaklanmak istediğim konu Espressif‘in üretmiş olduğu ESP8266 wi-fi modülü. Bu modül piyasada özellikle maliyetinin çok az olması ve projelere kolay implemente edilebiliyor olması ile ünlü. Benim için de seçim nedeni bu oldu açıkçası. Oldukça fazla zigbee, z-wave ve wi-fi modülü inceledim. Fakat birçoğunun maliyeti oldukça yüksekti, bir kısmı ise kolay temin edilebilir değildi. ESP8266 ise piyasada 20 TL etrafında değişen fiyatlara bulunabilir bir modül. İlk olarak ESP8266-01 ile başladım test çalışmalarıma fakat bir süre sonra gördüm ki bu donanım 3.3 v ile beslenmesine rağmen gerilim dalgalanmalarına aşırı duyarlı ve tabiki zamanında üretilen ilk versiyon olmasının vermiş olduğu bazı bug’ları var. Çoğu zaman firmware güncellemesi yapmak gerekiyor ve stabil bir şekilde çalışmıyor yük altında. ESP8266-01 deneyimim sonrası ESP8266-12’ye yöneldim. Bu platform ile daha önce karşılaştığım birçok stabil olmayan durumun hiçbirisi ile karşılaşmadım. Sonuç olarak da yapmaya çalıştığım nihayi üründe bu modülü kullanmaya karar verdim.
ESP8266, seri port üzerinden belirli birkaç baud rate oranında AT command yapısı ile kontrol edilebilen bir wi-fi chip. 115.200 baud oranlarına kadar desteği var ve sorunsuz olarak cevap verebiliyor. Arduino üzerindeki donanımsal ya da yazılımsal seri port yardımıyla kolayca kontrol edilebiliyor. Yalnız şunu unutmamak gerekir ki yazılımsal seri port kullanıldığında çok yüksek baud oranlarına çıkılamıyor ve seri haberleşmede problemler olabiliyor ama bu durum ESP8266 ile ilgili bir durum değil. Yaptığım testlerde yazılımsal seri port üzerinden en fazla 9600 baud oranlarında sağlıklı bir haberleşme yapılabildiğini gördüm. ESP8266’nın desteklediği AT komut listesine buradaki linkten ulaşabilirsiniz.
ESP8266’nın donanımsal olarak minimum ve önerilen bağlantı şemasına ise sağdaki gibi ulaşabilirsiniz. Donanım konusundaki en önemli nokta ESP8266’nın 3.3v ile çalışıyor olması. Modülü bu gerilimden daha fazla bir gerilimle besleyecek olursanız chip çok yüksek olasılıkla zarar görecektir. Bir diğer önemli nokta da ESP8266’nın RX bacağının giriş gerilim seviyesi. Bu pin için de gerilim mutlaka 3.3 seviyesinde olmalı. Eğer 5v çıkış veren bir yapı ile bu pini kullanarak haberleşmek istiyorsanız şekildeki gibi 2K ve 1K direnç içeren basit bir gerilim bölücü devre kullanabilirsiniz. Yüksek ve düşük seviyeye çekilmek istenen tüm pin’ler akım çekmemesi için yüksek direnç değerleri üzerinden istenilen seviyelere çekilmelidir.
- REST pini, normal şartlar altında mutlaka 10K kadar bir direnç üzerinden high (yüksek) seviyede tutulmalıdır. Eğer RST pini low (düşük) seviyeye çekilecek olursa modül resetlenecektir. Eğer o ana kadar AT komut seti ile göndermiş olduğunu bir konfigürasyon varsa reset sonrası temizlenir ve cihaz ilk ayarlarına geri döner.
- CH_PD (Chip power-down) pini, yüksek seviyede ise modül cevap verebilir durumdadır. Modül’ün kullanılabilmesi ve modül iletişim kurulabilmesi için bu pin mutlaka yüksek seviyeye çekilmelidir. Bu pin de yine 10K’lık bir direnç üzerinden yüksek seviyeye çekilebilir.
- GPIO0 pini, 10K gibi bir direnç üzerinden yüksek seviyede tutulduğunda modül normal akışına uygun olarak cevap verecektir. Eğer bu pin düşük seviyeye çekilecek olursa modül programlama moduna geçer.
- GPIO15 pini, 10K gibi bir direnç üzerinden düşük seviyede tutulmalıdır. GPIO0 ile birlikte boot aşamasındaki davranışın yönetilmesi için kullanılmaktadır.
- GND pini, düşük seviye olan toprak bağlantısıdır.
- VCC pini, yüksek seviye olan modül gerilim besleme bağlantısıdır. Bu pin 3.3v çıkış veren stabil bir gerilim kaynağı ile beslenmelidir. VCC ve GND arasına 100nF’lık bir kapasite bağlanması gerilim kaynağındaki dalgalanmalara ve gerilim düşmelerine karşı modülü koruyacaktır.
- RX pini, yukarıda da bahsettiğim gibi bir gerilim bölücü üzerinden max 3.3v ile beslenmelidir. Gerilim bölücü üzerinden alınan bacak ise modülün bağlı olduğu seri portta TX pinine bağlanmalıdır.
- TX pini, modülün bağlı olduğu seri portta RX pinine bağlı olmalıdır. Bu pin doğrudan seri porttaki RX pinine bağlanabilir.
Edit – 2017-03-07 09:05:17 :
Çalışan ürün ile ilgili birkaç da foto eklemek istedim, aşağıdaki gibi;