İçindekiler:

MQTT Kullanan Kablosuz Sıcaklık Sensörlü AWS IoT'ye Başlarken: 8 Adım
MQTT Kullanan Kablosuz Sıcaklık Sensörlü AWS IoT'ye Başlarken: 8 Adım

Video: MQTT Kullanan Kablosuz Sıcaklık Sensörlü AWS IoT'ye Başlarken: 8 Adım

Video: MQTT Kullanan Kablosuz Sıcaklık Sensörlü AWS IoT'ye Başlarken: 8 Adım
Video: Ziraat Vakti - IoT (Nesnelerin İnterneti)'nin Tarımda Kullanımı 11.Gün 2024, Kasım
Anonim
MQTT Kullanan Kablosuz Sıcaklık Sensörlü AWS IoT'ye Başlarken
MQTT Kullanan Kablosuz Sıcaklık Sensörlü AWS IoT'ye Başlarken

Daha önceki Instructable'larda Azure, Ubidots, ThingSpeak, Losant gibi farklı bulut platformlarından geçtik. Neredeyse tüm bulut platformlarında sensör verilerini buluta göndermek için MQTT protokolünü kullanıyorduk. MQTT, HTTP protokolüne göre avantajları ve faydaları hakkında daha fazla bilgi için bu talimata başvurabilirsiniz.

Bu talimatta, bir başka ve en tanıdık bulut platformu olan Amazon Web Services'i yakınlaştıracağız. Birçoğunuz AWS, diğer adıyla Amazon Web Services ve AWS tarafından sağlanan bulut işlevselliği hakkında bilgi sahibi olabilirsiniz. Uzun yıllardır web geliştirmenin özü olmuştur. IoT uygulamalarının ölçeğinin artmasıyla birlikte AWS, AWSIOT çözümünü ortaya çıkardı. AWSIoT, IoT uygulamalarımızı barındırmak için güvenilir bir çözümdür.

Bu talimatı izleyerek:

  • IoT uygulamanız için AWS hesabı oluşturabileceksiniz
  • ESP32'yi AWS IoT çekirdeğine bağlayabileceksiniz
  • MQTT ve HTTP protokolünü kullanarak mesaj gönderin ve alın
  • AWS'de gönderilen verileri görselleştirin

1. Adım: AWS Hesabını Ayarlama

AWS hesabını kurmak oldukça kolaydır. Sadece birkaç sertifika yüklemeniz, ona ilkeler eklemeniz, Cihazı kaydetmeniz ve AWS'de sensör veri mesajlarını almaya başlamanız yeterlidir.

AWS hesabını kurmak için bu öğreticiyi izleyin.

2. Adım: Donanım ve Yazılım Spesifikasyonları

Donanım ve Yazılım Spesifikasyonları
Donanım ve Yazılım Spesifikasyonları

Yazılım özellikleri

Bir AWS hesabı

Donanım Spesifikasyonu

  • ESP32
  • Kablosuz Sıcaklık ve Titreşim Sensörü
  • Zigmo Ağ Geçidi alıcısı

Adım 3: Kablosuz Titreşim ve Sıcaklık Sensörleri

Kablosuz Titreşim ve Sıcaklık Sensörleri
Kablosuz Titreşim ve Sıcaklık Sensörleri

Bu, kablosuz ağ mimarisi kullanarak 2 Mil aralığına kadar övünen Uzun Menzilli Endüstriyel IoT kablosuz titreşim ve sıcaklık sensörüdür. 16 bitlik Titreşim ve Sıcaklık sensörünü içeren bu sensör, kullanıcı tanımlı aralıklarla son derece hassas titreşim verilerini iletir. Aşağıdaki özelliklere sahiptir:

  • ±32g Menzilli Endüstriyel Sınıf 3 eksenli Titreşim Sensörü
  • RMS, MAX ve MIN g Titreşimini hesaplar
  • Alçak Geçiren Filtre Kullanarak Gürültü Giderme
  • 12.800 Hz'e kadar Frekans Aralığı (Bant Genişliği)
  • 25, 600Hz'e kadar Örnekleme Hızı
  • 2 Mil Kablosuz Menzilli Şifreli İletişim
  • Çalışma Sıcaklığı Aralığı -40 ila +85 °C
  • Duvara Monte veya Mıknatıs Monteli IP65 Dereceli MuhafazaVisual Studio ve LabVIEW için Örnek Yazılım
  • Harici Prob Seçenekli Titreşim Sensörü
  • 4 AA Pilden 500.000'e Kadar İletimBirçok Ağ Geçidi ve Modem Seçeneği Mevcuttur

Adım 4: ESP32 AWS Ürün Yazılımı

AWS'ye bağlanmak ve verileri göndermeye başlamak için aşağıdaki adımları izleyin

  • AWS kitaplığını aşağıdaki Github deposundan indirin
  • repoyu klonlayın ve AWS_IOT dosyasını Arduino dizininin kitaplık klasörüne yerleştirin

git klon

