Cara membuat pengukur IoT berbasis Arduino dengan REST API, dan menghubungkannya ke platform mash-up IFTTT.com melalui layanan perantara Yaler.net*.
Apa yang menarik dari ini? Dengan Channel Maker, IFTTT mendukung Webhook kustom untuk mengintegrasikan proyek IoT DIY. Kami menunggu ini sejak 2011**.
Terinspirasi oleh WhereDial, klasik Internet of Things DIY, IoT Gauge menunjukkan lokasi saat ini pemiliknya. Sebuah versi jam Weasley di Harry Potter.
Desain dan kode IoT Gauge bersifat umum dan dapat juga digunakan untuk menampilkan misalnya kondisi cuaca. Logika berada di Cloud, pengukur hanyalah servo dengan API.
Salam, @tamberg
Unduhan (untuk Uno)
Library Arduino Yaler, YalerEthernetServer.zip
Kode Arduino Uno, IoTGaugeWebService.ino
*) Saya adalah pendiri Yaler.
**) Zapier, platform mash-up lainnya, selalu mendukung Webhook kustom.
Langkah 1: Pemotongan Laser dan Pengaturan IoT Gauge
Membuat Bagian
Unduh file desain IoT Gauge
Potong dengan laser desain dari plywood 4 mm
Gravir nama lokasi (atau apa pun yang Anda butuhkan), atau tambahkan dengan pena
Mengatur IoT Gauge
Tambahkan Ethernet shield ke Arduino (untuk Uno)
Pasang Arduino ke plat dasar (perhatikan arahnya)
Tambahkan plat muka besar ke servo, kemudian plat muka kecil
Tempel plat dasar ke kedua plat muka, pastikan semuanya rata
Tempel indikator ke plat muka, pastikan arahnya benar
Gunakan kabel jumper untuk menghubungkan servo ke pin 9, 5V, dan GND Arduino (atau shield)
Tambahkan jarum jam (untuk dikalibrasi nanti)
Langkah 2: Mengunggah Kode Web Service Arduino IoT Gauge
Web Service Sederhana
Mengontrol IoT Gauge cukup sederhana. Sebuah Web service (atau REST API) mendengarkan permintaan masuk dan mengatur posisi servo sesuai. IoT Gauge hanyalah servo "bodoh". Menjaga logika di Cloud memungkinkan Anda mengganti "otak" nanti, misalnya untuk menampilkan kondisi cuaca alih-alih lokasi.
Akses Jarak Jauh ke Arduino
Untuk memberikan layanan Cloud IFTTT akses ke IoT Gauge, REST API Arduino kami perlu dapat diakses dan ditangani dari Web. Ahli dapat menambahkan pengecualian ke firewall atau router mereka. Namun karena ini dapat cukup merepotkan, kami akan menggunakan layanan perantara*.
Menginstal Arduino Uno (untuk Yun, lihat di bawah)
Instal library YalerEthernetServer.zip seperti yang ditunjukkan di https://yaler.net/arduino
Unduh kode Arduino Uno IoTGaugeWebService.ino
Pastikan Anda menggunakan alamat MAC unik
Ganti RELAY_DOMAIN dengan domain perantara Anda.(Untuk mendapatkan domain perantara, daftar untuk akun uji coba gratis di Yaler.net)
Unggah kode ke Arduino Uno Anda
Menginstal Arduino Yun (untuk Uno, lihat di atas)
Instal YalerTunnel dan aktifkan akses Web seperti yang ditunjukkan di https://yaler.net/arduino-yun
Unduh kode Arduino Yun IoTGaugeMailboxApi.ino
Unggah kode ke Arduino Yun Anda
Mengapa kode Yun berbeda dari kode Uno?
Yun menyediakan REST API bawaan yang disebut mailbox. Untuk membuat API ini dapat diakses dari Web, kami menggunakan daemon Linux YalerTunnel (yang juga mendukung enkripsi SSL, berbeda dengan Uno). Dengan membangun pada apa yang sudah ada, Anda dapat menyederhanakan kode Anda.
Lihat kedua program dan putuskan sendiri. Mailbox API Yun tidak sempurna (dan tidak benar-benar RESTful, karena memungkinkan GET untuk mengubah nilai), tetapi didasarkan pada skrip yang berjalan di sisi Linux Yun, yang menggunakan lebih sedikit memori berharga di sisi Arduino.
*) Jika Anda tidak senang menggunakan layanan perantara, cukup hapus dan (untuk Uno) batalkan komentar server lokal.
Langkah 3: Menguji Web Service Arduino dengan Curl
Menginstal Alat Baris Perintah Curl di Komputer Anda
Unduh dan instal Curl dari https://curl.haxx.se/
Buka shell di komputer Anda dan uji Curl dengan$ curl -v https://google.com/
Mengaktifkan API Arduino Yun (lewati untuk Uno)
Nyalakan Yun, tunggu sebentar, lalu kunjungi https://arduino.local/
Masuk dan klik Configure
Gulir ke bawah dan atur akses REST API ke Open
Klik Configure & Restart
Menguji IoT Gauge dengan Curl
Pastikan Arduino menyala dan terhubung ke Internet
Atur posisi servo ke 3 (atau posisi lain dari 1 hingga 5) dengan*$ curl -vX POST https://RELAY_DOMAIN.try.yaler.io/mailbox/pos/3 (Ganti RELAY_DOMAIN dengan domain perantara yang Anda gunakan sebelumnya)
Pastikan servo memindahkan jarum ke posisi yang diinginkan (sesuaikan jarum jika perlu)
Pastikan Anda mendapatkan sesuatu seperti < HTTP/1.1 200 OK sebagai respons terhadap panggilan curl
Jika Anda mendapatkan < HTTP/1.1 504 Arduino tidak online atau ada kesalahan ketik
Mengapa Anda harus menguji API Anda dengan Curl?
Curl adalah klien HTTP standar. Browser Anda bagus untuk menguji permintaan GET, dan ada alat online untuk juga menguji permintaan PUT dan POST. Namun kadang browser menambahkan ajaib, seperti mengikuti pengalihan. Jadi jika Anda ingin memastikan klien dasar atau panggilan Webhook pihak ketiga seperti yang dikirim dari IFTTT dapat mengakses Web service API Anda, Curl sangat berguna.
*) Untuk Uno, POST /mailbox/pos/3 juga bekerja seperti PUT /servo?pos=3 karena kode yang mengurai permintaan cukup ramah.
Langkah 4: Menghubungkan Arduino ke Channel Maker IFTTT
Membuat resep IFTTT baru (atau lewati untuk menambahkan resep yang ada)
IFTT memungkinkan Anda membuat resep yang menghubungkan pemicu ke tindakan.
Kunjungi https://ifttt.com/myrecipes/personal/new (daftar jika Anda belum melakukannya)
Untuk memilih channel pemicu, cari misalnya "Android Device" atau "iOS Location" dan pilih ikon channel
Lalu pilih pemicu, misalnya Connects to a specific WiFi network (untuk Android)
Masukkan nama jaringan atau lokasi
Saat memilih channel tindakan, cari channel Maker dan pilih
Lalu pilih tindakan Make a web request
Masukkan URL https://REAY_DOMAIN.try.yaler.io/mailbox/pos/3 (Ganti RELAY_DOMAIN dengan domain perantara yang Anda gunakan sebelumnya)
Untuk Method pilih POST
Untuk Content Type pilih application/x-www-form-urlencoded
Body dapat dikosongkan
Menambahkan resep IFTTT yang ada
IFTTT memungkinkan pengguna mempublikasikan resep. Berikut adalah dua resep untuk mengontrol IoT Gauge Anda:
Buka resep "IoT Gauge position from Android WiFi location" di sini
Atau resep "IoT Gauge position from iOS location" di sini
Atau cari* untuk "IoT Gauge" resep, https://ifttt.com/recipes/search?q=IoT+Gauge
Untuk menambahkan instance resep ke resep Anda klik tombol Add
Masukkan nama jaringan WiFi atau lokasi (atau apa pun yang diminta resep)
Ganti RELAY_DOMAIN dalam URL dengan domain perantara yang Anda gunakan sebelumnya
Sesuaikan parameter pos dalam URL dari 1 hingga 5 untuk cocok dengan lokasi Anda
Tambahkan instance resep lain untuk setiap lokasi
*) Sepertinya IFTTT belum menambahkan resep channel Maker ke hasil pencarian
Langkah 5: Membuat IFTTT Do Button untuk IoT Gauge
Aplikasi IFTTT Do
IFTTT juga menyediakan aplikasi Do untuk iOS dan Android. Aplikasi memungkinkan Anda memicu tindakan secara manual. Ini bisa bagus untuk menguji resep IFTTT lain Anda.
Berbeda dengan resep IFTTT biasa, resep aplikasi Do tidak dapat (belum?) dibagikan atau dibuat publik. Jadi Anda harus membuatnya dari nol.
Membuat tombol IFTTT Do baru
Dapatkan aplikasi Do Button Android atau iPhone di https://ifttt.com/products/do/button
Layani layar intro yang cukup mengganggu tetapi wajib (?)
Gunakan ikon kecil di pojok kanan bawah untuk membuka daftar resep
Ketik tanda, lalu ketik Channels dan cari channel Maker
Lalu pilih tindakan Make a web request
Masukkan URL https://REAY_DOMAIN.try.yaler.io/mailbox/pos/3 (Ganti RELAY_DOMAIN dengan domain perantara yang Anda gunakan sebelumnya)
Untuk Method pilih POST
Untuk Content Type pilih application/x-www-form-urlencoded
Body dapat dikosongkan
Ketik Add untuk membuat tombol
Setelah dibuat, resep dapat diedit online di https://ifttt.com/myrecipes/do
Itu saja - terima kasih telah membaca, dan beri tahu saya jika Anda memiliki pertanyaan atau saran.