Mündəricat:
Video: Barbekü Pi (Məlumat Vizualizasiyası ilə!): 4 Addım (Şəkillərlə)
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:44
Giriş
Barbekü ən çox sevdiyiniz ətləri bişirmək üçün dolayı istidən istifadə edərək yavaş prosesə aiddir. Bu bişirmə üsulu olduqca populyar olsa da-xüsusilə ABŞ-da-bəzilərinin olduqca ciddi bir zəifliyi hesab edə biləcəyi şeylərə malikdir: çuxurunuzun və yeməyinizin temperaturunu izləmək üçün saatlarla yarı aydın bir diqqət tələb olunur. Daxil edin: Raspberry Pi.
Orijinal Layihə
Bu layihənin orijinal mənbəyini burada tapa bilərsiniz: https://old.reddit.com/r/raspberry_pi/comments/a0… Bunun mahiyyəti budur ki, reddit istifadəçisi Produkt qida və çuxur temperaturu məlumatlarını nisbətən ucuz qiymətə ötürə bilmişdir., bir Raspberry Pi üçün kommersiya olaraq mövcud olan simsiz termometrlər (GPIO pinlərinə kiçik bir RF modulu bağlamışdı). Orijinal layihədə (yuxarıda əlaqələndirilmiş) Produkt, məlumatlarının bir sqlite verilənlər bazasında saxlanılmasını və yerli olaraq yerləşdirilən apache2 php veb saytında göstərilməsini təmin etdi.
Bu həll artıq bu bloqun təqdimatında toxunulan orijinal problemi həll edir: indi bir veb brauzeri ilə yeməklərinizi və çuxurlarınızın temperaturunu uzaqdan izləyə bilərsiniz. Amma bunu genişləndirmək istəsək nə olar? Daxil edin: GridDB.
Təchizat
Moruq Pi4
SUNKEE 433Mhz Superheterodyne Simsiz Alıcı Modulu
Addım 1: GridDB Web API və FluentD
Bu layihəni görəndə ilk düşüncəm - ilkin həyəcan dalğasından sonra - funksionallığı necə genişləndirəcəyimi düşünürdüm. GridDB və onun Grafana plaginindən istifadə edərək yemək və çuxur məlumatlarımı görüntüləməyə çalışdım. Bunun xaricində, hər hansı bir anomal məlumat nöqtəsini axtarmaq üçün Grafana şərhləri qurmaq istədim - heç bir kömürlü ət ola bilməz!
Başlamaq üçün, simsiz termometrdən gələn məlumatları oxumaq və bu məlumatları GridDB serverimə yerləşdirmək üçün orijinal layihədəki C kodundan istifadə etməliydim. Bunu işə salmaq üçün bir CentOS virtual maşını istifadə edərək Azure -da bir GridDB Server açdım. Kenar maşınımızdan (Raspberry Pi) bulud serverimizə məlumat paylaşmağın ən asan yolu GridDB Web API vasitəsi ilə idi. Beləliklə, bu vm -də, Fluentd və onu müşayiət edən GridDB konnektoru ilə birlikdə GridDB -in WebAPI -ni qurdum.
Məlumatı əslində buluda göndərməzdən əvvəl, Barbekü Pi konteynerim üçün əsas sxem yaratmalıydım. Daxil olan məlumat bazası son dərəcə sadədir: iki temperatur sensoru, bir aşpaz identifikatorumuz və əlbəttə ki, vaxt damgası var. Beləliklə, sxemimiz belə görünür:
timeseries = gridstore.put_container ("bbqpi", [("vaxt", griddb. GS_TYPE_TIMESTAMP), ("çerez", griddb. GS_TYPE_INT), ("probe1", griddb. GS_TYPE_INT), ("probe2", griddb. GS_TYPE_INT)], griddb. GS_TONT. ER
Bu zaman konteynerini yaratmaq üçün sadəcə WebAPI (port 8080) istifadə etdim:
curl -X POST -əsas -u admin: admin -H "Məzmun növü: application/json" -d
'{"container_name": "bbqpi", "container_type": "TIME_SERIES", / "rowkey": doğru, "sütunlar": [{"ad": "vaxt", "tip": "TIMESTAMP"}, {"name": "cookid", "type": "INTEGER"}, {"name": "probe1", "type": "INTEGER"}, {"name": "probe2", "type": "INTEGER"}]} '\ https:// localhost: 8080/griddb/v2/defaultCluster/dbs/public/container
Konteyner yaradıldıqda, faktiki məlumatları konteynerimizə yerləşdirmək üçün Fluentd (port 8888) istifadə etməliyəm. Budur bəzi saxta məlumatları yerləşdirən CURL əmri:
curl -X POST -d 'json = {"date": "2020-01-01T12: 08: 21.112Z", "cookid": "1", "probe1": "150", "probe2": "140" } 'https:// localhost: 8888/griddb
Oradan, Pi'imiz çuxurumuzdan məlumat oxuduqda (təxminən hər 12 saniyədə bir) bir HTTP POST İstəyi göndərmək üçün orijinal kodu əlavə etməliydim.
Yan qeyd olaraq: bu kodu yazmaq mənə C dilinin nə qədər müfəssəl olduğunu başa düşməyi öyrətdi:
int postData (char vaxtı , int cookid, int probe1, int probe2, char url )
{CURL *əymək; CURLcode res; / * Windows -da, bu winsock stuff */ curl_global_init (CURL_GLOBAL_ALL) başlayacaq; char errbuf [CURL_ERROR_SIZE] = {0,}; char agenti [1024] = {0,}; char json [1000]; snprintf (json, 200, "json = {" date / ": \"%s.112Z / ", \" cookid / ": \"%d / ", \" probe1 / ": \"%d / ", / "probe2 \": / "%d \"} ", zaman, aşpaz, prob1, prob2)); / * qıvrım sapı alın */ curl = curl_easy_init (); if (curl) { /* Əvvəlcə POST -unu almaq üzrə olan URL -i təyin edin. Bu URL, məlumatları almalı olduğu təqdirdə bir https:// URL də ola bilər. */ snprintf (agent, sizeof agent, "libcurl/%s", curl_version_info (CURLVERSION_NOW)-> versiya); agent [agentof size - 1] = 0; curl_easy_setopt (curl, CURLOPT_USERAGENT, agent); curl_easy_setopt (curl, CURLOPT_URL, url); curl_easy_setopt (curl, CURLOPT_USERNAME, "admin"); curl_easy_setopt (curl, CURLOPT_PASSWORD, "admin"); curl_easy_setopt (curl, CURLOPT_VERBOSE, 1L); curl_easy_setopt (curl, CURLOPT_ERRORBUFFER, errbuf); curl_easy_setopt (curl, CURLOPT_POSTFIELDS, json); / * İstəyi yerinə yetirin, res qaytarma kodunu alacaq */ res = curl_easy_perform (curl); əgər (res! = CURLE_OK) {size_t len = strlen (errbuf); fprintf (stderr, "\ nlibcurl: (%d)", res); əgər (len) fprintf (stderr, "%s%s", errbuf, ((errbuf [len - 1]! = '\ n')? "\ n": "")); fprintf (stderr, "%s / n / n", curl_easy_strerror (res)); təmizləmək lazımdır; } təmizləmə: curl_easy_cleanup (curl); curl_global_cleanup (); qaytarma 0; }}
Yazılan bu funksiya ilə, sqlite məlumatlarının yerləşdirildiyi anda eyni zamanda işləməsini istədim:
əgər (goodData == 1) {
if (last_db_write == 0 || (secs-last_db_write> = 10)) {snprintf (sql, 100, "INSERT INTO readings (cookid, time, probe1, probe2) VALUES (%d, '%s',%d, %d); ", cookID, buff, probe1, prob2); printf ("%s / n", sql); rc = sqlite3_exec (db, sql, callback, 0, & zErrMsg); if (rc! = SQLITE_OK) {printf ("SQL xətası: %s / n", zErrMsg); } başqa {last_db_write = saniyə; } char url = "https://xx.xx.xx.xx: 8888/griddb"; postData (buff, cookID, probe1, probe2, url); }}
Verilərinizin serverinizə daxil edildiyindən əmin olmaq üçün verilənlər bazanızı sorğulamaq və nəticələrə baxmaq üçün aşağıdakı əmri işlədə bilərsiniz:
curl -X POST --basic -u admin: admin -H "Content -type: application/json" -d '{"limit": 1000}' https:// localhost: 8080/griddb/v2/defaultCluster/dbs/ ictimai/konteynerlər/bbqpi/satırlar
Addım 2: Grafana
Kod mövcud olduqda, indi "aşpaz" işə salmaq üçün orijinal veb portaldan istifadə edərkən, eyni zamanda temperatur məlumatlarımızı GridDB serverimizdə saxlayacağıq.
Növbəti addım məlumatlarımızı Grafana istifadə edərək görüntüləmək olacaq. Bunu etmək üçün bu bloqdakı məlumatları izlədik: burada. Bu tətbiqin gözəl tərəfi, məlumatlarımızı gözəl bir qrafikdə görmək çox asandır. Əlavə şərhlər də əlavə edir.
Bloqda müzakirə olunan şərhlər, yeməyimizdə və ya çuxurda bir şeyin səhv olduğunu izləməyimizi son dərəcə asanlaşdırır. Mənim vəziyyətimdə mal əti qısa qabırğa bişirirdim. Bunlarla birlikdə çuxurdakı temperaturun 275 dərəcədən yuxarı yüksəlməsini istəmirdim. İstiliyin o həddən artıq olduğunu görsəm, ocağı söndürüb istinin yenidən batmasına icazə verə bilərdim:
Sensorun qidanın özünü izləməsi üçün oxşar bir qaydam var idi: əgər qida 203 dərəcə fahrenheit -ə çatsa, qabırğalar hazır idi. Aşpazın sonunda tək notu burada görə bilərsiniz:
Ümumiyyətlə, aşpaz mənə təxminən təxminən 4 saat çəkdi, amma ızgarada daha çox vaxt tələb edəcək bir şey bişirsəm belə bir quruluş həqiqətən üstün olardı (~ 12 davam edən aşağı yavaş tüstünü düşünün) saat). Buna baxmayaraq, bu vasitənin asanlıqla göründüyünün dəyərinə inanıram: yeməklərinizin nəticələrini yaza və sonra əvvəlki aşpazlarla müqayisə edə bilmək, Barbekünüzün zaman keçdikcə daha da yaxşılaşacağını bildirir, çünki nəyin işlədiyini və nəyin olmadığını görmək üçün məlumatlardan istifadə edə bilərsiniz. 't.
Addım 3: Qida
İlk dəfə idi ki, dana ətindən qısa qabırğa hazırlayırdım; ədviyyat üçün sadəcə duz, qara bibər və sarımsaq tozu istifadə etdim. Başlanğıcda burnerin bir qədər yüksək olması ilə bağlı bəzi problemlərə baxmayaraq, qabırğalar fantastik çıxdı. Zəhmət olmasa baxın:
Addım 4: Nəticə
Sonda, yeməklər möhtəşəm çıxdı, sensorlar, GridDB və Grafana hamısı konsertdə gözəl işlədilər və bəzi dostlarımızı təəccübləndirmək istədiklərimiz üçün bunları növbəti dəfə necə bişirəcəyimizlə bağlı dəyərli məlumatlar əldə etdik.
Tövsiyə:
ESP8266 -da Barbekü Temperaturu və Ət Sensoru Ekranda: 5 addım (şəkillərlə)
ESP8266 -da Ekranlı Barbekü Temperaturu və Ət Sensoru: Bu Təlimat kitabçasında, manqalınızdakı mövcud temperaturu ölçən və lazım olduqda onu yandırmaq üçün bir fan açan bir barbekü alətinin öz versiyasını necə edəcəyinizi sizə göstərəcəyəm. Buna əlavə olaraq, bir ət nüvəli temperatur sensoru da var
SMS Bildirişi və Thingspeak Məlumat Yükləmə ilə GPS Avtomobil İzləyicisi, Arduino əsaslı, Ev Avtomatlaşdırması: 5 addım (şəkillərlə)
SMS Bildirişi və Thingspeak Məlumat Yükləmə, Arduino Əsaslı, Ev Avtomatlaşdırması ilə GPS Avtomobil İzləyicisi: Bu GPS izləyicisini keçən il hazırladım və yaxşı işlədiyindən indi Instructable -da dərc edirəm. Baqajdakı aksesuar fişinə bağlıdır. GPS izləyicisi avtomobilin mövqeyini, sürətini, istiqamətini və ölçülən temperaturu mobil məlumat vasitəsilə yükləyir
MotoStudent Elektrikli Yarış Velosipedinin Məlumat Alınması və Məlumat Vizualizasiya Sistemi: 23 addım
Bir MotoStudent Elektrik Yarış Velosipedi üçün Məlumat Toplama və Məlumat Görüntüləmə Sistemi: Məlumat əldə etmə sistemi, xarici sensorlardan məlumat toplamaq, sonra saxlamaq və emal etmək üçün birlikdə işləyən aparat və proqram təminatı toplusudur və qrafik olaraq görüntülənə və təhlil edilə bilər. mühəndislərə imkan verir
Google Xəritə ilə Nəqliyyat Verilərinin Vizualizasiyası: 6 addım
Google Xəritə ilə Nəqliyyat Verilərinin Vizualizasiyası: Ümumiyyətlə velosiped sürərkən müxtəlif məlumatları qeyd etmək istəyirik, bu dəfə onları izləmək üçün yeni Wio LTE istifadə etdik
Arduino və Android ilə Real vaxt MPU-6050/A0 Məlumat Girişi: 7 Addım (Şəkillərlə)
Arduino və Android ilə Real vaxt MPU-6050/A0 Məlumat Girişləri: Arduino-nu maşın öyrənmək üçün istifadə etməklə maraqlandım. İlk addım olaraq, bir Android cihazı ilə real vaxt (və ya ona çox yaxın) məlumat ekranı və qeyd cihazı qurmaq istəyirəm. MPU-6050-dən akselerometr məlumatlarını çəkmək istəyirəm, buna görə dizayn edirəm