Sisällysluettelo:
Video: BBQ Pi (tietojen visualisoinnilla!): 4 vaihetta (kuvilla)
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:00
Johdanto
Grillaus viittaa tyypillisesti hitaaseen prosessiin käyttää epäsuoraa lämpöä suosikkilihasi kypsentämiseen. Vaikka tämä ruoanlaitto on erittäin suosittu-etenkin Yhdysvalloissa-sillä on jotkut saattavat pitää melko vakavana heikkoutena: se vaatii tuntikausia puoliksi kirkasta huomiota kuopan ja ruoan lämpötilan seuraamiseen. Anna: Raspberry Pi.
Alkuperäinen projekti
Alkuperäinen lähde tälle projektille löytyy täältä: https://old.reddit.com/r/raspberry_pi/comments/a0… Pääasia on, että reddit -käyttäjä Produkt pystyi välittämään ruoan ja kuopan lämpötilatiedot suhteellisen halvalla, kaupallisesti saatavilla olevat langattomat lämpömittarit Raspberry Pi -laitteeseen (joka oli kiinnittänyt GPIO -nastoihinsa pienen RF -moduulin). Alkuperäisessä projektissa (linkki yllä) Produktin tiedot tallennettiin sqlite -tietokantaan ja näytettiin paikallisesti isännöidylle apache2 php -verkkosivustolle.
Tämä ratkaisu ratkaisee jo tämän blogin johdannossa käsitellyn alkuperäisen ongelman: voit nyt seurata ruoan ja kuopan lämpötilaa etänä verkkoselaimella. Mutta entä jos haluamme laajentaa tätä? Anna: GridDB.
Tarvikkeet
Vadelma Pi4
Langaton SUNKEE 433 MHz: n Superheterodyne -vastaanotinmoduuli
Vaihe 1: GridDB Web API ja FluentD
Kun näin tämän projektin, ensimmäinen ajatukseni - ensimmäisen jännityksen aallon jälkeen - ajattelin tapoja laajentaa toiminnallisuutta. Käyttämällä GridDB: tä ja sen Grafana -laajennusta pyrin visualisoimaan ruoka- ja pit -tiedot. Tämän lisäksi halusin perustaa Grafana -merkinnät etsimään epänormaaleja tietopisteitä - ei voi olla hiiltynyttä lihaa!
Aluksi minun piti käyttää alkuperäisen projektin C -koodia lukeakseni langattomasta lämpömittarista tulevat tiedot ja lähettääkseni tiedot GridDB -palvelimelleni. Saadakseni tämän käyttöön, käynnistin GridDB -palvelimen Azureen CentOS -virtuaalikoneella. Helpoin tapa jakaa tietoja reunakoneeltamme (Raspberry Pi) pilvipalvelimellemme oli GridDB Web -sovellusliittymän kautta. Joten siinä vm: ssä asensin GridDB: n WebAPI: n yhdessä Fluentdin ja siihen liittyvän GridDB -liittimen kanssa.
Ennen kuin todella lähetin tietoja pilveen, minun piti luoda BBQ Pi -säiliön perusmalli. Tietoaineisto on erittäin yksinkertainen: meillä on kaksi lämpötila -anturia, yksi keittotunnus ja tietysti aikaleima. Joten kaavamme näyttää tältä:
timeseries = gridstore.put_container ("bbqpi", [("aika", ruudukko. GS_TYPE_TIMESTAMP), ("keitin", ruudukko. GS_TYPE_INT), ("koetin1", ruudukko. GS_TYPE_INT), ("koetin2", ruudukko. GS_TYPE_INT)], ruudukko. GS_CONTAINER_)
Tämän aikasarjan säilön luomiseen käytin yksinkertaisesti WebAPI: tä (portti 8080):
curl -X POST --perus -u admin: admin -H "Sisältötyyppi: application/json" -d
'{"container_name": "bbqpi", "container_type": "TIME_SERIES", / "rowkey": true, "column": [{"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
Kun säiliö on luotu, minun oli käytettävä Fluentdia (portti 8888) todellisten tietojen lähettämiseen säilöön. Tässä on CURL -komento, joka lähettää joitain nuketietoja:
curl -X POST -d 'json = {"date": "2020-01-01T12: 08: 21.112Z", "cookid": "1", "probe1": "150", "probe2": "140" } 'https:// localhost: 8888/griddb
Sieltä minun piti liittää alkuperäinen koodi lähettääkseni HTTP POST -pyynnön aina, kun Pi luki tietoja kuopastamme (noin kerran ~ 12 sekunnin välein).
Sivuhuomautuksena: tämän koodin kirjoittaminen opetti minua ymmärtämään kuinka paljon C -kieli voi olla:
int postData (char -aika , int cookid, int probe1, int probe2, char url )
{CURL *curl; CURLcode res; / * Windowsissa tämä käynnistää winsock -tavarat */ curl_global_init (CURL_GLOBAL_ALL); char errbuf [CURL_ERROR_SIZE] = {0,}; char agentti [1024] = {0,}; char json [1000]; snprintf (json, 200, "json = {" date / ": \"%s.112Z / ", \" cookid / ": \"%d / ", \" probe1 / ": \"%d / ", / "koetin2 \": / "%d \"} ", aika, keittomalli, anturi1, anturi2); / * hanki curl -kahva */ curl = curl_easy_init (); if (curl) { /* Aseta ensin URL -osoite, joka saa POST -viestimme. Tämä URL -osoite voi yhtä hyvin olla https:// URL -osoite, jos sen pitäisi vastaanottaa tiedot. */ snprintf (agentti, agentin koko, "libcurl/%s", curl_version_info (CURLVERSION_NOW)-> versio); agentti [agentin koko - 1] = 0; curl_easy_setopt (curl, CURLOPT_USERAGENT, agentti); 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); / * Suorita pyyntö, res saa palautuskoodin */ 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)); mennä siivous; } puhdistus: curl_easy_cleanup (curl); curl_global_cleanup (); palauta 0; }}
Kun tämä toiminto on kirjoitettu, minun piti vain suorittaa se samaan aikaan, kun sqlite -tiedot lähetettiin:
jos (goodData == 1) {
if (last_db_write == 0 || (secs-last_db_write> = 10)) {snprintf (sql, 100, "INSERT INTO lukemat (cookid, time, probe1, probe2) VALUES (%d, '%s',%d, %d); ", cookID, buff, probe1, probe2); printf ("%s / n", sql); rc = sqlite3_exec (db, sql, takaisinsoitto, 0 ja zErrMsg); if (rc! = SQLITE_OK) {printf ("SQL -virhe: %s / n", zErrMsg); } else {last_db_write = sekuntia; } char url = "https://xx.xx.xx.xx: 8888/griddb"; postData (buff, cookID, probe1, probe2, url); }}
Varmistaaksesi, että tietosi on todella lisätty palvelimellesi, voit suorittaa seuraavan komennon kyselyyn tietokannastasi ja tarkastella tuloksia:
curl -X POST --perus -u admin: admin -H "Content -type: application/json" -d '{"limit": 1000}' https:// localhost: 8080/griddb/v2/defaultCluster/dbs/ public/kontit/bbqpi/rivit
Vaihe 2: Grafana
Kun koodi on käytössä, nyt kun käytämme alkuperäistä verkkoportaalia "kokin" aloittamiseen, tallennamme samanaikaisesti lämpötilatietomme GridDB -palvelimellemme.
Seuraava askel on visualisoida tietomme Grafanan avulla. Tätä varten seurasimme tämän blogin tietoja: täältä. Mukava asia tässä toteutuksessa on, että on erittäin helppo nähdä tietomme kaaviona kauniiksi kaavioksi. Se lisää myös huomautuksia.
Blogissa käsitellyt huomautukset tekevät meidän erittäin helpoksi seurata, milloin jokin menee pieleen joko ruoan tai kuopan kanssa. Minun tapauksessani keitin naudanlihan lyhyitä kylkiluita. Näiden kanssa en halunnut, että kuopan lämpötila kasvaa yli 275 Fahrenheit -asteen. Jos näin lämpötilan ylittävän sen, voisin sammuttaa polttimen ja antaa lämmön laskeutua uudelleen:
Minulla oli samanlainen sääntö anturille, joka todella tarkkaili ruokaa itse: jos ruoka lämpiää 203 celsiusasteeseen, kylkiluut olivat valmiita. Näet yksinäisen huomautuksen kokin lopussa täältä:
Kaiken kaikkiaan kokki kesti vain noin 4 tuntia, mutta tämäntyyppinen kokoonpano olisi todella loistava, jos kokkaisin jotain, joka olisi vaatinut vielä enemmän aikaa grillissä (ajattele hitaasti savua, joka kestää ~ 12 tuntia). Siitä huolimatta uskon, että tämä työkalu on helposti havaittavissa: jos voit kirjata ruokasi tulokset ja verrata niitä aikaisempiin kokkeihin, grillauksesi paranee hitaasti ajan myötä, kun voit käyttää tietoja nähdäksesi, mikä toimii ja mikä ei 't.
Vaihe 3: Ruoka
Tämä oli ensimmäinen kerta, kun olen tehnyt naudanlihan lyhyitä kylkiluita; mausteeksi käytin yksinkertaisesti suolaa, mustapippuria ja valkosipulijauhetta. Huolimatta joistakin ongelmista, jotka johtuivat siitä, että poltin nousi aluksi hieman korkealle, kylkiluut tulivat upeiksi. Katso, ole hyvä:
Vaihe 4: Johtopäätös
Lopulta ruoka tuli loistavaa, anturit, GridDB ja Grafana toimivat kaikki yhdessä kauniisti, ja saimme arvokasta tietoa siitä, miten kypsennämme nämä asiat uudelleen seuraavan kerran, kun haluamme tehdä vaikutuksen ystäviin.
Suositeltava:
BBQ -lämpötila- ja liha -anturi ESP8266 -näytöllä: 5 vaihetta (kuvilla)
BBQ -lämpötila- ja liha -anturi ESP8266 -laitteessa, jossa on näyttö: Tässä ohjeessa näytän sinulle, kuinka voit tehdä oman version BBQ -työkalusta, joka mittaa grillisi nykyisen lämpötilan ja käynnistää tuulettimen sytyttääksesi sen tarvittaessa. Tämän lisäksi on myös lihan ytimen lämpötila -anturi
GPS -autonseuranta tekstiviesti -ilmoituksella ja Thingspeak -tietojen latauksella, Arduino -pohjainen, kotiautomaatio: 5 vaihetta (kuvilla)
GPS -autonseuranta tekstiviesti -ilmoituksella ja Thingspeak -tietojen latauksella, Arduino -pohjainen, kotiautomaatio: Tein tämän GPS -seurannan viime vuonna ja koska se toimii hyvin, julkaisen sen nyt Instructable -sivustossa. Se on kytketty tavaratilan lisävarustepistokkeeseen. GPS -seurantalaite lataa auton sijainnin, nopeuden, suunnan ja mitatun lämpötilan mobiilidatan kautta
Sääasema tietojen kirjauksella: 7 vaihetta (kuvilla)
Sääasema tietojen kirjaamisen avulla: Tässä ohjeessa näytän sinulle, kuinka tehdä sääasemajärjestelmä itse. Tarvitset vain perustiedot elektroniikasta, ohjelmoinnista ja vähän aikaa. Tämä projekti on vielä kesken. Tämä on vasta ensimmäinen osa. Päivityksiä tulee
Tietojen tuottamat lainelaudat: 11 vaihetta (kuvilla)
Tietojen tuottamat surffilaudat: Tämä on otettu teollisen muotoilun vanhemmasta opinnäytetyöstäni noin vuosi sitten, joten pahoitteluni, jos siinä on joitakin reikiä, muistini saattaa olla hieman poissa. Se on kokeellinen projekti ja on niin paljon asioita, jotka olisi voitu tehdä toisin, älä
Päivitä Apple MacBookisi: Tietojen varmuuskopiointi ja säilyttäminen: 9 vaihetta (kuvilla)
Päivitä Apple MacBookisi: Tietojen varmuuskopiointi ja säilyttäminen: Mac -kiintolevyni tuli todella lihava ja täynnä, se oli inhottavaa. Tämä ongelma ilmenee monille ihmisille, jotka ovat ostaneet alkuperäiset MacBookit. He tuntevat pienen kiintolevyn selvästi tiukan puristuksen. Ostin MacBookin ~ 2 vuotta sitten ja se