Proses manufaktur
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 2 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
| × | 1 | ||||
![]() |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
![]() |
|
![]() |
| |||
![]() |
| |||
![]() |
| |||
![]() |
|
Ikhtisar
Saat Amazon diluncurkan ke pasar Alexa dan perangkat seperti Amazon Echo Dot membuka pilihan tak terbatas untuk membuat Rumah Pintar yang hebat dikendalikan oleh perintah suara menggunakan bahasa alami.
Proyek ini membuat Arduino Home Controller yang dapat menghubungkan banyak sensor dan perangkat ke internet dan Anda dapat mengontrolnya menggunakan keterampilan Amazon Alexa.
Anda dapat menginstal dan mengaktifkan keterampilan saya "Arduino Home Controller " langkah yang mudah, atau Anda dapat membuat keterampilan Anda dipandu oleh tutorial ini.
Untuk saat ini kami akan mengontrol :
Anda dapat melihat Arduino Home Controller beraksi dalam demo video singkat ini. Untuk proposal demo dan video, saya menggunakan empat led di prothoboard yang mensimulasikan bola lampu di setiap ruangan rumah.
Jika Anda ingin menggunakan modul jarak jauh untuk mengaktifkan lampu Anda, Anda dapat melihat Modul Jarak Jauh Pengontrol Rumah Arduino saya proyek di URL ini.
Diagram Blok
Dalam gambar diagram blok kita dapat melihat empat komponen utama dari proyek ini:
1.- Amazon Echo Dot untuk menerima perintah suara dan mengirimkannya ke AWS (Amazon Web Service).
2.- AWS dengan Keterampilan Amazon dan Fungsi Lambda untuk menginterpretasikan semua perintah.
Nama skillnya adalah "Arduino Home Controller " Anda dapat mengaktifkannya nanti.
3.- Broker MQTT menggunakan awan PubNub(c).
Pialang ini akan menerima pesan kontrol dalam dua saluran, satu untuk nilai yang ditetapkan dan yang lainnya untuk membaca nilai dari sensor.
Anda tidak perlu membuat akun di PubNub, Anda dapat menggunakan akun saya untuk proposal demo.
4.- Pengontrol Rumah menggunakan Arduino Yun.
Kami akan menggunakan Arduino Yun karena memiliki perisai ethernet di dalamnya dan memiliki mesin linux kecil di mana kami akan mengeksekusi python untuk menangani beberapa tindakan.
Ini mengontrol relai untuk lampu, membaca sensor suhu dan kelembaban, mengaktifkan bel untuk alarm, dan memanipulasi webcam untuk mengambil foto keamanan.
Untuk modul jarak jauh, lihat pelengkap saya, Modul Jarak Jauh Pengontrol Rumah Arduino proyek di URL ini.
Instal semua perangkat lunak yang diperlukan
Pada titik ini Anda dapat mengambil dua opsi satu untuk proposal demo, gunakan keterampilan Alexa saya, instal dan gunakan atau opsi dua Anda dapat menjadikan keterampilan pribadi Anda.
Jelajahi aplikasi Alexa dengan url . ini , di bagian itu pilih Keterampilan di menu, Cari Arduino dan dalam daftar Anda melihat keterampilan dengan nama "Arduino Home Controller ", klik di kartu keterampilan dan klik tombol "Aktifkan" untuk menginstal.
Atau Anda perlu pergi ke Amazon Skill Store menggunakan tautan . ini dan tekan tombol "Aktifkan"
Anda perlu menautkan akun Amazon Anda karena kami akan menggunakan alamat email Anda seperti ID untuk semua perintah yang dikirim ke Arduino. Perhatikan bahwa kami tidak akan menggunakan alamat ini untuk mengirim email, hanya akan menggunakan seperti ID.
Skill diinstal dan ditautkan ke akun Amazon dan terhubung ke fungsi lambda saya di AWS cloud.
1.- Buat a keterampilan
Anda perlu mendaftar dan membuat akun pengembang gratis di situs https://developer.amazon.com/home.html
1.1.- Setelah Login masuk ke Alexa opsi menu dan pilih di Alexa Skills Kit tombol "Mulai"
1.2.- Selanjutnya klik tombol "Tambahkan Keterampilan Baru" untuk membuat keterampilan baru.
1.3.- Di Buat Keterampilan Alexa Baru bagian Anda harus:
Keterampilan baru telah dibuat dan Anda melihat bidang baru Id Aplikasi
amzn1.ask.skill.6e22e052-c32f-433c-8d39-dc94a77a4adb
Ini digunakan untuk menghubungkan antara keterampilan dan fungsi lambda, kami menggunakannya nanti di bagian tutorial 2.5.
1.4.- Model Interaksi di sini menentukan bagaimana Anda berinteraksi dengan keterampilan berdasarkan definisi maksud, celah, dan ucapan.
Di Model Interaksi opsi menu salin dan tempel skema Json ini di Skema Intent.
{ "niat":[ { "slot":[ { "name":"light", "type":"States" }, { "name":"yang", "type":" HabRooms" } ], "intent":"LightIntent" }, { "slots":[ { "name":"alarm", "type":"States" } ], "intent":"AlarmIntent" }, { " maksud":"TakePhotoIntent" }, { "intent":"GetTemperatureIntent" }, { "intent":"GetHumidityIntent" }, { "intent":"AboutIntent" }, { "intent":"AMAZON.HelpIntent" }, { "intent":"AMAZON.CancelIntent" }, { "intent":"AMAZON.StopIntent" } ]}
Tentukan beberapa slot yang diperlukan seperti Serikat dan HabRooms dalam Jenis Slot Kustom.
Definisikan semua ucapan seperti model percakapan di Contoh Ucapan , salin dan tempel daftar ini.
LightIntent Putar {which} light {light}LightIntent Setel {which} light {light}AlarmIntent Putar alarm {alarm}AmbilPhotoIntent Ambil FotoAmbilPhotoIntent Ambil Foto KeamananDapatkanTemperatureIntent Membaca SuhuDapatkanHumidityIntent Membaca KelembabanTentangNiat Ceritakan tentangTentangIntent Tentang
Sebelum melanjutkan ke bagian berikutnya, Konfigurasi, kita perlu membuat Fungsi Lambda karena kita membutuhkan tautan keterampilan dan fungsi lambda.
2.- Membuat Fungsi Lambda
Anda perlu mendaftar dan membuat akun di AWS Console menggunakan url https://aws.amazon.com/console/
2.1.- Pilih Layanan di atas menu dan Lambda di menu bilah kiri.
2.2.- Pilih di bilah kiri Fungsi dan klik tombol "Buat fungsi".
2.3.- Setel data ini :
Ini akan membuka jendela baru di mana Anda harus memilih nilai berikut:
{ "Versi":"2012-10-17", "Pernyataan":[ { "Efek":"Izinkan", "Tindakan":[ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource":"arn:aws:logs:*:*:*" }, { "Effect":"Allow", "Action":[ "iot:UpdateThingShadow" ], "Resource" :"*" } ]}
Untuk menyimpan, tekan tombol "Tambah" dan kembali ke Buat Fungsi halaman dan pilih lambda_basic_execution di Peran yang ada lapangan.
2.4.- TestSkillLambda fungsi telah dibuat dan Anda melihat halaman perancangnya.
2.5.- Pilih dari bilah menu kiri Alexa Skills Kit dan tambahkan ke tambahkan pemicu daerah yang dibatasi.
Klik Perangkat Keterampilan Alexa kotak dan gulir ke bawah ke Konfigurasikan pemicu pilihan, pilih Aktifkan dan di ID Keterampilan bidang salin dan tempel ID Aplikasi nilai simpan nanti, lihat bagian tutorial nomor 1.3.
Saat ini kami menghubungkan fungsi lambda dengan skill menggunakan Application atau Skill ID.
Tekan tombol "Simpan" dan Alexa Skills Kit disimpan dan berfungsi keterampilan yang diketahui lambda dan ditautkan.
2.6.- Gulir ke bawah ke Kode fungsi bagian dan setel bidang:
Editor kode akan terbuka dan Anda akan melihat folder dan file yang diunggah.
Pilih file index.js ini berisi semua implementasi fungsi lambda.
Anda harus mengubah baris 23, salin dan tempel ID Aplikasi yang sama digunakan nanti di bagian tutorial nomor 1.3.
Tekan tombol "Simpan" dan fungsi lambda diaktifkan untuk menerima perintah keterampilan.
var APP_ID =amzn1.ask.skill.6e22e052-c32f-433c-8d39-dc94a77a4adb
Di bagian atas halaman di atas tombol "Simpan" Anda akan melihat ARN (Amazon Resource Name) itu adalah ID fungsi lambda daripada yang akan kita gunakan di Konfigurasi bagian di halaman Keterampilan.
3.- Kembali ke definisi Keterampilan
3.1.- Pilih Konfigurasi bagian, di EndPoint pilih AWS Lambda ARN, salin dan tempel string ARN di atas di Default bidang. Ini adalah tindakan terakhir untuk menghubungkan keterampilan dan fungsi lambda, keterampilan yang diketahui fungsi lambda dan ditautkan.
3.2.- Gulir ke bawah ke Penautan Akun bagian dan salin dua URL Pengalihan pertama, Anda membutuhkan mereka untuk mengonfigurasi profil keamanan.
Sebelum melanjutkan dengan Konfigurasi keterampilan, kita perlu menentukan profil keamanan yang digunakan untuk menautkan keterampilan dan akun Amazon di Aplikasi Alexa.
4.- Buat Profil Keamanan
Di konsol pengembang yang sama yang digunakan untuk membuat keterampilan, pilih Aplikasi &Layanan dan Masuk dengan Amazon dan tekan tombol "Buat a Baru Keamanan Profil"
4.1.- Pengelolaan Profil Keamanan halaman memungkinkan Anda membuat profil dengan semua keamanan OAuth 2.0 untuk menautkan keterampilan dengan akun Amazon Anda.
4.2.- Isi semua kolom dengan data ini:
4.3.- Saat menyimpan semua data atau mengedit profil keamanan, dua bidang baru menunjukkan data penting, ID Klien dan Rahasia Klien . Anda membutuhkannya untuk konfigurasi keterampilan akhir.
4.4.- Tentukan url daftar putih, pilih tab Pengaturan Web.
5.- Menyelesaikan pembuatan keterampilan
5.1.- Kembali ke definisi keterampilan, pilih Konfigurasi bagian dan gulir ke bawah ke Penautan Akun .
5.2.- Lanjutkan dengan penautan Akun:
5.3.- Bidang Global adalah bagian yang digunakan untuk mendokumentasikan keterampilan.
5.4.- Bagian terakhir Privasi &Kepatuhan
6.- Instal TestSkill di Aplikasi Alexa
6.1- Saat Anda menyimpan keterampilan, Anda dapat membuka Aplikasi Alexa di https://alexa.amazon.com/ pilih di menu bilah kiri opsi Keterampilan , klik tombol di kanan atas "Keterampilan Anda" dan filter Keterampilan Pengembang Anda dapat melihat TestSkill kartu. Perhatikan pesan yang diperlukan untuk menghubungkan akun.
6.2.- Jika Anda mengklik kartu TestSkill halaman deskripsi menampilkan semua informasi tentang keterampilan, klik tombol "Aktifkan".
6.3.- Karena definisi yang diperlukan penautan akun, Anda telah mengarahkan ulang ke halaman kredensial masuk Amazon untuk menautkan keterampilan dengan akun Amazon Anda.
Jika info Login divalidasi, Anda melihat halaman ini yang menunjukkan bahwa keterampilan terkait dengan akun Amazon Anda.
6.4.- Keterampilan selesai, dipasang dan ditautkan ke akun Amazon Anda dan terhubung ke fungsi Lambda.
Anda dapat menguji katakan Alexa, tanyakan Uji Keterampilan dan selamat datang di Arduino Home Controller karena semua dialognya sama.
Konfigurasi Arduino Yun
Jika Anda baru pertama kali menggunakan Arduino Yun, Anda perlu mempersiapkannya sebelum mengunggah sketsa.
Saya sarankan lihat panduan atau tutorial Greg Baugues Memulai dengan Arduino Yun – Arduino dengan WiFi. Terima kasih kepada pengguna Hackster @BenEagen karena telah menemukan panduan ini.
Untuk mengambil foto dan mengirim email dengan itu kita perlu menginstal perangkat lunak tambahan. Kami juga akan menguji kamera USB untuk melihat apakah driver berfungsi dengan benar. Sambungkan webcam USB di port usb Arduino Yun.
Untuk melakukannya, sambungkan ke Arduino Yun dengan terminal:
ssh [email protected]
Kata sandi default adalah arduino.
Jika koneksi baik-baik saja, Anda akan melihat perintah OpenWRT Linux:
Pasang menghasilkan gambar perangkat lunak
Mulai dengan pembaruan pengelola paket:
opkg update
Instal driver UVC:
opkg install kmod-video-uvc
Instal paket python-openssl:
opkg install python-openssl
Kita juga membutuhkan utilitas fswebcam yang akan kita gunakan untuk mengambil gambar dari terminal:
opkg install fswebcam
Pastikan kartu SD terpasang ke Arduino Yun, Anda dapat mengujinya dengan menjalankan perintah ini:
mount
Jika Anda melihat daftar perangkat seperti /dev/sda1 pada /mnt/sda1 ketik vfat Kartu SD baik-baik saja.
Untuk menguji kamera dan mengambil gambar, sangat mudah. Cukup ketik:
cd /mnt/sda1fswebcam test.png
Anda akan melihat beberapa informasi yang ditampilkan, bersama dengan beberapa kesalahan, tetapi jangan khawatir tentang itu. Yang penting adalah melihat baris-baris ini:
--- Membuka /dev/video0...Mencoba modul sumber v4l2.../dev/video0 dibuka.
Untuk memeriksa apakah gambar telah diambil dengan benar, lepaskan kartu SD dari Arduino Yun dan baca menggunakan komputer Anda. Anda akan melihat gambar yang muncul di akar kartu SD "test.png ".
Cukup buka untuk memastikan itu diambil dengan benar dan tidak rusak.
Pasang mengirim perangkat lunak email
Dengan SD di komputer Anda, salin file python AHC_SendEmail.py dan ubah email dan kata sandi Anda dari akun gmail baris 11, 12 dan 13, jika Anda memiliki penyedia email lain, ubah informasi server di baris 36.
Ekstrak SD dari komputer dan masukkan ke slot SD di Arduino Yun. Pada terminal yang terhubung ke Arduino Yun, jalankan perintah :
cd /mnt/sda1python /mnt/sda1/AHC_SendEmail.py /mnt/sda1/ test.png
Jika semuanya baik-baik saja, Anda harus menerima email dengan foto Anda.
Hubungkan semua perangkat ke Arduino Yun
Berdasarkan skema elektronik, sambungkan semua perangkat terutama sensor DHT11 karena kami membutuhkannya untuk membaca suhu dan kelembaban serta bel untuk menguji suara alarm.
Pasang sketsa berkas ArduinoHomeMQTT.ino
Saya membuat libraries.zip file dengan semua perpustakaan yang dibutuhkan oleh file ini, Anda dapat mengunduhnya dari situs GitHub saya dan unzip di direktori perpustakaan Arduino IDE.
Perpustakaan termasuk dalam libraries.zip di dalam ArduinoHomeMQTT folder.
ArduinoJson --> digunakan untuk memanipulasi konten JsonDHT_sensor_library --> digunakan untuk menangani DHT sensorpubsubclient-master --> digunakan untuk menghubungkan, mempublikasikan, dan berlangganan PubNub(c)
Buka Arduino IDE 1.6.x, di tools pilih "Board:Arduino Yun".
Muat file ArduinoHomeMQTT.ino dan di IDE, modifikasi baris 16 dengan email Amazon Anda yang digunakan saat akun tertaut di Amazon App skill diaktifkan.
Opsi ini mengidentifikasi pengontrol Anda saat AWS mengirim pesan MQTT ke broker.
Ubah baris 50 dengan uuid Anda untuk mengidentifikasi pengontrol Anda di PubNub(c), Anda dapat membuka situs ini dan salin tempel uuid yang dibuat secara online.
Sekarang simpan dan unggah sketsa dan ketika membuka jendela monitor Arduino IDE Anda dapat melihat Arduino Yun terhubung ke broker PubNub(c) dan sensor diinisialisasi.
Uji semua ucapan dari Alexa Echo Dot
Keterampilan Alexa "Pengontrol Rumah Arduino " keterampilan menangani daftar ucapan ini , Anda dapat melihatnya di keterampilan Aplikasi Alexa di bagian deskripsi. Anda dapat menguji semua dan melihat di monitor serial ID Arduino semua pesan yang diterima dan dikirim ke broker PubNub(c).
Kontrol lampu:
==> "Alexa, minta arduino home untuk menyalakan lampu kamar"==> "Alexa, minta arduino home untuk mematikan lampu kamar"==> "Alexa, minta arduino home untuk menyalakan lampu dapur "==> "Alexa, minta arduino home untuk mematikan lampu dapur"==> "Alexa, minta arduino home untuk menyalakan lampu garasi"==> "Alexa, minta arduino home untuk mematikan lampu garasi"==> " Alexa, minta arduino home untuk menyalakan lampu ruang tamu"==> "Alexa, minta arduino home untuk mematikan lampu ruang tamu"
Kontrol alarm:
==> "Alexa, minta arduino home untuk menyalakan alarm"==> "Alexa, minta arduino home untuk mematikan alarm"
Memindai Suhu dan Kelembaban:
==> "Alexa, minta arduino home untuk membaca suhu"==> "Alexa, minta arduino home untuk membaca kelembaban"
Ambil foto keamanan:
==> "Alexa, minta arduino pulang untuk mengambil foto"
Tentang dan Bantuan
==> "Alexa, tanya arduino home tentang"==> "Alexa, tanya arduino home help"
Detail perangkat lunak
Anda dapat mengunduh semua file untuk proyek ini dari situs Github saya.
Folder berisi penjelasan
ArduinoHomeMQTT --> ino file dan library untuk Arduino Yun Home Controller
lambda --> Fungsi Lambda di Node.js untuk diterapkan di AWS Lambda, mencakup semua node_modules yang diperlukan, lihat opsi 2 di bagian instal semua perangkat lunak.
python -> file python untuk mengirim email dengan foto terlampir.
skema --> Fritzing(c) file skema elektronik.
Alur Kerja Pengontrol Rumah Arduino tampilkan Anda how files interact .
( 1 ) Amazon Echo Dot send command voice and it is received by Arduino Home Controller skill.
( 2 ) The skill call Lambda function file index.js .
( 3 ) The Lambda function file is developer in Node.Js, uses some node modules and was hosted at Amazon Web Service (AWS).
( 4 ) The lambda function interpret all intents and convert them to MQTT Json message and send it to PubNub(c) broker. This message have the format :
{ "topic" :Topic_xxxx, "command" :on or off, "id" :email address}
The topic Topic_xxxx may be:
Topic_room --> turn on/off room lightTopic_livingroom --> turn on/off living room lightTopic_kitchen --> turn on/off kitchen lightTopic_garage --> turn on/off garage lightTopic_alarm --> turn on/off alarmTopic_temperature --> read temperatureTopic_humidity --> read humidityTopic_photo --> take and send photo by email
The command may be on or off .
( 5 ) The message is send using channel AHC_IOC_01. Channel AHC_IOC_02 is used to receive temperature or humidity values.
( 6 ) The Arduino Yun sketch ArduinoHomeMQTT.ino connect to broker and subscribe or publish to channels and receive or send messages.
( 7 ) Using a bridge the arduino sketch communicate with linux OpenWRT for wan or lan connect and to execute some commands.
( 8 ) If arduino need send an email uses the python file AHC_SendEmail.py , if needs take a photo call fswebcam programs located inside linux OpenWRT.
Hardware details
The heart of hardware is the Arduino Yun.
It uses several digital pins to control each device :
Pin 2 :connected to DHT11 sensorPin 8 :activate the buzzer alarm with help of NPN transistor Pin 9 :control room lightPin 10:control kitchen lightPin 11:control garage lightPin 12:control living room light
The webcam is connected to usb port.
To power all devices the controller use 12 volts Dc power and convert to 5 volts using an Dc to Dc power converter.
I make an arduino shield using the Arduino Proto Shield with all connectors and interface electronic to sensor, buzzer alarm and power supply. It have space for new sensors to extending the controller.
Put the Arduino Yun, Proto shield, Relays and power regulator inside a plastic box with alarm, webcam and sensor outside, and make all connections like mention in electronic schematic.
For demo and video propose I use four leds in prothoboard simulating light bulbs in each house rooms.
Thanks for read this guide, I appreciate your time, If you have any suggestions please contact me.
I make this project in memory of my Dad, he dieds last year, R.I.P Dad.
//// ArduinoHomeMQTT// v2.1//// Copyright (C)2018 Jose Cruz. All right reserved// web:https://sites.google.com/view/raeiot/home//#include#include #include #include #include // Your Amazon email linked skill#define MyID "YOUR AMAZON EMAIL LINKED IN ALEXA APP"// DHT11 sensor data pin#define DHTPIN 2// DHT 11 sensor type#define DHTTYPE DHT11// Initialize DHT sensorDHT dht(DHTPIN, DHTTYPE);// Alarm control pin#define alarm 8// Light control pins#define room_light 9#define kitchen_light 10#define garage_light 11#define livingroom_light 12// PubNub MQTT Server address and portint mqtt_server_port =1883;const char* mqtt_server ="mqtt.pndsn.com";// Suscribe topicconst char* topic ="AHC_IOT_01";// Publish topicconst char* topic2 ="AHC_IOT_02";// PubNub publisher ID// pub-c-e93def7f-95aa-475a-aa60-cc3cd32ee8a7/// PubNub suscriber ID// sub-c-ec04dbbc-0893-11e8-8e75-cea83f8405bb/// UUID generated onlyne https://www.uuidgenerator.net/// // PubNub Client ID// clientId =pubID + subID + uuid;c onst char* clientId ="pub-c-e93def7f-95aa-475a-aa60-cc3cd32ee8a7/sub-c-ec04dbbc-0893-11e8-8e75-cea83f8405bb/YOUR UUID GENERATED";// Define de Yun ethernet clientYunClient ethClient;// Define PubNub pub and sub clientPubSubClient client(ethClient);// Picture processProcess picture;// FilenameString filename;// Path for image fileString path ="/mnt/sda1/";// Create an image file and sent by emailvoid TakePhoto() { // Generate filename with timestamp filename =""; picture.runShellCommand("date +%s"); while (picture.running()); while (picture.available()> 0) { char c =picture.read(); filename +=c; } filename.trim(); filename +=".jpg"; // Take picture picture.runShellCommand("/usr/bin/fswebcam -i 0 --jpeg 95 --no-banner --fps 1 -S 1 -r 352x288 --save " + path + filename); while (picture.running()); //Send it by email picture.runShellCommand("python /mnt/sda1/AHC_SendEmail.py " + path + " " + filename); while (picture.running());}//***********************// Send temperature//***********************void SendTemperature(){ char cstr[16]; // Read temperature as Celsius (the default) float t =dht.readTemperature(); // Serial.print("Temperature:"); // Serial.print(t); // Serial.println(" *C"); client.publish(topic2, itoa(t, cstr, 10)); //Serial.print("Temperature sent..."); //Serial.println(cstr);}//***********************// Send humidity//***********************void SendHumidity(){ char cstr[16]; float h =dht.readHumidity(); //Serial.print("Humidity:"); //Serial.print((int)h); //Serial.print(" %\t"); client.publish(topic2, itoa(h, cstr, 10)); //Serial.print("Humidity sent..."); //Serial.println(cstr);}//Callback function for msg receive handlevoid callback(char* topic, byte* payload, unsigned int length) { Serial.print("Message arrived ["); Serial.print(topic); Serial.print("] "); for (int i =0; i jsonBuffer; JsonObject&root =jsonBuffer.parseObject((char[])payload); String alexa_topic =root["topic"]; String alexa_command =root["command"]; String alexa_id =root["id"]; //Serial.println(alexa_topic); //Serial.println(alexa_command); if (alexa_id.equals(MyID)) { //Handle all received msgs topic from MQTT if (alexa_topic.endsWith("Topic_room")) { digitalWrite(room_light, (alexa_command.endsWith("on") ? LOW :HIGH)); } else if (alexa_topic.endsWith("Topic_kitchen")) { digitalWrite(kitchen_light, (alexa_command.endsWith("on") ? LOW :HIGH)); } else if (alexa_topic.endsWith("Topic_garage")) { digitalWrite(garage_light, (alexa_command.endsWith("on") ? LOW :HIGH )); } else if (alexa_topic.endsWith("Topic_living room")) { digitalWrite(livingroom_light, (alexa_command.endsWith("on") ? LOW :HIGH)); } else if (alexa_topic.endsWith("Topic_temperature")) { SendTemperature(); } else if (alexa_topic.endsWith("Topic_humidity")) { SendHumidity(); } else if (alexa_topic.endsWith("Topic_alarm")) { digitalWrite(alarm, (alexa_command.endsWith("on") ? HIGH :LOW)); } else if (alexa_topic.endsWith("Topic_photo")) { TakePhoto(); } }}//Reconnect to MQTT broker if lost connectionvoid reconnect() { // Loop until we're reconnected while (!client.connected()) { Serial.print("Attempting MQTT connection..."); // Attempt to connect if (client.connect(clientId)) { Serial.println("MQTT broker connected"); client.subscribe(topic); } else { Serial.print("Failed, rc ="); Serial.print(client.state()); Serial.println(" try again in 5 seconds"); // Wait 5 seconds before retrying delay(5000); } }}void setup(){ Bridge.begin(); penundaan(2000); Serial.begin(115200); Serial.println("Init Arduino Home Controller v2.1..."); pinMode(alarm, OUTPUT); pinMode(room_light, OUTPUT); pinMode(kitchen_light, OUTPUT); pinMode(garage_light, OUTPUT); pinMode(livingroom_light, OUTPUT); digitalWrite(room_light, HIGH); digitalWrite(kitchen_light, HIGH); digitalWrite(garage_light, HIGH ); digitalWrite(livingroom_light, HIGH); // Define PubNub MQTT broker client.setServer(mqtt_server, mqtt_server_port); client.setCallback(callback); client.connect(clientId); Serial.println("Connected to PubNub MQTT broker OK ..."); client.subscribe(topic); Serial.println("Suscribe to topic at MQTT broker Ok ..."); dht.begin(); //Wait for sensor initialize delay(4000); Serial.println("DHT sensor Ok ...");}void loop(){ if (!client.connected()) { reconnect(); } client.loop();}
import smtplibimport sysimport timefrom email.MIMEMultipart import MIMEMultipartfrom email.MIMEText import MIMETextfrom email.MIMEBase import MIMEBasefrom email import encoders fromaddr ="[email protected]"toaddr ="[email protected]"emailpassword ="YOUR PASSWORD"subject ="Arduino Home Controller by Alexa Skill"body ="Photo taken in " + time.strftime('%a, %d %b %Y %H:%M:%S %Z(%z)')filedir =sys.argv[1]filename =sys.argv[2]msg =MIMEMultipart() msg['From'] =fromaddrmsg['To'] =toaddrmsg['Subject'] =subject msg.attach(MIMEText(body, 'plain')) attachment =open(filedir + filename, "rb") part =MIMEBase('application', 'octet-stream')part.set_payload((attachment).read())encoders.encode_base64(part)part.add_header('Content-Disposition', "attachment; filename=%s" % filename) msg.attach(part) server =smtplib.SMTP('smtp.gmail.com', 587)server.starttls()server.login(fromaddr, emailpassword)text =msg.as_string()server.sendmail(fromaddr, toaddr, text)server.quit()
// Alexa SDK for Arduino Home Controller// Copyright (c) 2014-2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. Use is subject to license terms.// Jose Cruz https://sites.google.com/view/jriot // Define connection to PubNub var PubNub =require("pubnub");var pubnub =new PubNub({ ssl:true, publish_key:"pub-c-e93def7f-95aa-475a-aa60-cc3cd32ee8a7", subscribe_key:"sub-c-ec04dbbc-0893-11e8-8e75-cea83f8405bb", uuid:"YOUR UUID"});// Define the PubNub channelvar channel ='AHC_IOT_01';// Used to receive some values (temperature, humidity)var channel2 ='AHC_IOT_02';// Define slot states for light and alarm turn on/offvar slotStates =['on', 'off'];// App ID for the skillvar APP_ID ='YOUR APP ID FOR THE SKILL';// The AlexaSkill prototype and helper functionsvar AlexaSkill =require('./AlexaSkill');var ArduinoHomeSkill =function() { AlexaSkill.call(this, APP_ID);};//Listener for suscribe and receive temperature and humidityvar mqttListener;var access_token;var url;var https =require("https");function SendMessage(topicname, commandvalue, speechOutput, iresponse) { https.get(url, res => { res.setEnc oding("utf8"); let body =""; res.on("data", data => { body +=data; }); res.on("end", () => { pubnub.publish({ //Publishes the turn message to my PubHub Device. channel:channel, message:{ "topic":topicname, "command":commandvalue, "id":JSON.parse(body).email } }).then((response) => { console.log("message Published w/ timetoken", response.timetoken); if (speechOutput) iresponse.tell(speechOutput); }).catch((error) => { console.log("publishing failed w/ status:", error); iresponse.ask("Sorry, I didn't catch what you said"); }); }); });}/// Extend AlexaSkillArduinoHomeSkill.prototype =Object.create(AlexaSkill.prototype);ArduinoHomeSkill.prototype.constructor =ArduinoHomeSkill;ArduinoHomeSkill.prototype.eventHandlers.onSessionStarted =function(sessionStartedRequest, session) { // SetUserID(); console.log("ArduinoHomeSkill onSessionStarted requestId:" + sessionStartedRequest.requestId + ", sessionId:" + session.sessionId); // console.log("Init..."); //Delete all listeners and suscribes defined pubnub.removeListener(mqttListener); pubnub.unsubscribeAll(); // console.log("Init...Ok");};//-------->This is invoked by invocation word "Arduino Home"ArduinoHomeSkill.prototype.eventHandlers.onLaunch =function(launchRequest, session, response) { console.log("ArduinoHomeSkill onLaunch requestId:" + launchRequest.requestId + ", sessionId:" + session.sessionId); //if no amazon token, return a LinkAccount card if (session.user.accessToken ==undefined) { response.tellWithCardLink('To start using this skill, please use the companion app to authenticate on Amazon.'); kembali; } var speechOutput ="Welcome to Arduino Home Controller. What would you like to do?"; var repromptText ="I am ready"; response.ask(speechOutput, repromptText);};ArduinoHomeSkill.prototype.eventHandlers.onSessionEnded =function(sessionEndedRequest, session) { console.log("ArduinoHomeSkill onSessionEnded requestId:" + sessionEndedRequest.requestId + ", sessionId:" + session.sessionId); console.log("End...");};//*** Define all intent handlersArduinoHomeSkill.prototype.intentHandlers ={ //*** AboutIntent handler "AboutIntent":function(intent, session, response) { var myText; console.log("in about"); myText ="Arduino Home Controller skil let you control internet connected devices. It controls Lights at room, kitchen, garage or living room), read a temperature sensor to scan home temperature, read Humidity sensor to scan home humidity, uses webcam to take a home security photo and sent it by email and activate an alarm to alert some events. It uses PubNub site to manipulate all messages send by Alexa with Lambda function. Please check information at skill page for more details. What would you like to do?"; response.ask(myText); kembali; }, //*** LightIntent handler "LightIntent":function(intent, session, response) { var slotHabRooms =['room', 'kitchen', 'garage', 'living room']; var lightSlot =intent.slots.light; var lightSlotValue =lightSlot ? lightSlot.value :""; var whichSlot =intent.slots.which; var whichSlotValue =whichSlot ? whichSlot.value :""; if (lightSlotValue &&whichSlotValue &&slotStates.indexOf(lightSlotValue.toLowerCase())> -1 &&slotHabRooms.indexOf(whichSlotValue.toLowerCase())> -1) { SendMessage('Topic_' + whichSlotValue, lightSlotValue, "The light is now " + lightSlotValue, response); } else { response.ask("Sorry, I didn't catch what you said"); } }, //*** AlarmIntent handler "AlarmIntent":function(intent, session, response) { var alarmSlot =intent.slots.alarm; var alarmSlotValue =alarmSlot ? alarmSlot.value :""; if (alarmSlotValue &&slotStates.indexOf(alarmSlotValue.toLowerCase())> -1) { SendMessage('Topic_alarm', alarmSlotValue, "The alarm is now " + alarmSlotValue, response); } else { response.ask("Sorry, I didn't catch what you said"); } }, //*** TakePhotoIntent handler "TakePhotoIntent":function(intent, session, response) { SendMessage('Topic_photo', 'take', "Taken home photo ", response); }, //*** GetTemperatureIntent handler "GetTemperatureIntent":function(intent, session, response) { mqttListener ={ status:function(statusEvent) {}, message:function(message) { // handle message console.log("Receive=", message); var myText ="Inside Temperature is " + message.message + " degrees C"; response.tell(myText); }, presence:function(presenceEvent) { // handle presence } }; pubnub.addListener(mqttListener); pubnub.subscribe({ channels:[channel2] }); SendMessage('Topic_temperature', 'Ok', null, response) }, //*** GetTemperatureIntent handler "GetHumidityIntent":function(intent, session, response) { mqttListener ={ status:function(statusEvent) {}, message:function(message) { // handle message console.log("Receive=", message); var myText ="Inside Humidity is " + message.message + " %"; response.tell(myText); }, presence:function(presenceEvent) { // handle presence } }; pubnub.addListener(mqttListener); pubnub.subscribe({ channels:[channel2] }); SendMessage('Topic_humidity', 'Ok', null, response) }, //*** HelpIntent handler "AMAZON.HelpIntent":function(intent, session, response) { response.ask("With Arduino Home Controller skill and Alexa you can control internet connected devices using an Arduino Yun or Arduino with Ethernet Shield. Please check information at skill page for more details. What would you like to do?"); }, //*** StopIntent handler "AMAZON.StopIntent":function(intent, session, response) { response.tell("Thanks for using Arduino Home Controller. Bye see you later"); }, //*** StopIntent handler "AMAZON.CancelIntent":function(intent, session, response) { response.tell("Thanks for using Arduino Home Controller. Bye see you later"); }, default:function(intent, session, response) { response.ask("Try again"); },};// Create the handler that responds to the Alexa Request.exports.handler =function(event, context) { try { access_token =event['context']['System']['user']['accessToken']; url ='https://api.amazon.com/user/profile?access_token=' + access_token; //console.log("Access Token:", access_token); } catch (error) { console.log(error); } // Create an instance of Arduino Home Skill var ArduinoHomeControl =new ArduinoHomeSkill(); ArduinoHomeControl.execute(event, context); //console.log('AWSrequestID =', context.awsRequestId);};
Proses manufaktur
Komponen dan persediaan Arduino Nano R3 × 1 Transistor MOSFET, Pengalihan × 4 Espressif ESP8266 ESP-01 × 1 LCD alfanumerik, 20 x 4 × 1 Driver MOSFET Ganda, Daya × 1 SparkFun Pemecahan Sensor Arus Rendah - ACS712 × 1 Dioda TVS, 2 P
Komponen dan persediaan Arduino Yun × 1 Arduino Mega 2560 × 1 Arduino UNO × 1 motor servo × 1 Adafruit LCD Standar - 16x2 Putih di Atas Biru × 2 keypad numerik × 1 Buzzer × 1 Sensor Suhu &Kelembaban DHT11 (4 pin) × 1
Komponen dan persediaan Arduino UNO × 1 Espressif ESP8266 ESP-01 × 1 Sensor Suhu &Kelembaban DHT11 (4 pin) × 1 ControlEverything.com 4-CHANNEL RELAY CONTROLLER UNTUK I2C × 1 Sensor penghalang IR × 1 kamera × 1 Kabel jumper (generik)
Komponen dan persediaan Arduino UNO × 1 Adafruit RGB Backlight LCD - 16x2 × 1 Breadboard (generik) × 1 Resistor 220 ohm × 1 Sakelar Tombol Tekan SparkFun 12mm × 1 Kabel jumper (generik) × 1 Kabel USB-A ke B × 1 Aplik