Turinys:
- Prekės
- 1 veiksmas: „GridDB Web API“ir „FluentD“
- 2 žingsnis: Grafana
- 3 žingsnis: maistas
- 4 žingsnis: Išvada
Video: BBQ Pi (su duomenų vizualizavimu!): 4 žingsniai (su nuotraukomis)
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:45
Įvadas
Kepimas ant grotelių dažniausiai reiškia lėtą netiesioginės šilumos panaudojimo procesą mėgstamai mėsai kepti. Nors šis maisto gaminimo būdas yra labai populiarus, ypač JAV, jis turi tai, ką kai kurie gali laikyti gana rimta silpnybe: tam reikia valandų pusiau skaidraus dėmesio, skirto jūsų duobės ir maisto temperatūrai stebėti. Įveskite: Raspberry Pi.
Originalus projektas
Originalų šio projekto šaltinį rasite čia: https://old.reddit.com/r/raspberry_pi/comments/a0… Esmė ta, kad „reddit“vartotojas „Produkt“galėjo palyginti nebrangiai perduoti maisto ir duobių temperatūros duomenis., parduodami belaidžiai termometrai prie „Raspberry Pi“(kuris prie GPIO kaiščių buvo prijungęs nedidelį RF modulį). Pradiniame projekte (susietas aukščiau) „Produkt“duomenys buvo saugomi „sqlite“duomenų bazėje ir rodomi vietoje priegloboje esančioje „apache2 php“svetainėje.
Šis sprendimas jau išsprendžia pradinę šio tinklaraščio įžangoje aptartą problemą: dabar galite nuotoliniu būdu stebėti savo maisto ir duobių temperatūrą naudodami interneto naršyklę. O kas, jei norėtume tai išplėsti? Įveskite: GridDB.
Prekės
Raspberry Pi4
„SUNKEE 433Mhz Superheterodyne“belaidžio imtuvo modulis
1 veiksmas: „GridDB Web API“ir „FluentD“
Pamačius šį projektą, mano pirmoji mintis - po pradinės jaudulio bangos - buvo galvoti apie būdus, kaip išplėsti funkcionalumą. Naudodamas „GridDB“ir jo „Grafana“papildinį, aš siekiau vizualizuoti savo maisto ir duobės duomenis. Be to, norėjau nustatyti „Grafana“anotacijas, kad galėčiau rasti bet kokių nenormalių duomenų taškų - negali būti jokios apdegusios mėsos!
Norėdami pradėti, turėjau naudoti pradinio projekto C kodą, kad galėčiau perskaityti duomenis, gaunamus iš belaidžio termometro, ir paskelbti tuos duomenis savo „GridDB“serveryje. Norėdami tai padaryti, aš sukūriau „GridDB“serverį „Azure“naudodami „CentOS“virtualią mašiną. Lengviausias būdas bendrinti duomenis iš krašto mašinos („Raspberry Pi“) į mūsų debesies serverį buvo naudojant „GridDB Web API“. Taigi, tame vm, aš sukūriau „GridDB“WebAPI kartu su „Fluentd“ir pridedama „GridDB“jungtimi.
Prieš iš tikrųjų siunčiant duomenis į debesį, turėjau sukurti pagrindinę savo BBQ Pi konteinerio schemą. Duomenų rinkinys yra labai paprastas: turime du temperatūros jutiklius, vieną virėjo ID ir, žinoma, laiko žymę. Taigi mūsų schema atrodo taip:
timeseries = gridstore.put_container ("bbqpi", [("laikas", griddb. GS_TYPE_TIMESTAMP), ("cookid", griddb. GS_TYPE_INT), ("zondas1", griddb. GS_TYPE_INT), ("zondas2", griddb. GS_TYPE_INT)], griddb. GS_CONTAINER_)
Norėdami sukurti šį laiko serijos sudėtinį rodinį, tiesiog naudojau WebAPI (8080 prievadas):
curl -X POST -pagrindinis -u admin: admin -H "Turinio tipas: application/json" -d
'{"container_name": "bbqpi", "container_type": "TIME_SERIES", / "rowkey": true, "stulpeliai": [{"name": "time", "type": "TIMESTAMP"}, {"name": "cookid", "type": "INTEGER"}, {"name": "zondas1", "tipas": "INTEGER"}, {"name": "zondas2", "tipas": "INTEGER"}]} '\ https:// localhost: 8080/griddb/v2/defaultCluster/dbs/public/container
Sukūręs konteinerį, turėjau naudoti „Fluentd“(8888 prievadas), kad galėčiau paskelbti faktinius duomenis į mūsų konteinerį. Štai CURL komanda, paskelbianti tam tikrus netikrus duomenis:
curl -X POST -d 'json = {"date": "2020-01-01T12: 08: 21.112Z", "cookid": "1", "zondas1": "150", "zondas2": "140" } 'https:// localhost: 8888/griddb
Iš ten turėjau pridėti pradinį kodą, kad galėčiau išsiųsti HTTP POST užklausą, kai mūsų „Pi“skaito duomenis iš mūsų duobės (maždaug kartą per ~ 12 sekundžių).
Kaip šalutinė pastaba: šio kodo rašymas išmokė mane įvertinti, kokia daugiakalbė gali būti C kalba:
int postData (char laikas , int cookid, int zondas1, int zondas2, char url )
{CURL *curl; CURLcode res; / * „Windows“tai inicijuos „Winsock“medžiagą */ curl_global_init (CURL_GLOBAL_ALL); char errbuf [CURL_ERROR_SIZE] = {0,}; anglies agentas [1024] = {0,}; char json [1000]; snprintf (json, 200, "json = {" data / ": \"%s.112Z / ", \" cookid / ": \"%d / ", \" zondas1 / ": \"%d / ", / "zondas2 \": / "%d \"} ", laikas, virėjas, zondas1, zondas2); / * gaukite garbanojimo rankeną */ curl = curl_easy_init (); if (curl) { /* Pirmiausia nustatykite URL, kuris netrukus gaus mūsų POST. Šis URL taip pat gali būti https:// URL, jei būtent tai turėtų gauti duomenis. */ snprintf (agentas, agento dydis, „libcurl/%s“, curl_version_info (CURLVERSION_NOW)-> versija); agentas [agento dydis - 1] = 0; curl_easy_setopt (curl, CURLOPT_USERAGENT, agentas); 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); / * Vykdykite užklausą, res gaus grąžinimo kodą */ 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)); eiti valyti; } valymas: curl_easy_cleanup (curl); curl_global_cleanup (); grįžti 0; }}
Kai ši funkcija parašyta, man tiesiog reikėjo ją paleisti tuo pačiu metu, kai buvo paskelbti „sqlite“duomenys:
jei (geri duomenys == 1) {
if (last_db_write == 0 || (secs-last_db_write> = 10)) {snprintf (sql, 100, "INSERT INTO rodmenys (cookid, time, probe1, probe2) VALUES (%d, '%s',%d, %d); ", cookID, buff, zondas1, zondas2); printf ("%s / n", sql); rc = sqlite3_exec (db, sql, atgalinis skambutis, 0, & zErrMsg); if (rc! = SQLITE_OK) {printf ("SQL klaida: %s / n", zErrMsg); } else {last_db_write = sek; } char url = "https://xx.xx.xx.xx: 8888/griddb"; postData (buff, cookID, zondas1, zondas2, url); }}
Norėdami įsitikinti, kad jūsų duomenys iš tikrųjų įterpiami į jūsų serverį, galite paleisti šią komandą, norėdami užklausti savo duomenų bazę ir peržiūrėti rezultatus:
curl -X POST --basic -u admin: admin -H "Turinio tipas: application/json" -d '{"limit": 1000}' https:// localhost: 8080/griddb/v2/defaultCluster/dbs/ public/konteineriai/bbqpi/eilės
2 žingsnis: Grafana
Turėdami kodą, dabar, kai pradėsime gaminti maistą naudodami pradinį žiniatinklio portalą, vienu metu išsaugosime savo temperatūros duomenis savo „GridDB“serveryje.
Kitas žingsnis bus vizualizuoti mūsų duomenis naudojant „Grafana“. Norėdami tai padaryti, sekėme šio tinklaraščio informaciją: čia. Gražus šio diegimo dalykas yra tai, kad labai lengva matyti mūsų duomenis, išdėstytus gražioje diagramoje. Tai taip pat prideda komentarus.
Dienoraštyje aptartos anotacijos leidžia mums labai lengvai stebėti, ar kažkas negerai su maistu ar pačia duobe. Mano atveju viriau jautienos trumpus šonkaulius. Dėl to nenorėjau, kad duobės temperatūra pakiltų virš 275 laipsnių pagal Celsijų. Jei pamačiau, kad temperatūra viršija šią temperatūrą, galiu išjungti degiklį ir leisti šilumai vėl nusileisti:
Aš turėjau panašią taisyklę, kad jutiklis iš tikrųjų stebėtų patį maistą: jei maistas pasiekė 203 laipsnių Fahrenheito vidinę temperatūrą, šonkauliai buvo paruošti. Vienišą komentarą virėjo pabaigoje galite pamatyti čia:
Apskritai virėjas man užtruko tik apie ~ 4 valandas, tačiau tokia sąranka tikrai puikiai tiktų, jei ruoščiau ką nors, kas būtų pareikalavusi dar daugiau laiko kepsninėje (pagalvokite, kad dūmai lėtai užtrunka ~ 12 val. valandos). Nepaisant to, manau, kad šis įrankis yra lengvai pastebimas: jei galite užregistruoti savo maisto produktų rezultatus ir palyginti juos su ankstesniais virėjais, tai reiškia, kad jūsų kepsnys laikui bėgant pamažu gerės, nes galėsite naudoti duomenis, kad pamatytumėte, kas veikia ir kas ne 't.
3 žingsnis: maistas
Tai buvo pirmas kartas, kai aš gaminu trumpus jautienos šonkaulius; prieskoniams tiesiog naudojau druską, juodus pipirus ir česnako miltelius. Nepaisant kai kurių problemų, kai degiklis iš pradžių šiek tiek pakilo, šonkauliai pasirodė fantastiški. Prašau pažiūrėkite:
4 žingsnis: Išvada
Galų gale maistas pasirodė nuostabus, jutikliai, „GridDB“ir „Grafana“puikiai dirbo kartu, ir mes gavome vertingų duomenų, kaip vėl gaminti šiuos patiekalus, kai kitą kartą norime padaryti įspūdį kai kuriems draugams.
Rekomenduojamas:
GPS dangtelio duomenų kaupiklis: 7 žingsniai (su nuotraukomis)
„GPS Cap Data Logger“: čia yra puikus savaitgalio projektas, jei ketinate žygiuoti pėsčiomis ar ilgus pasivažinėjimus dviračiais ir jums reikia GPS duomenų kaupiklio, kad galėtumėte sekti visus jūsų žygius/važiavimus … Kai baigsite statybą ir atsisiuntė duomenis iš tr modulio GPS modulio
Kaip padaryti drėgmės ir temperatūros realaus laiko duomenų įrašymo įrenginį naudojant „Arduino UNO“ir SD kortelę - DHT11 duomenų kaupiklio modeliavimas „Proteus“: 5 žingsniai
Kaip padaryti drėgmės ir temperatūros realaus laiko duomenų įrašymo įrenginį naudojant „Arduino UNO“ir SD kortelę | DHT11 duomenų kaupiklio modeliavimas „Proteus“: Įvadas: Sveiki, tai „Liono Maker“, čia yra „YouTube“nuoroda. Mes kuriame kūrybinį projektą su „Arduino“ir dirbame prie įterptųjų sistemų
BBQ temperatūros ir mėsos jutiklis ESP8266 su ekranu: 5 žingsniai (su nuotraukomis)
Kepsninės temperatūros ir mėsos jutiklis prie ESP8266 su ekranu: šioje instrukcijoje aš jums parodysiu, kaip pasidaryti savo kepsninės įrankio versiją, kuri matuoja esamą kepsninės temperatūrą ir įjungia ventiliatorių, kad prireikus jį užsidegtų. Be to, yra mėsos šerdies temperatūros jutiklis
Duomenų rinkimo ir duomenų vizualizavimo sistema „MotoStudent“lenktyniniam dviračiui: 23 žingsniai
„MotoStudent“elektrinio lenktyninio dviračio duomenų rinkimo ir duomenų vizualizavimo sistema: Duomenų surinkimo sistema yra techninės ir programinės įrangos, veikiančios kartu, rinkinys, siekiant surinkti duomenis iš išorinių jutiklių, po to juos saugoti ir apdoroti, kad būtų galima vizualizuoti grafiškai ir analizuoti, leidžia inžinieriams padaryti
EAL-Industri4.0-RFID duomenų rinkimo duomenų bazė: 10 žingsnių (su nuotraukomis)
EAL-Industri4.0-RFID duomenų kopijavimas iki duomenų bazės: „Dette projekt omhandler opsamling af v æ gtdata“, registruojantis tapatybę. RFID, bauginantys duomenys ir „MySQL“duomenų bazė. „NOD-RED“, „fremvisning“ir „elgsena“naudojant duomenų rinkinius ir C# programą, kurią sudaro „Windows Form Application“