Мазмұны:
Бейне: BBQ Pi (деректерді визуализациямен!): 4 қадам (суреттермен)
2024 Автор: John Day | [email protected]. Соңғы өзгертілген: 2024-01-30 10:23
Кіріспе
Барбекю әдетте сүйікті етіңізді дайындау үшін жанама жылуды пайдаланудың баяу процесін білдіреді. Пісірудің бұл әдісі өте танымал болғанымен-әсіресе АҚШ-та-оның кейбіреулері өте әлсіз деп санайтын нәрсеге ие: ол шұңқыр мен тағамның температурасын бақылап отыру үшін бірнеше сағаттық мөлдір көңіл бөлуді қажет етеді. Енгізіңіз: Raspberry Pi.
Түпнұсқа жоба
Бұл жобаның бастапқы дереккөзін мына жерден табуға болады: https://old.reddit.com/r/raspberry_pi/comments/a0… Оның мәні - reddit қолданушысы Produkt азық -түлік пен шұңқырдың температурасы туралы деректерді салыстырмалы түрде арзан жеткізе алды., Raspberry Pi -ге сатылатын сымсыз термометрлер (GPIO түйреуіштеріне шағын радиожиілікті модуль бекітілген). Бастапқы жобада (жоғарыда көрсетілген) Produkt өзінің деректерін sqlite мәліметтер базасында сақтап, жергілікті Apache2 php веб -сайтында көрсетеді.
Бұл шешім осы блогтың кіріспесінде айтылған бастапқы мәселені шешеді: енді сіз веб -шолғыштың көмегімен тамақ пен шұңқырдың температурасын қашықтықтан бақылай аласыз. Бірақ егер біз оны кеңейткіміз келсе ше? Енгізіңіз: GridDB.
Жабдықтар
Таңқурай Pi4
SUNKEE 433Mhz Superheterodyne сымсыз қабылдағыш модулі
1 -қадам: GridDB Web API & FluentD
Бұл жобаны көргенде, менің алғашқы ой - толқудың алғашқы толқынынан кейін - мен функционалдылықты кеңейту жолдары туралы ойладым. GridDB және оның Grafana плагинін қолдана отырып, мен тамақ пен шұңқыр туралы деректерді визуализациялауға тырыстым. Бұдан басқа, мен кез келген аномальды деректер нүктелерін іздеу үшін Grafana аннотацияларын орнатқым келді - ешқандай күйдірілген ет болмайды!
Бастау үшін, мен сымсыз термометрден келетін деректерді оқу үшін бастапқы жобадағы С кодын пайдалануым керек және сол мәліметтерді GridDB серверіне жіберуім керек болды. Мұны іске қосу үшін мен CentOS виртуалды машинасын пайдаланып Azure -де GridDB серверін аштым. Біздің компьютерден (Raspberry Pi) бұлтты серверге деректерді бөлісудің ең оңай жолы GridDB Web API арқылы болды. Сонымен, бұл вмде мен GridDB WebAPI -ді Fluentd және ілеспе GridDB қосқышымен бірге орнаттым.
Деректерді бұлтқа жібермес бұрын, мен BBQ Pi контейнерінің негізгі схемасын жасауым керек болды. Деректер жиынтығы өте қарапайым: бізде екі температура сенсоры бар, бір пісіру идентификаторы және, әрине, уақыт белгісі. Сонымен, біздің схемамыз келесідей:
Timeseries = gridstore.put_container («bbqpi», [(«уақыт», griddb. GS_TYPE_TIMESTAMP), («cookid», griddb. GS_TYPE_INT), («probe1», griddb. GS_TYPE_INT), («probe2», griddb. GS_TYPE_INT)], griddb. GS_TONT
Уақытша контейнерді жасау үшін мен жай ғана WebAPI (8080 порты) қолдандым:
curl -X POST --basic -u admin: admin -H «Content -type: application/json» -d
'{«container_name»: «bbqpi», «container_type»: «TIME_SERIES», / «rowkey»: true, «бағандар»: [{«аты»: «уақыт», «түрі»: «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
Сол жерден маған Pi біздің шұңқырдағы деректерді оқыған кезде (шамамен 12 секундта бір рет) HTTP POST сұрауын жіберу үшін бастапқы кодты қосу керек болды.
Ескерту ретінде: бұл кодты жазу маған С тілінің қаншалықты түсінікті екенін түсінуге үйретті:
int postData (char time , int cookid, int probe1, int probe2, char url )
{CURL *бұйралау; CURLcode res; / * Терезелерде бұл winsock файлдарын бастайды */ 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, prob2)); / * бұйралау тұтқасын алу */ 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, «admin»); 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_global_cleanup (); қайтару 0; }}
Бұл функция жазылған кезде, мен оны sqlite деректері орналастырылған кезде бір уақытта іске қосуым керек болды:
егер (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, prob2)); 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 --basic -u admin: admin -H «Content -type: application/json» -d '{«limit»: 1000}' https:// localhost: 8080/griddb/v2/defaultCluster/dbs/ қоғамдық/контейнерлер/барбекю/жолдар
2 -қадам: Графана
Код бар болса, енді біз «пісіруді» бастау үшін бастапқы веб -порталды қолданған кезде, біз бір мезгілде температура туралы мәліметтерді GridDB серверінде сақтайтын боламыз.
Келесі қадам - біздің деректерімізді Grafana көмегімен визуализациялау. Мұны істеу үшін біз осы блогтағы ақпаратты қадағаладық: мұнда. Бұл іске асырудың жағымды жағы - біздің деректерді жақсы графикке салу өте оңай. Ол сонымен қатар аннотациялар қосады.
Блогта талқыланған аннотациялар біздің тамақтан немесе шұңқырдың өзінен бірдеңе дұрыс болмай қалса, бақылауды жеңілдетеді. Менің жағдайда, мен сиыр етінің қысқа қабырғасын дайындайтынмын. Мен олармен шұңқырдағы температураның Фаренгейт бойынша 275 градустан жоғары көтерілуін қаламадым. Егер мен температураның одан жоғары екенін көрген болсам, мен оттықты өшіріп, жылудың қайтадан төмен түсуіне мүмкіндік берер едім:
Менде сенсорға ұқсас ереже бар, ол тағамның өзін қадағалайды: егер тағам ішкі температураға 203 градус фаренгейтке жетсе, қабырғалар дайын болады. Сіз аспазшының соңында жалғыз аннотацияны көре аласыз:
Тұтастай алғанда, аспазшы маған шамамен 4 сағатты құрады, бірақ егер мен грильде одан да көп уақыт қажет болатын нәрсе пісіретін болсам, мұндай қондырғы өте жақсы болар еді. сағат). Осыған қарамастан, егер бұл құрал оңай көрінетін болса, мен құндылыққа сенемін: сіздің тағамдарыңыздың нәтижелерін тіркеп, оны бұрынғы аспазшылармен салыстыра білу сіздің барбекюіңіз уақыт өте келе жақсарады дегенді білдіреді, өйткені сіз деректерді пайдаланып, не жұмыс істейтінін білесіз. т.
3 -қадам: Тамақ
Бұл мен бірінші рет сиыр етінің қысқа қабырғасын жасадым; дәмдеу үшін мен тұз, қара бұрыш және сарымсақ ұнтағын қолдандым. Бастапқыда оттықтың тым жоғары көтерілуіне байланысты кейбір мәселелерге қарамастан, қабырғалар керемет шықты. Қарап көріңіз:
4 -қадам: Қорытынды
Ақыр соңында, тағам керемет болды, сенсорлар, GridDB және Grafana концертте өте жақсы жұмыс жасады, және біз келесіде оларды қалай дайындау керектігі туралы құнды мәліметтер алдық, біз кейбір достарды таң қалдырғымыз келеді.
Ұсынылған:
ESP32 Xiaomi Hack - Деректерді сымсыз алу: 6 қадам (суреттермен)
ESP32 Xiaomi Hack - Деректерді сымсыз алу: Құрметті достар, басқа нұсқаулыққа қош келдіңіз! Бүгін біз Xiaomi температура мен ылғалдылық мониторы ESP32 тақтасының Bluetooth функциясын қолдана отырып жіберетін деректерді алуды үйренеміз. Көріп отырғаныңыздай, мен ESP32 тақтасын қолданамын
Деректерді Arduino -дан Excel -ге жіберу (және оны салу): 3 қадам (суреттермен)
Деректерді Arduino -дан Excel -ге жіберу (және оны салу): Мен Arduino сенсорының нақты уақыт режимінде оқылуын жоспарлау жолын кеңінен іздедім. Тек қана сюжет емес, сонымен қатар эксперименттер мен түзетулер үшін деректерді көрсетіп, сақтайды. Мен тапқан ең қарапайым шешім excel пайдалану болды, бірақ
Деректерді тіркеу анемометрі: 11 қадам (суреттермен)
Деректерді тіркейтін анемометр: Мен деректерді жинауды және талдауды жақсы көремін. Мен сондай -ақ электронды гаджеттер жасағанды жақсы көремін. Бір жыл бұрын мен Arduino өнімдерін тапқан кезде мен бірден: «Мен экологиялық деректерді жинағым келеді» деп ойладым. Бұл Портлендте желді күн болды, OR, сондықтан мен
MotoStudent электрлік велосипедіне арналған деректерді алу және деректерді визуализациялау жүйесі: 23 қадам
MotoStudent электрлік велосипедіне арналған деректерді жинау және деректерді визуализациялау жүйесі: Деректерді жинау жүйесі - бұл сыртқы датчиктерден деректерді жинау, сақтау және өңдеу үшін оны бірге өңдейтін аппараттық және бағдарламалық қамтамасыз етудің жиынтығы, оны графикалық түрде көруге және талдауға болады. инженерлерге мүмкіндік береді
Дыбыстық визуализациямен, сенсорлық түймелермен және NFC бар Bluetooth жұмыс үстелі динамигі: 24 қадам (суреттермен)
Аудио визуализациямен, сенсорлық түймелермен және NFC бар Bluetooth үстелінің динамигі: Сәлеметсіз бе! Бұл нұсқаулықта мен сенсорлық түймелер мен NFC арқылы таңғажайып аудио визуализациясы бар Bluetooth үстелінің динамигін қалай жасағанымды көрсетемін. Бір түрту арқылы NFC қосылған құрылғылармен оңай жұптастыруға болады. Физикалық түйме жоқ