Isi kandungan:

Bermula dengan AWS IoT Dengan Sensor Suhu Tanpa Wayar Menggunakan MQTT: 8 Langkah
Bermula dengan AWS IoT Dengan Sensor Suhu Tanpa Wayar Menggunakan MQTT: 8 Langkah

Video: Bermula dengan AWS IoT Dengan Sensor Suhu Tanpa Wayar Menggunakan MQTT: 8 Langkah

Video: Bermula dengan AWS IoT Dengan Sensor Suhu Tanpa Wayar Menggunakan MQTT: 8 Langkah
Video: How to use DHT11 DHT22 with NodeMCU ESP8266 to read temperature over WiFi - IoT 2024, Julai
Anonim
Bermula dengan AWS IoT Dengan Sensor Suhu Tanpa Wayar Menggunakan MQTT
Bermula dengan AWS IoT Dengan Sensor Suhu Tanpa Wayar Menggunakan MQTT

Dalam Instructables sebelumnya, kami telah melalui platform cloud yang berbeza seperti Azure, Ubidots, ThingSpeak, Losant dll. Kami telah menggunakan protokol MQTT untuk mengirim data sensor ke cloud di hampir semua platform cloud. Untuk maklumat lebih lanjut mengenai MQTT, kelebihan dan kelebihannya daripada protokol HTTP anda boleh merujuk kepada arahan ini.

Dalam arahan ini, kami akan memperbesar satu lagi platform awan dan Perkhidmatan Web Amazon yang paling biasa. Ramai di antara anda mungkin biasa dengan AWS aka Amazon Web Services dan fungsi awan yang disediakan oleh AWS. Sudah menjadi teras pengembangan web selama bertahun-tahun. Dengan peningkatan skala aplikasi IoT, AWS telah hadir dengan penyelesaian AWSIoT. AWSIoT adalah penyelesaian yang boleh dipercayai untuk hosting aplikasi IoT kami.

Dengan mengikuti arahan ini:

  • Anda akan dapat menyediakan akaun AWS untuk aplikasi IoT anda
  • Anda akan dapat menghubungkan inti ESP32 ke AWS IoT
  • Kirim dan terima mesej menggunakan protokol MQTT dan
  • Visualisasikan data yang dihantar dalam AWS

Langkah 1: Menyiapkan Akaun AWS

Menyiapkan akaun AWS agak mudah. Anda hanya perlu memuat naik beberapa sijil, melampirkan polisi, Mendaftarkan peranti dan mula menerima mesej data sensor di AWS.

Untuk menyediakan akaun AWS ikuti tutorial ini.

Langkah 2: Spesifikasi Perkakasan dan Perisian

Spesifikasi Perkakasan dan Perisian
Spesifikasi Perkakasan dan Perisian

Spesifikasi Perisian

Akaun AWS

Spesifikasi Perkakasan

  • ESP32
  • Sensor Suhu dan Getaran Tanpa Wayar
  • Penerima Zigmo Gateway

Langkah 3: Sensor Getaran dan Suhu Tanpa Wayar

Sensor Getaran dan Suhu Tanpa Wayar
Sensor Getaran dan Suhu Tanpa Wayar

Ini adalah sensor getaran dan suhu tanpa wayar IoT Perindustrian Long Range, yang mempunyai julat hingga 2 Mile menggunakan seni bina rangkaian mesh tanpa wayar. Menggabungkan sensor Getaran dan Suhu 16-bit, sensor ini menghantar data getaran yang sangat tepat pada selang waktu yang ditentukan pengguna. Ia mempunyai ciri-ciri berikut:

  • Sensor Getaran Gred 3 paksi Industri dengan Julat ± 32g
  • Mengira Getaran RMS, MAX, dan MIN g
  • Penghapusan Kebisingan menggunakan Penapis Lintas Rendah
  • Julat Frekuensi (Lebar Jalur) hingga 12, 800 Hz
  • Kadar Sampel hingga 25, 600Hz
  • Komunikasi Terenkripsi dengan Jarak Tanpa Wayar 2 Mile
  • Julat Suhu Operasi -40 hingga +85 ° C
  • Lekapan Berkadar IP65 atau Lekapan Berkadar IP65 Contoh Perisian untuk Visual Studio dan LabVIEW
  • Sensor Getaran dengan Pilihan Probe Luaran
  • Hingga 500, 000 Penghantaran dari 4 Bateri AA Banyak Pilihan Gerbang dan Modem Tersedia

Langkah 4: Firmware ESP32 AWS

Untuk menyambung ke AWS dan mula menghantar data, ikuti langkah-langkah berikut

  • Muat turun pustaka AWS dari repositori Github berikut
  • klon repo dan letakkan fail AWS_IOT ke folder perpustakaan direktori Arduino

git klon

Sekarang mari kita perhatikan kodnya:

  • Dalam aplikasi ini, kami telah menggunakan portal tawanan untuk menyimpan bukti kelayakan WiFi dan melayang ke tetapan IP. Untuk pengenalan terperinci di portal tawanan, anda boleh mengikuti petunjuk berikut.
  • Portal captive memberi kita pilihan untuk memilih antara tetapan Statik dan DHCP. Cukup masukkan kelayakan seperti Static IP, Subnet Mask, gateway dan Wireless Sensor Gateway akan dikonfigurasi pada IP tersebut.
  • Halaman web dihoskan di mana senarai yang menunjukkan rangkaian WiFi yang tersedia dan ada RSSI. Pilih rangkaian WiFi dan kata laluan dan masukkan hantar. Kredensial akan disimpan di EEPROM dan tetapan IP akan disimpan di SPIFFS. Lebih banyak mengenai ini boleh didapati dalam arahan ini.

Langkah 5: Mendapatkan Data Sensor Dari Getaran Tanpa Wayar dan Sensor Suhu

Mendapatkan Data Sensor Dari Getaran Tanpa Wayar dan Sensor Suhu
Mendapatkan Data Sensor Dari Getaran Tanpa Wayar dan Sensor Suhu
Mendapatkan Data Sensor Dari Getaran Tanpa Wayar dan Sensor Suhu
Mendapatkan Data Sensor Dari Getaran Tanpa Wayar dan Sensor Suhu

Kami mendapat bingkai 54 byte dari Sensor Suhu dan Getaran Tanpa Wayar. Rangka ini dimanipulasi untuk mendapatkan data suhu dan Getaran sebenar.

ESP32 mempunyai tiga UART yang tersedia untuk kegunaan Serial

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

dan 3 port bersiri perkakasan

  • Bersiri
  • Bersiri1
  • Bersiri2

Pertama, mulakan fail tajuk Hardware Serial. Di sini kita akan menggunakan RX2 dan TX2 aka. GPIO 16 dan GPIO 17 pin pada papan ESP32 untuk mendapatkan data bersiri.

#sertakan

# tentukan RXD2 16 # tentukan TXD2 17

Serial2.begin (115200, SERIAL_8N1, RXD2, TXD2); // pin 16 rx2, 17 tx2, 19200 bps, 8 bit tiada pariti 1 bit berhenti

Langkah-langkah berikut akan membawa anda lebih jauh untuk mendapatkan nilai sensor sebenar

  • Buat pemboleh ubah untuk menyimpan suhu, kelembapan, bateri, dan nilai sensor lain
  • Tetapkan pin Rx, tx, baud rate dan parity untuk siri perkakasan
  • Pertama, periksa bahawa ada sesuatu untuk dibaca menggunakan Serial1.available ()
  • Kami akan mendapat bingkai 54 bait.
  • Periksa 0x7E yang merupakan bait permulaan.
  • Data getaran terdiri daripada nilai RMS untuk paksi 3, nilai min untuk 3 paksi, nilai maksimum untuk 3 paksi.
  • suhu dan nilai bateri akan mengandungi 2 bait data
  • dapatkan nama sensor, jenis, versi sensor akan mengandungi 1 bait data dan dapat diperoleh dari alamat masing-masing

jika (Serial2.available ()) {Serial.println ("Baca Siri"); data [0] = Serial2.read (); kelewatan (k); if (data [0] == 0x7E) {Serial.println ("Got Packet"); sementara (! Serial2.available ()); untuk (i = 1; i <55; i ++) {data = Serial2.read (); kelewatan (1); } jika (data [15] == 0x7F) /////// untuk memeriksa apakah data penerimaan betul {if (data [22] == 0x08) //////// pastikan jenis sensor betul {rms_x = ((uint16_t) (((data [24]) << 16) + ((data [25]) << 8) + (data [26])) / 100); rms_y = ((uint16_t) (((data [27]) << 16) + ((data [28]) << 8) + (data [29])) / 100); rms_z = ((uint16_t) (((data [30]) << 16) + ((data [31]) << 8) + (data [32])) / 100); int16_t max_x = ((uint16_t) (((data [33]) << 16) + ((data [34]) << 8) + (data [35])) / 100); int16_t max_y = ((uint16_t) (((data [36]) << 16) + ((data [37]) << 8) + (data [38])) / 100); int16_t max_z = ((uint16_t) (((data [39]) << 16) + ((data [40]) << 8) + (data [41])) / 100);

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

cTemp = ((((data [51]) * 256) + data [52])); bateri apungan = ((data [18] * 256) + data [19]); voltan = 0.00322 * bateri; Serial.print ("Sensor Number"); Serial.println (data [16]); senseNumber = data [16]; Serial.print ("Jenis Sensor"); Serial.println (data [22]); Serial.print ("Versi Firmware"); Serial.println (data [17]); Serial.print ("Suhu dalam Celsius:"); Serial.print (cTemp); Serial.println ("C"); Serial.print ("Getaran RMS dalam paksi X:"); Serial.print (rms_x); Serial.println ("mg"); Serial.print ("Getaran RMS dalam paksi Y:"); Cetakan bersiri (rms_y); Serial.println ("mg"); Serial.print ("Getaran RMS dalam paksi-Z:"); Serial.print (rms_z); Serial.println ("mg");

Serial.print ("Getaran minimum dalam paksi X:");

Cetakan bersiri (min_x); Serial.println ("mg"); Serial.print ("Getaran minimum dalam paksi Y:"); Cetakan bersiri (min_y); Serial.println ("mg"); Serial.print ("Getaran minimum dalam paksi-Z:"); Cetakan bersiri (min_z); Serial.println ("mg");

Serial.print ("Nilai ADC:");

Serial.println (bateri); Serial.print ("Voltan Bateri:"); Cetakan bersiri (voltan); Serial.println ("\ n"); jika (voltan <1) {Serial.println ("Masa untuk Mengganti Bateri"); }}} lain {untuk (i = 0; i <54; i ++) {Serial.print (data ); Cetakan bersiri (","); kelewatan (1); }}}}

Langkah 6: Menyambung ke AWS

Menyambung ke AWS
Menyambung ke AWS
  • Sertakan fail header AWS_IOT.h, WiFi.h untuk membuat sambungan dengan hub AWSIoT
  • Masukkan Alamat Hos anda, Id Pelanggan yang akan menjadi nama polisi, dan nama topik yang akan menjadi nama perkara

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

Buat pemboleh ubah char untuk menyimpan JSON anda, dalam hal ini, kami telah membuat format untuk menyimpan JSON

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

Buat contoh kelas AWS_IOT

AWS_IOT esp; // Contoh kelas AWS_IOT

Sekarang sambungkan ke hub AWSIoT menggunakan kaedah berikut

batal reconnectMQTT () {if (hornbill.connect (HOST_ADDRESS, CLIENT_ID) == 0) {Serial.println ("Bersambung ke AWS"); kelewatan (1000);

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

{Serial.println ("Langgan Berjaya"); } lain {Serial.println ("Langganan Gagal, Periksa Nama dan Sijilnya"); sementara (1); }} lain {Serial.println ("Sambungan AWS gagal, Periksa Alamat HOST"); sementara (1); }

kelewatan (2000);

}

terbitkan data sensor selepas setiap 1 minit

if (tick> = 60) // terbitkan ke topik setiap 5 saat {tick = 0; muatan char [PAYLOAD_MAX_LEN]; snprintf (muatan, PAYLOAD_MAX_LEN, format, senseNumber, msgCount ++, rms_x, rms_y, rms_z, cTemp, voltan); Serial.println (muatan); if (hornbill.publish (TOPIC_NAME, payload) == 0) {Serial.print ("Terbitkan Mesej:"); Serial.println (muatan); } lain {Serial.println ("Penerbitan gagal"); }} vTaskDelay (1000 / portTICK_RATE_MS); tandakan ++;

Langkah 7: Memvisualisasikan Data dalam AWS

Memvisualisasikan Data dalam AWS
Memvisualisasikan Data dalam AWS
Memvisualisasikan Data dalam AWS
Memvisualisasikan Data dalam AWS
Memvisualisasikan Data dalam AWS
Memvisualisasikan Data dalam AWS
  • Log masuk ke akaun AWS anda.
  • di sudut kiri bar alat, anda akan menemui tab Perkhidmatan
  • Klik pada tab ini dan di bawah tajuk Internet of Things pilih IoT Core.
  • Pilih QoS dan no. mesej kepada pelanggan. Masukkan nama topik.

Langkah 8: Kod Keseluruhan

Anda boleh mendapatkan keseluruhan kod di Github Repository ini.

Kredit

  • Arduino Json
  • Sensor Suhu dan Kelembapan Tanpa Wayar
  • ESP32
  • Pelanggan PubSub

Disyorkan: