Sadržaj:
Video: BBQ Pi (sa vizualizacijom podataka!): 4 koraka (sa slikama)
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:05
Uvod
Roštilj se najčešće odnosi na spori proces korištenja indirektne topline za kuhanje vašeg omiljenog mesa. Iako je ovaj način kuhanja izuzetno popularan-posebno u SAD-u-ima nešto što bi neki mogli smatrati prilično ozbiljnom slabošću: potrebno je provesti sate polulucidne pažnje za praćenje temperature vaše jame i hrane. Unesite: Raspberry Pi.
Originalni projekat
Izvorni izvor za ovaj projekt možete pronaći ovdje: https://old.reddit.com/r/raspberry_pi/comments/a0… Suština je u tome što je korisnik Reddita Produkt uspio prenijeti podatke o temperaturi hrane i hrane u relativno niskim cijenama, komercijalno dostupni bežični termometri za Raspberry Pi (koji je na svoje GPIO pinove priključio mali RF modul). U originalnom projektu (gore spojen), Produkt je imao podatke pohranjene u sqlite bazi podataka i prikazane na lokalno hostiranoj apache2 php web stranici.
Ovo rješenje već rješava izvorni problem o kojem smo govorili u uvodu ovog bloga: sada možete daljinski nadzirati temperaturu hrane i jela u web pregledniku. Ali šta ako želimo da proširimo ovo? Unesite: GridDB.
Supplies
Raspberry Pi4
SUNKEE 433Mhz superheterodinski bežični prijemnički modul
Korak 1: GridDB Web API & FluentD
Nakon što sam vidio ovaj projekt, moja prva pomisao - nakon početnog vala uzbuđenja - bila je razmišljanje o načinima na koje mogu proširiti funkcionalnost. Koristeći GridDB i njegov dodatak Grafana, pokušao sam vizualizirati svoje podatke o hrani i jami. Osim toga, želio sam postaviti Grafana bilješke za traženje bilo kakvih abnormalnih podataka - ne smije imati ugljenisanog mesa!
Za početak, morao sam koristiti C kod iz originalnog projekta za čitanje podataka koji dolaze s bežičnog termometra i postavljanje tih podataka na moj GridDB server. Da bih ovo pokrenuo, pokrenuo sam GridDB poslužitelj na Azureu pomoću CentOS virtualne mašine. Najlakši način za razmjenu podataka s naše rubne mašine (Raspberry Pi) na našem serveru u oblaku bio je putem GridDB Web API -ja. Tako sam na tom vm -u postavio GridDB -ov WebAPI zajedno s Fluentdom i pripadajućim GridDB konektorom.
Prije nego što sam zapravo poslao podatke u oblak, morao sam stvoriti osnovnu shemu za svoj BBQ Pi spremnik. Skup podataka koji dolazi vrlo je jednostavan: imamo dva senzora temperature, jedan ID kuhara i, naravno, vremensku oznaku. Dakle, naša shema izgleda ovako:
timeseries = gridstore.put_container ("bbqpi", [("vrijeme", griddb. GS_TYPE_TIMESTAMP), ("kuhanje", griddb. GS_TYPE_INT), ("sonda1", griddb. GS_TYPE_INT), ("probe2", griddb. GS_TYPE_INT)], griddb. GS_ER_ER_)
Za kreiranje ovog spremnika vremenske serije jednostavno sam upotrijebio WebAPI (port 8080):
curl -X POST --basic -u admin: admin -H "Vrsta sadržaja: aplikacija/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": "sonda2", "type": "INTEGER"}]} '\ https:// localhost: 8080/griddb/v2/defaultCluster/dbs/public/container
S stvorenim spremnikom, morao sam koristiti Fluentd (port 8888) za postavljanje stvarnih podataka u naš spremnik. Evo CURL naredbe koja objavljuje neke lažne podatke:
curl -X POST -d 'json = {"date": "2020-01-01T12: 08: 21.112Z", "cookid": "1", "probe1": "150", "probe2": "140" } 'https:// localhost: 8888/griddb
Odatle sam morao dodati originalni kôd da bih poslao HTTP POST zahtjev kad god je naš Pi čitao podatke iz naše jame (otprilike jednom svakih ~ 12 sekundi).
Kao napomenu: pisanje ovog koda naučilo me je cijeniti koliko opširan jezik C može biti:
int postData (vrijeme char , int cookid, int probe1, int probe2, char url )
{CURL *curl; CURLcode res; / * U prozorima će ovo inicirati winsock stvari */ 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 / ", / "sonda2 \": / "%d \"} ", vrijeme, kuhanje, sonda1, sonda2); / * get curl handle */ curl = curl_easy_init (); if (curl) { /* Prvo postavite URL koji će uskoro primiti POST. Ovaj URL može isto tako biti https:// URL ako je to ono što bi trebalo primiti podatke. */ snprintf (agent, sizeof agent, "libcurl/%s", curl_version_info (CURLVERSION_NOW)-> verzija); agent [sizeof 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); / * Izvršite zahtjev, res će dobiti povratni kod */ 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)); goto cleanup; } čišćenje: curl_easy_cleanup (curl); curl_global_cleanup (); return 0; }}
S napisanom ovom funkcijom, samo mi je bilo potrebno da se pokrene u isto vrijeme kada su se postavljali sqlite podaci:
if (goodData == 1) {
if (last_db_write == 0 || (secs-last_db_write> = 10)) {snprintf (sql, 100, "INSERT INTO očitanja (cooidid, time, sonda1, sonda2) VRIJEDNOSTI (%d, '%s',%d, %d); ", cookID, baff, sonda1, sonda2); printf ("%s / n", sql); rc = sqlite3_exec (db, sql, povratni poziv, 0, & zErrMsg); if (rc! = SQLITE_OK) {printf ("SQL greška: %s / n", zErrMsg); } else {last_db_write = secs; } char url = "https://xx.xx.xx.xx: 8888/griddb"; postData (buff, cookID, sonda1, sonda2, url); }}
Da biste bili sigurni da su vaši podaci zapravo umetnuti na vaš poslužitelj, možete pokrenuti sljedeću naredbu da biste upitali svoju bazu podataka i vidjeli rezultate:
curl -X POST --basic -u admin: admin -H "Vrsta sadržaja: application/json" -d '{"ograničenje": 1000}' https:// localhost: 8080/griddb/v2/defaultCluster/dbs/ public/kontejneri/bbqpi/redovi
Korak 2: Grafana
S postavljenim kodom, sada kada koristimo originalni web portal za početak kuhanja, istovremeno ćemo pohranjivati naše podatke o temperaturi na naš GridDB poslužitelj.
Sljedeći korak bit će vizualizacija naših podataka pomoću Grafane. Da bismo to učinili, slijedili smo informacije sa ovog bloga: ovdje. Lijepa strana ove implementacije je što je izuzetno lako vidjeti naše podatke ucrtane u lijepi grafikon. Takođe dodaje napomene.
Napomene o kojima se raspravlja na blogu izuzetno nam olakšavaju praćenje kada nešto pođe po zlu s našom hranom ili sa samom jamom. U mom slučaju, ja sam kuhala goveđa kratka rebra. S tim, nisam želio da temperatura u jami poraste iznad 275 stupnjeva celzijusa. Kad bih vidio da temperatura prelazi tu vrijednost, mogao bih isključiti gorionik i dopustiti da toplina ponovno utone:
Imao sam slično pravilo za senzor koji zapravo prati samu hranu: ako je hrana dosegla unutrašnju temperaturu od 203 stepena Fahrenheita, rebra su bila spremna. Usamljenu napomenu na kraju kuharice možete vidjeti ovdje:
Sve u svemu, kuharu mi je trebalo samo oko 4 sata ili tako nešto, ali ovakva bi postavka zaista bila izvrsna da sam kuhala nešto za što bi mi bilo potrebno još više vremena na roštilju (pomislite na spori dim koji traje ~ 12 sati). Usprkos tome, vjerujem da je vrijednost ako je ovaj alat lako uočljiv: mogućnost bilježenja rezultata vaše hrane i zatim usporedba s prethodnim kuharima znači da će vam roštilj s vremenom postajati sve bolji jer možete koristiti podatke da vidite što radi, a što ne 't.
Korak 3: Hrana
Ovo je bio prvi put da sam radila goveđa kratka rebra; Za začine sam jednostavno koristila sol, crni papar i češnjak u prahu. Unatoč nekim problemima s time da je gorionik u početku bio previsok za mrvicu, rebra su ispala fantastično. Molimo pogledajte:
Korak 4: Zaključak
Na kraju, hrana je ispala sjajna, senzori, GridDB i Grafana su svi odlično funkcionirali, a dobili smo i neke vrijedne podatke o tome kako ponovo skuhati ove stvari za sljedeći put kada želimo impresionirati neke prijatelje.
Preporučuje se:
Slanje podataka s Arduina u Excel (i iscrtavanje): 3 koraka (sa slikama)
Slanje podataka s Arduina u Excel (i iscrtavanje istih): Opširno sam tražio način na koji mogu iscrtati očitavanje svog Arduino senzora u stvarnom vremenu. Ne samo iscrtati, već i prikazati i pohraniti podatke za daljnje eksperimentiranje i ispravke. Najjednostavnije rješenje koje sam pronašao bilo je korištenje programa Excel, ali s
Kako napraviti snimač podataka o vlažnosti i temperaturi u stvarnom vremenu s Arduino UNO i SD-karticom - DHT11 Zapisnik podataka Simulacija u Proteusu: 5 koraka
Kako napraviti snimač podataka o vlažnosti i temperaturi u stvarnom vremenu s Arduino UNO i SD-karticom | DHT11 Simulator zapisnika podataka u Proteusu: Uvod: zdravo, ovdje Liono Maker, ovdje je YouTube veza. Radimo na kreativnom projektu s Arduinom i radimo na ugrađenim sistemima. Zapisnik podataka: Zapisnik podataka (također zapisnik podataka ili snimač podataka) je elektronički uređaj koji bilježi podatke tokom vremena sa
Stoni Bluetooth zvučnik sa audio vizualizacijom, dodirnim tasterima i NFC -om .: 24 koraka (sa slikama)
Stoni Bluetooth zvučnik sa audio vizualizacijom, dodirnim tasterima i NFC -om .: Zdravo! U ovom Instructables -u pokazat ću kako sam napravio ovaj stolni Bluetooth zvučnik koji ima zadivljujuću audio vizualizaciju sa tipkama na dodir i NFC -om. Može se lako upariti s uređajima s omogućenim NFC -om jednim dodirom. Nema fizičkog dugmeta
Stono pojačalo sa audio vizualizacijom, binarnim satom i FM prijemnikom: 8 koraka (sa slikama)
Stono pojačalo sa audio vizualizacijom, binarnim satom i FM prijemnikom: Volim pojačala i danas ću podijeliti svoje stono pojačalo male snage koje sam nedavno napravio. Pojačalo koje sam dizajnirao ima neke zanimljive karakteristike. Ima integrirani binarni sat i može dati vrijeme i datum te može vizualizirati zvuk koji se često naziva audio
EAL-Industri4.0-RFID prikupljanje podataka do baze podataka: 10 koraka (sa slikama)
EAL-Industri4.0-RFID podatkovno prikupljanje podataka u bazi podataka: Ovaj projektni upravitelj opsamlira sve podatke i podatke, registrovane kao identifikator u vašoj bazi podataka. RFID, zaostajanje podataka u MySQL bazi podataka. node-RED, samo ažuriranje i ponašanje u skladu sa općenitim podacima u et C# programu koji se formira u aplikaciji Windows Form