Სარჩევი:
ვიდეო: BBQ Pi (მონაცემთა ვიზუალიზაციით!): 4 ნაბიჯი (სურათებით)
2024 ავტორი: John Day | [email protected]. ბოლოს შეცვლილი: 2024-01-30 10:16
შესავალი
მწვადი ყველაზე ხშირად ეხება ნელი პროცესს არაპირდაპირი სითბოს გამოყენებისას თქვენი საყვარელი ხორცის დასამზადებლად. მიუხედავად იმისა, რომ სამზარეულოს ეს მეთოდი ძალიან პოპულარულია-განსაკუთრებით აშშ – ში-მას აქვს ის, რაც ზოგიერთმა შეიძლება მიიჩნიოს საკმაოდ სერიოზულ სისუსტედ: ის მოითხოვს ნახევრად გამჭვირვალე ყურადღების მიღებას, რათა დაიხარჯოს თქვენი ორმოს და საკვების ტემპერატურის მონიტორინგი. შეიყვანეთ: ჟოლო პი.
ორიგინალური პროექტი
ამ პროექტის ორიგინალური წყარო შეგიძლიათ იხილოთ აქ: https://old.reddit.com/r/raspberry_pi/comments/a0…, კომერციულად ხელმისაწვდომი უკაბელო თერმომეტრები Raspberry Pi– სთვის (რომელიც მის GPIO- სთან იყო მიმაგრებული პატარა RF მოდულს). თავდაპირველ პროექტში (ზემოთ მოყვანილი), პროდუქტს ჰქონდა მისი მონაცემები ინახებოდა sqlite მონაცემთა ბაზაში და გამოჩნდა ადგილობრივად განთავსებულ apache2 php ვებსაიტზე.
ეს გადაწყვეტა უკვე აგვარებს თავდაპირველ პრობლემას, რომელსაც შევეხეთ ამ ბლოგის შესავალში: ახლა თქვენ შეგიძლიათ დისტანციურად აკონტროლოთ თქვენი საკვებისა და ორმოს ტემპერატურა ვებ ბრაუზერით. მაგრამ რა მოხდება, თუ გვსურს ამის გაფართოება? შეიყვანეთ: GridDB.
მარაგები
ჟოლო Pi4
SUNKEE 433Mhz Superheterodyne უკაბელო მიმღების მოდული
ნაბიჯი 1: GridDB ვებ API და FluentD
ამ პროექტის ნახვისთანავე, ჩემი პირველი აზრი - აღელვების საწყისი ტალღის შემდეგ - ვფიქრობდი იმაზე, თუ როგორ გავაგრძელე ფუნქციონირება. GridDB და მისი Grafana მოდულის გამოყენებით, მე ვცდილობდი ვიზუალიზაცია ჩემი საკვები და ორმოს მონაცემები. ამის მიღმა, მე მსურდა გრაფანას ანოტაციების დაყენება რაიმე ანომალური მონაცემების მოსაძებნად - არ შეიძლება ნახშირიანი ხორცის ჭამა!
დასაწყებად, მე უნდა გამოვიყენო C კოდი ორიგინალური პროექტიდან, რომ წავიკითხო უკაბელო თერმომეტრიდან მიღებული მონაცემები და გამოვაქვეყნო ეს მონაცემები ჩემს GridDB სერვერზე. ამის გასააქტიურებლად, მე გავრეკე GridDB სერვერი Azure– ზე CentOS ვირტუალური აპარატის გამოყენებით. უმარტივესი გზა მონაცემების გასაზიარებლად ჩვენი ზღვარზე მომუშავე მანქანიდან (Raspberry Pi) ჩვენს ღრუბელ სერვერზე იყო GridDB Web API საშუალებით. ამრიგად, ამ vm– ზე, მე დავაყენე GridDB– ის WebAPI Fluentd– თან ერთად და თანმხლები GridDB კონექტორი.
ღრუბელში მონაცემების გაგზავნამდე, მე უნდა შევქმნა ძირითადი სქემა ჩემი BBQ Pi კონტეინერისთვის. მონაცემთა ნაკრები ძალიან მარტივია: ჩვენ გვაქვს ორი ტემპერატურის სენსორი, ერთი მზარეულის ID და, რა თქმა უნდა, დროის ნიშნული. ასე რომ, ჩვენი სქემა ასე გამოიყურება:
timeseries = gridstore.put_container ("bbqpi", [("დრო", griddb. GS_TYPE_TIMESTAMP), ("cookid", griddb. GS_TYPE_INT), ("probe1", griddb. GS_TYPE_INT), ("probe2", griddb. GS_TYPE_INTER_] GIDB. GTT
ამ Timeseries კონტეინერის შესაქმნელად, მე უბრალოდ გამოვიყენე WebAPI (პორტი 8080):
curl -X POST -ძირითადი -u admin: admin -H "Content -type: application/json" -d
'{"container_name": "bbqpi", "container_type": "TIME_SERIES", / "rowkey": true, "columns": [{"name": "time", "type": "TIMESTAMP"}, {"name": "cookid", "type": "INTEGER"}, {"name": "probe1", "type": "INTEGER"}, {"name": "probe2", "type": "INTEGER"}]} '\ https:// localhost: 8080/griddb/v2/defaultCluster/dbs/public/container
კონტეინერის შექმნით, მე უნდა გამოვიყენო Fluentd (პორტი 8888), რომ გამოვაქვეყნო ფაქტობრივი მონაცემები ჩვენს კონტეინერში. აქ არის CURL ბრძანება, რომელიც აქვეყნებს რამდენიმე უაზრო მონაცემს:
curl -X POST -d 'json = {"თარიღი": "2020-01-01T12: 08: 21.112Z", "cookid": "1", "probe1": "150", "probe2": "140" } 'https:// localhost: 8888/griddb
იქიდან, მე მჭირდება ორიგინალური კოდის დამატება HTTP POST მოთხოვნის გასაგზავნად, როდესაც ჩვენი Pi კითხულობს ჩვენს ორმოს მონაცემებს (დაახლოებით ~ 12 წამში ერთხელ).
როგორც გვერდითი შენიშვნა: ამ კოდის დაწერამ მასწავლა იმის დაფასება, თუ რამდენად ხმამაღალი შეიძლება იყოს C ენა:
int postData (char დრო , int cookid, int probe1, int probe2, char url )
{CURL *დახვევა; CURL კოდი res; / * ფანჯრებში, ეს ინიციალებს მოსაწყენ ნივთებს */ curl_global_init (CURL_GLOBAL_ALL); char errbuf [CURL_ERROR_SIZE] = {0,}; char აგენტი [1024] = {0,}; char json [1000]; snprintf (json, 200, "json = {" თარიღი / ": \"%s.112Z / ", \" cookid / ": \"%d / ", \" probe1 / ": \"%d / ", / "probe2 \": / "%d \"} ", დრო, cookid, probe1, probe2); / * მიიღეთ curl სახელური */ curl = curl_easy_init (); if (curl) { /* ჯერ დააყენეთ URL, რომელიც აპირებს მიიღოს ჩვენი POST. ეს URL შეიძლება იყოს https:// URL, თუ ეს არის ის, რაც უნდა მიიღოს მონაცემები. */ snprintf (აგენტი, აგენტის ზომა, "libcurl/%s", curl_version_info (CURLVERSION_NOW)-> ვერსია); აგენტი [აგენტის ზომა - 1] = 0; curl_easy_setopt (დახვევა, CURLOPT_USERAGENT, აგენტი); curl_easy_setopt (დახვევა, CURLOPT_URL, url); curl_easy_setopt (curl, CURLOPT_USERNAME, "admin"); curl_easy_setopt (დახვევა, CURLOPT_PASSWORD, "ადმინისტრატორი"); curl_easy_setopt (დახვევა, CURLOPT_VERBOSE, 1 ლ); curl_easy_setopt (დახვევა, CURLOPT_ERRORBUFFER, errbuf); curl_easy_setopt (დახვევა, CURLOPT_POSTFIELDS, json); / * შეასრულეთ მოთხოვნა, res მიიღებს დაბრუნების კოდს */ res = curl_easy_perform (curl); if (res! = CURLE_OK) {size_t len = strlen (errbuf); fprintf (stderr, "\ nlibcurl: (%d)", res); if (len) fprintf (stderr, "%s%s", errbuf, ((errbuf [len - 1]! = '\ n')? "\ n": "")); fprintf (stderr, "%s / n / n", curl_easy_strerror (res)); მივიღე გასუფთავება; } გასუფთავება: curl_easy_cleanup (დახვევა); curl_global_cleanup (); დაბრუნება 0; }}
ამ ფუნქციის ჩაწერით, მე უბრალოდ მჭირდება მისი გაშვება იმ დროს, როდესაც გამოქვეყნებულია sqlite მონაცემები:
თუ (კარგი მონაცემები == 1) {
if (last_db_write == 0 || (secs-last_db_write> = 10)) {snprintf (sql, 100, "ჩაწერეთ კითხვებში (cookid, დრო, probe1, probe2) ღირებულებები (%d, '%s',%d, %d); ", cookID, buff, probe1, probe2); printf ("%s / n", sql); rc = sqlite3_exec (db, sql, callback, 0, & zErrMsg); if (rc! = SQLITE_OK) {printf ("SQL შეცდომა: %s / n", zErrMsg); } else {last_db_write = წამი; } char url = "https://xx.xx.xx.xx: 8888/griddb"; postData (buff, cookID, probe1, probe2, url); }}
იმისათვის, რომ დარწმუნდეთ, რომ თქვენი მონაცემები ფაქტობრივად თქვენს სერვერშია ჩასმული, შეგიძლიათ გაუშვათ შემდეგი ბრძანება თქვენი მონაცემთა ბაზის გამოსაძიებლად და შედეგების სანახავად:
curl -X POST -ძირითადი -u admin: admin -H "Content -type: application/json" -d '{"limit": 1000}' https:// localhost: 8080/griddb/v2/defaultCluster/dbs/ საჯარო/კონტეინერები/bbqpi/რიგები
ნაბიჯი 2: გრაფანა
არსებული კოდით, ახლა როდესაც ჩვენ ვიყენებთ ორიგინალურ ვებპორტალს "მზარეულის" დასაწყებად, ჩვენ ერთდროულად ვინახავთ ჩვენი ტემპერატურის მონაცემებს ჩვენს GridDB სერვერზე.
შემდეგი ნაბიჯი იქნება ჩვენი მონაცემების ვიზუალიზაცია Grafana– ს გამოყენებით. ამისათვის ჩვენ მივყვებოდით ამ ბლოგის ინფორმაციას: აქ. ამ განხორციელების სასიამოვნო ის არის, რომ ძალიან ადვილია ნახოთ ჩვენი მონაცემები ლამაზ გრაფიკში. ის ასევე ამატებს ანოტაციებს.
ბლოგში განხილული ანოტაციები უკიდურესად გვიადვილებს მონიტორინგს, როდესაც რაიმე არასწორია ჩვენს საკვებთან ან თავად ორმოსთან. ჩემს შემთხვევაში, მე ვამზადებდი ძროხის მოკლე ნეკნებს. მათთან ერთად, მე არ მინდოდა, რომ ორმოში ტემპერატურა 275 გრადუსზე მეტი ფარენგეიტის მიღმა გაიზარდოს. თუ დავინახე, რომ ტემპერატურა ამის იქით სცილდება, შემიძლია გამორთო სანთურა და დავუშვა, რომ სითბო კვლავ დაიწიოს:
მე მქონდა მსგავსი წესი სენსორისთვის, რომელიც რეალურად ადევნებდა თვალს საკვებს: თუკი საჭმელი მიიღებდა შიდა ტემპერატურას 203 გრადუსი ფარენჰეიტით, ნეკნები მზად იყო. თქვენ შეგიძლიათ ნახოთ მზარეულის ბოლოს ერთადერთი ანოტაცია აქ:
საერთო ჯამში, მზარეულმა მხოლოდ ~ 4 საათი დამჭირდა, მაგრამ ამგვარი დალაგება ნამდვილად გამოირჩეოდა, თუ მე ვამზადებ ისეთ რამეს, რაც კიდევ უფრო მეტ დროს მოითხოვს გრილში (იფიქრეთ დაბალ ნელ კვამლზე, რომელიც გრძელდება 12 ფუნტი საათი). ამის მიუხედავად, მე მჯერა ღირებულება, თუ ეს ინსტრუმენტი ადვილად შესამჩნევია: თქვენი საჭმლის შედეგების შესვლა და წინა მზარეულებთან შედარება ნიშნავს, რომ თქვენი BBQing ნელ -ნელა უკეთესი გახდება, რადგან თქვენ შეგიძლიათ გამოიყენოთ მონაცემები იმის დასადგენად, თუ რა მუშაობს და რა არა ტ
ნაბიჯი 3: კვება
ეს იყო პირველად მე ძროხის მოკლე ნეკნები; სუნელისთვის მე უბრალოდ მარილი, შავი პილპილი და ნივრის ფხვნილი გამოვიყენე. მიუხედავად იმისა, რომ თავიდან რაღაც ცოტათი მაღლა დგას სანთურა, ნეკნები ფანტასტიკური გამოვიდა. Გთხოვთ შეხედოთ:
ნაბიჯი 4: დასკვნა
საბოლოო ჯამში, საკვები გამოვიდა მშვენიერი, სენსორები, GridDB და Grafana ყველა მშვენივრად მუშაობდნენ კონცერტზე და ჩვენ მივიღეთ ღირებული მონაცემები იმის შესახებ, თუ როგორ უნდა მოვამზადოთ ეს ნივთები შემდეგ ჯერზე, როდესაც გვინდა შთაბეჭდილება მოახდინოთ ზოგიერთ მეგობარზე.
გირჩევთ:
როგორ გავხადოთ ტენიანობა და ტემპერატურა რეალურ დროში მონაცემთა ჩამწერი Arduino UNO და SD ბარათით - DHT11 მონაცემთა მრიცხველის სიმულაცია Proteus– ში: 5 ნაბიჯი
როგორ გავხადოთ ტენიანობა და ტემპერატურა რეალურ დროში მონაცემთა ჩამწერი Arduino UNO და SD ბარათით | DHT11 მონაცემთა მრიცხველის სიმულაცია Proteus- ში: შესავალი: გამარჯობა, ეს არის Liono Maker, აქ არის YouTube ბმული. ჩვენ ვაკეთებთ შემოქმედებით პროექტს Arduino– სთან და ვმუშაობთ ჩამონტაჟებულ სისტემებზე. Data-Logger: მონაცემთა მრიცხველი (ასევე მონაცემების ჩამწერი ან მონაცემთა ჩამწერი) არის ელექტრონული მოწყობილობა, რომელიც დროთა განმავლობაში აფიქსირებს მონაცემებს
მონაცემთა მოპოვებისა და მონაცემთა ვიზუალიზაციის სისტემა MotoStudent Electric Racing Bike– ისთვის: 23 ნაბიჯი
მონაცემთა მოპოვებისა და მონაცემთა ვიზუალიზაციის სისტემა MotoStudent Electric Racing Bike: მონაცემთა მოპოვების სისტემა არის აპარატურისა და პროგრამული უზრუნველყოფის ერთობლიობა, რომელიც მუშაობს გარე სენსორების მონაცემების შეგროვების მიზნით, შემდგომში შესანახად და დამუშავების მიზნით, რათა ის იყოს ვიზუალურად გრაფიკული და გაანალიზებული, ინჟინრებს საშუალებას აძლევს გააკეთონ
სამაგიდო Bluetooth სპიკერი აუდიო ვიზუალიზაციით, სენსორული ღილაკებით და NFC .: 24 ნაბიჯი (სურათებით)
სამაგიდო Bluetooth სპიკერი აუდიო ვიზუალიზაციით, სენსორული ღილაკებით და NFC .: გამარჯობა! ამ ინსტრუქციებში მე ვაპირებ ვაჩვენო როგორ გავაკეთე ეს სამაგიდო Bluetooth სპიკერი, რომელსაც აქვს საოცარი აუდიო ვიზუალიზაცია სენსორული ღილაკებით და NFC- ით. მისი მარტივად შეხამება NFC ჩართულ მოწყობილობებთან მხოლოდ ერთი შეხებით. არ არსებობს ფიზიკური ღილაკი
სამაგიდო გამაძლიერებელი აუდიო ვიზუალიზაციით, ორობითი საათი და FM მიმღები: 8 ნაბიჯი (სურათებით)
სამაგიდო გამაძლიერებელი აუდიო ვიზუალიზაციით, ორობითი საათი და FM მიმღები: მე მომწონს გამაძლიერებლები და დღეს, მე გაგიზიარებ ჩემს დაბალი სიმძლავრის სამაგიდო გამაძლიერებელს, რომელიც ახლახანს გავაკეთე. ჩემს მიერ შემუშავებულ გამაძლიერებელს აქვს რამდენიმე საინტერესო თვისება. მას აქვს ინტეგრირებული ორობითი საათი და შეუძლია მიუთითოს დრო და თარიღი და მას შეუძლია აჩვენოს აუდიო, რომელსაც ხშირად უწოდებენ აუდიოს
EAL-Industri4.0-RFID მონაცემთა დამთვალიერებელი მონაცემთა ბაზა: 10 ნაბიჯი (სურათებით)
EAL-Industri4.0-RFID მონაცემთა დამთვალიერებელი მონაცემთა ბაზა: შეიმუშავეთ ყველა გზა, რათა დარეგისტრირდეთ და დაარეგისტრიროთ იდენტიფიკატორით. RFID, მონაცემების ჩამორჩენა MySQL მონაცემთა ბაზაში. node-RED, როგორც წესი, ვიცავთ და ვიმუშავებ მონაცემების და C# პროგრამის სახით Windows Form Application– ის საშუალებით