Სარჩევი:

ამინდის ანგარიში ThingSpeak MQTT და IFTTT აპლეტების გამოყენებით: 8 ნაბიჯი
ამინდის ანგარიში ThingSpeak MQTT და IFTTT აპლეტების გამოყენებით: 8 ნაბიჯი

ვიდეო: ამინდის ანგარიში ThingSpeak MQTT და IFTTT აპლეტების გამოყენებით: 8 ნაბიჯი

ვიდეო: ამინდის ანგარიში ThingSpeak MQTT და IFTTT აპლეტების გამოყენებით: 8 ნაბიჯი
ვიდეო: ამინდის პროგნოზი 27.11.2018 2024, ნოემბერი
Anonim
ამინდის ანგარიში ThingSpeak MQTT და IFTTT აპლეტების გამოყენებით
ამინდის ანგარიში ThingSpeak MQTT და IFTTT აპლეტების გამოყენებით

შესავალი

ღრუბელზე დაფუძნებული ამინდის პროგრამა, რომელიც უზრუნველყოფს ამინდის ყოველდღიურ ანგარიშებს ელ.ფოსტის შეტყობინების სახით. ეს ვებ პროგრამა ზომავს ტემპერატურას და ტენიანობას SHT25 და Adafruit Huzzah ESP8266 გამოყენებით. ის გვაწვდის რეალურ დროში ტემპერატურისა და ტენიანობის მონაცემებს და საათობრივ ანალიზს. მონაცემები იგზავნება ThingSpeak MQTT API გამოყენებით და მოგვიანებით ჩვენ ვაგზავნით ელ.ფოსტის შეტყობინებას მომხმარებელს, როდესაც ტემპერატურა აღწევს მინიჭებულ ზღვარს IFTTT პროტოკოლის გამოყენებით. SHT25 არის ტემპერატურისა და ტენიანობის სენსორები, რომელიც დამზადებულია Sensirion– ის მიერ. SHT25 უზრუნველყოფს მაღალი დონის სიზუსტეს დაახლოებით% 2% RH. მისი ტენიანობის დიაპაზონი 0 -დან 100% -მდეა, ხოლო ტემპერატურა -40 -დან 125 ° C- მდე. ის ბევრად უფრო საიმედო და სწრაფია 8 წმ სენსორის რეაგირების დროით.

მახასიათებლები

  • გთავაზობთ რეალურ დროში ანალიტიკას და სტატისტიკას Thing Speak MQTT API გამოყენებით
  • ელ.ფოსტის შეტყობინება მიეწოდება მომხმარებელს დანიშნულ დროს IFTTT– ის გამოყენებით
  • სამუშაოების განრიგი გამოიყენება ამოცანის დასაგეგმად, როგორიცაა სენსორების მონაცემების მოპოვება, სენსორული მონაცემების გამოქვეყნება, MQTT თემის გამოწერა
  • ის იყენებს I2C პროტოკოლს სენსორის კითხვის მისაღებად, რაც უფრო ზუსტი, გაფართოებადი და მასშტაბურია
  • ძილის რეჟიმი, როდესაც მოწყობილობა უმოქმედოა ან ამოცანა არ არის გამოძახებული.
  • ეფექტური ამოცანის დაგეგმვა უზრუნველყოფს უპრობლემოდ გამოყენებას
  • მასპინძლობს ცალკე ვებგვერდს, სადაც მომხმარებელმა უნდა უზრუნველყოს თავისი მომხმარებლის რწმუნებათა სიგელები, რათა თავიდან აიცილოს თქვენი მოწყობილობის დაბინდვა ყოველ ჯერზე სხვა wifi ქსელების ხელმისაწვდომობისას
  • SPIFFS გამოიყენება ჩვენი ვებ გვერდის შესანახად, რათა ჩვენი კოდი იყოს წაკითხული და ნაკლებად მოუხერხებელი

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

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

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

  • Adafruit esp8266 Huzzah დაფა
  • ჰუზას დაფის ფარი
  • SHT25 სენსორის მოდული
  • I2C კაბელი

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

  • Arduino IDE
  • IFTTT Thing Speak
  • MQTT API

ნაბიჯი 2: მომხმარებლის სერთიფიკატების შენახვა

მომხმარებლის სერთიფიკატების შენახვა
მომხმარებლის სერთიფიკატების შენახვა
მომხმარებლის სერთიფიკატების შენახვა
მომხმარებლის სერთიფიკატების შენახვა

აქ ჩვენ ვიყენებთ SHT25 I2C სენსორს ტემპერატურისა და ტენიანობის რეალურ დროში მნიშვნელობების წასაკითხად და ამ მნიშვნელობის გამოსაქვეყნებლად ღრუბელში. სენსორის განახლებული მნიშვნელობის დროდადრო მისაღებად და ამ განახლებების ერთდროულად გამოსაქვეყნებლად ჩვენ ვიყენებთ Arduino– ს სამუშაოების განრიგის ბიბლიოთეკას. ღრუბლოვანი ოპერაციებისთვის, ჩვენ ვიყენებთ ThingSpeak MQTT API. მოგვიანებით ჩვენ ვაძლევთ მომხმარებელს ამინდის რეალურ დროში ანგარიშს IFTTT აპლეტების გამოყენებით. თქვენ შეგიძლიათ მიყევით ამ ნაბიჯებს თქვენი საკუთარი ამინდის სადგურის შესაქმნელად. ასე რომ, წვრილმანი

სანამ შემდგომ გაგრძელდებოდა. ჩვენ უნდა შევინარჩუნოთ მომხმარებლის რწმუნებათა სიგელები. ამ მიზნით, ჩვენ ვმასპინძლობთ ვებ სერვერს 192.169.1.4. ჩვენ შევინახეთ ჩვენი ვებ ფორმა SPIFFS– ში. როგორც კი მოწყობილობა დაიწყება ის მასპინძლობს ვებ სერვერს 60 წამის განმავლობაში. მომხმარებელმა უნდა დაიცვას ეს ნაბიჯები.

  • დაუკავშირდით AP ESPuser– ს, ეს ჩამოთვლილია თქვენს ხელმისაწვდომ wifi ქსელის სიაში. დაუკავშირდით ამ AP- ს და შეიყვანეთ პაროლი "*******"
  • მას შემდეგ რაც დაკავშირდება, გადადით თქვენს ბრაუზერში შეიყვანეთ IP 192.168.1.4.
  • შეიყვანეთ თქვენი ადგილობრივი WiFi– ის SSID და პაროლი შეყვანის ველში და შეიყვანეთ SUBMIT
  • ეს რწმუნებათა სიგელები შეინახება EEPROM– ში
  • 60 წამის შემდეგ მოწყობილობა ავტომატურად გაითიშება AP– დან
  • მომდევნო დროს, როდესაც ჩართავთ მოწყობილობას, მომხმარებელს არ სჭირდება ამ პროცედურის დაცვა, მოწყობილობა ავტომატურად მოიტანს მომხმარებლის რწმუნებათა სიგელებს EEPROM– დან და გააგრძელებს სენსორის კითხვებს I2C ინტერფეისიდან და განათავსებს მას ღრუბელში

// --------- AP კონფიგურაცია ------------ // IPAddress ap_local_IP (192, 168, 1, 4); IPAdress ap_gateway (192, 168, 1, 254); IPAddress ap_subnet (255, 255, 255, 0);

Serial.print ("წვდომის წერტილის კონფიგურაცია …");

WiFi.softAPConfig (ap_local_IP, ap_gateway, ap_subnet);

Serial.print ("მომხმარებლის სერთიფიკატების დაყენება");

WiFi.softAP (ssidAP, passAP);

server.on ("/", handleRoot);

server.onNotFound (onHandleNotFound);

server.begin ();

APTimer = მილი ();

while (millis ()-APTimer <APInterval) {

server.handleClient ();

}

// ****************************************************************************************** ********* // void handleRoot () {

if (server.hasArg ("ssid") && server.hasArg ("პაროლი"))

{

// თუ ყველა ფორმის ველი შეიცავს მონაცემთა ზარს

handelSubmit ()

handleSubmit (); }

სხვა {

// ხელახლა აჩვენე ფორმა

// წაიკითხეთ სფიფებში შემავალი ფაილი

ფაილის ფაილი = SPIFFS.open ("/webform.html", "r");

server.streamFile (ფაილი, "text/html");

// არ დაგავიწყდეთ ფაილის დახურვა

file.close ();

}}

// შეამოწმეთ სტატუსი, რომ მას აქვს არგუმენტები ssid და პაროლი

// შემდეგ ჩაწერეთ რწმუნებათა სიგელები ROM– ზე

ROMwrite (სიმებიანი (server.arg ("ssid")), სიმებიანი (server.arg ("პაროლი")))

ნაბიჯი 3: შექმენით თქვენი ვებ ფორმა SPIFFS– ში

SPIFFS

სერიული პერიფერიული ინტერფეისი Flash ფაილური სისტემა, ან მოკლედ SPIFFS. ეს არის მსუბუქი ფაილური სისტემა მიკროკონტროლერებისთვის SPI ფლეშ ჩიპით. ESP8266- ის საბორტო ფლეშ ჩიპს აქვს უამრავი ადგილი თქვენი ვებ გვერდებისათვის, განსაკუთრებით თუ თქვენ გაქვთ 1MB, 2MB ან 4MB ვერსია. ჩვენ ასევე შევინახეთ ჩვენი ვებ გვერდი Flash სისტემაში. არსებობს რამდენიმე ნაბიჯი, რომელიც უნდა დავიცვათ მონაცემების ასატვირთად სფიფებში

  1. ჩამოტვირთეთ ინსტრუმენტი:
  2. თქვენს Arduino ჩანახატების კატალოგში შექმენით ინსტრუმენტების დირექტორია, თუ ის ჯერ არ არსებობს
  3. გახსენით ინსტრუმენტი ინსტრუმენტების კატალოგში (გზა გამოიყურება /Arduino/tools/ESP8266FS/tool/esp8266fs.jar)
  4. გადატვირთეთ Arduino IDE
  5. გახსენით ესკიზი (ან შექმენით ახალი და შეინახეთ)
  6. გადადით ესკიზის დირექტორიაში (აირჩიეთ ესკიზი> ესკიზის საქაღალდის ჩვენება)
  7. შექმენით დირექტორია სახელით მონაცემები და ნებისმიერი ფაილი, რომელიც გსურთ ფაილურ სისტემაში. ჩვენ ავტვირთეთ ჩვენი HTML გვერდი სახელწოდებით webform.html
  8. დარწმუნდით, რომ შეარჩიეთ დაფა, პორტი და დახურული სერიული მონიტორი
  9. აირჩიეთ ინსტრუმენტები> ESP8266 ესკიზის მონაცემთა ატვირთვა. ეს უნდა დაიწყოს ფაილების ატვირთვა ESP8266 ფლეშ ფაილურ სისტემაში. დასრულების შემდეგ, IDE სტატუსის ზოლი გამოჩნდება SPIFFS გამოსახულების ატვირთული შეტყობინება.

ფაილის ფაილი = SPIFFS.open ("/webform.html", "r");

server.streamFile (ფაილი, "text/html");

// არ დაგავიწყდეთ ფაილის დახურვა

file.close ();

ნაბიჯი 4: სამუშაოების დაგეგმვა

ამ გაკვეთილში ჩვენ ვასრულებთ ორ ოპერაციას:

  • წაიკითხეთ მონაცემები SHT25– დან I2C პროტოკოლის გამოყენებით
  • განათავსეთ განახლებული მონაცემები ღრუბელში ThingSpeak MQTT API გამოყენებით

ამის მისაღწევად ჩვენ ვიყენებთ TaskScheduler ბიბლიოთეკას. ჩვენ დავგეგმეთ ორი განსხვავებული ამოცანა, რომელიც ეხება ორ განსხვავებულ საკონტროლო ოპერაციას. ეს კეთდება შემდეგნაირად

  • ამოცანა 1 არის სენსორის მნიშვნელობის წასაკითხად, ეს ამოცანა გრძელდება 1 წამის განმავლობაში, სანამ არ მიაღწევს დროის 10 წამს.
  • როდესაც Task1 მიაღწევს თავის ვადას, ჩვენ ვუკავშირდებით ადგილობრივ Wifi და MQTT ბროკერებს.
  • ახლა ამოცანა 2 ჩართულია და ჩვენ ვთიშავთ ამოცანას 1 ამოცანა 2 არის სენსორული მონაცემების გამოქვეყნება Thing Speak MQTT ბროკერზე ეს ამოცანა მუშაობს 20 წამის განმავლობაში, სანამ არ მიაღწევს დროის 20 წამს
  • როდესაც Task2 მიაღწევს თავის ვადას, ამოცანა 1 კვლავ ჩართულია და Task2 გამორთულია. ისევ აქ, ჩვენ ვიღებთ განახლებულ მნიშვნელობას და პროცესი გრძელდება
  • როდესაც უკუგამოძახება არ არის დარეკილი ან მოწყობილობა უმოქმედოა, ის გადადის სინათლის ძილზე, რითაც დაზოგავს ენერგიას.

// --------- პროტოტიპი ამოცანის დასაბრუნებლად ------------ //

void taskI2CCallback ();

void taskI2CD გამორთულია ();

void taskWiFiCallback ();

void taskWiFiDisable ();

//---------Დავალებები------------//

ამოცანა tI2C (2 * TASK_SECOND, TASK_FOREVER, & taskI2CCallback, & ts, false, NULL, & taskI2CD გამორთულია);

ამოცანა tWiFi (20* TASK_SECOND, TASK_FOREVER, & taskWiFiCallback, & ts, false, NULL, & taskWiFiDisable);

// ჩართვა tI2C tI2C. ჩართვა ();

ნაბიჯი 5: ტემპერატურისა და ტენიანობის მნიშვნელობების კითხვა SHT25– დან

ტემპერატურისა და ტენიანობის მნიშვნელობების კითხვა SHT25– დან
ტემპერატურისა და ტენიანობის მნიშვნელობების კითხვა SHT25– დან

I2C არის ორი მავთულის ინტერფეისი, რომელიც იყენებს მხოლოდ ორ მავთულს სამაგისტრო მოწყობილობასთან კომუნიკაციისთვის. ერთი არის SCL (სერიული საათი) და მეორე არის SDA (სერიული მონაცემები). თითოეულ მონა მოწყობილობას აქვს უნიკალური მისამართი. SHT 25 ასევე აქვს 8 ბიტიანი მისამართი და მასზე წვდომა შესაძლებელია 0x44 მისამართით. მას აქვს 8 ბიტიანი მისამართი, სადაც 7 ბიტი არის რეალური მისამართი, ხოლო ყველაზე მარჯვნივ LSB ბიტი 0 გამოიყენება მოწყობილობაზე წაკითხვის ან წერის სიგნალისთვის. თუ ბიტი 0 დაყენებულია 1 -ზე, სამაგისტრო მოწყობილობა წაიკითხავს მონა I2C მოწყობილობიდან. I2C არის ბევრად უფრო საიმედო, მასშტაბური და სწრაფი და მასაც კი აქვს მრავალი რეჟიმი, რაც მას ენერგოეფექტურს ხდის

