- Gerekli malzemeler:
- İşler nasıl?
- ESP8266-01'in programlanması:
- ESP8266-01'i Arduino ile bağlama:
- Arduino Programı ve Çalışması:
ESP8266-01, IOT projelerine olan tüm susuzluklarımızı gidermek için harika bir modül oldu. Yayınlandığı günden bu yana güçlü bir topluluk geliştirdi ve kullanımı kolay, ucuz ve güçlü bir Wi-Fi modülüne dönüştü. Çok daha popüler olan bir diğer açık kaynaklı platform Arduino'dur, zaten etrafında inşa edilmiş tonlarca proje vardır. Bu iki platformu birleştirmek, birçok yenilikçi proje için kapılar açacaktır, bu nedenle bu eğitimde ESP8266-01 modülünün Arduino ile nasıl arayüzleneceğini öğreneceğiz. Bu şekilde Arduino ve İnternet arasında veri gönderip alabileceğiz.
Bu eğitimin amacı için, ESP8266-01 ile bir API kullanarak internetten saati, tarihi, sıcaklığı ve nemi okuyacağız. Ardından bu değerleri bir Arduino kartına gönderin ve bunları 16 * 2 LCD ekranda görüntüleyin. Doğru sesler !! Öyleyse başlayalım.
Gerekli malzemeler:
- Arduino Board (Herhangi bir versiyon)
- ESP8266-01
- 3.3V seçenekli FTDI programcı kartı
- 16x2 LCD
- Potansiyometre
- Butona basınız
- Bağlantı telleri
- Breadboard
İşler nasıl?
Dalmadan önce, bu şeyin aslında nasıl çalışacağını bilmek önemlidir. Temel olarak ESP8266-01 modülüyle başlamalıyız. ESP8266'yı programlamak için Arduino IDE'yi kullanacağız ve kod, http isteği aracılığıyla bir JSON dosyasını okumak için bir API kullanmak üzere yazılacaktır. Daha sonra, bu JSON dosyasını yalnızca tam JSON dosyasından gerekli bilgileri çıkarmak için ifade edeceğiz.
Bilgiler ifade edildikten sonra, seri iletişimi kullanarak yazdıracağız. Bu seri hatlar daha sonra Arduino'ya bağlanacak, böylece Arduino ESP8266'dan gönderilen bilgileri okuyabilecektir. Bilgiler okunduktan ve işlendikten sonra bunları LCD ekranda görüntüleyeceğiz.
Tamam, eğer bunu tam olarak anlamadıysanız, sorun değil, çünkü bu eğitimin geri kalanında da aynı şeyi öğreneceğiz.
ESP8266-01'in programlanması:
Bu eğitimde, ESP8266 modülüyle ilgili biraz deneyime sahip olduğunuz varsayılmaktadır. Aksi takdirde, tamamen anlamak için aşağıdaki üç öğreticiyi okumanız önerilir.
- ESP8266-01 ile başlarken
- AT komutlarını kullanarak ESP8266-01'i programlama
- ESP8266-01'i Arduino IDE kullanarak programlama ve hafızasını flaş etme
Tüm ESP8266 projelerimizi de buradan inceleyebilirsiniz.
Burada ESP8266-01 modülünü Arduino IDE kullanarak programlayacağız. Donanım için, donanımı çok basit hale getireceği için ESP8266'yı programlamak için 3.3V'luk FTDI kartını kullanıyoruz. ESP8266'nızı FTDI kartına bağlamak için devre şeması aşağıda gösterilmiştir.
Aşağıdaki koşulların karşılandığından emin olun
1. ESP8266-01 yalnızca 3,3V toleranslıdır, 5V kullanmayın. Bu nedenle FTDI'yi yalnızca 3,3V moduna ayarlayın.
2. GPIO_0 programlama modu için topraklanmalıdır
3. Sıfırlama pimi bir düğme aracılığıyla topraklama pimine bağlanmalıdır. Kodu yüklemeden hemen önce bu düğmeye basılmalıdır. Düğmeye her basıldığında, ESP8266-01 modülündeki mavi LED, modülün sıfırlandığını göstermek için yüksek olur.
Bağlantılar yapıldıktan sonra Arduino IDE'yi açın ve örnek bir programı başarıyla yükleyip yükleyemeyeceğinizi kontrol edin. Programı ESP8266'ya yüklemek için Arduino IDE'yi nasıl kullanacağınızdan emin değilseniz, öğrenmek için ESP8266'yı Arduino ile Programlama'yı izleyin. Bu noktada, blink programını başarıyla yüklediğinizi varsayıyorum.
. Programın tamamı bu sayfanın sonunda verilmiştir. Bunları küçük parçalar halinde açıklıyorum. Program ayrıca Arduino JSON kitaplığının derlenmesini gerektirir, bu nedenle kitaplığı Arduino IDE'nize zaten eklemediyseniz, Github'dan Arduino JSON kitaplığından indirerek ekleyin.
ESP8266'nın tarih, saat, sıcaklık ve nem hakkındaki verileri almak için internete bağlanması gerekir. Bu nedenle, aşağıdaki satırlarda SSID ve Şifreyi kanıtlayarak Wi-Fi'nize bağlanmasına izin vermelisiniz.
const char * ssid = "JIO-Fi"; // Wi-Fi SSID'nizi girin const char * password = "Pas123"; // Wi-Fi Parolanızı Girin
İçinde kurulum () fonksiyonu biz ESP Wi-Fi ile bağlanmak mümkün olup olmadığını kontrol değil yazdırarak sonsuza orada bekle eğer, “Bağlama..” seri monitörde.
while (WiFi.status ()! = WL_CONNECTED) {// Wi-Fi bağlanana kadar bekleyin gecikme (1000); Serial.print ("Bağlanıyor.."); // Bağlantı kurulana kadar.. yazdırın }
Bir sonraki adım çok önemli adımdır. Wi-Fi bağlantısı başarılı olursa, JSON dosyasını internetten okumak için bir http alma isteği çağırmamız gerekir. Bu eğitimde wunderground.com tarafından sağlanan API'yi kullanıyorum. Dolayısıyla, aynısını kullanmayı planlıyorsanız, bağlantı kurabilir ve ücretsiz API anahtarı için kaydolabilir veya istediğiniz herhangi bir API'yi kullanabilirsiniz. API'nizi tamamladığınızda, aşağıdaki gibi bir bağlantıyla karşılaşacaksınız.
Not: Bu bağlantının API anahtarını değiştirdim, bu yüzden bu çalışmayacak. API anahtarınızı güvende tutun ve paylaşmayın.
Buradaki API'm Chennai'nin hava durumu verilerini almak için kullanılır. Herhangi bir API kullanabilirsiniz. Ancak API'yi herhangi bir tarayıcıya yüklediğinizde bir JSON dosyası döndürmelidir. Örneğin API'm aşağıdaki JSON dosyasını döndürüyor
Sizinki farklı veriler içeren bir dosya döndürebilir. Bu JSON dosyasının ESP8266'mız tarafından da alınıp alınmadığını, okuyup aşağıdaki satırları kullanarak seri monitörümüzde JSON yazdırarak kontrol edebiliriz.
int httpCode = http.GET (); // eğer bir alma isteği iletin (httpCode> 0) {// Dönen kodu kontrol edin // payload = http.getString (); // Hata ayıklama için değeri varibale Payload'da saklayın // Serial.println (payload); // Hata ayıklama için yükü yazdırın, aksi takdirde her iki satırı da yorumlayın
Bu satırları sadece test için gerekli oldukları için yorumladım. ESP8266'nın JSON verilerini alabildiğinden emin olduktan sonra, Verileri ifade etme zamanı gelmiştir. Gördüğünüz gibi bu veriler çok büyük ve tarih, saat, sıcaklık ve nem gibi bizim için gerekli olanlar dışında değerlerin çoğu yararsız.
Bu yüzden JSON Arduino kütüphanesini bizim için gerekli olan değerleri ayırmak ve bir değişkende saklamak için kullanıyoruz. Bu mümkündür, çünkü JSON dosyasındaki değerler ad-değer çiftleri olarak atanır. Yani bu isim bizim için gerekli olan değeri tutacak bir dizedir.
Bunu yapmak için JSON dosyasını analiz edecek ve bize Arduino kodunu verecek bir web sitesine gitmeliyiz. Evet bu kadar kolay. Https://arduinojson.org/assistant/ adresine gidin ve tarayıcımıza yüklediğimiz JSON dosyasını yapıştırın ve enter tuşuna basın. Bittiğinde benimki aşağıda böyle bir şeye benziyordu
Otomatik olarak oluşturulan ifade programını görmek için biraz aşağı kaydırın
Tek yapmanız gereken, istediğiniz değişkeni seçmek, kopyalamak ve burada yaptığım gibi Arduino IDE'nize yapıştırmak.
/ * JSON kütüphanesini kullanarak Verileri Cümle Oluşturma * / // JSON dizesi const size_t bufferSize = JSON_OBJECT_SIZE (0) + JSON_OBJECT_SIZE (1) + JSON_OBJECT_SIZE (2) için ifade değerlerini almak için https://arduinojson.org/assistant/ kullanın + 2 * JSON_OBJECT_SIZE (3) + JSON_OBJECT_SIZE (8) + JSON_OBJECT_SIZE (12) + JSON_OBJECT_SIZE (56) + 2160; DynamicJsonBuffer jsonBuffer (bufferSize); JsonObject & root = jsonBuffer.parseObject (http.getString ()); / * Cümle Verisinin Sonu * / // Sin değerini istenen değişkenlere adresle JsonObject & current_observation = root; // current_observation altında JsonObject & current_observation_observation_location = current_observation; // observation_location const char altında * current_observation_station_id = current_observation; // "ICHENNAI1" // konum ayrıntılarını alın const char * current_observation_local_time_rfc822 = current_observation; // Yerel saat // yerel saat sabitini alın char * current_observation_temperature_string = current_observation; // "90,7 F (32,6 C)" // sıcaklık değerini al const char * current_observation_relative_humidity = current_observation; // "% 73" // nem değerini al
Current_observation_station_id, current_observation_local_time_rfc822, current_observation_temperature_string ve current_observation_relative_humidity değişkenlerini az önce kopyaladım. LCD ekranımızda sadece bu dört veriyi görüntülemeyi planladığımız için.
Son olarak ihtiyacımız olan verileri internetten elde ettik ve rahatlıkla kullanabileceğimiz bir değişken olarak kaydettik. Bu verileri Arduino'ya göndermek için Seri monitörden seri olarak yazdık. Aşağıdaki satırlar tam olarak aynı şeyi yapacak
// Değişkenleri seri monitör aracılığıyla yazdırın Serial.print (current_observation_station_id); // konum ayrıntılarını Arduino gecikmesine gönder (100); // kararlılık gecikmesi Serial.print (current_observation_local_time_rfc822); // yerel saat ayrıntılarını Arduino gecikmesine gönder (100); // kararlılık gecikmesi Serial.print (current_observation_temperature_string); // sıcaklık detaylarını Arduino gecikmesine gönder (100); // kararlılık gecikmesi Serial.print (current_observation_relative_humidity); // nem detaylarını Arduino gecikmesine gönder (100); // kararlılık gecikmesi
Not I kullanmış olduğu Serial.print () olup Serial.println () komutu, çünkü Serial.println () bizim için gerekli değildir veri ile birlikte bir / n ve / r ekler. Ayrıca ESP'nin bu değerleri yalnızca 10 saniyelik aralıklarla Arduino'ya göndermesi için 10 saniyelik bir gecikme ekledik.
ESP8266-01'i Arduino ile bağlama:
Şimdiye kadar ESP8266-01'imizi internetten gerekli verileri 10 saniye aralıklarla okuyacak ve seri olarak gönderecek şekilde programladık. Şimdi bu seri verileri okuyabilmemiz için ESP ile Arduino arasında arayüz oluşturmalıyız. Ayrıca ESP8266 modülünden alınan verileri görüntüleyebilmemiz için Arduino'ya 16 * 2 LCD ekran eklemeliyiz. Devre şeması Arduino ile ESP8266 modülü arabirim oluşturmak için aşağıda gösterilmiştir
GPIO_0 pininin boş kaldığından emin olun, modüle sadece Arduino'nun 3.3V piniyle güç verin ve ESP modülünü işletim modülüne koymak için düğmeye basın. Artık ESP'ye yüklediğimiz program çalışmaya başlamış olmalı ve modül veriyi seri pin ile Arduino'ya göndermelidir. Bu seri pinler Arduino üzerindeki 6 ve 7 numaralı pinlere bağlanır. Yani bu seri verileri pinlerden okumak için Arduino'daki yazılım seri seçeneğini kullanabiliriz.
Arduino Programı ve Çalışması:
Tam Arduino programı da bu sayfanın sonunda ESP kodu ile birlikte verilir. Programı görüntülemek için aşağı kaydırabilir veya programı anlamak istiyorsanız daha fazlasını okuyabilirsiniz.
Arayüz programı oldukça basit, sadece 6 ve 7 numaralı pinlerden verileri okumak ve bunları LCD ekranda görüntülemek için yazılım seri kütüphanesini kullanmamız gerekiyor. Alınan veriler dize biçiminde olduğundan, yükü ihtiyacımıza göre ayırmak veya gerekirse tam sayıya dönüştürmek için alt dize seçeneğini kullanmalıyız. Bu yüzden LCD'nin bağlı olduğu pinleri tanımlayarak başlıyoruz.
const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; // LCD'nin bağlı olduğu pinler LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
Biz bağladıktan yana 6 ve 7 ile ESP8266 ait RX ve TX işaretçilerine inci Arduino pin biz başlatmak zorunda Yazılım seri biz.Ben yapabilirsiniz ESP_Serial gibi isimlerin bu var onlardan seri veri alabilir, böylece bu pimleri için onlara ne istersen söyle
SoftwareSerial ESP_Serial (6,7); // Tx, Rx
Setup () işlevinin içinde, Seri monitör ve ayrıca yazılım serisi için seri iletişimi başlatırız. Hatırlarsanız, ESP programını 9600 baud hızında iletişim kuracak şekilde yaptık, bu yüzden yazılım seri portu için aynı baud hızını kullanmalıyız. Ayrıca LCD'de 2 saniye boyunca küçük bir giriş mesajı görüntüleriz.
geçersiz kurulum () {lcd.begin (16, 2); // 16 * 2 LCD ekranlı lcd.print ("Arduino & ESP") kullanıyoruz; // Bir giriş mesajı göster Serial.begin (115200); ESP_Serial.begin (9600); gecikme (2000); lcd.clear (); }
Main loop () işlevinin içinde ESP8266'nın bir şey gönderip göndermediğini kontrol etmeliyiz. Öyleyse , dizeyi ESP8266'dan okuruz ve onu payload adlı bir değişkene kaydederiz. Değişken veri yükü String tipindedir ve ESP8266 modülünden gönderilen tüm bilgileri tutacaktır.
while (ESP_Serial.available ()> 0) {yük = ESP_Serial.readString ();
Şimdi bu dizgiyi kendi amacımız için kullanabilmemiz için küçük parçalara ayırmalıyız, bu durumda onları LCD ekranda görüntülemek için ayırmalıyız. Bu, Arduino'daki alt dize işlevi kullanılarak kolayca yapılabilir. Bu alt dize işlevini kullanmak için her karakterin konumunu bilmeniz gerekir. Karakterlerin konumunu bilmek için yükü seri monitörde yazdırabilir ve bunları aşağıda gösterildiği gibi alt dizeleri kategorize etmek için kullanabilirsiniz.
local_date = payload.substring (14, 20); local_time = payload.substring (26, 31); sıcaklık = yük. alt dizgi (48, 54); Nem = faydalı yük.substring (55, 60);
Şimdi devam edip bu değişkenleri ya seri monitörde yazdırmak ya da sadece LCD'de yazdırmak için kullanabilirim. Ancak bunları Seri monitörde yazdırmak, alt dizelerin doğru şekilde bölünüp bölünmediğini kontrol etmemize yardımcı olacaktır. Ardından aşağıdaki satırları kullanarak bunları LCD ekrana yazdırıyoruz
lcd.clear (); lcd.setCursor (1, 0); lcd.print (yerel_tarih); lcd.setCursor (8, 0); lcd.print (yerel_saat); lcd.setCursor (1, 1); lcd.print (sıcaklık); lcd.setCursor (10, 1); lcd.print (Nem);
Programı Arduino ya yükleyin ve bağlantıların yukarıdaki devre şemasında gösterildiği gibi olduğundan emin olun. Her şeyi net bir şekilde görene kadar LCD ekranın kontrastını ayarlayın. LCD'de Giriş mesajını görmeli ve birkaç saniye sonra tarih, saat, sıcaklık ve Nem gibi ayrıntılar aşağıda gösterildiği gibi LCD ekranda görüntülenmelidir.
Ayrıca , ESP8266'daki mavi led'in Veri her geldiğinde yanıp söndüğünü de fark edebilirsiniz. Bunu göremiyorsanız, bu ESP'nin programlama modunda olmadığı anlamına gelir. Sıfırla düğmesine basmayı deneyin, ayrıca bağlantıları kontrol edin.
Buna benzer şekilde, internetten herhangi bir gerekli veriyi almak ve bunları Arduino ya beslemek ve Arduino ile çalışmanızı işlemek için herhangi bir API kullanabilirsiniz. İnternette tonlarca API mevcuttur ve tüm bunlarla sınırsız sayıda proje yapabilirsiniz. Umarım projeyi anladınız ve inşa etmekten keyif aldınız. Herhangi bir sorunla karşılaştıysanız, bunları aşağıdaki yorum bölümüne veya forumlarımıza gönderin.
ESP8266 ile ilgili tüm projelerimizi burada bulabilirsiniz.