ESP32 ile Arduino Cloud Bağlantısı
|Merhaba,
Bu konuda ESP32 kullanarak Arduino Cloud’ a bağlanacağız. Arduino Cloud yeni oluşturulan bir teknoloji değil aslında. Uzun zamandır mevcuttu. Ancak ESP32 ve ESP8266 gibi orjinal Arduino ürünü olmayan cihazlar ile bağlantısını yakın zamanda açtı. Bu sayede ESP32 ve ESP8266 kullanarak projelerimizi Arduino Cloud üzerinde görselleştirebilir veya birden fazla cihazı Wi-Fi bağlantısı kullanarak uzaktan yönetme yada yazılım yükleme işlemlerimizi gerçekleştirebiliriz. Ancak bu kısımda ufak bir sorun bulunmakta. Ardunio Cloud’ un ücretsiz versiyonunda sadece veri görselleştirme yapabiliyoruz. Çünkü Arduino Cloud’ un ücretsiz erişilebilir olan paketi bazı özellikleri kısıtlıyor. Arduino Cloud’ un ücretli ve ücretsiz tarifelerinin olduğu fiyat tablosu aşağıdaki gibidir. Resimde de görüldüğü üzere ücretsiz plan ile sadece 2 nesne bağlanabilmekte ve sadece 1 günlük veri saklama sınırı veriyor. Yani en fazla 2 ayrı cihaz bağlanabilir ve uzun süreli saklanması gereken veriler için bu platform çok uygun değildir. Ayrıca “Over the Air Update” ücretsiz plan için geçerli değil. Yani ücretsiz plan ile Wi-Fi üzerinden yazılım güncellenmesi yapılamamaktadır. Arduino Cloud’ a bağlantıdan ulaşabilirsiniz.
Ücretsiz plan hobi amaçlı projelerinizde kullanışlı bir görselleştirme platformu olduğunu düşündüğüm için bu konuyu paylaşma gereği duydum. Ayrıca kullanımı da son derece kolay. Konu biraz uzun görünüyor. Ancak uygulanan adımlar oldukça basit. Nesne oluşturulduktan sonra cloud’ a bağlanmasını istediğiniz değişkenleri belirliyorsunuz ve cloud’ a bağlanacak değişkenler hazır şekilde yüklenecek yazılımı size Arduino Cloud oluşturuyor. Sonrasında sadece ihtiyacınıza göre bir kaç ufak düzeltme yapmanız yeterli oluyor. Bunları aşağıda daha detaylı anlatacağım. Şimdilik kullanım basitliğinin ön plana çıkması için vurgulamak istedim sadece.
Devre Yapısı
Yapacağımız projede ben ESP32 kullanacağım. Bu sebeple oluşturulacak projenin bağlantı şemasında ve sonraki işlemlerde ESP32′ ye göre anlatımı gerçekleştireceğim. Ancak gerekli değişiklikler yapıldıktan sonra ESP8266 ile de kullanılabilir. ESP32 ile yapacağımız uygulama için bağlantı şeması aşağıdaki gibidir. Yapacağımız uygulamada 2 adet LED ve DHT11 sensörü kullanacağız. Sensörden gelen veriyi saniyede bir Arduino Cloud gönderirken, Arduino Cloud’ a ekleyeceğimiz 2 adet switch ile LED’ lerin durumlarını değiştireceğiz.
Projede LED’ ler ve DHT11 sensörü dijital olduğu için herhangi farklı pin kullanılabilir. Projenizde ihtiyacınıza göre değiştirebilirsiniz. Sadece 34 ve üzeri numaralı pinleri kullanamazsınız. Çünkü bu pinler sadece analog olarak kullanılabilirler.
Cloud Ayarları
Şimdi bu bağlantı şemasına göre Arduino Cloud’ u oluşturalım. Öncelikle Cloud üzerinde nesnemizi oluşturalım ve gerekli ayarlamaları yapalım. Arduino Cloud’ a giriş yaptıktan sonra sağ üstten IOT cloud’ a geçiş yapmalısınız. Ardından gelen ekranda “Create Thing” diyerek IOT Cloud’ da nesnemizi oluşturabiliriz.
Açılan sayfada nesnemizin ilk ayarlarını yapacağız. Bu ekranda sol üstte “ESPThing” yazan kısım nesneye verdiğimiz isim. Bunu siz istediğiniz bir isim ile değiştirebilirsiniz. Daha sonrasında “Device” kısmında kullanacağımız cihazı eklemeliyiz. Cihaz eklerken “3rd Party Device” seçeneğini seçmeliyiz. Seçimden sonra ESP32 seçip, kullandığınız ESP32 cihazını seçmeliyiz. Bu aşamadan sonra size oluşturduğunuz cihazın ID’ sini ve “Secret Key” ini verecektir. Bu bilgileri kayıt etmelisiniz. Özellikle “Secret Key” i daha sonradan bulmanız imkansız. Onu kayıt edip projenizde gerekli yerde kullanmalısınız. Bu anahtarı kayıp ederseniz cihazı silip tekrardan oluşturmalısınız.
Cihaz oluşturma adımından sonra Network ayarlarını yapabilmeniz için en az bir değişken oluşturulmalıdır. Kullanacağımız 4 değişkeni de “Add Variable” kısmından oluşturabiliriz. Değişken oluştururken 2 şeye dikkat edilmelidir. Bunlardan ilki değişken tipi, diğeri değişkenin güncelleme şekli. Değişken tipi, için yazılımda da yaptığımız gibi tam sayı bir değer mi yoksa virgüllü sayı mı yada karakter dizisi mi şeklinde bir seçim yapılmalıdır. Değişkenin güncelleme şekli ise, değişken bir olay sonucunda mı değişsin yoksa belirli aralıklar ile sürekli olarak mı değişsin seçimidir. Sıcaklık sensörü gibi belirli aralıklar ile gösterilmesini istenilen veriler için periyodik değişim seçilmesi daha mantıklıdır. Buton ya da LED gibi kullanıcıya bağlı olarak değişmesi istenilen değişkenler için ise “On Change” seçilmelidir.
Bu şekilde 4 adet değişken ayarlayacağız. Değişkenlerin isimlerini ve yapılan ayarlamalar aşağıdaki tablodaki gibidir. Siz de benzeri şekilde ayarlamalısınız. Tabloda da görüldüğü üzere sensör verileri periyodik olarak güncellenecek şekilde LED’ ler ise bir event ile tetiklenebilecek şekilde ayarlanmıştır. İlerleyen kısımlarda oluşturacağımız Dashboard üzerinde bu değişkenleri kullanarak araçlar üzerinde verilerin görüntülenmesini sağlayacağız.
Temperature | Float | Periodic |
Humdity | Float | Periodic |
LED1 | Bool | On Change |
LED2 | Bool | On change |
Şimdi sıra geldi bu kısımdaki son ayar olan Network ayalarına. Network kısmında 3 adet bilgi girilmelidir. Bunlardan ilk ikisi Wi-Fi SSID ve şifresi, diğeri ise Cloud üzerinde ESP32 nesnesini oluştururken bize verilen Secret Key’ dir. Bu bilgileri doğru şekilde girmeliyiz.
Network kısmı ayarından sonra Cloud üzerinde yapacağımız ayar kalmadı. Bu kısımdan sonra IOT dashboard’ u oluşturup verileri görselleştireceğimiz arayüzü oluşturabiliriz. Oluşturduğum Dashboard aşağıdaki gibidir. Resimde de görüldüğü gibi iki adet LED’ i kontrol edebilmek için switch buton yerleştirdim. Ayrıca Sıcaklık ve Nem verilerini saniyede bir görselleştirmek için iki adet gösterge, iki adet de grafik ekledim.
Eklediğim widget’ lerin ayarlanması son derece kolay. Resimde verilen her widget için ayar nerdeyse aynı şekilde. Sadece o widget için bağlanması gereken değişkeni seçmelisiniz. Kullanacağımız değişkenleri önceki kısımda oluşturduğumuz için burada otomatik olarak görünmektedir.
Dashboard’ a widget eklemek için öncelikle sol üstteki Add butonuna basmalıyız. Bu butona bastığımızda açılan pencerede eklemek istediğimiz widget’ i seçmeliyiz. Widget’ i seçtikten sonra açılan pencerede Widget ismini ve widget’ in bağlanacağı değişleni seçmelisiniz. Değişken seçmek için sağda çıkan Link Variable butonuna basmalıyız. Bu butona bastığımızda açılan pencerede oluşturduğumuz değişkenleri arasından kullanmak istediğimizi seçebiliriz. Widget’ a uyumlu olmayan değişkenler soluk renkli gözükmekte ve seçilememektedir. Seçilebilen değişkenler arasından istediğimizi bu widget’ a bağlayabiliriz.
Dashboard’ u oluşturduktan sonra sıra yazılım kısmında. Oluşturulacak yazılımın IOT CLoud bağlantısını gerçekleştirilecek kısım yukarıdaki ayarlamaları yaptıktan sonra IOT Cloud tarafından hazırlanır. Bu yazılımı indirip ufak değişiklikler yaparak veriyi ESP32′ den alıp Dashboard üzerinde gösterebilir hale getirebiliriz. Hazırlanan yazılıma ulaşmak için ayarlamaları yaptığımız Things ekranında bulunan Sketch kısmına girebiliriz.
Yazılım
Bu sayfaya girdiğinizde yorum satırı olarak en üstte aşağıdaki gibi bir açıklama bulunmaktadır.Bu açıklamadan da anlaşılacağı üzere bizim Arduino Cloud üzerinde oluşturduğumuz değişkenler bu yazılımda tanımlanmış ve kullanıma hazır haldedir.
Yazılım içerisinde bu değişkenlerin değerinde yaptığınız değişiklikler Arduin Cloud’ da da gerçekleşecektir. Aynı durum tersi için de geçerlidir. Bu güncellemeleri yazılım içerisinde loop fonksiyonunun hemen altında “ArduinoCloud.update” fonksiyonu gerçekleştirmektedir. Yazılımda değişiklik yaparken bu fonksiyonu silmemeye özen göstermelisiniz. Bunun yanı sıra bu fonksiyonu size bazı callback’ lar oluşturmaktadır. Bu callback’ ler sayesinde Arduino Cloud’ da tanımlanan değişkenlerin değeri değişince callback fonksiyonu içerisinde yapmayı istediğiniz işlemleri gerçekleştirebilirsiniz. Bunu yapacağımız uygulamadan bir örnek ile açıklayacak olursam, Arduino Cloud üzerinde LED butonuna bastığımızda yazılımdaki “onLED1Change” fonksiyonu tetiklenecektir. Bu fonksiyon içerisine LED1 değişkeninin değerini LED1 pinine yazarak LED’ in durumunun değişmesini sağlayabiliriz.
Üstte yazarak anlatımını veridiğim işlemi yazılım ile şu şekilde gerçekleştirebiliriz. Alttaki yazılım bloğundan da anlaşılacağı üzere cloud’ da LED butonuna bastığımızda, ESP32′ de pine bağlanan LED’ in durumu değişecektir.
const int ledPin1 = 5;
void onLED1Change() {
digitalWrite(ledPin1, lED1);
}
Sıcaklık ve nem verisinde callback kullanmamıza gerek yok. “loop” fonksiyonu içerisinde değişkenlerin değerini değişmemiz yeterli olacaktır. Sadece bu işlemlerin belirli zaman aralıkları ile yapılması için bir millis kullanılması sistem performansının düşmemesini sağlayacaktır. Bunu daha açık bir şekilde anlatmaktan ise göstermek daha kolay diye düşünüyorum.
void loop() {
ArduinoCloud.update();
// Your code here
if(millis() - lastTime > 1000)
{
humidity = dht.readHumidity();
temperature = dht.readTemperature();
lastTime = millis();
}
}
Verilen yazılımda “ArduinoCloud.update” fonksiyonu ESP32′ nin ARduino Cloud’ a bağlanmasını ve değişkenlerin değerlerinin güncellenmesini sağlamaktadır. Millis fonksiyonunu kullanmak yerine delay kullansa idik yazılım delay’ da takılı kalacaktı ve Arduino Cloud’ da bastığımız butonların değişikliği 1 saniye geç ESP32′ ye yansıyacaktı. Bu şekilde Cloud’ da yapılan değişikliklerin çok daha hızlı ESP32′ de gerçekleşmesini sağlayabiliriz.
Bu konuda anlatacaklarım bu kadardı. Elimden geldiğince çok detay vermeye çalıştım. Umaırm yardımcı olabilmişimdir. Yazılımın tamamına bağlantıdan ulaşabilirsiniz.