Përmbajtje:
Video: BBQ Pi (Me vizualizim të të dhënave!): 4 hapa (me fotografi)
2024 Autor: John Day | [email protected]. E modifikuara e fundit: 2024-01-30 12:12
Prezantimi
Barbecues zakonisht i referohet procesit të ngadaltë të përdorimit të nxehtësisë indirekte për të gatuar mishin tuaj të preferuar. Megjithëse kjo metodë e gatimit është jashtëzakonisht e popullarizuar-veçanërisht në SHBA-ajo ka atë që disa mund ta konsiderojnë si një dobësi mjaft serioze: kërkon orë të tëra të vëmendjes gjysmë të kthjellët që të shpenzohen për të monitoruar temperaturën e gropës dhe ushqimit tuaj. Shkruani: Raspberry Pi.
Projekti Origjinal
Burimi origjinal për këtë projekt mund të gjendet këtu: https://old.reddit.com/r/raspberry_pi/comments/a0… Thelbi i tij është se përdoruesi i reddit Produkt ishte në gjendje të transmetonte të dhëna të temperaturës së ushqimit dhe gropës nga relativisht të lira, termometra pa tela komercialisht të disponueshëm për një Raspberry Pi (e cila ishte bashkangjitur në kunjat e saj GPIO një modul të vogël RF). Në projektin origjinal (i lidhur më lart), Produkt i kishte të dhënat e tij të ruheshin në një bazë të dhënash sqlite dhe të shfaqeshin në një uebfaqe php të apache2 të strehuar në vend.
Kjo zgjidhje tashmë zgjidh problemin origjinal të prekur në hyrjen e këtij blogu: tani mund të monitoroni temperaturën e ushqimit dhe gropës tuaj nga distanca me një shfletues uebi. Por, çfarë nëse do të donim ta zgjeronim këtë? Shkruani: GridDB.
Furnizimet
Mjedër Pi4
Moduli i Marrësit Wireless SUNKEE 433Mhz Superheterodyne
Hapi 1: GridDB Web API & FluentD
Me të parë këtë projekt, mendimi im i parë - pas valës fillestare të eksitimit - ishte të mendoja mënyra për të zgjeruar funksionalitetin. Duke përdorur GridDB dhe shtojcën e tij Grafana, unë kërkova të vizualizoj të dhënat e mia të ushqimit dhe gropës. Përtej kësaj, doja të krijoja shënime Grafana për të kërkuar ndonjë pikë anomale të të dhënave - nuk mund të ketë mish të djegur!
Për të filluar, më duhej të përdor kodin C nga projekti origjinal për të lexuar të dhënat që vijnë nga termometri pa tel dhe për t'i postuar ato të dhëna në serverin tim GridDB. Për ta vënë këtë në punë, unë gjeta një server GridDB në Azure duke përdorur një makinë virtuale CentOS. Mënyra më e lehtë për të ndarë të dhënat nga makina jonë e skajit (Raspberry Pi) në serverin tonë cloud ishte përmes API -së së GridDB Web. Pra, në atë vm, unë vendosa WebAPI -in e GridDB së bashku me Fluentd dhe lidhësin shoqërues të GridDB.
Para se të dërgoja të dhëna në cloud, më duhej të krijoja skemën bazë për enën time BBQ Pi. Grupi i të dhënave që hyn është jashtëzakonisht i thjeshtë: ne kemi dy sensorë të temperaturës, një ID të gatimit dhe, natyrisht, vulën kohore. Pra, skema jonë duket kështu:
timeseries = gridstore.put_container ("bbqpi", [("koha", griddb. GS_TYPE_TIMESTAMP), ("cookid", griddb. GS_TYPE_INT), ("sonda1", griddb. GS_TYPE_INT), ("sonda2", griddb. GS_TYPE_INT_IER)], gridb
Për të krijuar këtë enë timeseries, unë thjesht përdor WebAPI (porti 8080):
curl -X POST -bazë -u admin: admin -H "Lloji i përmbajtjes: aplikacioni/json" -d
'{"container_name": "bbqpi", "container_type": "TIME_SERIES", / "rowkey": true, "columns": [ {"name": "time", "type": "TIMESTAMP"}, {"name": "cookid", "type": "INTEGER"}, {"name": "sonda1", "type": "INTEGER"}, {"name": "sondë2", "lloj": "INTEGER"}]} '\ https:// localhost: 8080/griddb/v2/defaultCluster/dbs/public/container
Me kontejnerin e krijuar, më duhej të përdor Fluentd (porti 8888) për të postuar të dhëna aktuale në enën tonë. Këtu është një komandë CURL që poston disa të dhëna të rreme:
curl -X POST -d 'json = {"date": "2020-01-01T12: 08: 21.112Z", "cookid": "1", "sonda1": "150", "sonda2": "140" } 'https:// localhost: 8888/griddb
Prej aty, më duhej të shtoja kodin origjinal për të dërguar një Kërkesë HTTP POST sa herë që Pi ynë po lexonte të dhëna nga gropa jonë (rreth një herë në ~ 12 sekonda).
Si një shënim anësor: shkrimi i këtij kodi më mësoi të vlerësoja se sa e folur mund të jetë gjuha C:
int postData (koha e ngarkimit , int cookid, int probe1, int sonda2, url e char )
{CURL *curl; CURLkodi res; / * Në dritare, kjo do të fillojë sendet e fituara */ curl_global_init (CURL_GLOBAL_ALL); er erbuf [CURL_ERROR_SIZE] = {0,}; agjent char [1024] = {0,}; char json [1000]; snprintf (json, 200, "json = {" date / ": \"%s.112Z / ", \" cookid / ": \"%d / ", \" sonda1 / ": \"%d / ", / "sonda2 \": / "%d \"} ", koha, gatimi, sonda1, sonda2); / * merrni një dorezë për kaçurrela */ curl = curl_easy_init (); if (curl) { /* Së pari vendosni URL -në që do të marrë POST -in tonë. Kjo URL mund të jetë po ashtu një https:// URL nëse kjo është ajo që duhet të marrë të dhënat. */ snprintf (agjenti, madhësia e agjentit, "libcurl/%s", curl_version_info (CURLVERSION_NOW)-> version); agjent [madhësia e agjentit - 1] = 0; curl_easy_setopt (curl, CURLOPT_USERAGENT, agjent); 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); / * Kryeni kërkesën, res do të marrë kodin e kthimit */ res = curl_easy_perform (curl); nëse (res! = CURLE_OK) {size_t len = strlen (errbuf); fprintf (stderr, "\ nlibcurl: (%d)", res); nëse (len) fprintf (stderr, "%s%s", errbuf, ((errbuf [len - 1]! = '\ n')? "\ n": "")); fprintf (stderr, "%s / n / n", curl_easy_strerror (res)); shkoj në pastrim; } pastrim: curl_easy_cleanup (curl); curl_global_cleanup (); kthimi 0; }}
Me këtë funksion të shkruar, thjesht më duhej ta kisha atë në të njëjtën kohë kur të dhënat sqlite po postoheshin:
nëse (të dhëna të mira == 1) {
if (last_db_write == 0 || (secs-last_db_write> = 10)) {snprintf (sql, 100, "INSERT INTO leximet (cookid, koha, sonda1, sonda2) VLERAT (%d, '%s',%d, %d); ", cookID, buff, sondë1, sondë 2); printf ("%s / n", sql); rc = sqlite3_exec (db, sql, callback, 0, & zErrMsg); if (rc! = SQLITE_OK) {printf ("Gabim SQL: %s / n", zErrMsg); } tjetër {last_db_write = sekonda; } ur url = "https://xx.xx.xx.xx: 8888/griddb"; postData (buff, cookID, sondë1, sondë2, url); }}
Për t'u siguruar që të dhënat tuaja po futen në të vërtetë në serverin tuaj, mund të ekzekutoni komandën e mëposhtme për të kërkuar bazën e të dhënave tuaja dhe për të parë rezultatet:
curl -X POST -bazë -u admin: admin -H "Lloji i përmbajtjes: aplikacioni/json" -d '{"limit": 1000}' https:// localhost: 8080/griddb/v2/defaultCluster/dbs/ publik/kontejnerë/bbqpi/rreshta
Hapi 2: Grafana
Me kodin në vend, tani kur përdorim portalin origjinal të internetit për të filluar një "kuzhinier", ne do të ruajmë njëkohësisht të dhënat tona të temperaturës në serverin tonë GridDB.
Hapi tjetër do të jetë vizualizimi i të dhënave tona duke përdorur Grafana. Për ta bërë këtë, ne ndoqëm informacionin nga ky blog: këtu. Gjëja e bukur për këtë zbatim është se është jashtëzakonisht e lehtë të shikosh të dhënat tona të grafikuara në një grafik të bukur. Ai gjithashtu shton shënime.
Shënimet e diskutuara në blog e bëjnë jashtëzakonisht të lehtë për ne të monitorojmë kur diçka nuk shkon mirë me ushqimin tonë ose vetë gropën. Në rastin tim, unë isha duke gatuar brinjë të shkurtër viçi. Me ato, unë nuk doja që temperatura në gropë të rritet përtej 275 gradë Fahrenheit. Nëse do ta shihja temperaturën të shkonte përtej kësaj, mund të fikja një djegës dhe të lejoja që nxehtësia të ulet përsëri:
Unë kisha një rregull të ngjashëm për sensorin që në të vërtetë mbante shënime mbi vetë ushqimin: nëse ushqimi arrinte një temperaturë të brendshme prej 203 gradë Fahrenheit, brinjët ishin gati. Ju mund të shihni shënimin e vetëm në fund të kuzhinierit këtu:
Në përgjithësi, kuzhinieri më mori vetëm 4 orë ose më shumë, por ky lloj rregullimi do të shkëlqente vërtet nëse do të gatuaj diçka që do të kishte kërkuar edhe më shumë kohë në skarë (mendoni një tym të ulët të ngadaltë që zgjat 12 ~ orë). Përkundër kësaj, unë besoj se vlera nëse ky mjet është lehtësisht i dukshëm: të qenit në gjendje të regjistroni rezultatet e ushqimeve tuaja dhe pastaj ta krahasoni atë me kuzhinierët e mëparshëm do të thotë që BBQing juaj ngadalë do të përmirësohet me kalimin e kohës, pasi ju mund të përdorni të dhëna për të parë se çfarë funksionon dhe çfarë jo 't
Hapi 3: Ushqimi
Kjo ishte hera e parë që kam bërë ndonjëherë brinjë të shkurtër viçi; për erëza, thjesht përdor kripë, piper të zi dhe pluhur hudhre. Përkundër disa problemeve me djegien duke u bërë shumë e lartë për pak aty në fillim, brinjët dolën fantastike. Ju lutemi hidhini një sy:
Hapi 4: Përfundimi
Në fund, ushqimi doli i mrekullueshëm, sensorët, GridDB dhe Grafana të gjithë punuan bukur në koncert, dhe ne morëm disa të dhëna të vlefshme se si t’i gatuajmë këto gjëra përsëri për herën tjetër që duam të bëjmë përshtypje te disa miq.
Recommended:
Si të bëni lagështi dhe temperaturë Regjistruese të të dhënave në kohë reale me Arduino UNO dhe SD-Card - Simulimi DHT11 Regjistruesi i të dhënave në Proteus: 5 hapa
Si të bëni lagështi dhe temperaturë Regjistruese të të dhënave në kohë reale me Arduino UNO dhe SD-Card | Simulimi i regjistruesit të të dhënave DHT11 në Proteus: Hyrje: përshëndetje, ky është Liono Maker, këtu është lidhja në YouTube. Ne po bëjmë projekt krijues me Arduino dhe po punojmë në sisteme të ngulitura. Data-Logger: Një regjistrues i të dhënave (gjithashtu regjistrues i të dhënave ose regjistrues i të dhënave) është një pajisje elektronike që regjistron të dhëna me kalimin e kohës me
Blerja e të Dhënave dhe Sistemi i Vizualizimit të të Dhënave për një Biçikletë Garash MotoStudente Elektrike: 23 hapa
Sistemi i marrjes së të dhënave dhe vizualizimi i të dhënave për një motoçikletë MotoStudent Electric Racing: Një sistem i marrjes së të dhënave është një koleksion i pajisjeve dhe programeve kompjuterike që punojnë së bashku për të mbledhur të dhëna nga sensorë të jashtëm, për t'i ruajtur dhe përpunuar ato më pas në mënyrë që të mund të vizualizohen dhe analizohen, duke lejuar inxhinierët të bëjnë
EASY Arduino OLED Sensori i të dhënave të të dhënave: 4 hapa
EASY Arduino OLED Sensori i të dhënave: Nëse keni punuar ndonjëherë me Arduino, me siguri keni dashur që ai të shfaqë leximet e sensorit. Ndërsa përdorni LCD -in e vjetër klasik Nokia 5110, mund të keni vënë re se lidhja e të gjithë atyre telave është e çrregullt dhe kërkon shumë kunja. Sigurisht, ka një më të mirë
Altoparlanti i tryezës Bluetooth me vizualizim audio, butona me prekje dhe NFC .: 24 hapa (me fotografi)
Altoparlanti i tryezës Bluetooth me vizualizim audio, butona me prekje dhe NFC .: Përshëndetje! Në këtë Instructables unë do të tregoj se si e bëra këtë altoparlant Bluetooth Desk i cili ka vizualizim të mahnitshëm audio me butona prekës dhe NFC. Mund të çiftohet lehtë me pajisjet e aktivizuara NFC me vetëm një trokitje. Nuk ka asnjë buton fizik
Përforcues tavoline me vizualizim audio, orë binare dhe marrës FM: 8 hapa (me fotografi)
Përforcues tavoline me vizualizim audio, orë binare dhe marrës FM: Më pëlqejnë përforcuesit dhe sot, do të ndaj amplifikatorin tim të tryezës me fuqi të ulët që kam bërë kohët e fundit. Përforcuesi që kam projektuar ka disa veçori interesante. Ka një orë binare të integruar dhe mund të japë kohë dhe datë dhe mund të vizualizojë audio të quajtur shpesh audio