Isi kandungan:

MONITOR CLOUD Dengan AWS & ARDUINO - Electric Boy: 6 Langkah
MONITOR CLOUD Dengan AWS & ARDUINO - Electric Boy: 6 Langkah

Video: MONITOR CLOUD Dengan AWS & ARDUINO - Electric Boy: 6 Langkah

Video: MONITOR CLOUD Dengan AWS & ARDUINO - Electric Boy: 6 Langkah
Video: Best Programming Languages #programming #coding #javascript 2024, November
Anonim
MONITOR CLOUD Bersama AWS & ARDUINO - Electric Boy
MONITOR CLOUD Bersama AWS & ARDUINO - Electric Boy

Ini adalah projek yang mudah - nyalakan apabila ada yang tidak kena … Menjadi semakin tidak senang dengan pemberitahuan dengan begitu banyak papan pemuka di komputer kita hari ini, bagaimana kita memastikan bahawa kita tidak ketinggalan yang penting. Jawapannya adalah petunjuk status fizikal. Atau lebih khusus untuk tugas, Monitor Cloud, yang boleh duduk di atas meja anda - selalu dilihat. Seperti namanya, monitor akan membantu mengawasi kesihatan perkhidmatan cloud anda (… atau apa-apa lagi, langit adalah hadnya, maafkan). Walaupun anda, seperti saya, perlu membuatnya? Walaupun tidak, anda mungkin mempunyai idea untuk projek IoT masa depan anda.

Sekiranya anda sudah bersedia, mari mulakan!

Langkah 1: Komponen, Bekalan, Alat yang Diperlukan, Aplikasi dan Perkhidmatan Dalam Talian

KOMPONEN DAN BEKALAN

