Sonoff modülleri daha önceden burada incelemiş olduğum akıllı ev ürünleridir. Bana incelemem için gönderilen sonoff pow isimli modül zaman zaman bağlantı problemleri çıkarmaktaydı. Bu sebeple içerisini açıp incelediğimde, üzerinde ESP8266 ve 32Mbit flash çipi barındırdığını gördüm. Ayrıca güç ölçüm özelliğine sahip olan bu modül HLW8012 isimli entegreyi de barındırıyor. Modülün boardu üzerinde firmware yüklemek için gerekli uçların bulunduğunu görünce hemen ufak çaplı bir araştırma yapıp, son zamanlarda kullanmaya başladığım arduino ide ile modülü programlamaya başladım. Kendi yazdığım firmwarei modüle yükleyip bağlantı problemlerini ortadan kaldırdım. Bu tarz problemler yaşayıp modüle kendi yazılımlarını yüklemek isteyenlere kılavuzluk etmek için bu yazıyı yazıyorum.
Aşağıdan uygulamayla ilgili videoyu izleyebilirsiniz:
Aşağıdaki resimde modüle yazılım yüklemek için gerekli olan uçların sıralaması görülebilir. Tabi bu iş için bilgisayarımızın seri portunu veya bir USB-Seri çevirici kullamamız şart. VDD pinine 3.3V vermemiz gerekiyor. İletişim de 3.3V seviyesinde olmalı.
Modüle program yükleyebilmek için arduino ide ayarlarımız aşağıdaki gibi olmalı.
Ayarlarımızı ve bağlantılarımızı yaptıktan sonra VDD pinini modülden ayırıp , modül üzerindeki butona basılı tutarak VDD pinini tekrar bağlıyoruz. Bağlantıyı yaptıktan sonra elimizi butondan çekiyoruz. Artık modül program yüklemek için hazır. Arduino ide’deki yükle butonuna tıklayarak yazılımımızı yüklüyoruz. Yükleme bittikten sonra butonun düzgün çalışabilmesi için butona basmadan VDD pinini söküp kısa süre sonra tekrar modülü enerjilendirerek resetlemenizi öneririm. Çünkü bir önceki durumda modül boot modunda açıldığından buton istediğimiz gibi çalışmaz.
Yazdığım deneme kodu aşağıda:
#define REL_PIN 12 #define LED_PIN 15 #define BUTTON 0 void setup() { pinMode(LED_PIN,OUTPUT); pinMode(REL_PIN,OUTPUT); pinMode(BUTTON,INPUT); digitalWrite(LED_PIN,0); digitalWrite(REL_PIN,0); } void loop() { if(!digitalRead(BUTTON)) { digitalWrite(LED_PIN,!digitalRead(LED_PIN)); digitalWrite(REL_PIN,!digitalRead(REL_PIN)); delay(100); while(!digitalRead(BUTTON)); } }
Sonraki yazılarda görüşmek üzere..