Агуулгын хүснэгт:
Видео: BBQ Pi (Өгөгдлийн дүрслэлтэй!): 4 алхам (зурагтай)
2024 Зохиолч: John Day | [email protected]. Хамгийн сүүлд өөрчлөгдсөн: 2024-01-30 11:01
Танилцуулга
Шарсан мах хийх нь ихэвчлэн дуртай махаа хоол хийхэд шууд бус дулааныг ашиглах явцыг хэлдэг. Хэдийгээр хоол хийх энэ арга нь маш их алдартай байдаг, ялангуяа АНУ-д энэ нь нэлээд ноцтой сул тал гэж тооцогддог: таны уурхай, хоолны температурыг хянахад хагас цагаар хагас цаг зарцуулах шаардлагатай байдаг. Оруулах: Raspberry Pi.
Анхны төсөл
Энэхүү төслийн анхны эх сурвалжийг эндээс олж болно: https://old.reddit.com/r/raspberry_pi/comments/a0… Үүний гол утга нь reddit хэрэглэгч Produkt нь хоол хүнс, нүхний температурын мэдээллийг харьцангуй хямд үнээр дамжуулж чаддаг байсан явдал юм., зарах боломжтой утасгүй термометрийг Raspberry Pi -д (GPIO тээглүүртээ жижиг RF модулийг хавсаргасан байсан). Анхны төсөлд (дээр холбосон), Produkt өөрийн өгөгдлийг sqlite мэдээллийн санд хадгалж, орон нутгийн apache2 php вэбсайт дээр харуулдаг байв.
Энэхүү шийдэл нь энэ блогийн танилцуулгад дурдсан анхны асуудлыг аль хэдийн шийдсэн болно: та одоо вэб хөтөч ашиглан хоол хүнс, нүхнийхээ температурыг алсаас хянах боломжтой боллоо. Гэхдээ бид үүнийг өргөжүүлэхийг хүсч байвал яах вэ? Оруулах: GridDB.
Хангамж
Raspberry Pi4
SUNKEE 433Mhz Superheterodyne утасгүй хүлээн авагчийн модуль
Алхам 1: GridDB Web API & FluentD
Энэхүү төслийг хараад миний сэтгэл хөдлөлийн анхны давалгааны дараа миний функцийг хэрхэн өргөжүүлэх талаар бодож байсан. GridDB болон түүний Grafana залгаасыг ашигласнаар би хоол хүнс, нүхнийхээ мэдээллийг дүрслэн харуулахыг зорьсон. Үүнээс гадна би ямар ч гажигтай өгөгдлийн цэгийг хайж олохын тулд Графана тэмдэглэгээ хийхийг хүсч байна - ямар ч шарсан мах байж болохгүй!
Эхлэхийн тулд би анхны төслийн C кодыг ашиглан утасгүй термометрээс ирж буй өгөгдлийг уншиж, энэ өгөгдлийг GridDB сервердээ оруулах шаардлагатай болсон. Үүнийг ажиллуулахын тулд би Azure дээр CentOS виртуал машин ашиглан GridDB серверийг ажиллуулсан. Манай захын машинаас (Raspberry Pi) үүл сервер рүүгээ мэдээлэл хуваалцах хамгийн хялбар арга бол GridDB Web API -ээр дамжуулан дамжуулах явдал байв. Тиймээс, энэ vm дээр би GridDB -ийн WebAPI -ийг Fluentd болон дагалдах GridDB холбогчтой хамт суулгасан.
Үнэн хэрэгтээ үүл рүү өгөгдөл илгээхээс өмнө би BBQ Pi контейнерийнхээ үндсэн схемийг бий болгох хэрэгтэй болсон. Өгөгдлийн сан орж ирж байгаа нь маш энгийн: бидэнд хоёр температур мэдрэгч, нэг тогооны id, мэдээж цаг хугацааны тамга байдаг. Тиймээс бидний схем иймэрхүү харагдаж байна.
timeseries = gridstore.put_container ("bbqpi", [("цаг", griddb. GS_TYPE_TIMESTAMP), ("жигнэмэг", griddb. GS_TYPE_INT), ("шалгалт1", griddb. GS_TYPE_INT), ("шалгалт2", griddb. GS_TYPE_INT)], griddb. GS_TONT. ER
Энэ цагийн контейнерийг бий болгохын тулд би зүгээр л WebAPI (порт 8080) ашигласан:
curl -X POST -үндсэн -u админ: админ -H "Агуулгын төрөл: application/json" -d
'{"container_name": "bbqpi", "container_type": "TIME_SERIES", / "rowkey": үнэн, "багана": [{"нэр": "цаг", "төрөл": "TIMESTAMP"}, {"name": "cookid", "type": "INTEGER"}, {"name": "probe1", "type": "INTEGER"}, {"name": "probe2", "type": "INTEGER"}]} '\ https:// localhost: 8080/griddb/v2/defaultCluster/dbs/public/container
Контейнерийг бий болгосноор би бодит мэдээллийг манай контейнерт оруулахын тулд Fluentd (8888 порт) ашиглах шаардлагатай болсон. Энд зарим хуурамч өгөгдөл оруулах CURL тушаал байна:
curl -X POST -d 'json = {"date": "2020-01-01T12: 08: 21.112Z", "cookid": "1", "probe1": "150", "probe2": "140" } 'https:// localhost: 8888/griddb
Тэндээс би Пи манай нүхнээс өгөгдлийг уншиж байх үед (~ 12 секунд тутамд нэг удаа) HTTP POST хүсэлт илгээх анхны кодыг оруулах шаардлагатай болсон.
Анхаарах зүйл: энэ кодыг бичих нь С хэл нь хэр утга учиртай болохыг ойлгохыг надад заасан юм.
int postData (char цаг , int cookid, int probe1, int probe2, char url )
{CURL *curl; CURL кодын засвар; / * Цонхнуудад энэ нь winsock stuff -ийг эхлүүлэх болно */ curl_global_init (CURL_GLOBAL_ALL); char errbuf [CURL_ERROR_SIZE] = {0,}; char агент [1024] = {0,}; char json [1000]; snprintf (json, 200, "json = {" date / ": \"%s.112Z / ", \" cookid / ": \"%d / ", \" probe1 / ": \"%d / ", / "probe2 \": / "%d \"} ", цаг, cookid, probe1, probe2); / * буржгар бариул авах */ curl = curl_easy_init (); if (curl) { /* Эхлээд манай POST хүлээн авах гэж байгаа URL -г тохируулна уу. Энэ URL нь өгөгдлийг хүлээн авах ёстой зүйл бол https:// URL байж болно. */ snprintf (агент, sizeof agent, "libcurl/%s", curl_version_info (CURLVERSION_NOW)-> хувилбар); агент [sizeof agent - 1] = 0; curl_easy_setopt (curl, CURLOPT_USERAGENT, төлөөлөгч); curl_easy_setopt (curl, CURLOPT_URL, url); curl_easy_setopt (curl, CURLOPT_USERNAME, "админ"); curl_easy_setopt (curl, CURLOPT_PASSWORD, "админ"); curl_easy_setopt (curl, CURLOPT_VERBOSE, 1L); curl_easy_setopt (curl, CURLOPT_ERRORBUFFER, errbuf); curl_easy_setopt (curl, CURLOPT_POSTFIELDS, json); / * Хүсэлтийг биелүүл, res нь буцаах кодыг авах болно */ 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)); цэвэрлэх шаардлагатай; } цэвэрлэх: curl_easy_cleanup (curl); curl_global_cleanup (); буцаах 0; }}
Энэ функцийг бичсэнээр би sqlite өгөгдлийг байрлуулж байх үед үүнийг ажиллуулах шаардлагатай болсон.
хэрэв (сайн өгөгдөл == 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, callback, 0, & zErrMsg); if (rc! = SQLITE_OK) {printf ("SQL алдаа: %s / n", zErrMsg); } өөр {last_db_write = secs; } char url = "https://xx.xx.xx.xx: 8888/griddb"; postData (buff, cookID, probe1, probe2, url); }}
Таны өгөгдлийг сервер дээрээ оруулж байгаа эсэхийг шалгахын тулд та дараах тушаалыг ажиллуулж өгөгдлийн сангаа асууж, үр дүнг харах боломжтой.
curl -X POST -үндсэн -u админ: админ -H "Агуулгын төрөл: application/json" -d '{"хязгаар": 1000}' https:// localhost: 8080/griddb/v2/defaultCluster/dbs/ нийтийн/сав/bbqpi/мөр
Алхам 2: Графана
Кодыг бэлэн болгосноор одоо бид анхны вэб портал ашиглан "тогооч" ажиллуулахдаа температурын мэдээллээ нэгэн зэрэг GridDB сервер дээрээ хадгалах болно.
Дараагийн алхам бол Grafana ашиглан бидний өгөгдлийг төсөөлөх явдал юм. Үүнийг хийхийн тулд бид энэ блог дээрх мэдээллийг дагаж мөрдсөн болно: энд. Энэхүү хэрэгжүүлэлтийн нэг сайхан зүйл бол бидний өгөгдлийг сайхан график болгон харуулахад маш хялбар юм. Энэ нь бас тэмдэглэгээ нэмдэг.
Блог дээр хэлэлцсэн тэмдэглэгээ нь бидний хоол хүнс эсвэл нүхэнд ямар нэг зүйл буруу болсныг хянах боломжийг бидэнд олгодог. Миний хувьд би үхрийн махны богино хавирга хийж байсан. Тэдгээрийн тусламжтайгаар нүхний температур Фаренгейтийн 275 хэмээс хэтрэхийг би хүсээгүй. Хэрэв би үүнээс хэтэрсэн температурыг харсан бол би шарагчийг унтрааж, дулааныг дахин бууруулж болно.
Би мэдрэгчтэй ижил төстэй дүрмийг баримталдаг байсан бөгөөд хэрэв хоол хүнс нь Фаренгейтийн 203 градусын температуртай бол хавирга бэлэн болно. Та тогоочийн төгсгөлд байгаа ганц тайлбарыг эндээс харж болно.
Ерөнхийдөө тогооч надад ердөө 4 цаг орчим хугацаа зарцуулсан боловч хэрвээ би шарсан маханд илүү их цаг зарцуулах шаардлагатай хоол хийж байсан бол ийм тохиргоо үнэхээр гайхалтай байх болно (удаан үргэлжлэх утаа багатай гэж бодоорой ~ 12) цаг). Гэсэн хэдий ч, хэрэв энэ хэрэгсэл хялбархан харагддаг бол үнэ цэнэ нь гэдэгт би итгэдэг: хоол хүнснийхээ үр дүнг бүртгэж, өмнөх тогооч нартай харьцуулж үзэх нь цаг хугацаа өнгөрөх тусам таны шарсан мах аажмаар сайжирна гэсэн үг юм. т.
Алхам 3: Хоол хүнс
Энэ бол би анх удаа үхрийн богинохон хавирга хийсэн; амтлагч болгохын тулд би зүгээр л давс, хар чинжүү, сармис нунтаг хэрэглэсэн. Шатаагчтай холбоотой зарим асуудлууд эхэндээ жаахан хэт өндөр байсан ч хавирга нь үнэхээр гайхалтай гарч ирэв. Үүнийг үзээрэй:
Алхам 4: Дүгнэлт
Эцэст нь хоол үнэхээр гайхалтай болсон, мэдрэгчид, GridDB, Grafana нар бүгд концерт дээр маш сайн ажилласан бөгөөд бид эдгээр зүйлийг дараагийн удаа хэрхэн яаж хоол хийх талаар хэдэн найз нөхөддөө сэтгэгдэл төрүүлэхийг хүссэн үнэ цэнэтэй мэдээллийг олж авлаа.
Зөвлөмж болгож буй:
GPRS (SIM карт) өгөгдлийн холбоос бүхий цаг агаарын авсаархан мэдрэгч: 4 алхам
GPRS (SIM карт) бүхий авсаархан цаг агаарын мэдрэгч Мэдээллийн холбоос: Төслийн хураангуй Энэ нь BME280 температур/даралт/чийгшил мэдрэгч болон ATMega328P MCU дээр суурилсан батерейгаар ажилладаг цаг агаарын мэдрэгч юм. Энэ нь 3.6 V лити тионил АА гэсэн хоёр батерейгаар ажилладаг. Энэ нь маш бага унтлагын хэрэглээ бөгөөд 6 мкА байна. Энэ нь өгөгдлийг илгээдэг
Соматик - Бодит ертөнцөд зориулсан өгөгдлийн бээлий: 6 алхам (зурагтай)
Соматик-Бодит ертөнцийн өгөгдлийн бээлий: 4мм диаметртэй неодим цилиндр соронз 4мм диаметртэй неодим цилиндр соронз Энэ нь гарын тэмдэг, үсгийг орчуулах бүх тоног төхөөрөмжөөр тоноглогдсон
Эхлэгчдэд зориулсан Microsoft Access дээр харилцааны өгөгдлийн санг хэрхэн зохион бүтээх вэ: 17 алхам
Эхлэгчдэд зориулсан Microsoft Access дээр харилцааны өгөгдлийн санг хэрхэн зохион бүтээх вэ? Дараагийн заавар нь Microsoft Access дээр харилцааны өгөгдлийн санг хэрхэн зохион бүтээх талаар нарийвчлан тодорхойлсон болно. Энэхүү гарын авлага нь эхлээд хоёр (2) хүснэгтийг хэрхэн зөв холбохыг харуулах болно. Дараа нь би энэ шинэ харилцаанаас хэрхэн маягт үүсгэх талаар нарийвчлан тайлбарлах болно, ингэснээр хэрэглэгч мэдээлэл оруулах боломжтой болно
PfodApp, Android болон Arduino ашиглан мобайл өгөгдлийн энгийн бүртгэл: 5 алхам
PfodApp, Android болон Arduino ашиглан мобайл өгөгдлийн энгийн бүртгэл: Moblie өгөгдлийн бүртгэлийг pfodApp, таны Andriod гар утас, Arduino ашиглан хялбар болгосон. Андройд програмчлал шаардлагагүй. Андройд дээрх өгөгдлийг төлөвлөхийн тулд үүнийг дараа нь Android / Arduino / pfodApp ашиглан хялбархан алсаас өгөгдөл зурах талаар үзнэ үү
EASY Arduino OLED мэдрэгчийн өгөгдлийн дэлгэц: 4 алхам
EASY Arduino OLED Мэдрэгч Мэдээллийн Дэлгэц: Хэрэв та Arduino -тэй ажиллаж байсан бол хуучин мэдрэгчтэй Nokia 5110 LCD -ийг ашиглаж байхдаа эдгээр утаснуудыг холбох нь эмх замбараагүй, зай багатай болохыг та анзаарсан байх. Хэт олон тээглүүр.Мэдээж илүү дээр юм байна