_ Arduino Micro e Genuino Micro (1 unit) … atau Arduino kecil yang serasi - dalam kes saya freetronics LeoStick (https://www.freetronics.com.au/collections/arduino/products/leostick)

_ ThingM BlinkM - LED RGB terkawal I2C (1 unit)

_ Lampu awan mini (1 unit)… atau kapal lut cahaya pilihan anda

_ Kabel USB-A ke B (1 unit) … atau kabel USB lama dengan palam jenis-A

ALAT DIPERLUKAN

_ Pateri pematerian (generik)

PERKHIDMATAN APLIKASI & ONLINE

_ Perkhidmatan Web Amazon AWS Lambda (https://aws.amazon.com/it/lambda/)

_ Perkhidmatan Web Amazon AWS IoT (https://aws.amazon.com/it/iot/)

Langkah 2: Perkakasan

Perkakasan
Perkakasan
Perkakasan
Perkakasan

Lampu malam sudah dilengkapi dengan LED terpasang - putih sejuk dalam beg saya. Saya fikir akan menyenangkan untuk menunjukkan status yang berbeza dengan warna yang berbeza. Jadi saya hanya menyimpan selongsong berbentuk awan. Untuk otak operasi, saya memilih serasi Arduino terkecil yang saya ada: Freetronics LeoStick telah menjadi platform prototaip pilihan saya selama bertahun-tahun dan saya mempunyai banyak alat ganti. Ia dilengkapi dengan barang-barang yang baik: pembesar suara piezo, dua LED RGB (satu diikat dengan kuasa, walaupun RX dan TX) dan yang terbaik, anda hanya boleh memasangkannya ke port USB - tidak diperlukan FTDI atau kabel luaran. Ia juga serasi dengan papan roti kecil.

Mengapa saya tidak memilih ESP8266? Untuk benar-benar tanpa wayar, anda mungkin memotong kabel kuasa - yang menjadikan keadaan menjadi lebih rumit untuk menambahkan bateri dan ketidakcukupan pengisian. Oleh kerana monitor awan akan duduk di sebelah komputer saya, lebih mudah menggunakan kuasa USB. Menyiapkan sambungan Wi-Fi tidak selalu lurus ke hadapan. Berdasarkan ATmega32u4, Arduino Micro dan LeoStick berkongsi keanehan memiliki data I2C pada D2 dan jam pada D3. Ini menjadi relevan semasa menyambungkan BlinkM RGB LED. Tidak seperti papan Atmega328 biasa di mana anda hanya boleh memasang perisai BlinkM ke tajuk A2.. A5, ini tidak akan berfungsi di sini (saya tidak peduli dengan perpustakaan I2C yang lembut).

Dengan mematikan header lelaki VCC dan GND di BlinkM, saya kemudian dapat memanjangkannya dengan wayar dan menyimpan semuanya dalam pakej kecil yang boleh dipasang. BlinkM mempunyai pengawal mikro sendiri di atas kapal dan membolehkan aplikasi lanjutan: mis. main corak warna skrip tanpa disambungkan Arduino. Saya hampir merasakan WS2812 (Adafruits NeoPixels hebat) akan memberikan perkhidmatan yang lebih baik kepada saya - sayangnya saya tidak menyediakannya. Untuk menyelesaikan bit perkakasan, saya memotong hujung yang berlawanan dari palam USB jenis-A lelaki, memasukkannya melalui lubang pra-bor berhampiran pangkal cahaya awan dan menyisipkan wayar ke LeoStick (merah: 5V, putih: Data-, hijau: Data +, hitam: Tanah).

Langkah 3: Senibina Penyelesaian

Senibina Penyelesaian
Senibina Penyelesaian
Senibina Penyelesaian
Senibina Penyelesaian

Satu-satunya syarat kuat yang saya tetapkan pada diri saya, adalah agar monitor berjalan di belakang firewall. Walaupun ciri penting, ini menjadikan kait web untuk perubahan acara tidak praktikal. Mekanisme pengundian mahal dari segi lalu lintas TCP dan boleh menunda acara bergantung pada frekuensi pengundian.

Penyelesaiannya terdapat di WebSockets yang menyediakan komunikasi dupleks penuh. Perkhidmatan Amazon IoT menyediakan broker mesej yang menyokong MQTT melalui WebSockets. Ternyata, perkhidmatan boleh dipanggil tanpa perlu mengkonfigurasi Perkara, Bayangan, Dasar atau Peraturan.

Terdapat SDK peranti yang tersedia untuk Arduino Yún dan beberapa usaha dilakukan untuk memindahkan SDK ke platform lain seperti ESP8266. Tetapi kerana monitor akan selalu dihubungkan dengan antara muka bersiri, saya memutuskan sejak awal untuk mempunyai aplikasi NodeJS (dijalankan di komputer desktop) untuk menerapkan API klien dan menggunakan Arduino hanya untuk menerima dan memaparkan kod warna. Dengan cara itu perubahan dapat dilakukan dengan mudah dalam JavaScript, tanpa perlu bersusah payah dengan memuat naik firmware. Untuk menguji sedikit contoh infrastruktur diperlukan. Katakan kita mengaktifkan load balancer di zon ketersediaan yang melakukan pemeriksaan kesihatan pada contoh pelayan web dan dasar penskalaan automatik berdasarkan beban CPU. Templat CloudFormation yang sesuai boleh viewed ️ dilihat di Pereka atau ▶ ️ dibuat terus dari konsol. Catatan: beberapa perkhidmatan dalam timbunan ini mungkin dikenakan caj.

Saya memperluas templat dengan sifat untuk fungsi Lambda dan izin yang diperlukan. Nantinya memerlukan titik akhir API IoT REST dimasukkan sebagai parameter. Untuk mengotomatisasi ini, saya menulis skrip shell kecil yang menggunakan CLI untuk meminta ARN (> aws iot menggambarkan-endpoint) dan kemudian memanggil create-stack dengan parameter sebaris. Atau anda masih boleh melakukannya dengan tangan:

// RETRIVE IoT REST API ENDPOINT

aws iot menggambarkan-titik akhir

// CREATE STACK> aws cloudformation create-stack --stack-name MiniCloudMonitor --template-body file: //cfn-template.json --parameters ParameterKey = IotRestApiEndpoint, ParameterValue = {IoT_REST_API_ENDPOINT} --Kapabiliti CAPABILITY_N

// DELETE STACK> aws cloudformation delete-stack --stack-nama MiniCloudMonitor

Sebaik-baiknya saya harus menggunakan ambang penggera yang sama yang mencetuskan penskalaan automatik, kerana juga memanggil fungsi Lambda dan dengan cara itu mengemas kini status monitor. Pada masa ini, ini hanya dapat dilakukan apabila menggunakan SNS sebagai perantaraan. Pada masa ini lapisan tambahan ini terasa berlebihan dan saya memutuskan untuk menggunakan Peraturan kitaran hidup CloudWatch EC2 untuk menghubungi Lambda secara langsung. Namun, saya ingin meneroka pilihan SNS → Lambda pada masa akan datang.

Langkah 4: Perisian

Saya mulakan dengan menulis Sketsa Arduino. Gelung utama () membaca Chars dari sambungan bersiri dan membina String sehingga menerima watak barisan baru. Kemudian diandaikan bahawa kod warna hex telah dikirim dan perintah I2C yang sesuai ditulis ke LED BlinkM. Ini bukan mengenai kecekapan dan kemudahan. Sumber lengkap untuk Sketsa ini dan fail lain boleh didapati di GitHub. Berikut adalah beberapa coretan kod yang berkaitan:

gelung kosong () {

sementara (Bersiri. tersedia ()) {

char inChar = (char) Serial.read ();

jika (dalamChar == '\ n') {

nombor panjang = strtol (inputString.c_str (), NULL, 16);

bait r = nombor >> 16;

bait g = nombor >> 8 & 0xFF;

bait b = nombor & 0xFF;

BlinkM_fadeToRGB (blinkm_addr, r, g, b);

inputString = "";

} lain {

inputString + = inChar;

}

}

}

Aplikasi NodeJS harus melaksanakan antara muka ke AWS dan Arduino. Kemudian dapat dicapai hanya dalam beberapa baris kod ketika menggunakan paket serialport yang sangat baik:

var serialport = memerlukan ('serialport'); port = serialport baru (PORT_COM_NAME, {

baudRate: SERIAL_BAUD_RATE

});

port.on ('buka', fungsi () {

});

port.on ('error', fungsi (err) {

});

Menyambung ke AWS IoT tidak memerlukan banyak usaha. Satu-satunya masalah adalah mengetahui bahawa menggunakan MQTT + WebSockets melalui port 443 memerlukan pengesahan melalui Kunci Akses. SDK akan membaca ini dari pemboleh ubah persekitaran. Mungkin perlu eksport AWS_ACCESS_KEY_ID dan AWS_SECRET_ACCESS_KEY secara eksplisit.

var awsiot = memerlukan ('aws-iot-device-sdk'); var device = awsiot.device ({

clientId: 'MiniCloudMonitor-' + (Math.floor ((Math.random () * 100000) + 1)), wilayah: AWS_REGION, protokol: 'wss', pelabuhan: 443, debug: benar

});

device.on ('connect', fungsi () {

device.subscribe (MQTT_TOPIC);

});

device.on ('message', fungsi (topik, muatan) {

jika (port && payload && topic == MQTT_TOPIC) {

var message = JSON.parse (muatan);

jika (message.hasOwnProperty (MQTT_JSON_KEY))

{kembali;

}

}

});

Fungsi Lambda menerima kod warna sebagai parameter input - tidak cantik, tetapi sangat fleksibel pada tahap ini. Untuk dapat menerbitkan ke topik MQTT, ia membuat objek IotData, yang memerlukan titik akhir API IoT REST. Templat CloudFormation menjaganya semasa membuat timbunan.

var AWS = memerlukan ('aws-sdk'); var mqtt = AWS. IotData baru ({

titik akhir: process.env. MQTT_ENDPOINT});

export.handler = fungsi (peristiwa, konteks, panggilan balik) {

var params = {

topic: process.env. MQTT_TOPIC, muatan: '{ "color \": / "' + event.colour + '\"}', qos: 0

};

mqtt.publish (params, function (err, data) {

panggilan balik (err);

});

};

Langkah 5: Kesimpulannya

Saya benar-benar menikmati membawa acara maya "dilahirkan" di awan ke dalam dunia fizikal. Dan sebagai projek haiwan kesayangan saya, ia sangat menyenangkan. Untuk membawa ini ke tahap seterusnya saya akan mempertimbangkan …

  • meningkatkan kekuatan dan pengendalian pengecualian
  • terokai kaedah yang lebih baik untuk mengintegrasikan metrik awan AWS
  • bereksperimen dengan lebih banyak petunjuk fizikal seperti tolok, graf bar,…
  • mempunyai pilihan untuk berpindah ke platform lain seperti Azure, Google, Heroku,…
  • memantau acara khusus aplikasi untuk Jenkins, GitHub,…

Saya harap anda seronok membaca panduan ini dan mungkin juga mengambil sesuatu yang baru di sepanjang perjalanan. Sekiranya anda dapat memikirkan cara yang berbeza / lebih baik untuk melakukan sesuatu, sila kongsikannya di komen di bawah. Dan tentu saja, jika anda melihat kesalahan, perhatian akan sangat dihargai. Terima kasih kerana meluangkan masa anda.

Disyorkan: