Pemrograman Visual untuk Sonoff Basic

gambar

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.

Login
gambar

Untuk membuat panel kontrol untuk perangkat baru, klik tombol "+".

Contoh Pembuatan Panel
gambar

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.

Contoh Tab
gambar

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.

Indikasi decoding LED
Indikasi LEDStatus perangkat
flashing ganda berkalatidak ada koneksi dengan router
bersinar terus meneruskoneksi dengan router
flashing seragam berkalamode titik akses wifi
padamtidak ada kekuatan


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
gambar

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".

Daftar pilihan drop-down
gambar

Contoh skenario pengaktifan siklus on dan off load (1Hz):

gambar

Contoh skenario yang menyinkronkan pengoperasian dua perangkat terpisah. Yaitu, relai perangkat target mengulangi operasi relai perangkat jarak jauh.

gambar

Skenario untuk termostat (tanpa histeresis):

gambar

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:

gambar

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:

gambar

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).

gambar

gambar

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.

Source: https://habr.com/ru/post/id436272/


All Articles