Talaan ng mga Nilalaman:
- Mga gamit
- Hakbang 1: GridDB Web API & FluentD
- Hakbang 2: Grafana
- Hakbang 3: Ang Pagkain
- Hakbang 4: Konklusyon
Video: BBQ Pi (With Data Visualization!): 4 Hakbang (na may Mga Larawan)
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-30 13:11
Panimula
Ang Barbecuing ay karaniwang tumutukoy sa mabagal na proseso ng paggamit ng hindi direktang init upang lutuin ang iyong mga paboritong karne. Kahit na ang pamamaraang ito ng pagluluto ay napakapopular - lalo na sa Estados Unidos - mayroon itong kung ano ang maaaring isaalang-alang ng ilan na isang seryosong kahinaan: nangangailangan ito ng mga oras ng semi-matalinong pansin na gugugol sa pagsubaybay sa temperatura ng iyong hukay at pagkain. Ipasok: Raspberry Pi.
Ang Orihinal na Proyekto
Ang orihinal na mapagkukunan para sa proyektong ito ay matatagpuan dito: https://old.reddit.com/r/raspberry_pi/comments/a0… Ang diwa nito ay ang gumagamit ng reddit na Produkt na nakapag-relay ng data ng pagkain at hukay ng temperatura mula sa medyo mura, magagamit na komersyal na mga wireless thermometer sa isang Raspberry Pi (na naka-attach sa mga GPIO pin nito isang maliit na module ng RF). Sa orihinal na proyekto (naka-link sa itaas), ang Produkt ay mayroong kanyang data na nakaimbak sa isang database ng sqlite at ipinakita sa isang lokal na naka-host na website na apache2 php.
Nalulutas na ng solusyon na ito ang orihinal na problemang hinawakan sa pagpapakilala ng blog na ito: maaari mo nang subaybayan ang iyong temperatura ng pagkain at hukay nang malayuan sa isang web browser. Ngunit paano kung nais naming lumawak dito? Ipasok: GridDB.
Mga gamit
Raspberry Pi4
SUNKEE 433Mhz Superheterodyne Wireless Receiver Module
Hakbang 1: GridDB Web API & FluentD
Sa pagtingin sa proyektong ito, ang aking unang naisip - pagkatapos ng paunang alon ng kaguluhan - ay nag-iisip ng mga paraan na pinalawak ko ang pagpapaandar. Sa pamamagitan ng paggamit ng GridDB at ang Grafana plugin nito, hinanap ko upang mailarawan ang aking data sa pagkain at hukay. Higit pa rito, nais kong i-set up ang mga anotasyon ng Grafana upang maghanap ng anumang anomalya na mga puntos ng data - hindi maaaring magkaroon ng anumang sinusunog na karne!
Upang makapagsimula, kailangan kong gamitin ang C code mula sa orihinal na proyekto upang mabasa ang data na nagmumula sa wireless thermometer at mai-post ang data sa aking server ng GridDB. Upang maisagawa ito, tumatakbo ako sa isang GridDB Server sa Azure gamit ang isang CentOS virtual machine. Ang pinakamadaling paraan upang maibahagi ang data mula sa aming edge machine (Raspberry Pi) sa aming cloud server ay sa pamamagitan ng GridDB Web API. Kaya, sa vm na iyon, na-set up ko ang WebAPI ng GridDB kasama ang Fluentd at ang kasamang konektor ng GridDB.
Bago talaga magpadala ng data hanggang sa cloud, kailangan kong lumikha ng pangunahing iskema para sa aking lalagyan na BBQ Pi. Ang dataset na papasok ay napaka-simple: mayroon kaming dalawang mga sensor ng temperatura, isang luto ng id, at syempre, ang timestamp. Kaya ganito ang aming iskema:
timeseries = gridstore.put_container ("bbqpi", [("oras", griddb. GS_TYPE_TIMESTAMP), ("cookid", griddb. GS_TYPE_INT), ("probe1", griddb. GS_TYPE_INT), ("probe2", griddb. GS_TYPE_INT)], griddb. GS_CONTAINER_TIME_SERIES)
Upang likhain ang lalagyan na ito ng mga orasan, ginamit ko lang ang WebAPI (port 8080):
curl -X POST --basic -u admin: admin -H "Uri ng nilalaman: application / json" -d
'{"container_name": "bbqpi", "container_type": "TIME_SERIES", / "rowkey": totoo, "mga haligi": [ {"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
Gamit ang lalagyan na nilikha, kailangan kong gumamit ng Fluentd (port 8888) upang mag-post ng aktwal na data sa aming lalagyan. Narito ang isang utos ng CURL na nag-post ng ilang data ng dummy:
curl -X POST -d 'json = {"date": "2020-01-01T12: 08: 21.112Z", "cookid": "1", "probe1": "150", "probe2": "140" } 'https:// localhost: 8888 / griddb
Mula doon, kailangan kong idagdag ang orihinal na code upang magpadala ng isang Hiling sa HTTP POST tuwing ang aming Pi ay nagbabasa ng data mula sa aming hukay (halos isang beses bawat ~ 12 segundo).
Bilang isang tala sa gilid: ang pagsulat ng code na ito ay nagturo sa akin na pahalagahan kung paano ang wika ng C na wika ay maaaring:
int postData (char time , int cookid, int probe1, int probe2, char url )
{CURL * curl; CURLcode res; / * Sa mga bintana, magpapainit ito ng mga bagay na winsock * / curl_global_init (CURL_GLOBAL_ALL); char errbuf [CURL_ERROR_SIZE] = {0,}; ahente ng char [1024] = {0,}; char json [1000]; snprintf (json, 200, "json = {" date / ": \"% s.112Z / ", \" cookid / ": \"% d / ", \" probe1 / ": \"% d / ", / "probe2 \": / "% d \"} ", oras, cookid, probe1, probe2); / * kumuha ng hawakan ng curl * / curl = curl_easy_init (); kung (curl) {/ * Itakda muna ang URL na malapit nang matanggap ang aming POST. Ang URL na ito ay maaari ding maging isang https:// URL kung iyon ang dapat tumanggap ng data. * / snprintf (ahente, sizeof ahente, "libcurl /% s", curl_version_info (CURLVERSION_NOW) -> bersyon); ahente [sizeof agent - 1] = 0; curl_easy_setopt (curl, CURLOPT_USERAGENT, ahente); 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); / * Gawin ang kahilingan, makukuha ng res ang return code * / res = curl_easy_perform (curl); kung (res! = CURLE_OK) {size_t len = strlen (errbuf); fprintf (stderr, "\ nlibcurl: (% d)", res); kung (len) fprintf (stderr, "% s% s", errbuf, ((errbuf [len - 1]! = '\ n')? "\ n": "")); fprintf (stderr, "% s / n / n", curl_easy_strerror (res)); paglilinis ng goto; } paglilinis: curl_easy_cleanup (curl); curl_global_cleanup (); ibalik ang 0; }}
Na nakasulat ang pagpapaandar na ito, kailangan ko lamang itong patakbuhin nang sabay-sabay na nai-post ang data ng sqlite:
kung (goodData == 1) {
kung (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, callback, 0, & zErrMsg); kung (rc! = SQLITE_OK) {printf ("SQL error:% s / n", zErrMsg); } iba pa {last_db_write = secs; } char url = "https://xx.xx.xx.xx: 8888 / griddb"; postData (buff, cookID, probe1, probe2, url); }}
Upang matiyak na ang iyong data ay talagang naipapasok sa iyong server, maaari mong patakbuhin ang sumusunod na utos upang magtanong sa iyong database at tingnan ang mga resulta:
curl -X POST --basic -u admin: admin -H "Type-content: application / json" -d '{"limit": 1000}' https:// localhost: 8080 / griddb / v2 / defaultCluster / dbs / pampubliko / lalagyan / bbqpi / row
Hakbang 2: Grafana
Gamit ang code na nasa lugar, ngayon kapag ginamit namin ang orihinal na web portal upang magsimula ng isang "lutuin", sabay naming maiimbak ang aming data ng temperatura sa aming GridDB server.
Ang susunod na hakbang ay upang mailarawan ang aming data gamit ang Grafana. Upang magawa ito, sinundan namin ang impormasyon mula sa blog na ito: dito. Ang magandang bagay tungkol sa pagpapatupad na ito ay napakadali na makita ang aming data na na-chart sa isang magandang graph. Nagdadagdag din ito ng mga anotasyon.
Ang mga anotasyon na tinalakay sa blog ay ginagawang madali para sa amin na subaybayan kung may mali sa alinman sa aming pagkain o sa hukay mismo. Sa aking kaso, nagluluto ako ng maliliit na buto ng baka. Sa mga iyon, hindi ko nais na ang temperatura sa hukay na lumago nang lampas sa 275 degree Fahrenheit. Kung nakita ko ang temperatura na lampas doon, maaari kong patayin ang isang burner at payagan ang init na muling lumubog:
Mayroon akong isang katulad na panuntunan para sa sensor na talagang pinapanatili ang mga tab sa mismong pagkain: kung ang pagkain ay nakuha sa isang panloob na temp na 203 degree fahrenheit, handa na ang mga buto-buto. Maaari mong makita ang nag-iisang anotasyon sa dulo ng lutuin dito:
Sa kabuuan, kinuha lamang ako ng tagapagluto ng mga ~ 4 na oras o higit pa, ngunit ang ganitong uri ng pag-set up ay tunay na magagaling kung nagluluto ako ng isang bagay na nangangailangan ng mas maraming oras sa grill (isipin ang isang mabagal na usok na tumatagal ~ 12 oras). Sa kabila nito, naniniwala ako na ang halaga kung ang tool na ito ay madaling maliwanag: ang pag-log ng mga resulta ng iyong mga pagkain at pagkatapos ihambing ito sa mga nakaraang lutuin nangangahulugan na ang iyong BBQing ay dahan-dahang magiging mas mahusay sa paglipas ng panahon dahil maaari mong gamitin ang data upang makita kung ano ang gumagana at kung ano ang hindi 't
Hakbang 3: Ang Pagkain
Ito ang kauna-unahang pagkakataon na gumawa ako ng maiikling buto ng baka; para sa pampalasa, simpleng ginamit ko ang asin, itim na paminta, at pulbos ng bawang. Sa kabila ng ilang mga isyu sa burner na nakakakuha ng masyadong mataas para sa isang maliit na bata doon sa simula, ang mga buto-buto ay lumabas na kamangha-manghang. Mangyaring tingnan:
Hakbang 4: Konklusyon
Sa huli, ang pagkain ay lumabas na kakila-kilabot, ang mga sensor, GridDB, at Grafana lahat ay nagtrabaho nang mahusay sa konsyerto, at nakakuha kami ng ilang mahalagang data sa kung paano lutuin muli ang mga bagay na ito sa susunod na nais naming mapahanga ang ilang mga kaibigan.
Inirerekumendang:
BBQ Temperature & Meat Sensor sa ESP8266 Na May Display: 5 Hakbang (na may Mga Larawan)
BBQ Temperature & Meat Sensor sa ESP8266 Sa Pagpapakita: Sa Instructable na ito ipapakita ko sa iyo kung paano gumawa ng iyong sariling bersyon ng isang tool na BBQ na sumusukat sa kasalukuyang temperatura sa iyong barbecue at bubukas ang isang fan upang magaan ito kung kinakailangan. Karagdagan dito ay mayroon ding isang meat core temperatura sensor attac
Pagkuha ng Data at System Visualization System para sa isang MotoStudent Electric Racing Bike: 23 Mga Hakbang
Ang Pagkuha ng Data at System Visualization System para sa isang MotoStudent Electric Racing Bike: Ang isang sistema ng pagkuha ng data ay isang koleksyon ng hardware at software na nagtutulungan upang makolekta ang data mula sa mga panlabas na sensor, iimbak at iproseso ito pagkatapos upang maipakita ang graphic at masuri, na pinapayagan ang mga inhinyero na gumawa
Desk Bluetooth Speaker Sa Audio Visualization, Touch Buttons at NFC .: 24 Hakbang (na may Mga Larawan)
Desk Bluetooth Speaker Gamit ang Audio Visualization, Touch Buttons at NFC .: Kumusta! Sa mga Instructable na ito ay ipapakita ko kung paano ko nagawa ang speaker ng Desk Bluetooth na ito na may kamangha-manghang visualization ng Audio na may mga pindutan ng touch at NFC. Maaaring madaling ipares sa mga aparatong Pinagana ng NFC sa isang tap lang. Walang pisikal na pindutan
Desk Amplifier Sa Audio Visualization, Binary Clock & FM Receiver: 8 Hakbang (na may Mga Larawan)
Desk Amplifier Sa Audio Visualization, Binary Clock & FM Receiver: Gusto ko ng mga amplifier at ngayon, ibabahagi ko ang aking mababang power desk amplifier na ginawa ko kamakailan. Ang amplifier na dinisenyo ko ay may ilang mga kagiliw-giliw na tampok. Mayroon itong pinagsamang binary na orasan at maaaring magbigay ng oras at petsa at maaari nitong mailarawan ang audio na madalas na tinatawag na audio
IoT Pinagana ang Sensor Data Collection Center Na May ESP8266 & PubNub: 9 Mga Hakbang (na may Mga Larawan)
IoT Pinagana ang Sensor Data Collection Center Sa ESP8266 & PubNub: Karamihan sa mga tutorial sa ESP8266 ay nasa antas ng newbie (malayo na kumikislap ng isang led) o masyadong kumplikado para sa isang tao na naghahanap ng isang bagay upang mapabuti at mag-upgrade sa kanyang pinangunahan na mga kasanayan sa pagpikit. Ito itinuturo na naglalayong tulay ang puwang na ito sa lumikha