Obsah:
Video: BBQ Pi (s vizualizáciou údajov!): 4 kroky (s obrázkami)
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 11:56
Úvod
Grilovanie sa väčšinou vzťahuje na pomalý proces využívania nepriameho tepla na varenie vášho obľúbeného mäsa. Napriek tomu, že je tento spôsob varenia veľmi populárny-najmä v USA-má v sebe to, čo niektorí môžu považovať za dosť vážnu slabinu: vyžaduje si hodiny polopriehľadnej pozornosti na sledovanie teploty vašej jamy a jedla. Zadajte: Raspberry Pi.
Pôvodný projekt
Pôvodný zdroj tohto projektu nájdete tu: https://old.reddit.com/r/raspberry_pi/comments/a0… Podstatou je, že používateľ reddit Produkt dokázal prenášať údaje o teplote jedla a jamy z relatívne lacných zdrojov., komerčne dostupné bezdrôtové teplomery k Raspberry Pi (ktorý mal k svojim GPIO kolíkom pripevnený malý RF modul). V pôvodnom projekte (prepojený vyššie) mal Produkt svoje údaje uložené v databáze sqlite a zobrazované na lokálne hostenej webovej stránke apache2 php.
Toto riešenie už rieši pôvodný problém, na ktorý sa dotklo v úvode tohto blogu: Teraz môžete teplotu svojho jedla a jamy monitorovať na diaľku pomocou webového prehliadača. Čo keby sme to však chceli rozšíriť? Zadajte: GridDB.
Zásoby
Raspberry Pi4
Bezdrôtový modul superheterodynu SUNKEE 433 MHz
Krok 1: Webové rozhranie GridDB a FluentD
Keď som videl tento projekt, moja prvá myšlienka - po počiatočnej vlne vzrušenia - bola premyslenie spôsobov, ako rozšíriť funkčnosť. Použitím programu GridDB a jeho doplnku Grafana som sa snažil vizualizovať svoje údaje o jedle a jamách. Okrem toho som chcel vytvoriť anotácie Grafana na vyhľadávanie anomálnych dátových bodov - nemôžem mať žiadne zuhoľnatené mäso!
Na začiatku som potreboval použiť kód C z pôvodného projektu na prečítanie údajov prichádzajúcich z bezdrôtového teplomera a odoslanie týchto údajov na môj server GridDB. Aby som to uviedol do prevádzky, spustil som server GridDB v Azure pomocou virtuálneho počítača CentOS. Najjednoduchší spôsob zdieľania údajov z nášho zariadenia Edge (Raspberry Pi) na náš cloudový server bol prostredníctvom webového rozhrania GridDB Web API. Na tomto VM som teda nastavil WebAPI GridDB spolu s Fluentdom a sprievodným konektorom GridDB.
Pred odoslaním údajov do cloudu som potreboval vytvoriť základnú schému pre svoj kontajner BBQ Pi. Vstup údajov je veľmi jednoduchý: máme dva snímače teploty, jedno ID varenia a samozrejme časovú pečiatku. Naša schéma teda vyzerá takto:
timeseries = gridstore.put_container ("bbqpi", [("čas", griddb. GS_TYPE_TIMESTAMP), ("cookid", griddb. GS_TYPE_INT), ("sonda1", griddb. GS_TYPE_INT), ("sonda2", griddb. GS_TYPE_INT)], griddb. GS_CONTAINER_TIME_SERIES)
Na vytvorenie tohto kontajnera timeseries som jednoducho použil WebAPI (port 8080):
curl -X POST --základný -u admin: admin -H "Typ obsahu: aplikácia/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/kontejnery
Keď bol kontajner vytvorený, potreboval som použiť Fluentd (port 8888) na odosielanie aktuálnych údajov do nášho kontajnera. Tu je príkaz CURL, ktorý zverejňuje niektoré fiktívne údaje:
curl -X POST -d 'json = {"date": "2020-01-01T12: 08: 21.112Z", "cookid": "1", "probe1": "150", "probe2": "140" } 'https:// localhost: 8888/griddb
Odtiaľ som potreboval pripojiť pôvodný kód na odoslanie požiadavky HTTP POST vždy, keď náš Pi čítal údaje z našej jamy (asi raz za ~ 12 sekúnd).
Na okraj: písanie tohto kódu ma naučilo oceniť, aký podrobný môže byť jazyk C:
int postData (char time , int Cookid, int probe1, int probe2, char url )
{CURL *zvinutie; CURLcode res; / * V oknách to spustí winsock veci */ curl_global_init (CURL_GLOBAL_ALL); char errbuf [CURL_ERROR_SIZE] = {0,}; char agent [1024] = {0,}; char json [1000]; snprintf (json, 200, "json = {" date / ": \"%s.112Z / ", \" cookid / ": \"%d / ", \" sonda1 / ": \"%d / ", / "sonda2 \": / "%d \"} ", čas, cookid, sonda1, sonda2); / * získajte rukoväť zvinutia */ curl = curl_easy_init (); if (curl) { /* Najprv nastavte adresu URL, ktorá sa chystá prijať náš POST. Táto adresa URL môže byť aj adresou https://, ak by mala prijímať údaje. */ snprintf (agent, sizeof agent, "libcurl/%s", curl_version_info (CURLVERSION_NOW)-> verzia); agent [sizeof agent - 1] = 0; curl_easy_setopt (curl, CURLOPT_USERAGENT, agent); curl_easy_setopt (zvinutie, CURLOPT_URL, adresa URL); curl_easy_setopt (curl, CURLOPT_USERNAME, "admin"); curl_easy_setopt (zvinutie, CURLOPT_PASSWORD, "admin"); curl_easy_setopt (zvinutie, CURLOPT_VERBOSE, 1L); curl_easy_setopt (zvinutie, CURLOPT_ERRORBUFFER, errbuf); curl_easy_setopt (zvinutie, CURLOPT_POSTFIELDS, json); / * Vykonajte požiadavku, res získa návratový kód */ res = curl_easy_perform (zvinutie); 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)); choďte na čistenie; } čistenie: curl_easy_cleanup (zvinutie); curl_global_cleanup (); návrat 0; }}
S touto napísanou funkciou som potreboval, aby to bežalo súčasne s odosielaním údajov sqlite:
if (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, sonda1, sonda2); printf ("%s / n", sql); rc = sqlite3_exec (db, sql, spätné volanie, 0, & zErrMsg); if (rc! = SQLITE_OK) {printf ("Chyba SQL: %s / n", zErrMsg); } else {last_db_write = s; } char url = "https://xx.xx.xx.xx: 8888/griddb"; postData (buff, cookID, sonda1, sonda2, adresa URL); }}
Aby ste sa uistili, že sa vaše údaje skutočne vkladajú na váš server, môžete spustiť nasledujúci príkaz na zadanie dotazu do databázy a zobrazenie výsledkov:
curl -X POST --základný -u admin: admin -H "Typ obsahu: aplikácia/json" -d '{"limit": 1000}' https:// localhost: 8080/griddb/v2/defaultCluster/dbs/ verejné/kontajnery/bbqpi/riadky
Krok 2: Grafana
Keď je kód na mieste, teraz, keď použijeme pôvodný webový portál na spustenie „varenia“, budeme súčasne ukladať naše údaje o teplote na náš server GridDB.
Ďalším krokom bude vizualizácia našich údajov pomocou programu Grafana. Aby sme to urobili, sledovali sme informácie z tohto blogu: tu. Na tejto implementácii je pekné, že je veľmi ľahké vidieť naše údaje v grafe do pekného grafu. Tiež pridáva anotácie.
Anotácie, o ktorých sa v blogu diskutuje, nám uľahčujú monitorovať, keď sa niečo pokazí buď s naším jedlom, alebo so samotnou jamou. V mojom prípade som varil hovädzie krátke rebrá. Pri tých som nechcel, aby teplota v jame narástla nad 275 stupňov Fahrenheita. Ak by som videl, že teplota prekračuje túto hranicu, mohol by som vypnúť horák a nechať teplo opäť klesnúť:
Mal som podobné pravidlo pre snímač, ktorý v skutočnosti držal karty nad samotným jedlom: ak sa jedlo dostalo na vnútornú teplotu 203 stupňov Fahrenheita, rebrá boli pripravené. Osamelú anotáciu na konci kuchára si môžete pozrieť tu:
Suma sumárum, kuchár mi trval len asi 4 hodiny, ale tento druh nastavenia by vynikal, keby som varil niečo, čo by si na grile vyžiadalo ešte viac času (pomalý dym, ktorý trvá ~ 12 hodiny). Napriek tomu verím, že je dôležité, ak je tento nástroj ľahko zrejmý: schopnosť zaznamenať výsledky vašich jedál a potom ich porovnať s predchádzajúcimi kuchármi znamená, že vaše grilovanie sa bude postupom času pomaly zlepšovať, pretože pomocou údajov môžete zistiť, čo funguje a čo nie. 't.
Krok 3: Jedlo
Toto bolo prvýkrát, kedy som robil krátke hovädzie rebrá; na dochutenie som jednoducho použil soľ, čierne korenie a cesnakový prášok. Napriek tomu, že na začiatku boli horáky príliš vysoké, rebrá vyšli fantasticky. Prosim, pozri sa:
Krok 4: Záver
Nakoniec jedlo vyšlo úžasne, senzory, GridDB a Grafana krásne spolupracovali a získali sme niekoľko cenných údajov o tom, ako tieto veci znova uvariť, keď chceme nabudúce zapôsobiť na niektorých priateľov.
Odporúča:
Odosielanie údajov z Arduina do Excelu (a ich vykresľovanie): 3 kroky (s obrázkami)
Odosielanie údajov z Arduina do Excelu (a jeho vykresľovanie): Podrobne som hľadal spôsob, ako by som mohol vykresliť čítanie svojho senzora Arduino v reálnom čase. Nielen vykreslite, ale aj zobrazte a uložte údaje pre ďalšie experimentovanie a opravy. Najjednoduchším riešením, ktoré som našiel, bolo použitie Excelu, ale s
Stolný reproduktor Bluetooth so zvukovou vizualizáciou, dotykovými tlačidlami a NFC: 24 krokov (s obrázkami)
Stolný reproduktor Bluetooth so zvukovou vizualizáciou, dotykovými tlačidlami a technológiou NFC: Dobrý deň! V tomto návode vám ukážem, ako som vyrobil tento stolný reproduktor Bluetooth, ktorý má úžasnú vizualizáciu zvuku pomocou dotykových tlačidiel a NFC. Dá sa jednoducho spárovať so zariadeniami s podporou NFC jediným klepnutím. Neexistujú žiadne fyzické tlačidlá
Stolný zosilňovač so zvukovou vizualizáciou, binárnymi hodinami a FM prijímačom: 8 krokov (s obrázkami)
Stolný zosilňovač so zvukovou vizualizáciou, binárnymi hodinami a FM prijímačom: Mám rád zosilňovače a dnes sa podelím o svoj nízkoenergetický stolný zosilňovač, ktorý som nedávno vyrobil. Zosilňovač, ktorý som navrhol, má niekoľko zaujímavých funkcií. Má integrované binárne hodiny a môže ukazovať čas a dátum a môže vizualizovať zvuk často nazývaný zvukový
Monitor údajov zubnej kefky na báze Arduina: 4 kroky (s obrázkami)
Monitor údajov zubnej kefky na báze Arduina: Táto zubná kefka na báze Arduina vám umožňuje monitorovať vzory pomocou údajov o 3-osovom zrýchlení
Vytvorenie záznamníka údajov s Raspberry Pi: 3 kroky (s obrázkami)
Vytvorenie záznamníka údajov s Raspberry Pi: Tento jednoduchý záznamník údajov vykonáva pravidelné merania svetla s analógovým LDR (fotorezistor) a ukladá ich do textového súboru na vašom Raspberry Pi. Tento záznamník údajov bude merať a zaznamenávať úroveň svetla každých 60 sekúnd, čo vám umožní monitorovať