INHOUDSOPGAWE:
Video: BBQ Pi (met data -visualisering!): 4 stappe (met foto's)
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:24
Inleiding
Braai verwys meestal na die stadige proses om indirekte hitte te gebruik om jou gunsteling vleis te kook. Alhoewel hierdie kookmetode baie gewild is, veral in die VSA, het sommige wel 'n taamlik ernstige swakheid: dit verg ure se half-duidelike aandag om die temperatuur van u kuil en voedsel te monitor. Tik: Framboos Pi.
Die oorspronklike projek
Die oorspronklike bron vir hierdie projek is hier: https://old.reddit.com/r/raspberry_pi/comments/a0…, in die handel beskikbare draadlose termometers aan 'n Raspberry Pi (wat 'n klein RF -module aan sy GPIO -penne geheg het). In die oorspronklike projek (hierbo gekoppel) het Product sy data in 'n sqlite -databasis gestoor en op 'n apache2 php -webwerf wat plaaslik aangebied word, vertoon.
Hierdie oplossing los reeds die oorspronklike probleem op wat in die inleiding van hierdie blog aangeraak is: u kan nou u voedsel- en pit temperatuur op afstand monitor met 'n webblaaier. Maar wat as ons hierop wil uitbrei? Voer in: GridDB.
Voorrade
Framboos Pi4
SUNKEE 433Mhz Superheterodyne Wireless Receiver Module
Stap 1: GridDB Web API en FluentD
Toe ek hierdie projek sien, was my eerste gedagte - na die aanvanklike golf van opwinding - om te dink aan maniere waarop ek die funksionaliteit kan uitbrei. Deur die GridDB en sy Grafana -inprop te gebruik, het ek probeer om my voedsel- en pitdata te visualiseer. Verder wou ek Grafana -aantekeninge opstel om afwykende datapunte op te spoor - ek kan geen verkoolde vleis hê nie!
Om te begin, moes ek die C -kode van die oorspronklike projek gebruik om die data van die draadlose termometer in te lees en die data op my GridDB -bediener te plaas. Om dit aan die gang te kry, het ek 'n GridDB -bediener op Azure opgerig met behulp van 'n virtuele CentOS -masjien. Die maklikste manier om data van ons randmasjien (Raspberry Pi) na ons wolkbediener te deel, was via die GridDB Web API. Op die vm het ek die WebAPI van GridDB saam met Fluentd en die meegaande GridDB -aansluiting opgestel.
Voordat ek eintlik data na die wolk gestuur het, moes ek die basiese skema vir my BBQ Pi -houer skep. Die datastel is baie eenvoudig: ons het twee temperatuursensors, een kook -ID en natuurlik die tydstempel. Ons skema lyk dus so:
tydreeks = gridstore.put_container ("bbqpi", [("tyd", griddb. GS_TYPE_TIMESTAMP), ("cookid", griddb. GS_TYPE_INT), ("probe1", griddb. GS_TYPE_INT), ("probe2", griddb. GS_TYPE_INT)], griddb. GS_CONTAINER_TIME_
Om hierdie tydreekshouer te skep, het ek eenvoudig die WebAPI (poort 8080) gebruik:
curl -X POST --basic -u admin: admin -H "Inhoudstipe: toepassing/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
Met die houer geskep, moes ek Fluentd (poort 8888) gebruik om werklike data in ons houer te plaas. Hier is 'n CURL -opdrag wat 'n paar dummy -data plaas:
curl -X POST -d 'json = {"date": "2020-01-01T12: 08: 21.112Z", "cookid": "1", "probe1": "150", "probe2": "140" } 'https:// localhost: 8888/griddb
Van daar af moes ek die oorspronklike kode byvoeg om 'n HTTP POST -versoek te stuur wanneer ons Pi data uit ons put lees (ongeveer elke ~ 12 sekondes).
As 'n bykomende opmerking: die skryf van hierdie kode het my geleer om te besef hoe breedvoerig die C -taal kan wees:
int postData (char time , int cookid, int probe1, int probe2, char url )
{CURL *krul; CURLcode res; / * In vensters begin dit die winsock -goed */ 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 / ", / "sonde2 \": / "%d \"} ", tyd, cookid, sonde1, sonde2); / * kry 'n krulhandvatsel */ curl = curl_easy_init (); if (curl) { /* Stel eers die URL in wat ons POST gaan ontvang. Hierdie URL kan net sowel 'n https:// URL wees as dit die data moet ontvang. */ snprintf (agent, sizeof agent, "libcurl/%s", curl_version_info (CURLVERSION_NOW)-> weergawe); agent [sizeof agent - 1] = 0; curl_easy_setopt (krul, CURLOPT_USERAGENT, agent); curl_easy_setopt (krul, CURLOPT_URL, url); curl_easy_setopt (krul, CURLOPT_USERNAME, "admin"); curl_easy_setopt (curl, CURLOPT_PASSWORD, "admin"); curl_easy_setopt (krul, CURLOPT_VERBOSE, 1L); curl_easy_setopt (curl, CURLOPT_ERRORBUFFER, errbuf); curl_easy_setopt (curl, CURLOPT_POSTFIELDS, json); / * Voer die versoek uit, res sal die retourkode kry */ res = curl_easy_perform (curl); as (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)); gaan skoonmaak; } opruiming: curl_easy_cleanup (krul); curl_global_cleanup (); terugkeer 0; }}
Met hierdie funksie geskryf, moes ek dit laat loop op dieselfde tyd dat die sqlite -data gepos word:
as (goodData == 1) {
if (last_db_write == 0 || (secs-last_db_write> = 10)) {snprintf (sql, 100, "INVOER IN lesings (cookid, time, probe1, probe2) WAARDES (%d, '%s',%d, %d); ", cookID, buff, probe1, probe2); printf ("%s / n", sql); rc = sqlite3_exec (db, sql, terugbel, 0, & zErrMsg); as (rc! = SQLITE_OK) {printf ("SQL -fout: %s / n", zErrMsg); } anders {last_db_write = sekondes; } char url = "https://xx.xx.xx.xx: 8888/griddb"; postData (buff, cookID, probe1, probe2, url); }}
Om seker te maak dat u data eintlik op u bediener ingevoeg word, kan u die volgende opdrag uitvoer om na u databasis navraag te doen en die resultate te sien:
curl -X POST --basic -u admin: admin -H "Inhoudstipe: toepassing/json" -d '{' limiet ': 1000}' https:// localhost: 8080/griddb/v2/defaultCluster/dbs/ publiek/houers/bbqpi/rye
Stap 2: Grafana
Met die kode in plek, stoor ons ons temperatuurdata tegelykertyd op ons GridDB -bediener, as ons die oorspronklike webportaal gebruik om 'n 'kook' te begin.
Die volgende stap is om ons data met behulp van Grafana te visualiseer. Om dit te doen, het ons die inligting van hierdie blog gevolg: hier. Die aangename van hierdie implementering is dat dit baie maklik is om ons data in 'n mooi grafiek te sien. Dit voeg ook aantekeninge by.
Die aantekeninge wat in die blog bespreek word, maak dit vir ons uiters maklik om te monitor wanneer iets met ons kos of die put self skeefloop. In my geval was ek besig om beesvleisribbetjies te kook. Daarmee wou ek nie hê dat die temperatuur in die put verder as 275 grade Fahrenheit styg nie. As ek sien dat die temperatuur verder as dit styg, kan ek 'n brander afskakel en die hitte weer laat sak:
Ek het 'n soortgelyke reël gehad vir die sensor wat eintlik die kos self dophou: as die kos 'n interne temperatuur van 203 grade Fahrenheit bereik, was die ribbes gereed. U kan die alleenstaande aantekening aan die einde van die kok hier sien:
Kortom, die kok het my net ongeveer 4 uur geneem, maar hierdie soort opset sal baie goed presteer as ek iets kook wat nog meer tyd in die rooster sou verg (dink aan 'n lae stadige rook wat ongeveer 12 uur duur) ure). Desondanks glo ek die waarde as hierdie hulpmiddel duidelik sigbaar is: as u die resultate van u voedsel kan aanteken en dit dan met vorige kokke kan vergelyk, beteken dit dat u braai mettertyd stadig sal verbeter, aangesien u data kan gebruik om te sien wat werk en wat nie. 't.
Stap 3: Die kos
Dit was die eerste keer dat ek ooit beesvleisribbetjies gemaak het; Vir geurmiddels het ek eenvoudig sout, swartpeper en knoffelpoeier gebruik. Ondanks 'n paar probleme met die brander in die begin, het die ribbes fantasties uitgekom. Kyk asseblief:
Stap 4: Gevolgtrekking
Uiteindelik het die kos uitstekend uitgekom, die sensors, GridDB en Grafana het almal pragtig saamgewerk, en ons het waardevolle gegewens gekry oor hoe ons hierdie dinge weer kan kook vir die volgende keer as ons 'n paar vriende wil beïndruk.
Aanbeveel:
Maak pragtige plotte met lewendige Arduino -data (en stoor die data in Excel): 3 stappe
Maak pragtige plotte met lewendige Arduino -data (en stoor die data in Excel): ons speel almal graag met ons P … lotterfunksie in die Arduino IDE, hoewel dit nuttig kan wees vir basiese toepassings, word die data meer as uitgewis punte word bygevoeg en dit is nie besonder aangenaam vir die oë nie. Die Arduino IDE -plotter
Hoe om humiditeit en temperatuur real-time data-opnemer te maak met Arduino UNO en SD-kaart - DHT11 Data-logger Simulasie in Proteus: 5 stappe
Hoe om humiditeit en temperatuur real-time data-opnemer te maak met Arduino UNO en SD-kaart | DHT11 Data-logger Simulasie in Proteus: Inleiding: hi, dit is Liono Maker, hier is die YouTube-skakel. Ons maak 'n kreatiewe projek met Arduino en werk aan ingebedde stelsels. Data-Logger: 'n Datalogger (ook data-logger of data recorder) is 'n elektroniese toestel wat data mettertyd opneem
BBQ -temperatuur- en vleissensor op ESP8266 met skerm: 5 stappe (met foto's)
BBQ -temperatuur- en vleissensor op ESP8266 met vertoning: in hierdie instruksies sal ek u wys hoe u u eie weergawe kan maak van 'n braai -gereedskap wat die huidige temperatuur in u braai meet en 'n waaier aanskakel om dit aan te steek indien nodig. Daarbenewens is daar ook 'n vleiskerntemperatuursensor wat
IoT -data -bediener met dubbele temperatuur: 12 stappe (met foto's)
IoT -data -bediener met dubbele temperatuur: dit is my eerste poging om 'n instruksies te skryf. As u dink dat dit nie te erg is nie, stem dan vir my in die eerste keer outeurwedstryd. Dit is my Lock-Down-projek om 2 temperature in 'n kweekhuis op afstand te monitor
Data -aanmelding met 'n hoë akkuraatheid met behulp van multimeter/Arduino/pfodApp: 10 stappe (met foto's)
Afsluitbare data -aanmelding met 'n hoë akkuraatheid met behulp van multimeter/Arduino/pfodApp: Opgedateer 26 April 2017 Hersiene kring en bord vir gebruik met 4000ZC USB -meters. Geen Android -kodering benodig nie. vir aanmelding en