ჩვენ ვიყენებთ Wire.h ბიბლიოთეკას ტემპერატურისა და ტენიანობის მნიშვნელობების წასაკითხად. ეს ბიბლიოთეკა ხელს უწყობს სენსორსა და სამაგისტრო მოწყობილობას შორის i2c კომუნიკაციას. 0x44 არის I2C მისამართი SHT25– ისთვის. SHT25 მუშაობს სხვადასხვა რეჟიმში. ამისათვის შეგიძლიათ მიმართოთ მონაცემთა ცხრილს. ჩვენ ვიყენებთ 0x2C და 0x06 როგორც MSB და LSB შესაბამისად ერთჯერადი გასროლისთვის

ნაბიჯი 6: გამოაქვეყნეთ ღირებულებები ThingSpeak ThingSpeak MQTT API გამოყენებით

ღირებულებების გამოქვეყნება ThingSpeak ThingSpeak MQTT API გამოყენებით
ღირებულებების გამოქვეყნება ThingSpeak ThingSpeak MQTT API გამოყენებით

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

ThingSpeak MQTT

MQTT არის გამოქვეყნება/გამოწერის არქიტექტურა, რომელიც შექმნილია უპირველეს ყოვლისა უკაბელო ქსელებთან გამტარუნარიანობისა და ენერგიის შეზღუდული მოწყობილობების დასაკავშირებლად. ეს არის მარტივი და მსუბუქი პროტოკოლი, რომელიც მუშაობს TCP/IP სოკეტებზე ან WebSockets– ზე. MQTT WebSockets– ით არის დაცული SSL– ით. გამოქვეყნების/გამოწერის არქიტექტურა საშუალებას აძლევს შეტყობინებებს გადაიტანოს კლიენტის მოწყობილობებზე, იმ მოწყობილობის გარეშე, რომელსაც სჭირდება სერვერის უწყვეტი გამოკითხვა. კლიენტი არის ნებისმიერი მოწყობილობა, რომელიც აკავშირებს ბროკერს და შეუძლია გამოაქვეყნოს ან გამოიწეროს თემები ინფორმაციის მისაღებად. თემა შეიცავს ბროკერის მარშრუტიზაციის ინფორმაციას. თითოეული კლიენტი, რომელსაც სურს შეტყობინებების გაგზავნა, აქვეყნებს მათ გარკვეულ თემაზე და თითოეული კლიენტი, რომელსაც სურს შეტყობინებების მიღება, იწერს გარკვეულ თემას

გამოაქვეყნეთ და გამოიწერეთ ThingSpeak MQTT გამოყენებით

  • გამოქვეყნება არხის არხზე /გამოქვეყნება /
  • გამოქვეყნება კონკრეტულ არხზე/გამოქვეყნება/ველები/ველი/
  • გამოიწერეთ არხის საველე არხები/გამოიწერეთ //
  • გამოიწერეთ კერძო არხის არხები // გამოიწერეთ/ველები/ველი/
  • გამოიწერეთ არხის ყველა ველი. არხები // გამოწერა/ველები/feild/

void taskWiFiCallback ()

{

Serial.println ("taskWiFiCallbackStarted");

Serial.print ("დროის გასვლა ამ ამოცანისთვის: / t");

Serial.println (tWiFi.getTimeout ());

თუ (! mqttCli.connected ())

{

Serial.println ("კლიენტი არ არის დაკავშირებული");

ხელახლა დაკავშირება MQTT ();

}

სიმებიანი თემა String = "არხები/"+სიმებიანი (channelID)+"/გამოქვეყნება/"+სიმებიანი (ჩაწერაAPIKey);

int topicLength = topicString.length ()+1;

char topicBuffer [topicLength];

topicString.toCharArray (topicBuffer, topicLength+1);

Serial.println (topicBuffer);

სიმებიანი მონაცემებიString = სიმებიანი ("field1 =" + სიმებიანი (tempC, 1) + "& field2 =" + სიმებიანი (tempF, 1) + "& field3 =" + სიმებიანი (ტენიანი, 1));

int dataLength = dataString.length ()+1;

ბაიტი dataBuffer [dataLength];

dataString.getBytes (dataBuffer, dataLength);

mqttCli.beginPublish (topicBuffer, dataLength, false);

Serial.println (mqttCli.write (dataBuffer, dataLength)? "Published": "გამოქვეყნდა ვერ მოხერხდა");

mqttCli.endPublish ();

//mqttCli.loop ();

}

ნაბიჯი 7: ამინდის ანგარიშის ელ.ფოსტის შეტყობინება

ამინდის ანგარიში ელ.ფოსტის შეტყობინება
ამინდის ანგარიში ელ.ფოსტის შეტყობინება
ამინდის ანგარიში ელ.ფოსტის შეტყობინება
ამინდის ანგარიში ელ.ფოსტის შეტყობინება

ჩვენ ვიყენებთ IFTTT აპლეტებს, რათა რეალურ დროში გამოვაქვეყნოთ ამინდის შესახებ შეტყობინება მომხმარებლისათვის. ასე რომ, ჩვენ განვახორციელეთ ის ThingSpeak– ის საშუალებით. ჩვენ საშუალოდ ვიღებთ ტემპერატურისა და ტენიანობის 5 ფაი ღირებულებებს. როდესაც ბოლო ჩანაწერის ღირებულება საშუალოზე მაღალია. ეს გამოიწვევს ელ.ფოსტის შეტყობინებას "ეს ცხელი დღეა". და როდესაც ის საშუალოზე ნაკლებია. ეს გამოიწვევს ელ.ფოსტის შეტყობინებას "რა ლამაზი დღეა". ყოველდღე დილის 10:00 საათზე (IST) ჩვენ ვიღებთ ელ.ფოსტის შეტყობინებას

არხის ID = ******;

iftttURL = 'https://maker.ifttt.com/**************';

moistData = thingSpeakRead (channelID, 'Fields', 3, 'NumDays', 5); tempData = thingSpeakRead (channelID, 'Fields', 1, 'NumDays', 5);

perHumid = მაქსიმუმი (ტენიანობის მონაცემები)-წუთი (ტენიანობის მონაცემები);

humidValue = 0.1*perHumid+წთ (ტენიანობის მონაცემები);

perTemp = max (tempData) -min (tempData);

tempValue = 0.1*თითოTemp+წთ (tempData);

urlTemp = strcat ('https://api.thingspeak.com/channels/', string (channelID), '/fields/1/last.txt');

urlHumid = strcat ('https://api.thingspeak.com/channels/', string (channelID), '/fields/3/last.txt'); lastTempValue = str2num (ვებგვერდი (urlTemp)); lastHumidValue = str2num (ვებგვერდი (urlHumid));

თუ (lastTempValue

if (lastTempValue> tempValue || lastHumidValue> humidValue)

plantMessage = 'ცხელი დღეა.'; ვებ -წერა (iftttURL, 'value1', plantMessage, 'value2', lastTempValue, 'value3', lastHumidValue); დასასრული

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

საერთო კოდი
საერთო კოდი
საერთო კოდი
საერთო კოდი
საერთო კოდი
საერთო კოდი

საერთო კოდი

საერთო კოდი ხელმისაწვდომია ამ GitHub საცავში

შეზღუდვები

  • მონაცემების გამოქვეყნებასთან დაკავშირებით არსებობს პრობლემები მონაცემთა დიდი ნაწილის გამოქვეყნების გამოყენებით. ამ საკითხის გადასაჭრელად ჩვენ ვიყენებთ ჩაწერის () ფუნქციას
  • SPIFFS უნდა იყოს ფორმატირებული ახალი მონაცემების SPIFFS- ში ატვირთვამდე.
  • თქვენ არ უნდა გამოიყენოთ დაგვიანების () ფუნქცია. დაგვიანებით () ხელს უშლის ფონურ ოპერაციას. ამის ნაცვლად, შექმენით შეფერხებები millis () - ის გამოყენებით მხოლოდ საჭიროების შემთხვევაში

კრედიტები

  • ESP826WebServer
  • ამოცანების განრიგი
  • SHT 25
  • ThingSpeak MQTT API
  • IFTTT
  • PubSubClient

გირჩევთ: