Artikel tentang cara membuat pengontrol logika yang dapat diprogram dari perangkat Cina yang murah. Perangkat semacam itu akan digunakan baik dalam otomatisasi rumah maupun sebagai kelas praktis dalam ilmu komputer sekolah.
Sebagai referensi, secara default program Sonoff Basic bekerja dengan aplikasi seluler melalui layanan cloud Tiongkok; setelah modifikasi yang diusulkan, semua interaksi lebih lanjut dengan perangkat ini akan dimungkinkan di browser.
Bagian I. Menghubungkan Sonoff ke layanan MGT24
Langkah 1: Buat panel kontrol
Daftarkan secara online
Login
Untuk membuat panel kontrol untuk perangkat baru, klik tombol “+”.
Contoh pembuatan panel
Setelah panel dibuat, panel tersebut akan muncul di daftar panel Anda.
Di tab "Pengaturan" pada panel yang dibuat, temukan bidang "ID Perangkat" dan "Kunci Otorisasi"; di masa mendatang, informasi ini akan diperlukan saat menyiapkan perangkat Sonoff.
Contoh tab
Langkah 2. Reflash perangkat
Menggunakan utilitas
Langkah 3. Pengaturan perangkat
Berikan daya pada perangkat, setelah LED menyala, tekan tombol dan tahan hingga LED mulai berkedip merata secara berkala.
Saat ini, jaringan wi-fi baru bernama “PLC Sonoff Basic” akan muncul, sambungkan komputer Anda ke jaringan ini.
Penjelasan indikasi LED
indikasi LED
Status Perangkat
berkedip ganda secara berkala
tidak ada koneksi ke router
bersinar terus menerus
koneksi dibuat dengan router
berkedip seragam secara berkala
mode titik akses wi-fi
padam
Tidak ada catu daya
Buka browser Internet dan masukkan teks “192.168.4.1” di bilah alamat, buka halaman pengaturan pengaturan jaringan perangkat.
Isi kolom sebagai berikut:
- “Nama jaringan” dan “Kata Sandi” (untuk menghubungkan perangkat ke router wi-fi rumah Anda).
- “ID Perangkat” dan “Kunci Otorisasi” (untuk mengotorisasi perangkat pada layanan MGT24).
Contoh pengaturan parameter jaringan perangkat
Simpan pengaturan dan reboot perangkat.
Di sini
Langkah 4. Menghubungkan sensor (opsional)
Firmware saat ini mendukung hingga empat sensor suhu ds18b20. Di Sini
Bagian II. Pemrograman visual
Langkah 1: Buat Skrip
Digunakan sebagai lingkungan pemrograman
Saya menambahkan blok khusus untuk menulis dan membaca parameter perangkat. Parameter apa pun diakses berdasarkan nama. Untuk parameter perangkat jarak jauh, nama gabungan digunakan: “parameter@device”.
Daftar pilihan tarik-turun
Contoh skenario untuk menghidupkan dan mematikan beban secara siklik (1Hz):
Contoh skrip yang menyinkronkan pengoperasian dua perangkat terpisah. Yaitu, relai perangkat target mengulangi pengoperasian relai perangkat jarak jauh.
Skenario untuk termostat (tanpa histeresis):
Untuk membuat skrip yang lebih kompleks, Anda dapat menggunakan variabel, loop, fungsi (dengan argumen) dan konstruksi lainnya. Saya tidak akan menjelaskan semua ini secara rinci di sini; sudah ada cukup banyak di internet.
Langkah 2: Urutan Skrip
Skrip berjalan terus menerus, dan segera setelah mencapai akhir, skrip dimulai lagi. Dalam hal ini, ada dua blok yang dapat menghentikan sementara skrip, “delay” dan “pause”.
Blok "penundaan" digunakan untuk penundaan milidetik atau mikrodetik. Blok ini secara ketat mempertahankan interval waktu, memblokir pengoperasian seluruh perangkat.
Blok “jeda” digunakan untuk penundaan kedua (atau kurang), dan tidak memblokir eksekusi proses lain di perangkat.
Jika skrip itu sendiri berisi loop tak terbatas, yang isi skripnya tidak berisi "jeda", penerjemah secara mandiri memulai jeda singkat.
Jika tumpukan memori yang dialokasikan habis, penerjemah akan berhenti menjalankan skrip yang haus kekuasaan (hati-hati dengan fungsi rekursif).
Langkah 3: Men-debug Skrip
Untuk men-debug skrip yang sudah dimuat ke perangkat, Anda dapat menjalankan pelacakan program langkah demi langkah. Ini bisa sangat berguna ketika perilaku naskah ternyata berbeda dari apa yang dimaksudkan penulisnya. Dalam hal ini, penelusuran memungkinkan penulis dengan cepat menemukan sumber masalahnya dan memperbaiki kesalahan pada skrip.
Skenario penghitungan faktorial dalam mode debug:
Alat debug sangat sederhana dan terdiri dari tiga tombol utama: “mulai”, “satu langkah maju” dan “berhenti” (jangan lupa juga tentang “masuk” dan “keluar” mode debug). Selain pelacakan langkah demi langkah, Anda dapat mengatur breakpoint pada blok mana pun (dengan mengklik blok tersebut).
Untuk menampilkan nilai parameter saat ini (sensor, relai) di monitor, gunakan blok “cetak”.
Di sini
Bagian untuk yang penasaran. Apa yang ada di balik terpal?
Agar skrip dapat bekerja pada perangkat target, penerjemah bytecode dan assembler dengan 38 instruksi dikembangkan. Kode sumber Blockly memiliki generator kode khusus yang mengubah blok visual menjadi instruksi perakitan. Selanjutnya, program assembler ini diubah menjadi bytecode dan ditransfer ke perangkat untuk dieksekusi.
Arsitektur mesin virtual ini cukup sederhana dan tidak ada gunanya menjelaskannya secara khusus, di Internet Anda akan menemukan banyak artikel tentang merancang mesin virtual paling sederhana.
Saya biasanya mengalokasikan 1000 byte untuk tumpukan mesin virtual saya, yang cukup untuk disisihkan. Tentu saja, rekursi mendalam dapat menghabiskan tumpukan apa pun, tetapi kemungkinan besar tidak ada gunanya secara praktis.
Bytecode yang dihasilkan cukup kompak. Misalnya bytecode untuk menghitung faktorial yang sama hanya 49 byte. Ini adalah bentuk visualnya:
Dan ini program assemblernya:
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
Jika bentuk representasi rakitan tidak memiliki nilai praktis, maka tab “javascrit”, sebaliknya, memberikan tampilan yang lebih familiar daripada blok visual:
function factorial(num) {
if (num > 1) {
return num + factorial(num - 1);
}
return 1;
}
window.alert(factorial(10));
Mengenai kinerja. Ketika saya menjalankan skrip flasher paling sederhana, saya mendapatkan gelombang persegi 47 kHz di layar osiloskop (pada kecepatan jam prosesor 80 MHz).
Menurut saya ini adalah hasil yang bagus, setidaknya kecepatan ini hampir sepuluh kali lebih cepat daripada
Bagian terakhir
Ringkasnya, saya akan mengatakan bahwa penggunaan skrip memungkinkan kita tidak hanya memprogram logika pengoperasian perangkat yang terpisah, tetapi juga memungkinkan untuk menghubungkan beberapa perangkat ke dalam satu mekanisme, di mana beberapa perangkat memengaruhi perilaku perangkat lain.
Saya juga mencatat bahwa metode penyimpanan skrip yang dipilih (langsung di perangkat itu sendiri, dan bukan di server) menyederhanakan peralihan perangkat yang sudah berfungsi ke server lain, misalnya ke Raspberry rumah, di sini
Itu saja, saya akan dengan senang hati mendengar saran dan kritik yang membangun.
Sumber: www.habr.com