Სარჩევი:

დაწყება AWS IoT უკაბელო ტემპერატურის სენსორით MQTT გამოყენებით: 8 ნაბიჯი
დაწყება AWS IoT უკაბელო ტემპერატურის სენსორით MQTT გამოყენებით: 8 ნაბიჯი

ვიდეო: დაწყება AWS IoT უკაბელო ტემპერატურის სენსორით MQTT გამოყენებით: 8 ნაბიჯი

ვიდეო: დაწყება AWS IoT უკაბელო ტემპერატურის სენსორით MQTT გამოყენებით: 8 ნაბიჯი
ვიდეო: CS50 2014 - Week 7 2024, ივლისი
Anonim
დაწყება AWS IoT უკაბელო ტემპერატურის სენსორით MQTT გამოყენებით
დაწყება AWS IoT უკაბელო ტემპერატურის სენსორით MQTT გამოყენებით

ადრეულ ინსტრუქციებში, ჩვენ გავლილი გვაქვს ღრუბლოვანი სხვადასხვა პლატფორმები, როგორიცაა Azure, Ubidots, ThingSpeak, Losant და ა.შ. ჩვენ ვიყენებთ MQTT პროტოკოლს სენსორული მონაცემების ღრუბელში გაგზავნისთვის თითქმის ყველა ღრუბლოვან პლატფორმაზე. MQTT– ის, მისი უპირატესობებისა და სარგებლის შესახებ მეტი ინფორმაციისთვის HTTP პროტოკოლთან დაკავშირებით შეგიძლიათ იხილოთ ამ ინსტრუქციულად.

ამ სასწავლო ინსტრუქციაში ჩვენ გავადიდებთ Amazon– ის კიდევ ერთ და ყველაზე ნაცნობ ღრუბლოვან პლატფორმას. ბევრი თქვენგანი შეიძლება იცნობდეს AWS, ანუ Amazon ვებ სერვისებს და AWS– ის მიერ მოწოდებულ ღრუბლოვან ფუნქციონირებას. ის მრავალი წლის განმავლობაში იყო ვებ განვითარების ბირთვი. IoT პროგრამების მზარდი მასშტაბით, AWS გამოვიდა AWSIoT გადაწყვეტა. AWSIoT არის საიმედო გადაწყვეტა ჩვენი IoT პროგრამების მასპინძლობისთვის.

ამ ინსტრუქციის დაცვით:

  • თქვენ შეძლებთ შექმნათ AWS ანგარიში თქვენი IoT პროგრამისთვის
  • თქვენ შეძლებთ დაუკავშიროთ ESP32 AWS IoT ბირთვს
  • გაგზავნეთ და მიიღეთ შეტყობინებები MQTT და HTTP პროტოკოლის გამოყენებით
  • ვიზუალურად გაგზავნილი მონაცემები AWS– ში

ნაბიჯი 1: შექმენით AWS ანგარიში

AWS ანგარიშის დაყენება საკმაოდ მარტივია. თქვენ უბრალოდ უნდა ატვირთოთ რამდენიმე სერთიფიკატი, დაურთოთ მას პოლიტიკა, დაარეგისტრიროთ მოწყობილობა და დაიწყოთ სენსორის მონაცემების შეტყობინებების მიღება AWS– ში.

AWS ანგარიშის დასაყენებლად მიჰყევით ამ გაკვეთილს.

ნაბიჯი 2: აპარატურის და პროგრამული უზრუნველყოფის სპეციფიკაციები

აპარატურის და პროგრამული უზრუნველყოფის სპეციფიკაციები
აპარატურის და პროგრამული უზრუნველყოფის სპეციფიკაციები

პროგრამული უზრუნველყოფის სპეციფიკაცია

AWS ანგარიში

აპარატურის სპეციფიკაცია

  • ESP32
  • უკაბელო ტემპერატურისა და ვიბრაციის სენსორი
  • ზიგმოს კარიბჭის მიმღები

ნაბიჯი 3: უკაბელო ვიბრაციის და ტემპერატურის სენსორები

უკაბელო ვიბრაციის და ტემპერატურის სენსორები
უკაბელო ვიბრაციის და ტემპერატურის სენსორები

