فهرست مطالب:
تصویری: BBQ Pi (با تجسم داده!): 4 مرحله (همراه با تصاویر)
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:53
معرفی
کباب کردن معمولاً به روند آهسته استفاده از حرارت غیر مستقیم برای پختن گوشت های مورد علاقه شما اشاره دارد. اگرچه این روش پخت و پز بسیار محبوب است-به ویژه در ایالات متحده-اما این چیزی است که برخی ممکن است آن را یک نقطه ضعف جدی تلقی کنند: برای نظارت بر دمای گودال و غذای خود نیاز به ساعت ها توجه نیمه شفاف است. وارد کنید: Raspberry Pi.
پروژه اصلی
منبع اصلی این پروژه را می توانید در اینجا پیدا کنید: https://old.reddit.com/r/raspberry_pi/comments/a0… نکته اصلی این است که کاربر reddit Produkt قادر بود داده های دما و غذا را نسبتاً ارزان انتقال دهد ، دماسنج های بی سیم تجاری موجود برای رزبری پای (که به پین GPIO آن یک ماژول RF کوچک متصل شده بود). در پروژه اصلی (پیوند بالا) ، Produkt داده های خود را در پایگاه داده sqlite ذخیره می کرد و در وب سایت php apache2 میزبانی محلی نمایش داده می شد.
این راه حل مشکل اصلی را که در معرفی این وبلاگ به آن اشاره شده است ، حل می کند: اکنون می توانید با مرورگر وب ، دمای غذا و گودال خود را از راه دور کنترل کنید. اما اگر بخواهیم این موضوع را گسترش دهیم ، چطور؟ وارد کنید: GridDB
تدارکات
تمشک پی 4
ماژول گیرنده بی سیم SUNKEE 433 مگاهرتز Superheterodyne
مرحله 1: GridDB Web API و FluentD
با دیدن این پروژه ، اولین فکر من - پس از موج اولیه هیجان - به راه هایی برای افزایش عملکرد فکر کردم. با استفاده از GridDB و افزونه Grafana آن ، من به دنبال تجسم داده های غذا و گودال خود بودم. فراتر از آن ، من آرزو داشتم که حاشیه نویسی Grafana را برای جستجوی هر گونه اطلاعات غیرعادی تنظیم کنم - نمی توانم گوشت سوخته داشته باشم!
برای شروع ، من باید از کد C پروژه اصلی برای خواندن داده های وارد شده از دماسنج بی سیم و ارسال این اطلاعات در سرور GridDB خود استفاده کنم. برای شروع به کار ، من یک سرور GridDB را در Azure با استفاده از ماشین مجازی CentOS چرخاندم. ساده ترین راه برای به اشتراک گذاشتن داده ها از دستگاه لبه ما (Raspberry Pi) به سرور ابری ما از طریق API وب GridDB بود. بنابراین ، در آن vm ، من WebAPI GridDB را به همراه 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)] گریدب
برای ایجاد این ظرف زمانی ، من به سادگی از WebAPI (پورت 8080) استفاده کردم:
curl -X POST -اصلی -u admin: admin -H "نوع محتوا: application/json" -d
'{"container_name": "bbqpi"، "container_type": "TIME_SERIES"، / "rowkey": true، "columns": [{"name": "time"، "type": "TIMESTAMP"}، {"name": "cookid"، "type": "INTEGER"}، {"name": "probe1"، "type": "INTEGER"}، {"name": "probe2"، "type": "INTEGER"}]} '\ https:// localhost: 8080/griddb/v2/defaultCluster/dbs/public/containers
با ایجاد ظرف ، باید از 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
از آنجا ، من باید کد اصلی را برای ارسال درخواست HTTP POST هر زمان که Pi ما در حال خواندن اطلاعات از گودال ما بود (حدود 12 ثانیه یک بار) ، اضافه کنم.
به عنوان یک نکته جانبی: نوشتن این کد به من یاد داد که چقدر می توان زبان C را واضح دانست:
int postData (زمان char ، int cookid ، int probe1 ، int probe2 ، char url )
{CURL *curl؛ CURLcode res؛ / * در ویندوز ، این باعث می شود چیزهای winock */ curl_global_init (CURL_GLOBAL_ALL) ؛ char errbuf [CURL_ERROR_SIZE] = {0،}؛ عامل شار [1024] = {0،}؛ char json [1000]؛ snprintf (json، 200، "json = {" date / ": \"٪ s.112Z / "، \" cookid / ": \"٪ d / "، \" probe1 / ": \"٪ d / " ، / "probe2 \": / "٪ d \"} "، time، cookid، probe1، probe2)؛ / * دستگیره حلقه را دریافت کنید */ curl = curl_easy_init ()؛ if (curl) { /* ابتدا نشانی وب موردنظر برای دریافت POST ما را تنظیم کنید. اگر این همان چیزی است که باید داده ها را دریافت کند ، این URL می تواند یک https:// URL باشد. */ snprintf (عامل ، اندازه عامل ، "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، "admin")؛ curl_easy_setopt (curl، CURLOPT_PASSWORD، "admin")؛ curl_easy_setopt (حلقه ، 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)) ؛ goto cleanup؛ } پاکسازی: curl_easy_cleanup (curl)؛ curl_global_cleanup ()؛ بازگشت 0 ؛ }}
با نوشتن این تابع ، من فقط باید آن را همزمان با ارسال داده sqlite اجرا کنم:
if (goodData == 1) {
if (last_db_write == 0 || (secs-last_db_write> = 10)) {snprintf (sql، 100، "INSERT INTO readions (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 = ثانیه؛ } char url = "https://xx.xx.xx.xx: 8888/griddb"؛ postData (buff، cookID، probe1، probe2، url)؛ }}
برای اطمینان از اینکه داده های شما در واقع در سرور شما قرار داده شده است ، می توانید دستور زیر را برای جستجوی پایگاه داده خود و مشاهده نتایج اجرا کنید:
curl -X POST -پایه -u admin: admin -H "Content -type: application/json" -d '{"limit": 1000}' https:// localhost: 8080/griddb/v2/defaultCluster/dbs/ public/containers/bbqpi/row
مرحله 2: گرافانا
با در دست داشتن کد ، اکنون وقتی از پورتال اصلی وب برای شروع "آشپزی" استفاده می کنیم ، همزمان داده های دما را در سرور GridDB ذخیره می کنیم.
مرحله بعدی تجسم داده های ما با استفاده از Grafana خواهد بود. برای انجام این کار ، ما اطلاعات این وبلاگ را دنبال کردیم: اینجا. نکته خوب در مورد این پیاده سازی این است که مشاهده داده های ما در یک نمودار زیبا بسیار آسان است. همچنین حاشیه نویسی اضافه می کند.
حاشیه نویسی هایی که در وبلاگ مورد بحث قرار گرفته است ، نظارت بر مواردی را که در غذا یا خود گودال اتفاق می افتد برای ما بسیار آسان می کند. در مورد من ، من دنده های کوتاه گوشت گاو می پختم. با این موارد ، من نمی خواستم دمای گودال بیش از 275 درجه فارنهایت افزایش یابد. اگر دیدم دما فراتر از این است ، می توانم مشعل را خاموش کنم و اجازه دهم گرما دوباره فرو رود:
من یک قانون مشابه برای سنسور داشتم که خود غذا را کنترل می کرد: اگر دمای غذا به 203 درجه فارنهایت برسد ، دنده ها آماده هستند. شما می توانید حاشیه نویسی تنها در پایان آشپز را اینجا ببینید:
درمجموع ، آشپز فقط 4 ساعت پوند از من گرفت ، اما اگر من چیزی را بپزم که به زمان بیشتری در کباب پز نیاز داشته باشد ، این نوع تنظیم واقعا عالی خواهد بود (به دود کم آهسته 12 پوند فکر کنید) ساعت ها). با وجود این ، من معتقدم اگر این ابزار به راحتی آشکار شود: این که بتوانید نتایج غذاهای خود را ثبت کرده و سپس آن را با آشپزهای قبلی مقایسه کنید ، به این معنی است که BBQing شما به تدریج بهتر می شود ، زیرا می توانید از داده ها برای دیدن کارکرد و کارکرد بهتر استفاده کنید. 't
مرحله 3: غذا
این اولین بار بود که من دنده های کوتاه گوشت گاو درست کردم. برای چاشنی ، من به سادگی از نمک ، فلفل سیاه و پودر سیر استفاده کردم. علیرغم برخی مشکلات مربوط به بالا رفتن مشعل برای کمی در آنجا ، دنده ها فوق العاده بیرون آمد. لطفا یک نگاه بنداز:
مرحله 4: نتیجه گیری
در پایان ، غذا فوق العاده بیرون آمد ، سنسورها ، GridDB و Grafana همگی به زیبایی در کنسرت کار کردند ، و ما اطلاعات ارزشمندی در مورد نحوه پخت دوباره این چیزها برای دفعه بعد که می خواهیم برخی از دوستان را تحت تأثیر قرار دهیم ، به دست آوردیم.
توصیه شده:
تجسم داده ها از Magicbit در AWS: 5 مرحله
تجسم داده ها از Magicbit در AWS: داده های جمع آوری شده از حسگرهای متصل به Magicbit در هسته AWS IOT از طریق MQTT منتشر می شود تا به صورت گرافیکی در زمان واقعی تجسم شود. ما در این پروژه که بر اساس ESP32 طراحی شده است ، از magicbit به عنوان تابلوی توسعه استفاده می کنیم. بنابراین هر ESP32 d
اینترنت اشیا: تجسم داده های حسگر نور با استفاده از Node-RED: 7 مرحله
اینترنت اشیا: تجسم داده های سنسور نور با استفاده از Node-RED: در این قسمت آموزشی ، نحوه ایجاد حسگر متصل به اینترنت را خواهید آموخت! من از یک سنسور نور محیط (TI OPT3001) برای این نسخه ی نمایشی استفاده می کنم ، اما هر سنسور دلخواه شما (دما ، رطوبت ، پتانسیومتر و غیره) کار می کند. مقادیر سنسور
سیستم جمع آوری داده ها و تجسم داده ها برای دوچرخه مسابقه برقی MotoStudent: 23 مرحله
سیستم جمع آوری داده و تجسم داده برای دوچرخه مسابقه ای برقی MotoStudent: سیستم جمع آوری داده ها مجموعه ای از سخت افزارها و نرم افزارها است که به منظور جمع آوری داده ها از سنسورهای خارجی ، ذخیره و پردازش آن بعداً به کار می روند تا به صورت گرافیکی تجسم و تجزیه و تحلیل شوند. به مهندسان اجازه می دهد تا
تجسم داده های حمل و نقل با Google Map: 6 مرحله
تجسم داده های حمل و نقل با Google Map: ما معمولاً می خواهیم داده های مختلف را در طول دوچرخه سواری ضبط کنیم ، این بار از Wio LTE جدید برای ردیابی آنها استفاده کردیم
تجسم داده های حسگر بی سیم با استفاده از نمودارهای Google: 6 مرحله
تجسم داده های حسگر بی سیم با استفاده از نمودارهای Google: تجزیه و تحلیل پیش بینی ماشین ها به منظور به حداقل رساندن زمان خرابی دستگاه بسیار ضروری است. بررسی منظم به افزایش زمان کارکرد دستگاه کمک می کند و به نوبه خود تحمل خطا را افزایش می دهد. سنسور ارتعاش و دما بی سیم