Indholdsfortegnelse:
Video: BBQ Pi (med datavisualisering!): 4 trin (med billeder)
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:26
Introduktion
Grilling henviser mest til den langsomme proces med at bruge indirekte varme til at tilberede dit yndlingskød. Selvom denne madlavningsmetode er enormt populær-især i USA-har den, hvad nogle kan betragte som en ret alvorlig svaghed: det kræver timers halvklar opmærksomhed at blive brugt på at overvåge temperaturen i din pit og mad. Indtast: Raspberry Pi.
Det originale projekt
Den originale kilde til dette projekt kan findes her: https://old.reddit.com/r/raspberry_pi/comments/a0… Kernen i det er, at reddit -bruger Produkt var i stand til at videresende data om mad og grubetemperatur fra relativt billige, kommercielt tilgængelige trådløse termometre til en Raspberry Pi (som havde knyttet et lille RF -modul til sine GPIO -ben). I det oprindelige projekt (linket ovenfor) lagrede Produkt sine data i en sqlite -database og vises på et lokalt hostet apache2 php -websted.
Denne løsning løser allerede det oprindelige problem, der blev berørt i introduktionen af denne blog: Du kan nu eksternt overvåge din mad og pit -temperatur med en webbrowser. Men hvad nu hvis vi ville udvide dette? Indtast: GridDB.
Forbrugsvarer
Hindbær Pi4
SUNKEE 433Mhz Superheterodyne trådløs modtagermodul
Trin 1: GridDB Web API & FluentD
Da jeg så dette projekt, tænkte min første tanke - efter den første spændingsbølge - på måder, hvorpå jeg kan udvide funktionaliteten. Ved at bruge GridDB og dets Grafana -plugin søgte jeg at visualisere mine mad- og pitdata. Udover det ønskede jeg at oprette Grafana -annotationer for at opsøge eventuelle unormale datapunkter - kan ikke have noget forkullet kød!
For at komme i gang var jeg nødt til at bruge C -koden fra det originale projekt til at læse dataene, der kom ind fra det trådløse termometer og sende disse data til min GridDB -server. For at få dette til at fungere, spandt jeg en GridDB -server op på Azure ved hjælp af en virtuel CentOS -maskine. Den nemmeste måde at dele data fra vores kantmaskine (Raspberry Pi) til vores cloud -server var via GridDB Web API. Så på den vm konfigurerede jeg GridDB's WebAPI sammen med Fluentd og det medfølgende GridDB -stik.
Før jeg rent faktisk sendte data op til skyen, var jeg nødt til at oprette det grundlæggende skema til min BBQ Pi -container. Datasættet, der kommer ind, er ekstremt simpelt: vi har to temperatursensorer, et cook -id og selvfølgelig tidsstemplet. Så vores skema ser sådan ud:
timeseries = gridstore.put_container ("bbqpi", [("tid", griddb. GS_TYPE_TIMESTAMP), ("cookid", griddb. GS_TYPE_INT), ("probe1", griddb. GS_TYPE_INT), ("probe2", griddb. GS_TYPE_INT)], griddb. GS_CONTAINER_TIME_
For at oprette denne timeseries -container brugte jeg simpelthen WebAPI (port 8080):
curl -X POST --basic -u admin: admin -H "Indholdstype: applikation/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/containers
Da containeren blev oprettet, havde jeg brug for at bruge Fluentd (port 8888) til at bogføre faktiske data i vores container. Her er en CURL -kommando, der sender nogle dummy -data:
curl -X POST -d 'json = {"date": "2020-01-01T12: 08: 21.112Z", "cookid": "1", "probe1": "150", "probe2": "140" } 'https:// localhost: 8888/griddb
Derfra var jeg nødt til at tilføje den originale kode for at sende en HTTP POST -anmodning, når vores Pi læste data fra vores pit (cirka en gang hvert ~ 12 sekunder).
Som en sidebemærkning: At skrive denne kode lærte mig at sætte pris på, hvor omfattende C -sproget kan være:
int postData (char time , int cookid, int probe1, int probe2, char url )
{CURL *curl; CURLcode res; / * I windows vil dette starte winsock -tingene */ 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 / ", \" probe1 / ": \"%d / ", / "probe2 \": / "%d \"} ", tid, cookid, probe1, probe2); / * få et krøllehåndtag */ curl = curl_easy_init (); if (curl) { /* Indstil først den webadresse, der er ved at modtage vores POST. Denne URL kan lige så godt være en https:// URL, hvis det er det, der skal modtage dataene. */ snprintf (agent, sizeof agent, "libcurl/%s", curl_version_info (CURLVERSION_NOW)-> version); agent [størrelse af agent - 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); / * Udfør anmodningen, res får returkoden */ res = curl_easy_perform (curl); hvis (res! = CURLE_OK) {size_t len = strlen (errbuf); fprintf (stderr, "\ nlibcurl: (%d)", res); hvis (len) fprintf (stderr, "%s%s", errbuf, ((errbuf [len - 1]! = '\ n')? "\ n": ""))); fprintf (stderr, "%s / n / n", curl_easy_strerror (res)); gå til oprydning; } oprydning: curl_easy_cleanup (curl); curl_global_cleanup (); returnere 0; }}
Med denne funktion skrevet, skulle jeg bare have den kørt på samme tid, som sqlite -dataene blev sendt:
hvis (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, probe2); printf ("%s / n", sql); rc = sqlite3_exec (db, sql, tilbagekald, 0, & zErrMsg); hvis (rc! = SQLITE_OK) {printf ("SQL -fejl: %s / n", zErrMsg); } andet {last_db_write = sek. } char url = "https://xx.xx.xx.xx: 8888/griddb"; postData (buff, cookID, probe1, probe2, url); }}
For at sikre, at dine data faktisk indsættes i din server, kan du køre følgende kommando for at forespørge i din database og se resultaterne:
curl -X POST --basic -u admin: admin -H "Content -type: application/json" -d '{"limit": 1000}' https:// localhost: 8080/griddb/v2/defaultCluster/dbs/ public/containere/bbqpi/rækker
Trin 2: Grafana
Med koden på plads, nu når vi bruger den originale webportal til at starte en “kok”, vil vi samtidig gemme vores temperaturdata i vores GridDB -server.
Det næste trin vil være at visualisere vores data ved hjælp af Grafana. For at gøre det fulgte vi oplysningerne fra denne blog: her. Det gode ved denne implementering er, at det er ekstremt let at se vores data kortlagt til en flot graf. Det tilføjer også kommentarer.
De kommentarer, der diskuteres i bloggen, gør det ekstremt let for os at overvåge, når noget går galt med enten vores mad eller selve gruben. I mit tilfælde lavede jeg oksekød korte ribben. Med dem ønskede jeg ikke, at temperaturen i gruben skulle vokse ud over 275 grader Fahrenheit. Hvis jeg så temperaturen gå ud over det, kunne jeg slukke en brænder og lade varmen synke igen:
Jeg havde en lignende regel for, at sensoren faktisk holdt øje med selve maden: hvis maden nåede en indre temperatur på 203 grader fahrenheit, var ribbenene klar. Du kan se den eneste kommentar i slutningen af kokken her:
Alt i alt tog kokken mig kun ca. timer). På trods af det tror jeg på værdien, hvis dette værktøj er let synligt: at kunne logge dine madresultater og derefter sammenligne det med tidligere kokke betyder, at din grillning langsomt bliver bedre med tiden, da du kan bruge data til at se, hvad der virker, og hvad der ikke gør 't.
Trin 3: Maden
Dette var første gang jeg nogensinde har lavet oksekød korte ribben; til krydderier brugte jeg simpelthen salt, sort peber og hvidløgspulver. På trods af nogle problemer med at brænderen blev for høj til en lille smule der i begyndelsen, kom ribbenene fantastisk ud. Venligst se her:
Trin 4: Konklusion
Til sidst kom maden fantastisk ud, sensorerne, GridDB og Grafana arbejdede alle sammen smukt, og vi fik nogle værdifulde data om, hvordan vi kan lave disse ting igen til næste gang, vi vil imponere nogle venner.
Anbefalede:
Sådan gør du: Installation af Raspberry PI 4 Headless (VNC) med Rpi-imager og billeder: 7 trin (med billeder)
Sådan gør du: Installation af Raspberry PI 4 Headless (VNC) med Rpi-imager og billeder: Jeg planlægger at bruge denne Rapsberry PI i en masse sjove projekter tilbage i min blog. Tjek det gerne ud. Jeg ville tilbage til at bruge min Raspberry PI, men jeg havde ikke et tastatur eller en mus på min nye placering. Det var et stykke tid siden jeg konfigurerede en hindbær
BBQ temperatur- og kødsensor på ESP8266 med display: 5 trin (med billeder)
BBQ temperatur- og kødsensor på ESP8266 med display: I denne instruktionsbog viser jeg dig, hvordan du laver din egen version af et grillværktøj, der måler den aktuelle temperatur i din grill og tænder en blæser for at tænde den, hvis det er nødvendigt. Ud over dette er der også en kødkerntemperaturføler, der
Sådan adskilles en computer med nemme trin og billeder: 13 trin (med billeder)
Sådan adskilles en computer med nemme trin og billeder: Dette er en instruktion om, hvordan du adskiller en pc. De fleste af de grundlæggende komponenter er modulopbyggede og nemme at fjerne. Det er dog vigtigt, at du er organiseret omkring det. Dette hjælper med at forhindre dig i at miste dele og også ved at lave genmonteringen til
Ciclop 3d Scanner My Way Trin for trin: 16 trin (med billeder)
Ciclop 3d Scanner My Way Step by Step: Hej alle sammen, jeg kommer til at indse den berømte Ciclop 3D -scanner.Alle trin, der er godt forklaret på det originale projekt, er ikke til stede.Jeg lavede nogle rettelser for at forenkle processen, først Jeg udskriver basen, og end jeg genstarter printkortet, men fortsæt
Sådan styrer du husholdningsapparater med fjernsyn med fjernbetjening med timerfunktion: 7 trin (med billeder)
Sådan styrer du husholdningsapparater med fjernsyn med fjernbetjening med timerfunktion: Selv efter 25 års introduktion til forbrugermarkedet er infrarød kommunikation stadig meget relevant i de seneste dage. Uanset om det er dit 55 tommer 4K -fjernsyn eller dit billydsystem, har alt brug for en IR -fjernbetjening for at reagere på vores