ეს არის გრძელი დიაპაზონის სამრეწველო IoT უკაბელო ვიბრაციისა და ტემპერატურის სენსორი, რომელიც ამაყობს 2 მილის დიაპაზონით უკაბელო mesh ქსელის არქიტექტურის გამოყენებით. 16 ბიტიანი ვიბრაციისა და ტემპერატურის სენსორის ჩათვლით, ეს სენსორი გადასცემს უაღრესად ზუსტ ვიბრაციის მონაცემებს მომხმარებლის მიერ განსაზღვრული ინტერვალებით. მას აქვს შემდეგი მახასიათებლები:

  • სამრეწველო კლასის 3 ღერძი ვიბრაციის სენსორი ± 32 გ დიაპაზონში
  • ითვლის RMS, MAX და MIN გ ვიბრაციას
  • ხმაურის მოცილება დაბალი გამავლობის ფილტრის გამოყენებით
  • სიხშირის დიაპაზონი (გამტარუნარიანობა) 12, 800 ჰერცამდე
  • საცდელი მაჩვენებელი 25, 600 ჰც -მდე
  • დაშიფრული კომუნიკაცია 2 მილის უკაბელო დიაპაზონში
  • სამუშაო ტემპერატურის დიაპაზონი -40 -დან +85 ° C- მდე
  • კედელზე დამონტაჟებული ან მაგნიტით დამონტაჟებული IP65 რეიტინგული დანართი მაგალითი პროგრამული უზრუნველყოფა ვიზუალური სტუდიისა და ლაბორატორიისთვის VIEW
  • ვიბრაციის სენსორი გარე ზონდის ვარიანტით
  • 500 -მდე გადაცემა 4 AA ბატარეიდან ბევრი კარიბჭე და მოდემი ხელმისაწვდომია

ნაბიჯი 4: ESP32 AWS Firmware

AWS– თან დასაკავშირებლად და მონაცემების გაგზავნის დასაწყებად გაიარეთ შემდეგი ნაბიჯები

  • ჩამოტვირთეთ AWS ბიბლიოთეკა შემდეგი Github საცავიდან
  • კლონირება repo და განათავსეთ AWS_IOT ფაილი ბიბლიოთეკის საქაღალდეში Arduino დირექტორია

git კლონი

ახლა მოდით გადავიდეთ კოდზე:

  • ამ აპლიკაციაში ჩვენ გამოვიყენეთ ტყვედ ჩავარდნილი პორტალი, რომ შევინარჩუნოთ WiFi სერთიფიკატები და გადავიდეთ IP პარამეტრებში. ტყვე პორტალზე დეტალური დანერგვისთვის შეგიძლიათ გაიაროთ შემდეგი ინსტრუქცია.
  • დატყვევებული პორტალი გვაძლევს არჩევანის გაკეთებას სტატიკურ და DHCP პარამეტრებს შორის. უბრალოდ შეიყვანეთ რწმუნებათა სიგელები, როგორიცაა სტატიკური IP, ქვექსელის ნიღაბი, კარიბჭე და უკაბელო სენსორის კარიბჭე კონფიგურირებული იქნება ამ IP– ზე.
  • მასპინძლობს ვებგვერდს, სადაც არის სია, სადაც ნაჩვენებია ხელმისაწვდომი WiFi ქსელები და იქ არის RSSI. აირჩიეთ WiFi ქსელი და პაროლი და შეიყვანეთ წარდგენა. სერთიფიკატები შეინახება EEPROM– ში და IP პარამეტრი შეინახება SPIFFS– ში. ამის შესახებ მეტი შეგიძლიათ იხილოთ ამ ინსტრუქციებში.

ნაბიჯი 5: სენსორის მონაცემების მიღება უკაბელო ვიბრაციისა და ტემპერატურის სენსორისგან

სენსორის მონაცემების მიღება უკაბელო ვიბრაციისა და ტემპერატურის სენსორისგან
სენსორის მონაცემების მიღება უკაბელო ვიბრაციისა და ტემპერატურის სენსორისგან
სენსორის მონაცემების მიღება უკაბელო ვიბრაციისა და ტემპერატურის სენსორისგან
სენსორის მონაცემების მიღება უკაბელო ვიბრაციისა და ტემპერატურის სენსორისგან

ჩვენ ვიღებთ 54 ბაიტიან ჩარჩოს უსადენო ტემპერატურისა და ვიბრაციის სენსორებისგან. ეს ჩარჩო მანიპულირებულია ტემპერატურისა და ვიბრაციის მონაცემების მისაღებად.

ESP32– ს აქვს სამი UART, რომელიც გამოიყენება სერიული გამოყენებისთვის

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

და 3 ტექნიკური სერიული პორტი

  • სერიული
  • სერიალი 1
  • სერიალი 2

პირველი, აწარმოეთ აპარატურის სერიული სათაურის ფაილი. აქ ჩვენ ვიყენებთ RX2 და TX2 aka. სერიული მონაცემების მისაღებად ESP32 დაფის GPIO 16 და GPIO 17 ქინძისთავები.

#ჩართეთ

# განსაზღვრეთ RXD2 16 # განსაზღვრეთ TXD2 17

Serial2.begin (115200, SERIAL_8N1, RXD2, TXD2); // ქინძისთავები 16 rx2, 17 tx2, 19200 bps, 8 ბიტი არ არის პარიტეტული 1 გაჩერების ბიტი

შემდეგი ნაბიჯები მიგიყვანთ შემდგომში სენსორის რეალური მნიშვნელობების მისაღებად

  • შექმენით ცვლადები ტემპერატურის, ტენიანობის, ბატარეის და სხვა სენსორული მნიშვნელობების შესანახად
  • დააყენეთ Rx, tx pin, baud rate და parity bits აპარატურის სერიისთვის
  • პირველი, შეამოწმეთ, რომ არის რაიმე წასაკითხი Serial1.available ()
  • ჩვენ მივიღებთ 54 ბაიტის ჩარჩოს.
  • შეამოწმეთ 0x7E, რომელიც არის საწყისი ბაიტი.
  • ვიბრაციის მონაცემები შედგება RMS მნიშვნელობისგან 3 ღერძისთვის, მინ მნიშვნელობები 3 ღერძისთვის, მაქსიმალური მნიშვნელობები 3 ღერძისთვის.
  • ტემპერატურა და ბატარეის ღირებულებები შეიცავს 2 ბაიტი მონაცემს
  • მიიღეთ სენსორის სახელი, ტიპი, სენსორის ვერსია შეიცავს 1 ბაიტი მონაცემს და შეგიძლიათ მიიღოთ შესაბამისი მისამართიდან

if (Serial2.available ()) {Serial.println ("სერიალის წაკითხვა"); მონაცემები [0] = Serial2.read (); დაგვიანება (ლ); if (მონაცემები [0] == 0x7E) {Serial.println ("მივიღე პაკეტი"); ხოლო (! Serial2.available ()); for (i = 1; i <55; i ++) {data = Serial2.read (); დაგვიანება (1); } თუ (მონაცემი [15] == 0x7F) /////// შეამოწმეთ თუ არა სწორი მონაცემები {თუ (მონაცემები [22] == 0x08) //////// დარწმუნდით, რომ სენსორის ტიპი სწორია {rms_x = (((uint16_t) (((მონაცემები [24]) << 16) + ((მონაცემები [25]) << 8) + (მონაცემები [26]))/100); rms_y = ((uint16_t) (((მონაცემები [27]) << 16) + ((მონაცემები [28]) << 8) + (მონაცემები [29]))/100); rms_z = ((uint16_t) (((მონაცემები [30]) << 16) + ((მონაცემები [31]) << 8) + (მონაცემები [32]))/100); int16_t max_x = ((uint16_t) (((მონაცემები [33]) << 16) + ((მონაცემები [34]) << 8) + (მონაცემები [35]))/100); int16_t max_y = ((uint16_t) (((მონაცემები [36]) << 16) + ((მონაცემები [37]) << 8) + (მონაცემები [38]))/100); int16_t max_z = ((uint16_t) (((მონაცემები [39]) << 16) + ((მონაცემები [40]) << 8) + (მონაცემები [41]))/100);

int16_t min_x = ((uint16_t) (((მონაცემები [42]) << 16) + ((მონაცემები [43]) << 8) + (მონაცემები [44]))/100); int16_t min_y = ((uint16_t) (((მონაცემები [45]) << 16) + ((მონაცემები [46]) << 8) + (მონაცემები [47]))/100); int16_t min_z = ((uint16_t) (((მონაცემები [48]) << 16) + ((მონაცემები [49]) << 8) + (მონაცემები [50]))/100);

cTemp = ((((მონაცემები [51]) * 256) + მონაცემები [52])); მცურავი ბატარეა = ((მონაცემები [18] * 256) + მონაცემები [19]); ძაბვა = 0.00322 * ბატარეა; Serial.print ("სენსორის ნომერი"); Serial.println (მონაცემები [16]); senseNumber = მონაცემები [16]; Serial.print ("სენსორის ტიპი"); Serial.println (მონაცემები [22]); Serial.print ("Firmware Version"); Serial.println (მონაცემები [17]); Serial.print ("ტემპერატურა ცელსიუსში:"); Serial.print (cTemp); Serial.println ("C"); Serial.print ("RMS ვიბრაცია X ღერძში:"); სერიული. ბეჭდვა (rms_x); Serial.println ("მგ"); Serial.print ("RMS ვიბრაცია Y- ღერძში:"); სერიული. ბეჭდვა (rms_y); Serial.println ("მგ"); Serial.print ("RMS ვიბრაცია Z ღერძში:"); Serial.print (rms_z); Serial.println ("მგ");

Serial.print ("მინიმალური ვიბრაცია X ღერძში:");

Serial.print (min_x); Serial.println ("მგ"); Serial.print ("მინიმალური ვიბრაცია Y- ღერძში:"); Serial.print (min_y); Serial.println ("მგ"); Serial.print ("მინიმალური ვიბრაცია Z ღერძში:"); Serial.print (min_z); Serial.println ("მგ");

Serial.print ("ADC მნიშვნელობა:");

Serial.println (ბატარეა); Serial.print ("ბატარეის ძაბვა:"); სერიული. ბეჭდვა (ძაბვა); Serial.println ("\ n"); if (ძაბვა <1) {Serial.println ("ბატარეის შეცვლის დრო"); }}} სხვა {for (i = 0; i <54; i ++) {Serial.print (data ); Serial.print (","); დაგვიანება (1); }}}}

ნაბიჯი 6: დაკავშირება AWS– თან

დაკავშირება AWS– თან
დაკავშირება AWS– თან
  • ჩართეთ AWS_IOT.h, WiFi.h სათაურის ფაილები AWSIoT კერასთან კავშირის დასადგენად
  • შეიყვანეთ თქვენი მასპინძლის მისამართი, კლიენტის ID, რომელიც იქნება პოლიტიკის სახელი და თემის სახელი, რომელიც იქნება ნივთის სახელი

// ********* AWS რწმუნებათა სიგელები ************* // char HOST_ADDRESS = "a2smbp7clzm5uw-ats.iot.us-east-1.amazonaws.com"; char CLIENT_ID = "ncdGatewayPolicy"; char TOPIC_NAME = "ncdGatewayThing";

შექმენით char ცვლადი თქვენი JSON შესანახად, ამ შემთხვევაში ჩვენ შევქმენით ფორმატი JSON შესანახად

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

შექმენით AWS_IOT კლასის მაგალითი

AWS_IOT esp; // AWS_IOT კლასის მაგალითი

ახლა დაუკავშირდით AWSIoT კერას შემდეგი მეთოდით

void reconnectMQTT () {if (hornbill.connect (HOST_ADDRESS, CLIENT_ID) == 0) {Serial.println ("დაკავშირებულია AWS"); დაგვიანება (1000);

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

{Serial.println ("წარმატებით გამოწერა"); } else {Serial.println ("გამოწერა ვერ მოხერხდა, შეამოწმეთ საგნის სახელი და სერთიფიკატები"); ხოლო (1); }} else {Serial.println ("AWS კავშირი ვერ მოხერხდა, შეამოწმეთ HOST მისამართი"); ხოლო (1); }

დაგვიანება (2000);

}

გამოაქვეყნეთ სენსორის მონაცემები ყოველი 1 წუთის შემდეგ

if (tick> = 60) // გამოაქვეყნეთ თემაში ყოველ 5 წამში {tick = 0; char დატვირთვა [PAYLOAD_MAX_LEN]; snprintf (დატვირთვა, PAYLOAD_MAX_LEN, ფორმატი, senseNumber, msgCount ++, rms_x, rms_y, rms_z, cTemp, ძაბვა); Serial.println (დატვირთვა); if (hornbill.publish (TOPIC_NAME, payload) == 0) {Serial.print ("შეტყობინების გამოქვეყნება:"); Serial.println (დატვირთვა); } else {Serial.println ("გამოქვეყნება ვერ მოხერხდა"); }} vTaskDelay (1000 / პორტი TICK_RATE_MS); მონიშვნა ++;

ნაბიჯი 7: მონაცემთა ვიზუალიზაცია AWS– ში

მონაცემთა ვიზუალიზაცია AWS– ში
მონაცემთა ვიზუალიზაცია AWS– ში
მონაცემთა ვიზუალიზაცია AWS– ში
მონაცემთა ვიზუალიზაცია AWS– ში
მონაცემთა ვიზუალიზაცია AWS– ში
მონაცემთა ვიზუალიზაცია AWS– ში
  • შედით თქვენს AWS ანგარიშზე.
  • ინსტრუმენტთა პანელის მარცხენა კუთხეში ნახავთ სერვისის ჩანართს
  • დააწკაპუნეთ ამ ჩანართზე და ნივთების ინტერნეტის სათაურში აირჩიეთ IoT Core.
  • აირჩიეთ QoS და არა. შეტყობინებები აბონენტებისთვის. შეიყვანეთ თემის სახელი.

ნაბიჯი 8: საერთო კოდი

თქვენ შეგიძლიათ იპოვოთ საერთო კოდი ამ Github საცავში.

კრედიტები

  • არდუინო ჯსონი
  • უკაბელო ტემპერატურისა და ტენიანობის სენსორები
  • ESP32
  • PubSubClient

გირჩევთ: