فهرست

  • آشنایی با ماژول بلوتوث CC2541
    – معرفی
    – بررسی اجمالی
    – زمینه‌های کاربردی
  • قطعات مورد نیاز
  • نحوه‌ی اتصالات
  • کد (با استفاده از CodeVision AVR)

آشنایی با ماژول بلوتوث BLE ورژن 4 CC2541 (HM-10) 

ماژول بلوتوث CC2541 که با نام ماژول HM-10 نیز شناخته می‌شود، یک ماژول بلوتوث کم انرژی (BLE) محبوب با کاربردهای فراوان است. این ماژول امکان ارتباط بی‌سیم را فراهم می‌کند و معمولاً برای تبادل اطلاعات بین دستگاه‌های بی‌سیم و گوشی‌های همراه، تبلت‌ها و لپتاپ‌ها استفاده می‌شود. با استفاده از ماژول‌ HM-10 می‌توان وضعیت روشن و خاموش‌ بودن دستگاه‌ها را مشاهده کرد، از وضعیت سیستم‌های مبتنی بر آن‌ها با خبر شد و یا به طور کلی انواع داده‌ها را ارسال و دریافت کرد. از آنجایی که این ماژول‌ با استفاده از AT Commandها کنترل می‌شود، با ارسال چند دستور می‌توان به راحتی با آن‌ ارتباط برقرار کرد. بعد از روشن شدن ماژول نیز می‌توان نام آن را در لیست دستگاه‌های بلوتوث در گوشی همراه مشاهده کرد. در ادامه اطلاعاتی در مورد ماژول CC2541/HM-10 آمده است:

– بررسی اجمالی

ماژول HM-10 که بر اساس System-On-Chip (SoC) تراشه‌ی CC2541 ساخت شرکت Texas Instruments است از یک میکروکنترلر کم مصرف 8051 و یک رادیو بلوتوث تشکیل شده است. این دستگاه با استفاده از فناوری بلوتوث کم انرژی کار می‌کند و برای برنامه‌های با محدودیت انرژی که نیاز به اتصال بی‌سیم با حداقل مصرف انرژی دارند، بسیار مناسب است.

– ویژگی‌ها و مشخصات

  • ورژن بلوتوث: این ماژول از بلوتوث 4.0 پشتیبانی می‌کند و با دستگاه‌های بلوتوث 4.0 و بالاتر سازگار است.
  • فرکانس: باند 2.4 گیگاهرتز ISM
  • ولتاژ تغذیه: 4.2 – 2 ولت (3.3 ولت پیشنهادی)
  • حداکثر جریان مصرفی: 50mA
  • پروتکل ارتباطی: رابط سریال UART
  • مصرف توان: این ماژول برای مصرف انرژی کم طراحی شده است که آن را برای دستگاه های با باتری ایده آل می کند.
  • برد ارتباطی: برد به طور معمول از 20 تا 30 متر متغیر است که بستگی به محیط و عوامل دیگر دارد.
  • AT Command: این ماژول از AT Command پشتیبانی می‌کند که امکان پیکربندی و کنترل آسان تنظیمات مختلف را فراهم می‌کند.

– زمینه‌های کاربردی

ماژول بلوتوث HM-10 در حوزه‌های مختلفی کاربرد دارد، از جمله:

  • اینترنت اشیا (IoT): اتصال بی سیم و انتقال داده بین دستگاه‌های IoT مانند حسگرها، عملگرها و سیستم‌های ارتباطی را امکان پذیر می‌کند.
  • گجت‌های پوشیدنی: این ماژول را می‌توان در ردیاب‌های تناسب اندام، ساعت‌های هوشمند و سایر ابزارهای پوشیدنی که نیاز به اتصال بلوتوث دارند استفاده کرد.
  • هوشمندسازی و اتوماسیون خانگی: ارتباط بی سیم بین دستگاه‌های اتوماسیون خانگی را تسهیل می‌کند و امکان کنترل و نظارت از راه دور را فراهم می‌کند.
  • سیستم‌های امنیتی: ارتباط بی‌سیم و سازگاری آن با طیف گسترده‌ای از دستگاه‌ها، آن را به گزینه‌ای مناسب برای ادغام در سیستم‌های امنیتی برای افزایش عملکرد و راحتی آن‌ها تبدیل می‌کند.

قطعات مورد نیاز

  • میکروکنترلر ATmega32
  • ماژول بلوتوث HM-10
  • LCD کاراکتری 2×16
  • برد برد
  • سیم‌ جامپر (سیم بردبردی)
  • منبع تغذیه (مانند باتری منبع تغذیه مستقل)

نحوه‌ی اتصالات

مطابق شکل زیر اتصالات را انجام دهید:

  1. پایه‌های VCC و GND ماژول HM-10 و میکروکنترلر ATmega32 را به ترتیب به پایه‌های 3.7 ولت و GND تغذیه وصل کنید. توجه داشته باشید که ولتاژ بالاتر از 4.2 ولت موجب آسیب به ماژول HM-10 می‌شود.
    (برای تغذیه این مدار می‌توانید از باتری‌های 4.2-3.7 ولت لیتیوم پلیمری استفاده کنید)
  2.  برای انتقال داده از ماژول به میکروکنترلر پایه TXD آن را به پایه RXD (پین 15) ATmega32 و برای دریافت اطلاعات از میکروکنترلر، پایه RXD آن را به پایه TXD (پین 14) ATmega32 متصل کنید.
  3. پین‌های RD، RS و E صفحه نمایش LCD کاراکتری را می‌توانید به هر پایه‌ی دلخواه از ATmega32 وصل کنید. مطابق شکل در این پروژه این پایه‌ها به ترتیب به پین‌های PB.6 ،PB.5 و PB.7 وصل شده است.
  4. پایه‌های داده D4-D7 صفحه نمایش LCD را می‌توانید به هر پایه‌ی دلخواه از ATmega32 وصل کنید. مطابق شکل در این پروژه این پایه‌ها به ترتیب به پین‌های PD.5 ،PD.4 ،PD.3 و PD.6 وصل شده است.
  5. پایه‌‌های VCC و آند (A) صفحه نمایش LCD را به پایه‌‌ی 3.7 ولت تغذیه و GND و کاتد (K) آن را به GND تغذیه وصل کنید.
  6. پایه‌ی V0 صفحه نمایش LCD را که برای تنظیم نور پسزمینه‌ی آن است با مقاومت 2.2K اهم به پایه‌‌ی 3.7 ولت تغذیه وصل کنید.

کد (با استفاده از CodeVision AVR):

در ادامه یک نمونه کد برای میکروکنترلر ATmega32 با استفاده از نرم افزار CodeVision AVR آورده شده است. این کد ارتباط بین میکروکنترلر و ماژول HM-10 را تنظیم می‌کند، داده‌ها را به تلفن کاربر ارسال می کند و پاسخ دریافتی را روی ماژول LCD 2×16 نمایش می‌دهد. برای ارتباط با ماژول و دریافت اطلاعات در تلفن همراه، نرم‌افزار BLE Terminal  را در موبایل خود نصب کنید.

در این پروژه اتصالات مطابق با تصویر بالا انتخاب شده است. در ادامه کد مربوطه ارائه شده است. توجه داشته باشید که این کد برای هر یک از میکروکنترلرهای دیگر خانواده‌ی AVR نیز قابل استفاده است.

#include <mega32.h>
#include <delay.h>
#include <stdio.h>
#include <lcd.h>


#define BAUD_RATE 9600

// Function to initialize UART communication
void uart_init() {
    UCSRB = (1 << RXEN) | (1 << TXEN);
    UCSRC = (1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1);
    UBRRL = (F_CPU / (16UL * BAUD_RATE)) - 1;
}

// Function to transmit data via UART
void uart_transmit(unsigned char data) {
    while (!(UCSRA & (1 << UDRE)));
    UDR = data;
}

// Function to receive data via UART
unsigned char uart_receive() {
    while (!(UCSRA & (1 << RXC)));
    return UDR;
}

// Function to initialize LCD
void LCD_Init()
{
    lcd_init(16);
    lcd_clear();
}

// Function to display a string on the 2x16 LCD
void lcd_display_string (char data) {        char buffer[5];
    sprintf(buffer, "%4d", data);
    lcd_puts(buffer);
}

int main() {

    char receivedData;

    // Initialize UART communication
    uart_init();

    // Initialize LCD module
    LCD_Init();

    // Display a welcome message on the LCD
    lcd_display_string("Welcome!");

    while (1) {

        // Send data to the user's phone via Bluetooth module
        uart_transmit('H'); // Example: Send 'H'
        uart_transmit('i'); // Example: Send 'i'
        uart_transmit('\n'); // Example: Send newline character

        // Receive response from the user's phone via Bluetooth module
        receivedData = uart_receive();

        // Display the received response on the LCD module
        lcd_clear();        
        lcd_gotoxy(0,0);
        lcd_puts("Response:");
        lcd_gotoxy(0,1);
        lcd_display_string(&receivedData);

        // Wait for a moment before sending the next message
        delay_ms(2000);
    }
}

توضیح کد:

کد با فراخوانی کتابخانه‌های لازم AVR و تعریف Baud Rate برای ارتباط UART شروع می‌شود.
تابع ()uart_init تنظیمات UART را مقداردهی اولیه می‌کند.
تابع ()uart_transmit برای ارسال داده‌ها از طریق UART استفاده می‌شود.
تابع ()uart_receive برای دریافت داده‌ها از طریق UART استفاده می‌شود.
تابع ()LCD_Init نمایشگر LCD را مقداردهی اولیه می‌کند و طرح اولیه نمایشگر را تنظیم می‌کند.
تابع ()lcd_display_string داده‌ی ورودی را در LCD نمایش می‌دهد. 
در تابع ()main ارتباط UART و LCD مقداردهی اولیه می‌شود و پیام خوش آمدگویی روی ماژول LCD نمایش داده می‌شود.
در داخل حلقه اصلی، داده‌ها (در این مثال “Hi”) با استفاده از تابع ()uart_transmit به تلفن کاربر ارسال می‌شود.
پاسخ دریافتی از تلفن کاربر با استفاده از تابع ()uart_receive گرفته می‌شود.
پاسخ دریافتی با استفاده از تابع ()lcd_display_string روی ماژول LCD نمایش داده می‌شود.
قبل از ارسال پیام بعدی به کاربر 2 ثانیه تاخیر اعمال می‌شود.

توجه

در صورتی که در راه‌اندازی این پروژه نیاز به راهنمایی بیشتر دارید، در قسمت دیدگاه مطرح کنید.

بدون دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *