Saat ini, sistem kontrol rumah pintar menjadi lebih populer. Antarmuka terpusat yang mengontrol perangkat di seluruh rumah menghemat waktu dan memungkinkan Anda untuk lebih efektif mengontrol rumah Anda. Realisasi visi mereka tentang sistem tersebut dilakukan oleh merek-merek terkemuka: Apple, Amazon dan Google, membangunnya menjadi infrastruktur mereka, serta pengrajin yang merakit sistem tersebut berdasarkan pada platform Arduino.
Tujuan kami adalah sebagai berikut: untuk membuat sistem yang akan tersedia di sejumlah besar perangkat dan tidak akan terikat ke mana pun. Pilihan yang sangat baik untuk menerapkan kontrol ternyata menjadi bot untuk messenger Telegram. Telegram memiliki aplikasi di semua platform utama, serta versi web. Akses ke sana dapat diperoleh dari mana saja, Anda hanya perlu memiliki akun.
Dari modul kami memilih yang berikut:
โข Strip LED yang dikontrol RGB
โข Outlet yang dikelola
โข sensor suhu
โข Sensor cahaya (digunakan untuk menyalakan lampu secara otomatis)
Apa yang kita butuhkan
1. Raspberry Pi 3
Komputer kecil tapi jauh yang tidak perlu diperkenalkan, kekuatannya akan cukup bagi kita untuk melakukan tugas-tugas ini. Versi ketiga bagus dengan modul Wi-Fi terintegrasi, jadi kami tidak perlu memikirkan adaptor pihak ketiga.
2. Modul ESP8266
Kami akan membutuhkan 4 dari mereka. Kami menggunakan ESP-12F, tetapi secara umum tidak ada perbedaan: ESP-1 akan cukup. Selain itu, papan NodeMCU yang sudah jadi dapat menghemat waktu dan tenaga Anda.
3. LED strip
Kami mengambil rekaman RGB yang dikelola pada pengontrol WS2812b, meskipun, setiap pita yang bekerja pada 5V dan didukung oleh platform Arduino cocok di sini.
4. Sensor suhu dan cahaya
Kami menggunakan modul BH1750 untuk menentukan pencahayaan di ruangan dan DS18B20 untuk suhu. Kriteria utama adalah ketersediaan, dukungan oleh platform Arduino, dan kemampuan untuk bekerja dengan logika 3.3V ESP8266.
5. Relay
MOD-1CH submodule untuk Arduino dapat melewatkan hingga 10A dari arus dan dikendalikan oleh 5V, kami tidak menemukan analog untuk 3.3V, jadi kami menggunakan transistor dalam mode kunci untuk kontrol.
6. Bot Telegram
Kontrol langsung seluruh sistem akan dilakukan menggunakan bot Telegram, diluncurkan pada Raspberry: ini akan memungkinkan sistem menjadi mudah diakses pada platform apa pun dari mana saja di dunia. Membuat bot untuk Telegram cukup sederhana, berkat platform yang dikembangkan dan dukungan untuk sejumlah besar bahasa.
Dengan demikian, seluruh sistem kami akan terlihat seperti ini:

Implementasi
Pertama, kami menguji modul.

Papan sirkuit yang siap pakai menyesuaikan jarak antara pin, yang sangat memudahkan penyolderan, dan juga berisi resistor yang diperlukan yang menghubungkan pin CH_PD dan GPIO2 ke Vcc.
Sayangnya, modul ESP8266 ditenagai dan berjalan pada 3.3V, bukan 5, seperti Arduino. Anda dapat mengubah tegangan menggunakan modul konverter yang sudah jadi, tetapi Anda juga dapat menyolder rangkaian berdasarkan pada stabilisator linier AMS1117, seperti yang kami lakukan.

Langkah selanjutnya adalah pemrograman.
Untungnya, platform ESP8266 didukung oleh Arduino IDE, yang membuka banyak kemungkinan bagi kami. Untuk mengunduh langsung firmware ke modul, kita akan menggunakan Arduino Nano, namun, hal yang sama dapat dilakukan melalui konverter USB-UART yang biasa. Jangan lupa tentang perbedaan tegangan antara Arduino dan ESP.
Skemanya adalah sebagai berikut:

Tombol diperlukan untuk menutup pin GPIO1 ke GND saat memberikan daya ke modul dan, dengan demikian, mentransfernya ke mode pemrograman.
Selanjutnya, kita mengkonfigurasi Arduino IDE sehingga memahami ESP ( petunjuk terperinci dengan semua tautan ) dan mencoba merekam sketsa uji untuk LED yang berkedip.

Setelah kedipan yang sukses, kami mulai menyolder semua modul. Dengan sensor suhu dan cahaya, semuanya cukup standar.
Suhu:


Pencahayaan:


Tetapi pita dan soket pintar menyebabkan beberapa kesulitan.
Koneksi sederhana dari input kontrol rekaman ke ESP gagal. Tidak mengherankan, karena WS2812b membutuhkan setidaknya 70% dari input VCC (5x0.7 = 3.5) untuk input kontrol, dan papan 3.3V jelas tidak cukup. Namun kami menemukan kruk Cara yang menarik untuk memulai mereka tanpa menggunakan konverter penambah. Jika dioda memerlukan minimum 0,7xVcc untuk bereaksi terhadap sinyal dan kami tidak dapat meningkatkan level sinyal ini, maka Vcc harus dikurangi! Ya, LED tidak akan menyala dengan sangat terang, namun, kami tidak perlu menyalakan seluruh kaset dengan cara ini; satu dioda sudah cukup. Dengan mentransmisikan sinyal lebih jauh di sepanjang rantai, LED sudah menggunakan level Vcc untuk membentuk sinyal, yang cukup untuk LED "normal". Dengan demikian, dengan menghubungkan dioda pertama di pita ke daya melalui dioda yang "makan" sekitar 0,6V, kami mendapatkan pita yang berfungsi dengan baik langsung dikendalikan dari modul ESP8266 kami. Dan kami meninggalkan LED pertama yang sedikit redup untuk kebutuhan debugging: menampilkan status koneksi jaringan.
Inilah yang terjadi:


Kami ingin menempatkan soket pintar kami sepenuhnya dalam kasing dari soket lama dengan timer. Mereka harus masuk ke sana: ESP-12F sendiri, catu daya untuknya dan relay yang mengendalikan outlet. Namun, setelah menempatkan relai dan catu daya di sana, kami masih belum dapat mengakomodasi modul ESP di sana. Karena itu, saya harus melampirkan kotak kecil di bawah ini.

Hasilnya tidak seanggun yang kami inginkan, tapi itu adalah perangkat solid yang hanya perlu dicolokkan ke stopkontak.


Langkah selanjutnya adalah mengkonfigurasi Raspberry. Rencananya adalah ini: modul kami terhubung ke titik akses Wi-Fi, yaitu Raspberry, dan, lebih tepatnya, ke modul Wi-Fi bawaannya. Raspberry menjalankan Telegram-bot, yang terletak dengan semua modul di jaringan lokal dan dapat dengan mudah bertukar permintaan http dengan mereka. Semuanya terhubung ke Internet melalui Ethernet.
Untuk mengimplementasikan rencana ini, kami menggunakan dua paket:
- hostapd - memungkinkan Anda menggunakan modul wi-fi bawaan sebagai titik akses
- dnsmasq - menggabungkan server DHCP dan DNS.
Kami mencoba untuk mencapai independensi relatif dari kode dan perangkat, oleh karena itu, semua permintaan dieksekusi bukan ke alamat ip, tetapi untuk nama-nama dari zona .sh yang ditemukan (light.sh, socket.sh, dll.). Untuk melakukan ini, kami mengkonfigurasi alamat ip statis untuk setiap modul dan menambahkan catatan yang sesuai dengan modul ke alamat DNS ini. Untungnya dnsmasq sangat mudah untuk dikonfigurasi ( petunjuk terperinci untuk pengaturan sistem ini ).
Dan akhirnya, bot itu sendiri.
Kami menulis bot dalam Python menggunakan pustaka python-telegram-bot. Kami telah mengembangkan antarmuka tombol, yang menyederhanakan manajemen, mengubah perangkat menjadi semacam remote control:


Kode bot sumber dapat ditemukan di sini .
Dan agar tidak ada yang bisa menggunakannya, kami mengatur perlindungan kata sandi.
Kesimpulan
Tentu saja, kami tidak menciptakan sistem revolusioner, ada sejumlah besar implementasi yang lebih holistik dan bijaksana. Modul suhu dan pencahayaan dapat dibuat otonom, karena ESP8266 memiliki mode siaga khusus di mana ia mengkonsumsi daya yang sangat sedikit. Seseorang dapat menambahkan ekstensibilitas pengguna yang mudah, yang tidak perlu mengubah kode sumber dan mengkonfigurasi ulang koneksi jaringan, dan banyak lagi. Namun, tujuan dari seluruh proyek ini tidak sama sekali. Pertama-tama, kami ingin membuat sistem sederhana yang bisa dibuat oleh siapa saja di rumah kami dan tidak memerlukan persiapan dan biaya yang serius. Dan yang paling penting: kami ingin belajar banyak hal saat kami melakukan proyek ini. Dan jika kepraktisan dan fungsionalitas dari solusi kami dapat dikembangkan lebih jauh untuk waktu yang lama, maka pengetahuan yang kami peroleh dalam proses perencanaan dan penerapan sistem ini jelas sepadan dengan usaha.