بلوتوث یک فناوری ارتباطی بیسیم کوتاهبرد است که از سال ۱۹۹۴ به عنوان جایگزینی برای کابلهای داده معرفی شد و امروزه به یکی از پرکاربردترین پروتکلهای ارتباطی در دستگاههای هوشمند تبدیل شده است. بلوتوث امکان برقراری ارتباط بین دستگاهها را بدون نیاز به زیرساخت پیچیده فراهم میکند و به دلیل مصرف انرژی پایین و پیادهسازی ساده، جایگاه ویژهای در پروژههای اینترنت اشیا (IoT) یافته است. در پروژههای IoT، بلوتوث بهویژه در کاربردهایی مانند حسگرهای پوشیدنی، گجتهای خانگی هوشمند، تجهیزات پزشکی قابلحمل و سیستمهای ردیابی استفاده میشود. پروتکلهایی مانند Bluetooth Low Energy (BLE) امکان ارسال داده با مصرف انرژی بسیار پایین را فراهم میکنند که برای دستگاههای باتریمحور ایدهآل است. به طور خلاصه دلایل استفاده از بلوتوث در IoT به شرح زیر است:
⚡مصرف انرژی کم: نسخههای جدید مانند BLE بهطور خاص برای کاربردهای IoT طراحی شدهاند و عمر باتری دستگاهها را بهطور قابلتوجهی افزایش میدهند.
⚡هزینه پیادهسازی پایین: ماژولهای بلوتوث مقرونبهصرفه هستند و نیاز به زیرساخت پیچیده ندارند.
⚡سادگی اتصال و جفتسازی: راهاندازی و اتصال دستگاهها با بلوتوث سریع و کاربرپسند است.
⚡پشتیبانی گسترده: اکثر گوشیهای هوشمند، تبلتها و لپتاپها از بلوتوث پشتیبانی میکنند و این امر یکپارچگی با سایر سیستمها را آسان میکند.
⚡امنیت نسبی: با استفاده از رمزگذاری اطلاعات میتواند امنیت نسبی برای ما فراهم کند
بلوتوث بهویژه در نسخههای جدید مانند Bluetooth Low Energy (BLE) طوری طراحی شده که مصرف انرژی را به حداقل برساند؛ بنابراین دستگاههای کوچک و قابلحمل مثل گجتهای پوشیدنی یا حسگرهای محیطی میتوانند مدتها بدون نیاز به شارژ مجدد کار کنند. از طرفی هزینه پایین ماژولهای بلوتوث و عدم نیاز به زیرساخت شبکه پیچیده باعث میشود پیادهسازی این فناوری در پروژههای IoT مقرونبهصرفه باشد. برای مثال، برای ساخت یک ردیاب دمای هوشمند خانگی، کافی است یک ماژول بلوتوث کوچک را روی برد نصب کنید تا دادههای حسگر بدون هیچ سیمکشی اضافی و از طریق بلوتوث به گوشی همراه منتقل شود.
سادگی در اتصال و جفتسازی هم یکی دیگر از نقاط قوت بلوتوث است؛ کاربران میتوانند دستگاههای IoT خود را بهسرعت به گوشی یا لپتاپ متصل کنند و نیازی به تنظیمات دشوار ندارند. این موضوع با توجه به پشتیبانی گسترده بلوتوث در اغلب گوشیهای هوشمند و تجهیزات همراه، یکپارچگی با سایر سیستمها را بسیار راحت کرده است.
همچنین برد عملیاتی بلوتوث که معمولاً حدود ۱۰ متر است، برای بیشتر کاربردهای خانگی و محیطی کافی به نظر میرسد و در نسخههای BLE حتی میتواند بیشتر هم باشد. امنیت نسبی با رمزگذاری ارتباطات، مقیاسپذیری و امکان اتصال چندین دستگاه بهطور همزمان، از دیگر ویژگیهایی است که بلوتوث را به انتخابی مطمئن برای انتقال دادههای کمحجم و بلادرنگ در پروژههای IoT تبدیل میکند. به همین دلیل امروزه بلوتوث را میتوان در انواع کاربردها مشاهده کرد؛ از مچبندهای ورزشی و سیستمهای روشنایی هوشمند گرفته تا تجهیزات پزشکی و حسگرهای صنعتی. این ویژگیها، بلوتوث را به پلی ساده، کمهزینه و کممصرف برای اتصال دنیای واقعی به دنیای دیجیتال در اینترنت اشیا تبدیل کردهاند.
برای استفاده از بلوتوث در مود (Serial Port Profile) از دایرکتوری (/components/ql-application/init/ql_init.c) باید تابع زیر را از حالت کامنت خارج کنید.
1 2 3 | #ifdef QL_APP_FEATURE_BT_SPP ql_bt_spp_demo_init(); #endif |
تابع مهمی که در کد وجود دارد تابع ql_bt_spp_event است که اتصال بلوتوث را مدیریت میکند. این تابع در تابع اصلی به طور مداوم در یک لوپ بینهایت صدا زده میشود.
1 2 3 4 5 6 7 8 | while(1) { ret = ql_bt_spp_event(); if (ret != QL_BT_SUCCESS) { break; } } |
در این تابع (ql_bt_spp_event) چند حالت مختلف وجود دارد: حالت اول QUEC_BT_START_STATUS_IND که مربوط به راه اندازی بلوتوث است. بلوتوث در چهار مود مختلف قابل استفاده است که در اینجا از مود (QL_BT_PAGE_AND_INQUIRY_ENABLE) استفاده میکنیم که در این مود قابلیت مشاهده و اتصال بلوتوث فعال است.
ضمنا شما میتوانید در فایل (bt_demo.c) در استراکچر (ql_bt_ble_local_name_s bt_local_name ) اسم بلوتوث خود را تغییر دهید سپس این تابع (ql_bt_demo_set_local_name) نامی که برای بلوتوث خود انتخاب کردید را تنظیم میکند. تابع دیگری به نام (ql_classic_bt_start_inquiry) وجود دارد که نوع سرویس دهی بلوتوث را مشخص میکند. دستگاه ما از چهارده مدل پروفایل مختلف پشتیبانی میکند که در اینجا ما روی مود (QL_BT_SERVICE_ALL) قرار میدهیم.
حالت دوم QUEC_BT_BLE_ERROR_IND و حالت سوم QUEC_BT_BLE_RESET_IND برای زمانی است که مشکلی پیش آمده و باعث متوقف شدن فرایند میشوند. حالت چهارم (QUEC_BT_INQUIRY_IND) و پنجم (QUEC_BT_INQUIRY_END_IND) برای نمایش جزییات دستگاه متصل شده و وضعیت آن است. حالت ششم تا آخر مربوط به QUEC_BT_SPP است که در حال بررسی آن هستیم. لیست پروفایلهای بلوتوث که در ابتدا اشاره کردیم به شکل زیر است:
QL_BT_SERVICE_HANDSET | هدست (HSP): نسخه سادهتر از HFP، فقط انتقال صدای ورودی/خروجی. | هدست بلوتوث تکگوش برای تماس. |
QL_BT_SERVICE_OPP | Object Push Profile: ارسال فایل (عکس، مخاطب و…) بین دو دستگاه. | ارسال عکس از گوشی به گوشی دیگر با بلوتوث. |
QL_BT_SERVICE_FTP | File Transfer Profile: دسترسی به فایلهای دستگاه از راه دور. | مدیریت فایلهای حافظه موبایل از لپتاپ. |
QL_BT_SERVICE_A2DP | Advanced Audio Distribution Profile: پخش صدای استریو باکیفیت به سمت گیرنده. | گوش دادن به موزیک از گوشی روی اسپیکر بلوتوث. |
QL_BT_SERVICE_AVRCP | Audio/Video Remote Control Profile: کنترل از راه دور پخش چندرسانهای. | کنترل موزیک پلیر گوشی با دکمههای هندزفری. |
QL_BT_SERVICE_SPP | Serial Port Profile: ارتباط سریال شبیه RS232 برای دادههای سفارشی. | اتصال ماژول بلوتوث به MCU برای تبادل دیتا. |
QL_BT_SERVICE_A2DP_SRC | A2DP Source: نقش فرستندهی A2DP. | موبایل به عنوان منبع پخش موزیک برای هدفون. |
QL_BT_SERVICE_AVRCP_TG | AVRCP Target: نقش دریافت فرمان از کنترل از راه دور. | گوشی فرمانهای هدست را برای کنترل موزیک میپذیرد. |
QL_BT_SERVICE_MAP_SERVER | Message Access Profile Server: اشتراکگذاری پیامکها بین دستگاهها. | خودرو پیامکهای دریافتی گوشی را میخواند. |
QL_BT_SERVICE_PBAP_SERVER | Phone Book Access Profile Server: اشتراکگذاری دفترچه تلفن. | نمایش مخاطبین گوشی روی صفحه نمایش خودرو. |
QL_BT_SERVICE_HANDFREE_GATEWAY | Gateway برای HFP: مثل یک پل برای تماس هندزفری. | گوشی بهعنوان درگاه تماس برای هندزفری خودرو. |
QL_BT_SERVICE_HEADSET_GATEWAY | Gateway برای HSP: نسخه سادهتر گیتوی تماس. | گوشی بهعنوان گیتوی هدست ساده تکگوش. |
QL_BT_SERVICE_BLE_HID | BLE Human Interface Device: اتصال دستگاههای ورودی کممصرف مثل کیبورد و موس. | موس یا کیبورد بلوتوث به تبلت وصل میشود. |
این لیست نشان دهنده قابلیتهای مختلف بلوتوث ماژول است.
من برای دیدن داده های (لاگ) برنامه از UART استفاده میکنم که آموزش آن در قسمتهای قبل وجود دارد. پس از اینکه کد را کامپایل و نصب کنید (به روشی که در آموزشهای قبل مشاهده کردید) و به دستگاه متصل شوید خروجی مانند زیر خواهید داشت.
برای فعال کردن بلوتوث در مود (HFP) کد زیر را در دایرکتوری (/components/ql-application/init/ql_init.c) از حالت کامن خارج کنید.
1 2 3 | #ifdef QL_APP_FEATURE_BT_HFP ql_bt_hfp_demo_init(); #endif |
بعد از کامپایل و نصب برنامه و اتصال ماژول به تلفن همراه قادر خواهید بود تماس برقرار کنید و خروجی مانند زیر خواهید داشت.
در پروژههای اینترنت اشیاء (IoT)، ذخیرهسازی دادهها یکی از نیازهای اساسی محسوب میشود؛ چرا که دستگاههای IoT اغلب وظیفه جمعآوری حجم زیادی از دادههای حسگرها، گزارشهای عملکرد، لاگهای سیستمی یا حتی فایلهای چندرسانهای را بر عهده دارند. استفاده از SD Card در چنین پروژههایی، راهکاری ساده، ارزان و انعطافپذیر برای ذخیرهسازی محلی فراهم میکند.
این حافظهها به دلیل ظرفیت بالا، مصرف توان پایین و قابلیت جابهجایی آسان، این امکان را به توسعهدهندگان میدهند تا بدون نیاز به اتصال دائمی به شبکه، اطلاعات حیاتی را ثبت و در زمان مناسب انتقال یا پردازش کنند. علاوه بر این، SD Card میتواند در سناریوهایی که دسترسی به اینترنت محدود یا پرهزینه است، نقش یک حافظه پشتیبان مطمئن را ایفا کند و امنیت دادهها را افزایش دهد. به همین دلیل، ادغام قابلیت ذخیرهسازی با SD Card در طراحی سیستمهای IoT، نهتنها قابلیت اطمینان و مقیاسپذیری پروژه را بالا میبرد، بلکه مدیریت دادهها را نیز انعطافپذیرتر میسازد.
برای استفاده از Sdcard لازم است از فایل (/components/ql-application/init/ql_init.c) تابع زیر را از حالت کامنت خارج کنید
1 2 3 | #ifdef QL_APP_FEATURE_SDMMC ql_sdmmc_app_init(); #endif |
برای مشخص کردن آدرس فایل باید از این قسمت استفاده کنید (#define QL_SDMMC_FILE_PATH “SD:sisoog.txt”) . تابعی که برای ما کار Mount کردن SDcard را انجام میدهد تابع (ql_sdmmc_mount_demo) است که اگر کارش با موفقیت انجام دهد پیام (Mount succeed) را خواهید گرفت. برای تست قابلیتهای مختلف برنامه لازم است تنظیمات مربوط به آن را با استفاده از تعاریف پایین که اول کد مشاهده میکنید انجام دهید.
1 2 3 4 5 6 | #define QL_SDMMC_FS_TEST 1 #define QL_SDMMC_MUTIL_PARTITION_TEST 0 #define QL_SDMMC_EVENT_PLUGOUT 0 #define QL_SDMMC_EVENT_INSERT 1 #define QL_SDMMC_DET_TEST 1 |
در اینجا تنظیم مربوط به (QL_SDMMC_FS_TEST) را یک کردیم تا در کد کامپایل شود. برنامه چیزی که اینجا (char *str = QL_SDMMC_TEST_STR;) مشخص کردیم را با استفاده از تابع (ql_fwrite) روی SDcard مینویسد. اگر کد را کامپایل و نصب کنید خروجی مانند زیر خواهید داشت.
صوت در بسیاری از پروژه ها کاربرد زیادی دارد. به عنوان مثال:
✅ ۱. برقراری تماس صوتی (Voice Call)
در برخی پروژههای IoT، دستگاه نیاز دارد تماس تلفنی برقرار کند. به عنوان مثال یک دستگاه دزدگیر خودرو که وقتی سرقت تشخیص داد، با صاحب خودرو تماس میگیرد و او را با پیام صوتی آگاه میکند.
✅ ۲. ارسال و دریافت پیامهای صوتی (Voice Message)
برخی دستگاهها میتوانند پیام صوتی ضبط کنند و بفرستند یا پیام صوتی دریافت کنند. به عنوان مثال سیستمهای اعلام هشدار روستایی که وضعیت خطر (مثل سیل یا آتشسوزی) را بهصورت پیام صوتی به افراد محلی اطلاعرسانی میکنند.
✅ ۳. کاربردهای اینترکام و دستیار صوتی
گاهی نیاز است افراد از راه دور با هم صحبت کنند. به عنوان مثال دستگاههای اینترکام هوشمند ساختمان که با سیمکارت کار میکنند و امکان مکالمه صوتی بین نگهبان و ساکن را فراهم میکنند.
✅ ۴. کنترل صوتی و دستورات صوتی
بعضی ماژولها میتوانند ورودی صوتی را تحلیل کنند (تشخیص گفتار). به عنوان مثال دستگاههای کشاورزی هوشمند که کشاورز با دستور صوتی پمپ آب را روشن میکند.
✅ ۵. کاربرد در پایانههای پرداخت (PoS) و خدمات مشتری
در برخی PoSهای سیمکارتخور قدیمی، گاهی نیاز است از طریق صوت با اپراتور تماس گرفته شود. به عنوان مثال خودپرداز یا پایانه فروشگاهی که در صورت خطا، مشتری مستقیماً با پشتیبانی تماس بگیرد.
برای راه اندازی صوت لازم است از فایل (/components/ql-application/init/ql_init.c) تابع زیر را از حالت کامنت خارج کنید
1 2 3 | #ifdef QL_APP_FEATURE_AUDIO ql_audio_app_init(); #ifdef QL_APP_FEATURE_HEADSET_DET |
این تابع برای تست تمام قابلیتهای صوتی ماژول کافی میباشد به طوری که دارای توابعی مانند PCM و Record و Stream و Ring و Set Audio Quality است که میتوانید با خارج کردن آنها از حالت کامنت از آنها استفاده کنید. اینجا برای سادگی سراغ تابعی جهت پخش فایل موسیقی که از قبل آماده شده میرویم. برای اینکار ابتدا در کد تابع (test_play_file(TEST_PLAY_FILE_NAME); ) را از حالت کامنت خارج کنید و نام فایلی که میخواهید پخش شود را در این قسمت (#define TEST_PLAY_FILE_NAME “UFS:rec.wav”) تغییر دهید. دقت کنید که محل حافظه با کلمات (UFS) برای NOR Flash داخلی و (SD) برای SD Card و (EXNAND) برای Nand Flash خارجی مشخص میشود.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | void test_play_file(char *file_name) { if(ql_aud_play_file_start(file_name, QL_AUDIO_PLAY_TYPE_LOCAL, play_callback)) { audio_uart_log("play failed"); return; } if(ql_aud_play_file_start(file_name, QL_AUDIO_PLAY_TYPE_LOCAL, play_callback)) { audio_uart_log("play failed"); return; } ql_aud_wait_play_finish(QL_WAIT_FOREVER); ql_aud_player_stop(); //Playback ends, release playback resources audio_uart_log("play file %s done", file_name); } |
اگر فایل شما مانند من در SDcard قرار دارد لازم است ابتدا با استفاده از تابع (ql_sdmmc_app_init();) که در قسمت SDcard با آن کار کردیم SDcard را Mount کنیم که اینکار باید قبل از تابع پخش موسیقی ما باشد. همچنین فایلی که من جهت پخش انتخاب کردم یک موسیقی با فرمت MP3 بود به همین دلیل این قسمت کد را به این صورت تغییر دادم.
1 2 | #define TEST_PLAY_FILE_NAME "SD:sisoog.mp3" #define TEST_STREAM_FORMAT QL_AUDIO_FORMAT_MP3 |
پس از اینکه کد را کامپایل و روی برد نصب کنید موسیقی شروع به پخش میشود.
در تست دوم با خارج کردن این تابع از حالت کامنت (test_record_file) از حالت ضبط و پخش استفاده کردیم. تابع به صورت زیر است:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | void test_record_file(void) { ql_aud_config config = {0}; config.samplerate = 8000; if(ql_aud_record_file_start(TEST_RECORD_WAV_NAME, &config, QL_REC_TYPE_MIC, NULL) != QL_AUDIO_SUCCESS) { audio_uart_log("record failed"); return; } audio_uart_log("record start"); ql_rtos_task_sleep_s(5); //record 5s ql_aud_record_stop(); audio_uart_log("record finish, start play"); ql_set_audio_path_speaker(); if(ql_aud_play_file_start(TEST_RECORD_WAV_NAME, QL_AUDIO_PLAY_TYPE_LOCAL, play_callback)) { audio_uart_log("play failed"); return; } ql_aud_wait_play_finish(QL_WAIT_FOREVER); ql_aud_player_stop(); audio_uart_log("test successful"); } |
من برای دیدن داده های (لاگ) برنامه از UART استفاده میکنم که آموزش آن در قسمتهای قبل وجود دارد. بعد از اینکه تابع را از حالت کامنت خارج و کد را کامپایل و نصب کردید چنانچه برنامه به درستی کار کند خروجی مانند زیر خواهید داشت:
وبسایت: http://www.arvidtek.com
www.arvidtek.com | گروه مهندسی آرویدتک | فعال حوزه الکترونیک و مخابرات | فروشگاه تخصصی قطعات الکترونیک
مقالات بیشتر
نویسنده شو !
سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.