
Artikel tentang cara membuat pengontrol logika yang dapat diprogram dari perangkat Cina murah. Perangkat semacam itu akan menemukan penerapannya baik dalam otomatisasi rumah dan sebagai pelajaran praktis dalam ilmu komputer sekolah.
Sebagai referensi, secara default, program Sonoff Basic bekerja dengan aplikasi mobile melalui layanan cloud Cina, setelah perubahan yang diusulkan, semua interaksi lebih lanjut dengan perangkat ini akan menjadi mungkin di browser.Bagian I. Menghubungkan Sonoff ke MGT24
Langkah 1. Buat panel kontrol
Daftarkan di situs web
mgt24 (jika Anda belum mendaftar) dan masuklah di bawah akun Anda.
Untuk membuat panel kontrol untuk perangkat baru, klik tombol "+".
Setelah panel dibuat, itu akan muncul di daftar panel Anda.
Pada tab "Pengaturan" pada panel yang dibuat, cari bidang "Device ID" dan "Kunci Otorisasi", di masa mendatang, informasi ini akan diperlukan saat mengatur perangkat Sonoff.
Langkah 2. Mem-flash perangkat
Dengan menggunakan utilitas
XTCOM_UTIL, unduh firmware
Sonoff Basic PLC ke perangkat, untuk ini Anda memerlukan konverter USB-TTL. Ini adalah
instruksi dan
instruksi video .
Langkah 3. Konfigurasikan perangkat
Terapkan daya ke perangkat, setelah LED menyala, tekan tombol dan tahan hingga LED mulai berkedip secara berkala.
Pada titik ini, jaringan wi-fi baru yang disebut "PLC Sonoff Basic" akan muncul, sambungkan komputer Anda ke jaringan ini.
Buka browser Internet dan masukkan teks "192.168.4.1" di bilah alamat, buka halaman pengaturan jaringan perangkat.
Isi kolom sebagai berikut:
- "Nama Jaringan" dan "Kata Sandi" (untuk mengikat perangkat ke router wi-fi rumah Anda).
- "Device ID" dan "Kunci Otorisasi" (untuk mengotorisasi perangkat pada layanan MGT24).
Contoh pengaturan parameter jaringan perangkat Simpan pengaturan dan reboot perangkat.
Ini adalah
tutorial video .
Langkah 4. Menghubungkan sensor (opsional)
Firmware saat ini mendukung hingga empat sensor suhu ds18b20. Berikut ini adalah
video tutorial tentang pemasangan sensor. Rupanya, langkah ini akan menjadi yang paling sulit, karena akan membutuhkan tangan langsung dan besi solder.
Bagian II. Pemrograman visual
Langkah 1. Scripting
Blockly digunakan sebagai lingkungan pemrograman, lingkungannya mudah dipelajari, sehingga Anda tidak perlu menjadi programmer untuk membuat skrip sederhana.
Saya menambahkan blok khusus untuk menulis dan membaca parameter perangkat. Akses ke parameter apa pun dilakukan dengan nama. Nama majemuk digunakan untuk parameter perangkat jarak jauh: "parameter @ perangkat".
Contoh skenario pengaktifan siklus on dan off load (1Hz):

Contoh skenario yang menyinkronkan pengoperasian dua perangkat terpisah. Yaitu, relai perangkat target mengulangi operasi 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, jaringan sudah memiliki cukup banyak
materi pelatihan tentang Blockly .
Langkah 2. Urutan Scripting
Script berjalan terus menerus, dan segera setelah mencapai akhirnya dimulai kembali. Ada dua blok yang dapat menangguhkan sementara skrip, "tunda" dan "jeda".
Blok penundaan digunakan untuk penundaan milidetik atau mikrodetik. Unit ini secara ketat mempertahankan interval waktu, menghalangi operasi seluruh perangkat.
Blok jeda digunakan untuk penundaan kedua (mungkin kurang), dan itu tidak memblokir eksekusi proses lain dalam perangkat.
Jika naskah di dalam dirinya berisi loop tak terbatas, di dalam tubuh yang tidak ada "jeda", penerjemah secara independen memulai jeda kecil.
Jika tumpukan memori yang dialokasikan habis, interpreter akan menghentikan eksekusi skrip yang rakus (hati-hati dengan fungsi rekursif).
Langkah 3. Skrip Debugging
Untuk men-debug skrip yang sudah dimuat ke perangkat, Anda dapat menjalankan jejak program dalam langkah-langkah. Ini bisa sangat berguna ketika perilaku skrip bukan yang dimaksudkan oleh penulis. Dalam hal ini, pelacakan memungkinkan penulis untuk dengan cepat menemukan sumber masalah dan memperbaiki kesalahan dalam skrip.
Skrip untuk menghitung faktorial dalam mode debug:

Alat debugging sangat sederhana dan terdiri dari tiga tombol utama: "mulai", "satu langkah maju" dan "berhenti" (kami juga tidak akan lupa tentang "masuk" dan "keluar" dari mode debugging). Selain penelusuran langkah demi langkah, Anda dapat mengatur breakpoint pada blok apa pun (dengan mengklik blok).
Untuk menampilkan nilai parameter saat ini (sensor, relay) di monitor, gunakan blok cetak.
Berikut ini
video ikhtisar tentang menggunakan debugger.
Bagian untuk yang penasaran. Tapi apa yang ada di bawah tenda?
Agar skrip dapat bekerja pada perangkat target, dikembangkan interpreter bytecode dan assembler untuk 38 instruksi. Generator kode khusus dibangun ke dalam kode sumber blockly yang mengubah blok visual menjadi instruksi assembler. Di masa depan, program assembler ini dikonversi menjadi bytecode dan ditransfer ke perangkat untuk dieksekusi.
Arsitektur mesin virtual ini cukup sederhana dan tidak ada gunanya menggambarkannya, di internet Anda akan menemukan banyak artikel tentang desain mesin virtual sederhana.
Untuk tumpukan mesin virtual saya, saya biasanya mengalokasikan 1000 byte, ini cukup dengan margin. Tentu saja, rekursi yang dalam dapat menguras tumpukan apa pun, tetapi tidak mungkin menemukan aplikasi praktis.
Bytecode yang dihasilkan cukup kompak. Sebagai contoh, bytecode untuk menghitung faktorial yang sama hanya 49 byte. Ini adalah presentasi visualnya:

Dan ini adalah 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 assembler tidak memiliki nilai praktis, maka tab javascrit, sebaliknya, memberikan tampilan yang lebih akrab daripada blok visual:
function factorial(num) { if (num > 1) { return num * factorial(num - 1); } return 1; } window.alert(factorial(10));
Adapun kinerja. Ketika saya memulai skenario flasher yang paling sederhana, pada layar osiloskop saya mendapatkan 47kHz berkelok-kelok (pada kecepatan jam prosesor 80MHz).


Saya pikir ini adalah hasil yang baik, setidaknya kecepatan ini hampir sepuluh kali lebih cepat daripada
Lua dan
Espruino .
Bagian terakhir
Sebagai rangkuman, saya akan mengatakan bahwa penggunaan skrip memungkinkan kita tidak hanya memprogram logika perangkat individual, tetapi juga memungkinkan untuk menautkan beberapa perangkat ke dalam satu mekanisme tunggal, di mana beberapa perangkat memengaruhi perilaku orang lain.
Saya juga mencatat bahwa metode yang dipilih untuk menyimpan skrip (langsung di perangkat itu sendiri, dan bukan di server), menyederhanakan beralih perangkat yang ada ke server lain, misalnya, ke rumah Raspberry, di sini adalah
instruksi .
Itu saja, saya akan senang mendengar saran dan kritik yang membangun.