Ucuz bir Çin cihazından programlanabilir bir mantık denetleyicisinin nasıl oluşturulacağı hakkında bir makale. Böyle bir cihaz hem ev otomasyonunda hem de okul bilgisayar bilimlerinde pratik derslerde kullanım alanı bulacaktır.
Referans olarak, Sonoff Basic programı varsayılan olarak Çin bulut hizmeti aracılığıyla bir mobil uygulamayla çalışır; önerilen değişiklikten sonra, bu cihazla daha fazla etkileşim tarayıcıda mümkün olacaktır.
Bölüm I. Sonoff'u MGT24 hizmetine bağlama
1. Adım: Bir kontrol paneli oluşturun
Siteye kayıt olun
Giriş yapmak
Yeni bir cihaz için kontrol paneli oluşturmak için “+” düğmesine tıklayın.
Panel oluşturma örneği
Panel oluşturulduktan sonra panel listenizde görünecektir.
Oluşturulan panelin "Kurulum" sekmesinde "Cihaz Kimliği" ve "Yetkilendirme Anahtarı" alanlarını bulun; gelecekte Sonoff cihazının kurulumunda bu bilgiler gerekli olacaktır.
Sekme örneği
Adım 2. Cihazı yeniden başlatın
yardımcı programı kullanma
3. Adım. Cihaz kurulumu
Cihaza güç verin, LED yandıktan sonra düğmeye basın ve LED periyodik olarak eşit şekilde yanıp sönmeye başlayana kadar basılı tutun.
Bu anda “PLC Sonoff Basic” adında yeni bir wi-fi ağı karşınıza çıkacak, bilgisayarınızı bu ağa bağlayın.
LED göstergesinin açıklaması
LED göstergesi
Cihaz durumu
periyodik çift yanıp sönme
yönlendiriciye bağlantı yok
sürekli parlıyor
yönlendiriciyle bağlantı kuruldu
periyodik üniforma yanıp sönüyor
kablosuz erişim noktası modu
sönmüş
Güç kaynağı yok
Bir İnternet tarayıcısı açın ve adres çubuğuna “192.168.4.1” metnini girin, cihazın ağ ayarları ayarları sayfasına gidin.
Alanları aşağıdaki gibi doldurun:
- “Ağ adı” ve “Şifre” (cihazı evinizdeki kablosuz yönlendiriciye bağlamak için).
- “Cihaz Kimliği” ve “Yetkilendirme anahtarı” (cihazı MGT24 servisinde yetkilendirmek için).
Cihaz ağ parametrelerini ayarlama örneği
Ayarları kaydedin ve cihazı yeniden başlatın.
öyle
Adım 4. Sensörlerin bağlanması (isteğe bağlı)
Mevcut ürün yazılımı dört adede kadar ds18b20 sıcaklık sensörünü destekler. Burada
Bölüm II. Görsel programlama
1. Adım: Komut Dosyaları Oluşturun
Programlama ortamı olarak kullanılır
Cihaz parametrelerini yazmak ve okumak için özel bloklar ekledim. Herhangi bir parametreye isimle erişilir. Uzak cihazların parametreleri için bileşik adlar kullanılır: “parametre@cihaz”.
Seçeneklerin açılır listesi
Yükün döngüsel olarak açılıp kapatılmasına ilişkin örnek senaryo (1Hz):
İki ayrı cihazın çalışmasını senkronize eden bir komut dosyası örneği. Yani hedef cihazın rölesi, uzak cihazın rölesinin çalışmasını tekrarlar.
Termostat senaryosu (histerezissiz):
Daha karmaşık komut dosyaları oluşturmak için değişkenleri, döngüleri, işlevleri (argümanlarla birlikte) ve diğer yapıları kullanabilirsiniz. Tüm bunları burada ayrıntılı olarak anlatmayacağım, internette zaten oldukça fazla şey var.
Adım 2: Komut Dosyalarının Sırası
Betik sürekli olarak çalışır ve sona erdiğinde yeniden başlar. Bu durumda betiği geçici olarak duraklatabilecek iki blok vardır; “gecikme” ve “duraklatma”.
"Gecikme" bloğu milisaniye veya mikrosaniyelik gecikmeler için kullanılır. Bu blok, tüm cihazın çalışmasını engelleyerek zaman aralığını sıkı bir şekilde korur.
“Pause” bloğu ikinci (veya daha az) gecikmeler için kullanılır ve cihazdaki diğer işlemlerin yürütülmesini engellemez.
Komut dosyasının kendisi, gövdesi "duraklatma" içermeyen sonsuz bir döngü içeriyorsa, yorumlayıcı bağımsız olarak kısa bir duraklama başlatır.
Tahsis edilen bellek yığını tükenirse, yorumlayıcı bu kadar çok güce ihtiyaç duyan bir komut dosyasını çalıştırmayı durduracaktır (özyinelemeli işlevlere dikkat edin).
3. Adım: Komut Dosyalarında Hata Ayıklama
Cihaza önceden yüklenmiş olan bir komut dosyasında hata ayıklamak için adım adım program izlemeyi çalıştırabilirsiniz. Senaryonun davranışının yazarın amaçladığından farklı olduğu ortaya çıktığında bu son derece yararlı olabilir. Bu durumda izleme, yazarın sorunun kaynağını hızlı bir şekilde bulmasına ve komut dosyasındaki hatayı düzeltmesine olanak tanır.
Hata ayıklama modunda faktöriyel hesaplama senaryosu:
Hata ayıklama aracı çok basittir ve üç ana düğmeden oluşur: "başlat", "bir adım ileri" ve "durdur" ("gir" ve "çıkış" hata ayıklama modunu da unutmayalım). Adım adım izlemeye ek olarak, herhangi bir blokta (bloğa tıklayarak) bir kesme noktası ayarlayabilirsiniz.
Parametrelerin (sensörler, röleler) mevcut değerlerini monitörde görüntülemek için “yazdır” bloğunu kullanın.
öyle
Meraklısı için bölüm. Kaputun altında ne var?
Komut dosyalarının hedef cihazda çalışabilmesi için bir bayt kodu yorumlayıcısı ve 38 talimat içeren bir çevirici geliştirildi. Blockly'nin kaynak kodu, görsel blokları montaj talimatlarına dönüştüren özel bir kod oluşturucuya sahiptir. Daha sonra bu assembler programı bytecode'a dönüştürülür ve çalıştırılmak üzere cihaza aktarılır.
Bu sanal makinenin mimarisi oldukça basittir ve onu tanımlamanın özel bir anlamı yoktur; İnternette en basit sanal makinelerin tasarımıyla ilgili birçok makale bulacaksınız.
Sanal makinemin yığınına genellikle 1000 bayt ayırıyorum, bu da yedeklemeye yetiyor. Elbette, derin özyinelemeler herhangi bir yığını tüketebilir, ancak bunların herhangi bir pratik kullanıma sahip olması pek olası değildir.
Ortaya çıkan bayt kodu oldukça kompakttır. Örnek olarak, aynı faktöriyelin hesaplanmasına yönelik bayt kodu yalnızca 49 bayttır. Bu onun görsel şeklidir:
Bu da onun montajcı programı:
shift -1
ldi 10
call factorial, 1
print
exit
:factorial
ld_arg 0
ldi 1
gt
je 8
ld_arg 0
ld_arg 0
ldi 1
sub
call factorial, 1
mul
ret
ldi 1
ret
Gösterimin montaj biçiminin pratik bir değeri yoksa, “javascrit” sekmesi tam tersine görsel bloklardan daha tanıdık bir görünüm verir:
function factorial(num) {
if (num > 1) {
return num + factorial(num - 1);
}
return 1;
}
window.alert(factorial(10));
Performansla ilgili. En basit flaşör komut dosyasını çalıştırdığımda, osiloskop ekranında (47 MHz işlemci saat hızında) 80 kHz kare dalga elde ettim.
Bence bu iyi bir sonuç, en azından bu hız neredeyse on kat daha hızlı.
Son bölümü
Özetlemek gerekirse, komut dosyalarının kullanımının yalnızca ayrı bir cihazın çalışma mantığını programlamamıza izin vermekle kalmayıp, aynı zamanda bazı cihazların diğerlerinin davranışını etkilediği birkaç cihazı tek bir mekanizmaya bağlamayı da mümkün kıldığını söyleyeceğim.
Ayrıca, seçilen komut dosyalarını saklama yönteminin (sunucuda değil, doğrudan cihazların kendisinde), halihazırda çalışan cihazların başka bir sunucuya, örneğin bir ev Raspberry'sine geçişini kolaylaştırdığını da not ediyorum.
Hepsi bu, tavsiye ve yapıcı eleştiriyi duymaktan memnuniyet duyarım.
Kaynak: habr.com