İçindekiler:
- 1. Adım: Bileşenler, Sarf Malzemeleri, Gerekli Araçlar, Uygulamalar ve Çevrimiçi Hizmet
- 2. Adım: Donanım
- Adım 3: Çözüm Mimarisi
- 4. Adım: Yazılım
- Adım 5: Sonuç
Video: AWS & ARDUINO ile BULUT MONİTÖR - Electric Boy: 6 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:20
Bu basit bir proje - bir şeyler ters gittiğinde bir ışık açın… Bu günlerde bilgisayarlarımızda bu kadar çok gösterge panosu varken bildirimlere karşı giderek daha fazla uyuşuyor, gerçekten önemli olanları gözden kaçırmadığımızdan nasıl emin olabiliriz. Cevap fiziksel bir durum göstergesidir. Veya göreve daha özel olarak, masanızın üzerine oturabilen bir Bulut Monitörü - her zaman görüş alanınızda. Adından da anlaşılacağı gibi, monitör, bulut hizmetlerinizin sağlığına dikkat etmenize yardımcı olacaktır (… Benim gibi senin bile bir tane yapman gerekiyor mu? Olmasa bile, gelecekteki IoT projeniz için bir fikriniz olabilir.
Pekala, hazırsanız başlayalım!
1. Adım: Bileşenler, Sarf Malzemeleri, Gerekli Araçlar, Uygulamalar ve Çevrimiçi Hizmet
BİLEŞENLER VE MALZEMELER
_ Arduino Micro e Genuino Micro (1 adet) …veya herhangi bir ufacık Arduino uyumlu - benim durumumda bir freetronics LeoStick (https://www.freetronics.com.au/collections/arduino/products/leostick)
_ ThingM BlinkM - I2C Kontrollü RGB LED (1 adet)
_ Mini bulut ışığı (1 adet) …veya seçtiğiniz herhangi bir diğer yarı saydam kap
_ USB-A - B Kablosu (1 birim) …veya A tipi fişli herhangi bir eski USB kablosu
GEREKLİ ARAÇLAR
_ Havya (jenerik)
UYGULAMALAR VE ÇEVRİMİÇİ HİZMET
_ Amazon Web Hizmetleri AWS Lambda (https://aws.amazon.com/it/lambda/)
_ Amazon Web Hizmetleri AWS IoT (https://aws.amazon.com/it/iot/)
2. Adım: Donanım
Gece lambası zaten yerleşik bir LED ile geliyor - benim durumumda soğuk beyaz. Farklı durumları farklı renklerle belirtmenin güzel olacağını düşündüm. Bu yüzden sadece bulut şeklindeki kasayı tuttum. Operasyonun beyni için elimdeki en küçük Arduino uyumlu olanı seçtim: Freetronics LeoStick yıllardır tercih ettiğim prototipleme platformu oldu ve bol miktarda yedek parçam var. İyi şeylerle yüklü olarak gelir: bir piezo hoparlör, iki RGB LED (biri güce bağlı, RX ve TX olsa da) ve hepsinden iyisi, basitçe bir USB bağlantı noktasına takabilirsiniz - harici FTDI veya kablo gerekmez. Ayrıca küçük ama breadboard uyumludur.
Neden bir ESP8266 seçmedim? Gerçekten kablosuz olmak için, güç kablosunu da kesebilirsiniz - bu da pil eklemek için işleri biraz daha karmaşık hale getirir ve yeniden şarj etme zahmetine neden olur. Bulut monitörü bilgisayarımın yanında olacağından USB gücünü kullanmak çok daha kolay. Ayrıca Wi-Fi bağlantısı kurmak her zaman kolay değildir. ATmega32u4'e dayanarak Arduino Micro ve LeoStick, D2'de I2C verileri ve D3'te saat bulundurma tuhaflığını paylaşıyor. Bu, BlinkM RGB LED'i bağlarken alakalı hale gelir. BlinkM kalkanını A2.. A5 başlıklarına basitçe takabileceğiniz yaygın Atmega328 kartlarının aksine, bu burada çalışmaz (yumuşak I2C kitaplığı ile uğraşmadım).
BlinkM'deki erkek başlıkları VCC ve GND'nin lehimini sökerek, daha sonra bunları kablolu olarak genişletebilir ve her şeyi takılabilir küçük bir pakette tutabilirim. Arduino bağlı olmadan kodlanmış renk desenlerini oynatın. Neredeyse bir WS2812'nin (Adafruits NeoPixels harika) bana daha iyi hizmet edeceğini hissediyorum - ne yazık ki elimde hiç yoktu. Donanım parçasını bitirmek için, erkek A tipi USB fişinin karşı ucunu kestim, bulut ışığının tabanına yakın önceden delinmiş bir delikten geçirdim ve kabloları LeoStick'e lehimledim (kırmızı: 5V, beyaz: Veri-, yeşil:Veri+, siyah:Toprak).
Adım 3: Çözüm Mimarisi
Kendime dayattığım tek güçlü gereksinim, monitörün bir güvenlik duvarının arkasında çalıştırılmasıydı. Çok önemli bir özellik olmasına rağmen, bu, olay değişiklikleri için web kancalarını kullanışsız hale getirdi. Bir yoklama mekanizması TCP trafiği açısından maliyetlidir ve yoklama sıklığına bağlı olarak olayları geciktirebilir.
Çözüm, tam çift yönlü iletişim sağlayan WebSockets'te bulunur. Amazon'un IoT hizmeti, WebSockets üzerinden MQTT'yi destekleyen bir ileti aracısı sağlar. Görünüşe göre hizmet, Şeyler, Gölgeler, İlkeler veya Kurallar'ı yapılandırmak zorunda kalmadan çağrılabilir.
Arduino Yún için bir cihaz SDK'sı mevcuttur ve SDK'yı ESP8266 gibi diğer platformlara taşımak için bazı çabalar sarf edilmektedir. Ancak monitör her zaman seri arabirimle bağlanacağından, istemci API'sini uygulamak ve Arduino'yu yalnızca renk kodlarını almak ve görüntülemek için kullanmak için bir NodeJS uygulamasına (masaüstü bilgisayarda çalışan) sahip olmaya erken karar verdim. Bu şekilde, yazılım yüklemeleriyle uğraşmadan JavaScript'te kolayca değişiklikler yapılabilir. Test için küçük bir örnek altyapı gereklidir. Diyelim ki, bir web sunucusu örneğinde sağlık kontrolleri yapan ve CPU yüküne dayalı otomatik ölçeklendirme politikaları yapan kullanılabilirlik bölgelerinde etkinleştirilmiş bir yük dengeleyicimiz var. İlgili CloudFormation şablonu ▶️ Tasarımcıda görüntülenebilir veya ▶️ doğrudan konsoldan oluşturulabilir. Not: Bu yığındaki hizmetlerden bazıları ücrete tabi olabilir.
Şablonu Lambda işlevi için özellikler ve gerekli izinlerle genişlettim. Daha sonra, IoT REST API uç noktasının parametre olarak eklenmesini gerektirir. Bunu otomatikleştirmek için, ARN'yi (> aws iot tarif-uç noktası) istemek için CLI'yi kullanan ve ardından satır içi parametreyle create-stack çağıran küçük bir kabuk betiği yazdım. Veya yine de elle yapabilirsiniz:
// IoT REST API UÇ NOKTASINI AL
aws iot açıklama-uç noktası
// CREATE STACK> aws cloudformation create-stack --stack-name MiniCloudMonitor --template-body file://cfn-template.json --parameters ParameterKey=IotRestApiEndpoint, ParameterValue={IoT_REST_API_ENDPOINT} --capabilities CAPABILITY_NAMED_II
// DELETE STACK> aws cloudformation delete-stack --stack-name MiniCloudMonitor
İdeal olarak, Lambda işlevini de çağırmak ve bu şekilde monitörün durumunu güncellemek için otomatik ölçeklendirmeyi tetikleyen aynı alarm eşiklerini kullanmalıyım. Şu anda bu, yalnızca SNS'yi bir ara madde olarak kullanırken mümkündür. O sırada bu ekstra katman gereksiz geliyordu ve Lambda'yı doğrudan aramak için CloudWatch EC2 yaşam döngüsü Kurallarını kullanmaya karar verdim. Yine de gelecekte SNS → Lambda seçeneğini keşfetmek istiyorum.
4. Adım: Yazılım
Arduino Sketch'i yazarak başladım. Ana döngü(), seri bağlantıdan Karakterleri okuyor ve yeni satır karakteri alana kadar bir String oluşturuyor. Daha sonra bir hex renk kodunun gönderildiği ve uygun I2C komutunun BlinkM LED'ine yazıldığı varsayılır. Bu, kolaylık olarak verimlilikle ilgili değildir. Bu Sketch ve diğer dosyalar için eksiksiz kaynaklar GitHub'dan edinilebilir. Aşağıda bazı ilgili kod parçacıkları verilmiştir:
boşluk döngüsü () {
while (Serial.available()) {
char inChar = (char)Serial.read();
if (inChar == '\n') {
uzun sayı = strtol(inputString.c_str(), NULL, 16);
bayt r = sayı >> 16;
bayt g = sayı >> 8 & 0xFF;
bayt b = sayı & 0xFF;
BlinkM_fadeToRGB(blinkm_addr, r, g, b);
inputString = "";
} Başka {
inputString += inChar;
}
}
}
NodeJS Uygulaması, AWS ve Arduino'ya arayüzler uygulamak zorundadır. Daha sonra, mükemmel serialport paketini kullanırken sadece birkaç satır kodla gerçekleştirilebilir:
var serialport = require('serialport');port = yeni seriport(PORT_COM_NAME, {
baudHızı: SERIAL_BAUD_RATE
});
port.on('open', function() {
});
port.on('hata', fonksiyon(hata) {
});
AWS IoT'ye bağlanmak da neredeyse hiç çaba gerektirmez. Tek sorun, 443 numaralı bağlantı noktası üzerinden MQTT+WebSockets kullanmanın Erişim Anahtarları aracılığıyla kimlik doğrulama gerektirdiğini bilmektir. SDK bunları ortam değişkenlerinden okuyacaktır. AWS_ACCESS_KEY_ID ve AWS_SECRET_ACCESS_KEY'i açıkça dışa aktarmak gerekebilir.
var awsiot = require('aws-iot-device-sdk');var device = awsiot.device({
clientId: 'MiniCloudMonitor-' + (Math.floor((Math.random() * 100000) + 1)), bölge: AWS_REGION, protokol: 'wss', bağlantı noktası: 443, hata ayıklama: doğru
});
device.on('bağlan', function() {
device.subscribe(MQTT_TOPIC);
});
device.on('message', function(konu, yük) {
if (bağlantı noktası && yük && konu == MQTT_TOPIC) {
var mesaj = JSON.parse(yük);
if (message.hasOwnProperty(MQTT_JSON_KEY))
{ dönüş;
}
}
});
Lambda işlevi, bir renk kodunu giriş parametresi olarak kabul eder - bu aşamada hoş değil, ancak çok esnektir. MQTT konusuna yayın yapabilmek için, IoT REST API uç noktası gerektiren bir IotData nesnesinin örneğini oluşturur. CloudFormation şablonu, yığının oluşturulması sırasında bununla ilgilendi.
var AWS = require('aws-sdk');var mqtt = new AWS. IotData({
bitiş noktası: process.env. MQTT_ENDPOINT});
export.handler = function(olay, bağlam, geri arama) {
var params = {
konu: process.env. MQTT_TOPIC, yük: '{"color\":\"' + event.color + '\"}', qos: 0
};
mqtt.publish(paramlar, fonksiyon(hata, veri) {
geri arama(hata);
});
};
Adım 5: Sonuç
Bulutta "doğmuş" bir sanal olayı fiziksel dünyaya getirmekten gerçekten keyif aldım. Ve benim küçük evcil hayvan projem olarak çok eğlenceliydi. Bunu bir sonraki seviyeye taşımak için düşünürdüm…
- sağlamlık ve istisna işleme konusunda iyileştirme
- AWS bulut ölçümlerini entegre etmenin daha iyi yollarını keşfedin
- göstergeler, çubuk grafikler gibi daha fazla fiziksel göstergeyle denemeler yapın…
- Azure, Google, Heroku gibi diğer platformlara geçme seçeneğine sahip olun…
- Jenkins, GitHub için uygulamaya özel olayları izleyin, …
Umarım bu kılavuzu okumaktan zevk almışsınızdır ve belki de yol boyunca yeni bir şey bulmuşsunuzdur. İşleri yapmanın farklı/daha iyi bir yolunu düşünebiliyorsanız, lütfen aşağıdaki yorumlarda paylaşın. Ve elbette, eğer hataları tespit ettiyseniz, bir uyarı çok takdir edilecektir. Zaman ayırdığınız için teşekkürler.
Önerilen:
ESP32 ile PWM - Arduino IDE ile ESP 32'de PWM ile LED Karartma: 6 Adım
ESP32 ile PWM | Arduino IDE ile ESP 32'de PWM ile LED Karartma: Bu talimatta Arduino IDE & PWM temel olarak herhangi bir MCU'dan analog çıkış üretmek için kullanılır ve bu analog çıkış 0V ile 3.3V (esp32 durumunda) arasında herhangi bir şey olabilir & itibaren
Otomatik Akıllı Aquaponics (Bulut Tabanlı Kontrol Paneli ile): 11 Adım
Otomatik Akıllı Aquaponics (Bulut Tabanlı Gösterge Paneli ile): Aquaponics, kendi organik gıdalarınızı herhangi bir yerde (iç veya dış mekan), çok daha az alanda, daha fazla büyüme, daha az su kullanımı ve herhangi bir harici kimyasal gübre olmadan yetiştirmenize olanak tanır. Ayrıca, bulut tabanlı bir gösterge panosunda koşulları izleyebilirsiniz.
Arduino Parmak İzi Katılım Sistemi W/Bulut Veri Depolama: 8 Adım
Arduino Parmak İzi Katılım Sistemi W/Bulut Veri Depolama: Bu ve diğer harika öğreticileri ElectroPeak'in resmi web sitesinde okuyabilirsiniz. Bu eğitimde, yapacağımız
Ana Uyarı: Arduino + Geniş Ekranda Bulut Mesajlaşma: 14 Adım (Resimlerle)
Ev Uyarısı: Geniş Ekranda Arduino + Bulut Mesajlaşma: Cep telefonları çağında, insanların aramanıza 7/24 yanıt vermesini beklersiniz. Veya… Olumsuz. Karım eve geldiğinde, telefon çantasında gömülü kalıyor veya pili bitiyor. Sabit hattımız yok. Aramak veya
Arduino Yüzme Havuzu Bulut İzleme: 7 Adım (Resimlerle)
Arduino Yüzme Havuzu Bulut İzleme: Bu projenin temel amacı, yüzme havuzlarının pH ve sıcaklık seviyelerini izlemek için Samsung ARTIK Bulut kullanmaktır.Donanım Bileşenleri: Arduino MKR1000 veya Genuino MKR1000 Jumper kabloları (genel) SparkFun pH Sensör Kiti 1 x Direnç 4.7