Мазмуну:
Video: BBQ Pi (Маалыматты визуалдаштыруу менен!): 4 кадам (Сүрөттөр менен)
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:38
Киришүү
Барбекю көбүнчө сүйүктүү эттериңизди бышыруу үчүн кыйыр жылуулукту колдонуунун жай процессин билдирет. Бул бышыруу ыкмасы абдан популярдуу болгону менен-айрыкча АКШда-кээ бирлери олуттуу алсыздык деп эсептеген нерсеге ээ: ал чуңкуруңуздун жана тамагыңыздын температурасын көзөмөлдөө үчүн жарым сааттык көңүл бурууну талап кылат. Кирүү: 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 Wireless Receiver Module
1 -кадам: GridDB Web API & FluentD
Бул долбоорду көргөндө, биринчи толкундануумдан кийин - функционалды кеңейтүү жолдору жөнүндө ойлондум. GridDB жана анын Grafana плагинин колдонуу менен, мен тамак -ашымдын маалыматын элестетүүгө аракет кылдым. Мындан тышкары, мен Grafana аннотацияларын орнотуп, аномалдуу маалымат пункттарын издегим келди - эч кандай куурулган эт болушу мүмкүн эмес!
Баштоо үчүн, мен зымсыз термометрден келген маалыматтарды окуп, ошол маалыматты GridDB сервериме жайгаштыруу үчүн баштапкы долбоордун С кодун колдонушум керек болчу. Муну ишке киргизүү үчүн мен Azureде CentOS виртуалдык машинасын колдонуп GridDB Серверин ачтым. Маалыматты биздин булут серверибизге бөлүшүүнүн эң оңой жолу GridDB Web API аркылуу болду. Ошентип, ошол вмде мен Fluentd жана аны коштогон GridDB туташтыргычы менен бирге GridDBдин WebAPIин орноттум.
Чындыгында булутка чейин маалыматтарды жөнөтүүдөн мурун, мен BBQ Pi контейнеримдин негизги схемасын түзүшүм керек болчу. Келип жаткан маалымат базасы өтө жөнөкөй: бизде эки температура сенсору, бир ашпозчу идентификатору жана, албетте, убакыт белгиси бар. Ошентип, биздин схема мындай көрүнөт:
timeseries = gridstore.put_container ("bbqpi", [("убакыт", griddb. GS_TYPE_TIMESTAMP), ("кукид", griddb. GS_TYPE_INT), ("probe1", griddb. GS_TYPE_INT), ("probe2", griddb. GS_TYPE_INT)], griddb. GS_TIME
Бул контейнерди түзүү үчүн мен жөн гана WebAPI (8080 порт) колдондум:
curl -X POST -негизи -u администратор: администратор -H "Мазмун түрү: application/json" -d
'{"container_name": "bbqpi", "container_type": "TIME_SERIES", / "rowkey": true, "ustuns": [{"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
Контейнер түзүлгөндө, мен контейнерге чыныгы маалыматтарды жайгаштыруу үчүн Fluentd (8888 порт) колдонушум керек болчу. Бул жерде кээ бир жасалма маалыматтарды жайгаштыруучу CURL буйругу:
curl -X POST -d 'json = {"дата": "2020-01-01T12: 08: 21.112Z", "cookid": "1", "probe1": "150", "probe2": "140" } 'https:// localhost: 8888/griddb
Ал жерден, биздин Пи биздин чуңкурдагы маалыматтарды окуп жатканда (болжол менен бир жолу ~ 12 секундда) HTTP POST Сурамын жөнөтүү үчүн баштапкы кодду кошушум керек болчу.
Кошумча эскертүү катары: бул кодду жазуу мага C тилинин канчалык түшүнүктүү экенин түшүнүүгө үйрөттү:
int postData (char time , int cookid, int probe1, int probe2, char url )
{CURL *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, probe2); / * curl туткасын алуу */ curl = curl_easy_init (); if (curl) { /* Адегенде биздин ПОСТту ала турган URLди коюңуз. Бул URL ошондой эле https:// URL болушу мүмкүн, эгерде бул маалыматты алышы керек болсо. */ snprintf (агент, sizeof агент, "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); curl_global_cleanup (); return 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, probe2); printf ("%s / n", sql); rc = sqlite3_exec (db, sql, callback, 0, & zErrMsg); if (rc! = SQLITE_OK) {printf ("SQL катасы: %s / n", zErrMsg); } else {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 саатка жакын убакытты талап кылган, бирок мен грильде дагы көп убакытты талап кылган нерсени бышырсам, мындай орнотуу чындап эле жакшы болмок (~ жай созулган түтүн жөнүндө ойлон ~ 12 саат). Ошого карабастан, мен бул курал оңой эле көрүнүп турса, анын маанисине ишенем: тамак -аштарыңыздын жыйынтыктарын жазып, анан аны мурунку ашпозчулар менен салыштыра алуу сиздин барбекюңуз убакыттын өтүшү менен акырындык менен жакшыра баштайт, анткени сиз маалыматты колдоно аласыз, эмне иштейт жана эмне жок. 'т.
3 -кадам: Тамак
Бул мен биринчи жолу уйдун кыска кабыргасын жасадым; татымал үчүн мен туз, кара мурч жана сарымсак порошогун колдондум. Күйгүчтүн башында бир аз болсо да өтө бийик болуп кеткенине карабастан, кабыргалар фантастикалык болуп чыкты. Сураныч, карап көрүңүз:
4 -кадам: Жыйынтык
Акыр -аягы, тамак сонун чыкты, сенсорлор, GridDB жана Grafana баары сонун концертте иштешти, жана биз бул нерселерди кийинки жолу кантип бышыруу боюнча баалуу маалыматтарды алдык, биз кээ бир досторду таң калтыргыбыз келет.
Сунушталууда:
Өз алдынча маалыматты камтыган анемометр: 11 кадам (сүрөттөр менен)
Өз алдынча маалыматты камтыган анемометр: Мен маалыматтарды чогултууну жана талдоону жакшы көрөм. Мен ошондой эле электрондук гаджеттерди курууну жакшы көрөм. Бир жыл мурун мен Arduino өнүмдөрүн ачканда, мен дароо эле: "Мен экологиялык маалыматтарды чогулткум келет" деп ойлогом. Бул Портлендде, ЖЕ шамалдуу күн болду, ошондуктан мен
Infinityon XMC4700 RelaxKit, Infineon DPS422 жана AWSти колдонуу менен барометрдик басым менен температураны визуалдаштыруу: 8 кадам
Infineon XMC4700 RelaxKit, Infineon DPS422 жана AWSти колдонуу менен барометрдик басымды жана температураны элестетүү: Infineon DPS 422ди колдонуу менен барометрдик басым менен температураны тартуу үчүн жөнөкөй проект. Бул бир мезгил ичинде басым менен температураны көзөмөлдөө үчүн олдоксон болуп калат. Бул жерде аналитика сүрөттө, өзгөрүүлөр жөнүндө түшүнүк пайда болот
Google Картасы менен Транспорттук маалыматтарды визуалдаштыруу: 6 кадам
Google Картасы менен Транспорттук маалыматтарды визуалдаштыруу: Биз, адатта, велосипед тебүү учурунда ар кандай маалыматтарды жазгыбыз келет, бул жолу биз аларды көзөмөлдөө үчүн жаңы Wio LTE колдондук
Аудио визуалдаштыруу, тийүү баскычтары жана NFC менен Bluetooth үстөл спикери: 24 кадам (сүрөттөр менен)
Аудио визуалдаштыруу, тийүү баскычтары жана NFC менен Bluetooth столунун Bluetooth спикери. Саламатсызбы! Бул көрсөтмөлөрдө мен сенсордук баскычтар жана NFC менен укмуштуудай Аудио визуалдаштыруусу бар бул Desk Bluetooth спикерин кантип жасаганымды көрсөтөм. Бир чыкылдатуу менен NFC иштетилген түзмөктөр менен оңой жупташууга болот. Физикалык баскыч жок
Аудио визуалдаштыруу, экилик саат жана FM кабыл алгыч менен иштөө столунун күчөткүчү: 8 кадам (сүрөттөр менен)
Үстөл күчөткүчү Аудио визуалдаштыруу, бинардык саат жана FM кабыл алгыч: Мен күчөткүчтөрдү жакшы көрөм жана бүгүн мен аз кубаттуу стол күчөткүчүм менен бөлүшөм. Мен иштеп чыккан күчөткүч кызыктуу өзгөчөлүктөргө ээ. Ал бирдиктүү бинардык саатка ээ жана убакытты жана датаны бере алат жана аудио деп аталган аудиону элестете алат