Şimdi kodu inceleyelim:

  • Bu uygulamada, WiFi kimlik bilgilerini kaydetmek ve IP ayarları arasında gezinmek için sabit bir portal kullandık. Tutsak portalla ilgili ayrıntılı tanıtım için aşağıdaki talimata göz atabilirsiniz.
  • Sabit portal bize Statik ve DHCP ayarları arasında seçim yapma seçeneği sunar. Sadece Statik IP, Alt Ağ Maskesi, ağ geçidi gibi kimlik bilgilerini girin ve Kablosuz Sensör Ağ Geçidi bu IP üzerinde yapılandırılacaktır.
  • Kullanılabilir WiFi ağlarını ve orada RSSI'yi gösteren bir listenin bulunduğu bir web sayfası barındırılıyor. WiFi ağını ve şifresini seçin ve gönder'i girin. Kimlik bilgileri EEPROM'a kaydedilecek ve IP ayarı SPIFFS'ye kaydedilecektir. Bununla ilgili daha fazla bilgi bu talimatta bulunabilir.

Adım 5: Kablosuz Titreşim ve Sıcaklık Sensöründen Sensör Verilerinin Alınması

Kablosuz Titreşim ve Sıcaklık Sensöründen Sensör Verilerinin Alınması
Kablosuz Titreşim ve Sıcaklık Sensöründen Sensör Verilerinin Alınması
Kablosuz Titreşim ve Sıcaklık Sensöründen Sensör Verilerinin Alınması
Kablosuz Titreşim ve Sıcaklık Sensöründen Sensör Verilerinin Alınması

Kablosuz Sıcaklık ve Titreşim Sensörlerinden 54 baytlık bir çerçeve alıyoruz. Bu çerçeve, gerçek sıcaklık ve Titreşim verilerini almak için manipüle edilir.

ESP32, Seri kullanım için üç UART'a sahiptir

  1. RX0 GPIO 3, TX0 GPIO 1
  2. RX1 GPIO9, TX1 GPIO 10
  3. RX2 GPIO 16, TX2 GPIO 17

ve 3 donanım Seri bağlantı noktası

  • Seri
  • Seri1
  • Seri2

İlk olarak, Hardware Serial başlık dosyasını başlatın. Burada RX2 ve TX2 aka kullanacağız. Seri verileri almak için ESP32 kartının GPIO 16 ve GPIO 17 pinleri.

#Dahil etmek

# RXD2'yi tanımla 16 # TXD2'yi tanımla 17

Serial2.begin(115200, SERIAL_8N1, RXD2, TXD2); // pinler 16 rx2, 17 tx2, 19200 bps, 8 bit parite yok 1 stop bit

Aşağıdaki adımlar, gerçek sensör değerlerini elde etmenize yardımcı olacaktır.

  • Sıcaklık, nem, pil ve diğer sensör değerlerini depolamak için değişkenler oluşturun
  • Donanım serisi için Rx, tx pini, baud hızı ve eşlik bitlerini ayarlayın
  • İlk olarak, Serial1.available() kullanarak okunacak bir şey olup olmadığını kontrol edin.
  • 54 baytlık bir çerçeve alacağız.
  • Başlangıç baytı olan 0x7E'yi kontrol edin.
  • Titreşim verileri, 3 eksen için RMS değerinden, 3 eksen için minimum değerlerden, 3 eksen için maksimum değerlerden oluşur.
  • sıcaklık ve pil değerleri 2 bayt veri içerecektir
  • sensör adını, tipini, sensör sürümünü alın 1 bayt veri içerecek ve oradan ilgili adresten alınabilir

if (Serial2.available()) { Serial.println("Seriyi Oku"); data[0] = Serial2.read(); gecikme(k); if(data[0]==0x7E) { Serial.println("Paket Var"); while (!Serial2.available()); for (i = 1; i< 55; i++) { data = Serial2.read(); gecikme(1); } if(data[15]==0x7F) /////// alınan verilerin doğru olup olmadığını kontrol etmek için { if(data[22]==0x08) //////// sensör tipinden emin olun doğru { rms_x = ((uint16_t)(((veri[24])<<16) + ((veri[25])<<8) + (veri[26]))/100); rms_y = ((uint16_t)(((veri[27])<<16) + ((veri[28])<<8) + (veri[29]))/100); rms_z = ((uint16_t)(((veri[30])<<16) + ((veri[31])<<8) + (veri[32]))/100); int16_t max_x = ((uint16_t)(((veri[33])<<16) + ((veri[34])<<8) + (veri[35]))/100); int16_t max_y = ((uint16_t)(((veri[36])<<16) + ((veri[37])<<8) + (veri[38]))/100); int16_t max_z = ((uint16_t)(((veri[39])<<16) + ((veri[40])<<8) + (veri[41]))/100);

int16_t min_x = ((uint16_t)(((veri[42])<<16) + ((veri[43])<<8) + (veri[44]))/100); int16_t min_y = ((uint16_t)(((veri[45])<<16) + ((veri[46])<<8) + (veri[47]))/100); int16_t min_z = ((uint16_t)(((veri[48])<<16) + ((veri[49])<<8) + (veri[50]))/100);

cTemp = ((((veri[51]) * 256) + veri[52])); yüzer pil = ((veri[18] * 256) + veri[19]); voltaj = 0.00322 * pil; Serial.print("Sensör Numarası"); Serial.println(veri[16]); senseNumber = veri[16]; Serial.print("Sensör Tipi"); Serial.println(veri[22]); Serial.print("Firmware Sürümü"); Serial.println(veri[17]); Serial.print("Sıcaklık Santigrat Olarak:"); Seri.print(cTemp); Serial.println("C"); Serial.print("X ekseninde RMS titreşimi:"); Seri.print(rms_x); Seri.println(" mg"); Serial.print("Y ekseninde RMS titreşimi:"); Seri.print(rms_y); Seri.println(" mg"); Serial.print("Z ekseninde RMS titreşimi:"); Seri.print(rms_z); Seri.println(" mg");

Serial.print("X ekseninde minimum titreşim:");

Seri.print(min_x); Seri.println(" mg"); Serial.print("Y ekseninde minimum titreşim:"); Seri.print(min_y); Seri.println(" mg"); Serial.print("Z ekseninde minimum titreşim:"); Seri.print(min_z); Seri.println(" mg");

Serial.print("ADC değeri:");

Serial.println(pil); Serial.print("Pil Voltajı:"); Serial.print(voltaj); Serial.println("\n"); if (voltaj < 1) { Serial.println("Pili Değiştirme Zamanı"); } } } else { for (i = 0; i< 54; i++) { Serial.print(data); Seri.print(", "); gecikme(1); } } } }

6. Adım: AWS'ye Bağlanma

AWS'ye bağlanma
AWS'ye bağlanma
  • AWSIoT hub ile bağlantı kurmak için AWS_IOT.h, WiFi.h başlık dosyalarını dahil edin
  • Ana Bilgisayar Adresinizi, politika adı olacak Müşteri Kimliğinizi ve şey adı olacak konu adını girin

//***********AWS Kimlik Bilgileri*************//char HOST_ADDRESS="a2smbp7clzm5uw-ats.iot.us-east-1.amazonaws.com"; char CLIENT_ID= "ncdGatewayPolicy"; char TOPIC_NAME= "ncdGatewayThing";

JSON'unuzu saklamak için bir char değişkeni oluşturun, bu durumda JSON'u depolamak için bir format oluşturduk

const char *format = "{"SensorId\":\"%d\", \"messageId\":%d, \"rmsX\":%d, \"rmsY\":%d, \"rmsZ \":%d, \"cTemp\":%d, \"voltaj\":%.2f}";

AWS_IOT sınıfının bir örneğini oluşturun

AWS_IOT esp; //AWS_IOT sınıfının örneği

Şimdi aşağıdaki yöntemi kullanarak AWSIoT hub'ına bağlanın

void reconnectMQTT(){ if(hornbill.connect(HOST_ADDRESS, CLIENT_ID)== 0) { Serial.println("AWS'ye Bağlı"); gecikme(1000);

if(0==hornbill.subscribe(TOPIC_NAME, mySubCallBackHandler))

{ Serial.println("Abonelik Başarılı"); } else { Serial.println("Abonelik Başarısız, Öğe Adını ve Sertifikaları Kontrol Edin"); süre(1); } } else { Serial.println("AWS bağlantısı başarısız, HOST Adresini Kontrol Edin"); süre(1); }

gecikme(2000);

}

sensör verilerini her 1 dakikada bir yayınlayın

if(tick >= 60) // her 5 saniyede bir konuya yayınla { tick=0; karakter yükü[PAYLOAD_MAX_LEN]; snprintf(yük, PAYLOAD_MAX_LEN, format, senseNumber, msgCount++, rms_x, rms_y, rms_z, cTemp, voltaj); Serial.println(yük); if(hornbill.publish(TOPIC_NAME, payload) == 0) { Serial.print("İleti Yayınla:"); Serial.println(yük); } else { Serial.println("Yayınlanamadı"); } } vTaskDelay(1000 / portTICK_RATE_MS); kene++;

7. Adım: AWS'de Verileri Görselleştirme

AWS'de Verileri Görselleştirme
AWS'de Verileri Görselleştirme
AWS'de Verileri Görselleştirme
AWS'de Verileri Görselleştirme
AWS'de Verileri Görselleştirme
AWS'de Verileri Görselleştirme
  • AWS hesabınıza giriş yapın.
  • Araç çubuğunun sol köşesinde Hizmetler sekmesini bulacaksınız
  • Bu sekmeye tıklayın ve Nesnelerin İnterneti başlığı altında IoT Core'u seçin.
  • QoS'yi seçin ve hayır. abonelere gönderilen mesajların sayısı. Konu adını girin.

Adım 8: Genel Kod

Genel kodu bu Github Deposunda bulabilirsiniz.

Kredi

  • Arduino Json'ı
  • Kablosuz Sıcaklık ve Nem Sensörleri
  • ESP32
  • PubSubClient

Önerilen: