• تجربه با مودم GSM SIM900. کنترل ماژول GSM با AVR

    بنابراین، پس از مدت طولانی روشن کردن پیچیدگی های کار با ماژول GSM SIM900D اولین پروژه کاری را اعلام کرد که ترکیبی از یک سیستم امنیتی با توانایی است کنترل از راه دور. به طور خلاصه، دستگاه قادر به ارسال پیامک اطلاع رسانی در صورت وجود سنسور نفوذ، برقراری تماس برای فعال کردن کنترل صوتی اتاق، نظارت بر دما و ارسال پیامک در صورت درخواست و همچنین کنترل مقداری بار با دستور ارسال شده از طریق پیامک است. .

    کسانی که این موضوع را دنبال کردند می دانند که من یک ماژول GSM و یک ماژول کنترل برای آن دارم - دو تابلوهای مختلف، توسط یک ساندویچ متصل می شود (به برد با SIM900D و برد کنترل مراجعه کنید). روی برد کنترل، علاوه بر میکروکنترلر ATmega32a، یک ماژول پاور ساخته شده روی مبدل LM2596 وجود دارد که مدار را تغذیه می کند. ولتاژ ثابت 3.5 ولت در اصل، هر منبع تغذیه دیگری انجام می دهد، نکته اصلی این است که بتواند برای مدت کوتاهی تا 2 آمپر بکشد (این دقیقاً مصرف ماژول GSM در زمان ثبت نام است).

    به منظور راحتی، یک صفحه نمایش از تلفن Nokia3310 به برد کنترل متصل می شود که روش های کار با آن قبلاً بیش از یک بار در این سایت شرح داده شده است. به لطف نمایشگر، می توانید به سرعت وضعیت دستگاه و ارزش سنسورها را تعیین کنید.

    در نتیجه، طرح اتصال حاصل به این صورت ظاهر شد (قابل کلیک):

    شماره پین ​​میکروکنترلر در نمودار برای پکیج DIP آورده شده است، بنابراین اگر مدار را با استفاده از میکروکنترلرهای موجود در پکیج TQFP تکرار می کنید، مراقب باشید، شماره پین ​​متفاوت است. میکروکنترلر از یک کوارتز خارجی با فرکانس 16 مگاهرتز کلاک می شود.

    خط کنترلرفتن از جمع کننده ترانزیستور Q2 به پایه PortD.4 میکروکنترلر برای بیمه اتکایی اضافه می شود و برای نظارت بر روشن بودن ماژول مورد نیاز است. از آنجایی که آستانه خاموش شدن برای SIM900 3.2 ولت است، حتی با یک افت ولتاژ جزئی، ماژول به طور خودکار خاموش می شود، در حالی که میکروکنترلر به کار خود ادامه می دهد و برنامه را اجرا می کند (آستانه تنظیم مجدد برای ATmega32a 2.7 ولت است). در شرایط کار در این خط است سطح پایین. اگر میکروکنترلر تشخیص دهد که این خط بالا است، عملکرد اجرا خواهد شد. راه اندازی مجددماژول GSM

    و این چیزی است که در حال حاضر در محل کار به نظر می رسد.

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

    صفحه نمایش اطلاعات اولیه در مورد وضعیت دستگاه را نشان می دهد: نام اپراتور، کیفیت سیگنال ارتباطی، مقدار دما از سنسور 18b20، وضعیت بار خروجی و سنسور نفوذ، و همچنین زمان و تاریخ.

    ویدئویی از روشن شدن ماژول

    زمان و تاریخ از ساعت تعبیه شده در ماژول GSM گرفته شده است. برای عملکرد آنها، یک باتری 3 ولتی متصل به پایه 15 (VRTC) مورد نیاز است. دیود D1 توصیه می شود با افت ولتاژ کم مانند شاتکی تنظیم شود. تنظیم ساعت و تاریخ به صورت دستی انجام می شود، دستورات قبلا توضیح داده شد

    تاریخ با همان فرمتی که از ماژول دریافت شده، نمایش داده می شود، یعنی ابتدا سال، سپس ماه و تاریخ. تا اینجا هیچ چیز تغییر نکرده است.

    سنسور DS18B20 وظیفه اندازه گیری دما را بر عهده دارد؛ این سنسور به پایه PortD.3 میکروکنترلر متصل است.

    شما می توانید هر باری را به PortD.6 متصل کرده و از طریق دستورات پیامکی آن را کنترل کنید. من اکنون یک LED آویزان دارم - D4 در نمودار. اما هیچ چیز مانع شما نمی شود که رله یا ترایاک را در اینجا آویزان کنید و چیز جدی تری را مدیریت کنید.

    برای اهداف امنیتی، قرار است از سنسور حرکتی HC-SR501 که در E-bay خریداری شده است استفاده شود. در صورت بروز یک ماشه، یک واحد منطقی در خروجی سنسور ظاهر می شود. پس از گرفتن آن، میکروکنترلر دستور ارسال را می دهد پیامکتوسط شماره تلفندر برنامه مشخص شده است.

    خروجی سنسور به خروجی PortD.7 میکروکنترلر متصل است؛ در نمودار، سنسور به صورت مشروط با یک دکمه جایگزین شده است.

    به جای سنسور حرکت، می توانید هر وسیله دیگری را برای تشخیص نفوذ قرار دهید - سنسورهای باز کردن پنجره و درب، سنسورهای شکستن شیشه، سنسورهای فوتوالکتریک و غیره، به طور کلی، هر چیزی که فانتزی قادر به انجام آن است.

    به منظور جلوگیری از ارسال چندگانه پیامک هشدار دهنده در صورت فعال شدن سنسور، محدودیتی در برنامه ایجاد شده است: پس از اولین پیامک ارسالی، منع ارسال بعدی اعمال می شود. برای فعال کردن مجدد ارسال پیام های اعلان هنگام فعال شدن سنسور، لازم است با یک دستور خاص یک پیامک به ماژول ارسال کنید. هنگامی که ارسال پیامک ممنوع است، یک علامت تعجب در کنار وضعیت سنسور نمایش داده می شود.

    فهرست فرمان

    و در اینجا لیستی از دستورات در پیامک است که ماژول پردازش می کند. برای راحتی و سادگی، دستورات دیجیتال هستند، احتمالا در نسخه های بعدیسفت‌افزار نام‌های دستوری معنادارتری خواهد داشت :)

    0 - قطع بار (منطق 0 در خروجی PortD.6 تنظیم شده است)

    1 - بار را روشن کنید (منطق 1 روی خروجی PortD.6 تنظیم شده است)

    2 – پس از پذیرش این دستور، ماژول با شماره تلفن مشخص شده در برنامه تماس خواهد گرفت

    3 – درخواست موجودی و ارسال آن از طریق پیامک به شماره مشخص شده. اینجا یکی هست تفاوت ظریف مهم- پاسخ به درخواست های USSDباید به زبان لاتین باشد در غیر این صورت، به جای یک متن معنی دار، پاسخ پیامی با کدگذاری هگزادسیمال دریافت می کند. نحوه ترجمه USSD به لاتین را باید با اپراتور خود بررسی کنید. به عنوان مثال، در سیم کارتی که من از Smarts استفاده می کنم، باید *102*1# (در مگافون *105*0#) را وارد کنید.

    4 - درخواست دما مقدار دما از طریق پیامک برای ما ارسال می شود.

    5 – امکان ارسال پیام در هنگام فعال شدن سنسور نفوذ.

    6 – ممنوعیت ارسال پیامک اعلان از سنسور نفوذ.

    ? - با این دستور، ماژول پیامکی حاوی اطلاعات کلیدر مورد دستگاه، مانند مقدار سنسور دما، روشن بودن بار، وضعیت ورودی از سنسور نفوذ، و اینکه آیا امکان ارسال پیامک اعلان از آن وجود دارد یا خیر. به عنوان مثال، چنین پیامی ممکن است به نظر برسد: دما +24، بار خاموش است، خروجی سنسور حرکت 0 است، ارسال SMS در صورت کارکرد ممنوع است.

    حال چگونه ماژول را برای ارسال اس ام اس به شماره خود پیکربندی کنید. در آرشیو با برنامه، فایل اصلی برنامه را پیدا می کنیم، به نام "برنامه" 🙂 و ثابت را در آن پیدا می کنیم:

    Constشماره تلفن = "+7908390хххх"

    شماره تلفن خود را در اینجا جایگزین می کنیم، برنامه را کامپایل می کنیم و فایل هگز سیستم عامل را دریافت می کنیم.

    این برنامه، مانند همیشه، در Bascom-AVR نوشته شده است، بنابراین درک الگوریتم کار با ماژول GSM بسیار آسان است. موفق باشید!

    و در نهایت، نمایشی از نحوه پردازش دستورات توسط ماژول.

    با تشکر ویژه برای مشارکت و کمک در توسعه، دوست قدیمی سایت سرگئی RD3AVJ!

    UPD: از 10/31/12

    من سیستم عامل را کمی تغییر دادم، اکنون برای تنظیم شماره ای که پیامک اعلان به آن ارسال می شود، نیازی به کامپایل مجدد برنامه ندارید. کافی است یک پیامک با پیام به ماژول ارسال کنید "شماره اول"(بدون نقل قول) و شماره ای که این دستور از آن ارسال شده است در حافظه غیر فرار میکروکنترلر نوشته می شود.

    می تواند در دستگاه هایی که نیاز به برقراری ارتباط دارند استفاده شود مسافت های طولانی. به عنوان مثال، یک ربات در مسکو توسط شخصی که در کراسنودار نشسته کنترل می شود! یا یک کشاورز پمپ آب را در یک مزرعه برنج از خانه خود، در چند کیلومتری مزرعه روشن می کند! چندین گزینه برای برقراری ارتباط با دستگاه وجود دارد:

    ارتباط ساده بر اساس پیامک:
    با دستورات SMS ساده دستگاه را روشن/خاموش کنید. برای کنترل دستگاه می توان از هر تلفن همراه استفاده کرد.
    هشدار امنیتی / آتش نشانی که به مالک اطلاع می دهد اضطراریدر منزل از طریق پیامک

    ارتباط مبتنی بر تماس:
    دزدگیر/ اعلام حریق هوشمند که با پلیس یا آتش نشانان تماس می گیرد و با استفاده از پیام های صوتی از پیش ضبط شده وضعیت اضطراری را اعلام می کند.

    ارتباط با استفاده از اینترنت (GPRS):
    کاربر می تواند دستگاه را از هر رایانه شخصی / تبلت / تلفن همراه متصل به اینترنت کنترل کند. به عنوان مثال، نمایشگرهای اطلاعاتی نصب شده روی مسیرها از اتاق کنترل مرکزی کنترل می شوند.
    ربات تحت کنترل اینترنت چنین رباتی از هر دستگاهی که به اینترنت وصل است از هر جای دنیا قابل دسترسی است.
    دستگاه های قابل حمل نصب شده در خودروهایی که با استفاده از ماژول SIM300 GPRS به اینترنت متصل می شوند و موقعیت فعلی را اضافه می کنند (با استفاده از GPS (سیستم موقعیت جهانی، سیستم جهانیموقعیت یابی)) به سرور. این داده ها در یک پایگاه داده روی سرور به همراه شناسه خودرو ذخیره می شود. برای مشاهده مسیر خودرو، می توانید از طریق کامپیوتر به سرور متصل شوید در سراسر جهانوب (وب جهانی).

    مزایای استفاده از ماژول SIM300

    کیت SIM300 کاملاً است ماژول مستقلدارای درگاه سیم کارت، منبع تغذیه و ... این ماژول را می توان به راحتی به میکروکنترلرهای ارزان قیمت AVR/PIC/8051 متصل کرد. ارتباط با میکروکنترلر از طریق ناهمزمان انجام می شود درگاه سریال. این نوع اصلی ارتباط سریال است که توسط اکثر میکروکنترلرهای سخت افزاری پشتیبانی می شود. داده ها بیت به بیت منتقل شده و در بایت ها جمع می شوند. بر سطح بالابه نظر می رسد یک جریان متن ساده است. در مجموع دو جریان وجود دارد: یکی از میکروکنترلر به SIM300 و دیگری از SIM300 به میکروکنترلر. دستورات به صورت متن ساده ارسال می شوند.

    اگر تا به حال از ارتباط سریالی استفاده نکرده اید یا نام آن را نشنیده اید، بهتر است نحوه کارکرد آن را بدانید و با مثال های ساده تر تمرین کنید.

    ارتباط با ماژول SIM300 با استفاده از AVR UART

    سخت افزار میکروکنترلر مورد استفاده برای ارتباط سریال UART نامیده می شود و ما از آن برای ارتباط با ماژول SIM300 استفاده می کنیم (همچنین می توان از آن برای برقراری ارتباط با دستگاه های دیگر مانند خوانندگان RFID استفاده کرد. ماژول های GPS، اسکنر اثر انگشت و غیره). UART یک روش ارتباطی بسیار رایج در دنیای الکترونیک است، ما یک کتابخانه تمیز و ساده برای آن نوشته ایم که در تمام پروژه های خود با استفاده از UART از آن استفاده می کنیم.

    از آنجایی که یک بایت از SIM300 می تواند در هر زمانی به میکروکنترلر برسد، اگر میکروکنترلر مشغول انجام کار دیگری باشد چه اتفاقی می افتد؟ برای حل این مشکل، بافر کردن داده های ورودی را بر اساس وقفه انجام دادیم. بافر داخل است حافظه دسترسی تصادفیمیکروکنترلر دارای تابعی است که به شما امکان می دهد تعداد بایت های موجود در صف را تعیین کنید.

    عملکردهای کتابخانه AVR USART در زیر آمده است:

    void USARTInit(uint16_t ubrrvalue)

    راه اندازی سخت افزار AVR USART. مقدار پارامتر ubrrvalueنرخ داده مورد نظر تنظیم شده است. نرخ باود پیش فرض برای SIM300 9600 bps است. برای میکروکنترلر AVRدر فرکانس 16 مگاهرتز کار می کند ubrrvalueبرای این سرعت باید باشد 103 .

    char UReadData()

    خواندن یک شخصیت از صف. اگر چیزی در صف وجود نداشته باشد، پاسخ 0 است.

    void UWriteData (داده کاراکتر)

    با استفاده از تابع UWriteString () یک بایت داده در هر خط Tx می نویسد.

    uint8_t UDataAvailable()

    مقدار داده های موجود در صف FIFO را گزارش می کند.

    void UWriteString(char*str)

    یک رشته به سبک C با پایان تهی در خط Tx می نویسد.
    مثال 1: UWriteString ("سلام جهان!");
    مثال 2: charname="آوینش !"; UWriteString (نام)؛

    void UReadBuffer(void *buff,uint16_t len)

    محتویات بافر FIFO را در حافظه مشخص شده توسط buff کپی می کند، مقدار داده کپی شده توسط پارامتر len مشخص می شود. اگر داده های کمتر از حد لازم (با توجه به پارامتر len) از طریق UART به بافر FIFO آمده باشد، فضای باقیمانده با صفر پر می شود.

    char gsm_buffer;
    UReadBuffer(gsm_buffer,16);

    مثال بالا 16 بایت داده (در صورت وجود) را از بافر FIFO در یک متغیر می خواند gsm_buffer. توجه داشته باشید که gsm_bufferآرایه ای از 128 بایت اختصاص داده شده است زیرا ممکن است بعداً به بیش از 16 بایت نیاز داشته باشیم. بنابراین، این بافر می تواند برای خواندن تا 128 بایت بعد استفاده شود.

    تابع نشان داده شده در بالا معمولاً همراه با UDataAvailable() استفاده می شود.

    while(UDataAvailable()<16)
    {
    //هیچ کاری نکن
    }

    char gsm_buffer;
    UReadBuffer(gsm_buffer,16);

    قطعه کد نشان داده شده در بالا منتظر می ماند تا 16 بایت داده در بافر جمع شود و سپس آنها را می خواند.

    void UFlushBuffer()

    انتظار برای داده های FIFO توسط بافر را لغو می کند. قبل از ارسال یک فرمان جدید به ماژول GSM، ابتدا انتظار برای داده های FIFO توسط بافر را لغو کنید.

    توابع فوق برای ارسال و دریافت دستورات متنی از ماژول SIM300 GSM استفاده می شود.

    دستور AT برای SIM300 تنظیم شده است

    اکنون که با اصول کتابخانه AVR USART و استفاده از آن برای مقداردهی اولیه USART، ارسال و دریافت داده ها آشنا شدید، نوبت به یادگیری دستورات ماژول SIM300 و نحوه ارسال آنها و دریافت پاسخ می رسد. SIM300 چندین عملکرد دارد: ارسال پیام متنی، برقراری تماس و غیره. هر یک از این توابع پس از یک دستور خاص اجرا می شوند و SIM300 مجموعه ای از دستورات خاص خود را دارد.

    همه دستورات SIM300 با یک پیشوند شروع می شوند AT+و پایان برگشت محموله(مخفف کالسکه بازگشت). کد ASCII برای CR 0x0D (اعشار 13) است. تمام دستوراتی که به SIM300 ارسال می کنید در خط TX SIM300 برگردانده می شوند. یعنی اگر یک فرمان 7 بایتی (شامل CR نهایی) ارسال کنید، بلافاصله این 7 بایت را از طریق UART در بافر دریافت خواهید کرد. اگر آن را دریافت نکردید، یعنی چیزی اشتباه است!

    اولین تابعی که مطالعه خواهیم کرد این خواهد بود SIM300Cmd (کاراکتر ثابت *cmd), این کار زیر را انجام می دهد:

    • دستورات داده شده توسط پارامتر را می نویسد cmd.
    • اضافه می کند CRبعد از دستور
    • منتظر می ماند تا دستور برگردد و اگر قبل از تایم اوت رسید، پاسخ می دهد SIM300_OK(ثابت تعریف شده در sim300.h). او پاسخ می دهد اگر آنها خیلی منتظر بازگشتند، اما هیچ کدام وجود نداشت SIM300_TIMEOUT.

    توجه: تمام توابع وابسته به SIM300 در فایل sim300.c ذخیره می شوند. نمونه ها و ثابت ها در sim300.h ذخیره می شوند

    کار با SIM300Cmd()

    Int8_t SIM300Cmd(const char *cmd) ( UWriteString(cmd)؛ //Send Command UWriteData(0x0D)؛ //CR uint8_t len=strlen(cmd)؛ len++؛ //Add 1 for Trailing CR اضافه شده به همه دستورات uint16_ 0؛ // منتظر اکو باشید (i< 10*len) { if(UDataAvailable() < len) { i++; _delay_ms(10); continue; } else { //We got an echo //Now check it UReadBuffer(sim300_buffer,len); //Read serial Data return SIM300_OK; } } return SIM300_TIMEOUT; }

    یک فرمان معمولاً با یک پاسخ دنبال می شود. فرم پاسخ این است:
    LF- تغذیه خط، کد ASCII آن 0x0A (10 در اعشار) است.

    بنابراین، در حالی که منتظر پاسخ پس از ارسال یک فرمان هستید، سه چیز ممکن است رخ دهد:

    • خیلی وقته جوابی نمیده دلیل احتمالی ممکن است این باشد که SIM300 به میکروکنترلر متصل نیست.
    • پاسخ دریافت شد، اما نه آنچه انتظار می رفت. علت ممکن است خرابی خط سریال، نرخ باود نادرست تنظیم شده یا عملکرد میکروکنترلر در فرکانس اشتباه باشد.
    • پاسخ صحیح دریافت شده است.

    مثلا دستور ثبت نام شبکه را دریافت کنید(ثبت شبکه) به شرح زیر انجام می شود: Command String (Command): " AT+CREG؟"

    واکنش(پاسخ): +CREG:، خوب

    می بینید که پاسخ صحیح 20 بایت است. یعنی بعد از ارسال دستور AT + CREG؟ باید منتظر ماند تا 20 بایت دریافت شود یا تا زمان مشخصی سپری شود. شرط دوم برای جلوگیری از یخ زدگی در صورت معیوب بودن SIM300 رعایت می شود. یعنی به جای منتظر ماندن برای همیشه برای پاسخ، اگر SIM300 برای مدت طولانی پاسخ دهد، خطایی ایجاد می شود (به این می گویند مهلت زمانی).

    در صورت دریافت پاسخ صحیح، برای بدست آوردن اطلاعاتی در مورد ثبت نام در شبکه، متغیر را تجزیه و تحلیل می کنیم.

    بسته به وضعیت فعلی ثبت نام در شبکه، مقدار می تواند: 0 - ثبت نشده است، اکنون SIM300 به دنبال اپراتور جدیدی برای ثبت نام نیست. 1 - در شبکه خانگی ثبت شده است. 2 - ثبت نام نشده، اکنون SIM300 به دنبال اپراتور جدید برای ثبت نام می باشد. 3 - ثبت نام رد شد. 4 - نامعلوم 5 - ثبت شده، رومینگ.

    کار با SIM300GetNetStat()

    Int8_t SIM300GetNetStat() (//Send Command SIM300Cmd("AT+CREG?"); //اکنون منتظر پاسخ باشید uint16_t i=0؛ //پاسخ صحیح 20 بایت است //پس صبر کنید تا 20 بایت داشته باشیم // در buffer.while(i<10) { if(UDataAvailable()<20) { i++; _delay_ms(10); continue; } else { //We got a response that is 20 bytes long //Now check it UReadBuffer(sim300_buffer,20); //Read serial Data if(sim300_buffer=="1") return SIM300_NW_REGISTERED_HOME; else if(sim300_buffer=="2") return SIM300_NW_SEARCHING; else if(sim300_buffer=="5") return SIM300_NW_REGISTED_ROAMING; else return SIM300_NW_ERROR; } } //We waited so long but got no response //So tell caller that we timed out return SIM300_TIMEOUT; }

    تابع به همین ترتیب پیاده سازی می شود: int8_t SIM300IsSIMInserted()

    با نوع دیگری از پاسخ، مانند دستور بالا، از قبل اندازه دقیق پاسخ را نمی دانیم. به عنوان مثال، این دستور Get Service Provider Name (دریافت نام اپراتور (ارائه دهنده)) است که طول نام اپراتور از قبل مشخص نیست. می تواند MTS، Beeline و غیره باشد. برای حل این مشکل از این واقعیت استفاده می کنیم که قبل و بعد از پاسخ CR LF. بنابراین، ما به سادگی تمام کاراکترها را تا زمانی که ملاقات کنیم در بافر می نویسیم CR، که به معنای پایان پاسخ است.

    برای ساده سازی پردازش چنین دستوراتی، یک تابع ساخته ایم
    SIM300WaitForResponse (تایم زمانی uint16_t)

    این تابع منتظر پاسخ از SIM300 می ماند (پایان پاسخ با CR نشان داده می شود) و اندازه پاسخ را گزارش می کند در حالی که خود پاسخ در یک متغیر سراسری کپی می شود. sim300_buffer.

    اگر قبل از اتمام زمان پاسخی دریافت نشد، پاسخ 0 است. زمان وقفه بر حسب میلی ثانیه را می توان با پارامتر تنظیم کرد. تایم اوت. LFهای دیرهنگام یا آخرین OK را حساب نمی کند، آنها در بافر UART FIFO باقی می مانند. بنابراین قبل از بازگشت از دستور استفاده می کنیم UFlushBuffer()برای حذف آنها از کلیپ بورد.

    کار با SIM300WaitForResponse (تایم وقفه uint16_t)

    Int8_t SIM300WaitForResponse(uint16_t درنگ

    کار با SIM300GetProviderName (char *name)تابع موارد زیر را انجام می دهد:

    1. بافر USART را برای حذف هر گونه خطا یا پاسخ پاک می کند.
    2. دستور "AT + CSPN؟" را ارسال می کند. با استفاده از تابع SIM300Cmd ("AT + CSPN?")؛
    3. سپس با استفاده از تابع ()SIM300WaitForResponse منتظر پاسخ می ماند
    4. اگر یک پاسخ غیر تهی دریافت کنیم، آن را تجزیه می کند تا نام عملگر را به دست آورد.

    توابع زیر به این ترتیب پیاده سازی می شوند:

    • uint8_t SIM300GetProviderName(char *name)
    • int8_t SIM300GetIMEI(char *emei)
    • int8_t SIM300GetManufacturer(char *man_id)
    • int8_t SIM300GetModel (char *model)
    uint8_t SIM300GetProviderName(char *name) (UFlushBuffer(); //Send Command SIM300Cmd("AT+CSPN?"); uint8_t len=SIM300WaitForResponse(1000)؛ if(len==0) *TIMEstOUst,*end بازگشت ; start=strchr(sim300_buffer,"""); start++; end=strchr(start,"""); *end="\0"; strcpy(name,start); return strlen(name); )

    SIM300 و ATmega32. سخت افزار

    برای نشان دادن ارتباط با SIM300 با استفاده از AVR ATmega32، به اجزای زیر نیاز داریم:
    - ATmega32 با اتصال - رجیستر ریست، پین های ISP، کوارتز 16 مگاهرتز.
    - منبع +5 ولت برای تغذیه ATmega32 و صفحه نمایش LCD.
    - نمایشگر LCD کاراکتری 16x2 برای نشان دادن نتایج.
    - ماژول SIM300.

    ما از برد اشکال زدایی Xboard استفاده کردیم زیرا دارای سیم ATmega32، منبع تغذیه +5 ولت و نمایشگر LCD است.

    کد منبع آزمایشی AVR و SIM300

    کد منبع آزمایشی به زبان C نوشته شده و با استفاده از کامپایلر رایگان AVR-GCC و با استفاده از آخرین کامپایل شده است. این پروژه به ماژول های زیر تقسیم می شود:

    • کتابخانه LCD
      - فایل های lcd.c، lcd.h، myutils.h، custom_char.h
      - وظیفه آن کنترل یک LCD استاندارد 16x2 است.
      - اطلاعات بیشتر در لینک موجود است.
    • کتابخانه USART
      - فایل های usart.c، usart.h
      - وظیفه او کنترل سخت افزار USART میکروکنترلر AVR است. شامل توابع اولیه سازی USART، ارسال/دریافت کاراکتر، ارسال/دریافت رشته.
    • کتابخانه SIM300
      - فایل های sim300.c، sim300.h

    راه اندازی پروژه AS6 مرحله به مرحله

    یک پروژه جدید AS6 با نام "Sim300Demo" ایجاد کنید.
    با استفاده از کاوشگر راه حل (درخت پروژه) یک پوشه به نام "lib" در پوشه فعلی ایجاد کنید.
    در داخل پوشه "lib"، پوشه های "LCD"، "USART" و "SIM300" را ایجاد کنید.
    فایل ها را (با استفاده از Windows Explorer) lcd.c، lcd.h، myutils.h، custom_char.h در پوشه lcd کپی کنید.
    فایل ها (با استفاده از Windows Explorer) usart.c، usart.h را در پوشه USART کپی کنید
    فایل ها را (با استفاده از Windows Explorer) sim300.c, sim300.h در پوشه SIM300 کپی کنید.
    فایل های lcd.c، lcd.h، myutils.h، custom_char.h را با استفاده از کاوشگر راه حل (درخت پروژه) به پروژه اضافه کنید.
    با استفاده از کاوشگر راه حل (درخت پروژه) filesusart.c، usart.h را به پروژه اضافه کنید.
    فایل های sim300.c، sim300.h را با استفاده از کاوشگر راه حل (درخت پروژه) به پروژه اضافه کنید.
    مقدار F_CPU = 16000000 را با استفاده از AS6 تعیین کنید.
    فایل اصلی Sim300Demo.c را کپی و در برنامه پیست کنید.
    پروژه را کامپایل کنید تا یک فایل هگز دریافت کنید.
    Xboard را با یک پروگرامر USB فلش کنید.
    اگر از میکروکنترلر جدید ATmega32 استفاده می کنید، LOW FUSE را روی LOW FUSE تنظیم کنید 0xFFو HIGH FUSE روشن است 0xC9.

    برنامه دمو چه می کند؟

    LCD و ماژول SIM300 را راه اندازی می کند.
    بررسی می کند که ماژول SIM300 به USART متصل است و به درستی پاسخ می دهد.
    IMEI ماژول SIM300 را نشان می دهد.
    شناسه سازنده را نشان می دهد
    وجود سیم کارت را بررسی می کند.
    یک شبکه GSM را جستجو می کند و یک اتصال برقرار می کند. برای این کار باید یک سیم کارت فعال داشته باشید.
    نام اپراتور مانند MTS یا Megafon را نشان می دهد.

    مشکلات احتمالی

    بدون تصویر روی LCD

    مطمئن شوید که پروژه AVR Studio شما روی ساعت 16 مگاهرتز (16000000 هرتز) تنظیم شده است.
    کنتراست را با پتانسیومتر تنظیم کنید.
    دکمه ریست را چندین بار فشار دهید.
    دستگاه را چندین بار روشن/خاموش کنید.
    ال سی دی را فقط همانطور که در نمودار نشان داده شده است وصل کنید.

    خطای "No Response" در هنگام راه اندازی SIM300 ظاهر می شود

    یکپارچگی خطوط Rx، Tx و GND بین SIM300 و Xboard را بررسی کنید.
    مطمئن شوید که میکروکنترلر با فرکانس 16 مگاهرتز کار می کند.
    فیوزها را دقیقاً همانطور که در بالا توضیح داده شد نصب کنید.

    خطاهای کامپایلر

    بسیاری از مردم از برنامه های نوشته شده و کامپایل شده استفاده می کنند. تجربه ای ندارند و با اصول برنامه نویسی و کامپایل آشنایی ندارند. آشنایی با کامپایلرها و نحوه کار آنها بر روی پلتفرم های مختلف (PC / MAC / Linux) یک شروع عالی خواهد بود. سیستم های تعبیه شده برای یادگیری اصول اولیه مناسب نیستند. آنها برای کسانی در نظر گرفته شده اند که این مهارت ها را دارند و به سادگی از آنها استفاده می کنند.
    مطمئن شوید که تمام فایل های کتابخانه LCD به پروژه اضافه شده اند.
    مطمئن شوید که AVR-GCC نصب شده است. (توزیع ویندوز WinAVR نامیده می شود)
    مطمئن شوید که AVR GCC در پروژه AVR Studio مشخص شده است.

    توصیه های عمومی برای مبتدیان

    از بردهای اشکال زدایی و برنامه نویس های آماده استفاده کنید.
    سعی کنید بر اساس مقالات و کتاب های درسی مطالعه کنید.

    فهرست عناصر رادیویی

    تعیین تایپ کنید فرقه تعداد توجه داشته باشیدخرید کنیددفترچه یادداشت من
    U1 MK AVR 8 بیتی

    ATmega32

    1 به دفترچه یادداشت
    U2 تنظیم کننده خطی

    LM7805

    1 به دفترچه یادداشت
    D1 دیود یکسو کننده

    1N4007

    1 به دفترچه یادداشت
    D2 دیود ساطع نور 1 به دفترچه یادداشت
    C1، C2 خازن22 pF2 به دفترچه یادداشت
    C3، C4، C6 خازن0.1uF3

    تجربه استفاده از SIM900 که در زیر توضیح داده شده است، برای کسانی که قبلاً توانسته اند کمی با ماژول کار کنند مفیدتر خواهد بود. برای آن دسته از خوانندگانی که تازه شروع به مطالعه این ریزمدار کرده‌اند و قصد دارند از آن برای تبادل داده از طریق اینترنت استفاده کنند، مجموعه‌ای از درس‌ها را در این زمینه آماده کرده‌ایم. اینجا .

    بنابراین، SIM900 یک ماژول GSM از SIM COM است که با دستورات AT کنترل می شود، قادر به ارسال SMS، برقراری تماس، سازماندهی اتصال مستقیم CSD و تبادل اطلاعات از طریق GPRS است.

    در دستان من برد اشکال زدایی شیلد GPRS SIM900 بود که از چین سفارش داده شد - سازگار با پلتفرم آردوینو.

    این برد شامل خود تراشه SIM900، جک های میکروفون و هدفون، سوئیچ منبع تغذیه (از کانکتور خارجی یا آردوینو)، یک آنتن، چندین LED برای نشان دادن حالت های کار، یک کانکتور باتری (در صورت نیاز به ساعت واقعی)، یک دکمه روشن/خاموش در ویکی سازنده توضیحات خوبی پیدا کردم . همچنین کدی برای کنترل مودم در حالت های مختلف وجود دارد.

    طبق گفته سازنده، این برد کاملاً با آردوینو Uno سازگار است. در واقع، برد SIM900 به سادگی به Uno وصل می شود و بلافاصله شروع به کار می کند. با این حال، همانطور که مشخص شد، Arduino Uno ممکن است برای اجرای برخی از عملکردها "ضعیف" باشد، اما من کمی بعد در مورد این صحبت خواهم کرد.

    این برد با آردوینو مگا با محدودیت هایی کار می کند. این به این دلیل است که مگا برخلاف Uno، پین های 7 و 8 برای استفاده به عنوان سریال نرم افزاری (نرم افزار USART) در دسترس نیستند. این مشکل با تغییر رابط USART به پایه های 0 و 1 حل می شود؛ برای این کار، جامپرها بر روی برد SIM900 ارائه شده است.

    به طور کلی، برد را می توان به هر کنترلری با رابط USART متصل کرد. به عنوان مثال، من سعی کردم مودم را با استفاده از کنترلر STM32F4 کنترل کنم.

    SIM900: پیامک ها و تماس ها

    تست های ماژول تبادل پیامک و تماس "با صدای بلند"! ماژول بدون هیچ مشکلی با این وظایف کنار آمد، برای این کار من به سادگی c را کپی کردم همین سایت، این کد را کامپایل و در Arduino Uno فلش کرد:

    //رله سریال - آردوینو یک //لینک سریال بین رایانه و شیلد GPRS را وصله می کند //با سرعت 19200 bps 8-N-1 //کامپیوتر به سخت افزار UART متصل است //GPRS Shield به نرم افزار UART متصل است #include نرم افزار سری GPRS (7, 8); بافر char unsigned; // آرایه بافر برای دریافت داده ها از طریق پورت سریال int count=0; // شمارنده برای آرایه بافر void setup() (GPRS.begin(19200); // نرخ باود GPRS Serial.begin(19200)؛ // پورت سریال نرخ باود آردوینو. ) void loop() ( if (GPRS .available()) // اگر تاریخ از پورت سریال نرم افزار می آید ==> داده ها از gprs shield می آیند ( while(GPRS.available()) // خواندن داده ها در آرایه char ( buffer=GPRS.read(); // نوشتن داده ها در آرایه if(count == 64) break; ) Serial.write(buffer,count); // اگر انتقال داده تمام نشد، بافر را در پورت سریال سخت افزار بنویسید clearBufferArray(); // تابع clearBufferArray را برای پاک کردن ذخیره شده فراخوانی کنید. داده ها از تعداد آرایه = 0؛ // شمارنده حلقه while را روی صفر تنظیم کنید) اگر (Serial.available()) // اگر داده ها در پورت سخت افزاری موجود باشد ==> داده ها از رایانه شخصی یا نوت بوک GPRS.write(Serial .read()); // نوشتن آن در سپر GPRS ) void clearBufferArray() // تابع برای پاک کردن آرایه بافر ( برای (int i=0; i

    برای ارسال دستورات به ماژول باید به کامپیوتر متصل باشد. این کار را می توان با استفاده از پورت USB آردوینو انجام داد. در رایانه، این به هر مانیتور پورت COM نیاز دارد. قابل دانلود است از اینجا، یا می توانید از مانیتور تعبیه شده در Arduino IDE استفاده کنید.

    تنها کاری که نرم افزار آردوینو انجام می دهد این است که دستورات کاربر را "گرفتن" و ارسال آنها به ماژول و سپس بازگرداندن پاسخ های SIM900 به کاربر است. بنابراین، با ارسال دستورات AT به ماژول در حالت دستی، دریافت و ارسال پیامک را آزمایش کردم و با اتصال میکروفون و هدفون به کانکتورهای مناسب، از ماژول SIM900 به عنوان تلفن همراه استفاده کردم.

    انتقال داده از طریق GPRS با استفاده از SIM900

    من اولین آزمایشات خود را در انتقال داده از طریق GPRS با استفاده از پلتفرم Arduino UNO برای کنترل SIM900 (به این دلیل که در دسترس بود) شروع کردم. برای شروع، من میزبانی را با یک سرور تحت آپاچی خریداری کردم و یک برنامه ساده را روی آن مستقر کردم که می توانست به طور ماهرانه ای به درخواست های GET پاسخ دهد. اتفاق افتاد! من هنوز دستورات را از رایانه شخصی به کنترلر آردوینو می فرستم که به نوبه خود آنها را به SIM900 ارسال می کند.

    همه چیز به درستی کار می کرد تا زمانی که درخواست های GET به اندازه کافی کوتاه بودند (تا 100 کاراکتر). اما به محض طولانی شدن درخواست ها، شکست ها شروع شد: درخواست ها به طور کامل منتقل نشدند. مشاهده شده است که حتی با افزایش/کاهش برنامه کنترل آردوینو با چند خط، اشکالات ممکن است ظاهر یا ناپدید شوند. متعاقباً مشخص شد که خرابی ها مربوط به نرم افزار USART است که Arduino UNO از آن برای ارتباط با SIM900 استفاده می کند، زیرا. چنین USART کاملاً به چرخه برنامه هسته کنترلر وابسته است. با حجم کمی از داده ها، آنها همیشه زمان برای انتقال دارند و با افزایش مقدار آنها، نتیجه انتقال بستگی به مدت چرخه برنامه دارد.

    نتیجه گیری از همه موارد فوق این است که استفاده از نرم افزار USART در هنگام برقراری ارتباط با SIM900 غیرممکن است، به خصوص زمانی که صحبت از مقدار زیادی داده ارسال شده باشد.

    Arduino Uno تنها یک رابط USART "آهنی" دارد که توسط مبادله با رایانه شخصی اشغال شده بود، بنابراین مجبور شدم UNO را کنار بگذارم و آن را با Arduino Mega جایگزین کنم، که از کمبود USARTهای "آهنی" رنج نمی برد. پس از چنین "قلعه سازی"، عملکرد دستگاه پایدار و صحیح شد.

    SIM900: پشته TCP-IP یا HTTP؟ چی بهتره؟

    هنگام مطالعه کتابچه راهنمای مدیریت مودم، متوجه شدم که دو گروه از دستورات AT وجود دارد. گروه اول برای انتقال داده ها از طریق پشته TCP-IP داخلی استفاده می شود و گروه دوم از پروتکل HTTP استفاده می کند که قبلاً توسط منطق داخلی SIM900 پیاده سازی شده است. مهم نیست که چقدر گوگل و یاندکس را عذاب دادم تا بفهمم این روش ها چگونه متفاوت هستند، مزایا و معایب هر یک از آنها چیست، چیزی پیدا نکردم، بنابراین هر دو را امتحان کردم و تجربه عملی خود را در اینجا به اشتراک گذاشتم.

    هر دو روش کار می کنند و حق وجود دارند.

    مقداردهی اولیه پشته TCP-IP کمی دشوارتر است (فرمان های بیشتری باید به ماژول منتقل شوند) و مدیریت آن کمی دشوارتر است. برای ارسال یک درخواست، باید یک اتصال را باز کنید، منتظر پاسخ باشید و به آرامی آن را ببندید.

    HTTP به زبان ساده مرورگری است که در SIM900 تعبیه شده است. مقداردهی اولیه آسان است، برای شروع تبادل با سرور، باید یک جلسه باز کنید. در عین حال، باز و بسته شدن ارتباط با هر درخواست و حل سایر «وظایف سازمانی» بر دوش SIM900 می افتد. این راحت است، علاوه بر این، انتقال داده به این روش تا حدودی سریعتر است، فقط به این دلیل که SIM900 قادر است تمام "عملیات کمکی" را سریعتر از کنترل کننده کنترل انجام دهد.

    بنابراین، هنگام انتخاب روش مبادله، من همچنان روی پروتکل HTTP قرار گرفتم.

    درخواست GET نادرست به سرور

    در همان ابتدای کارم در زمینه انتقال اطلاعات از طریق GPRS، اشتباهی مرتکب شدم که بیش از یک روز عذابم را تمام کرد. من که تجربه کافی در تعامل با سرور از طریق درخواست های GET نداشتم، با کسب دانش سطحی در اینترنت، درخواستی به فرم زیر ارائه کردم:

    دریافت http://xxx.ru/d_command.php?UC=1111 HTTP/1.1
    میزبان: xxx.ru

    این درخواست درست نیست، اما توسط مرورگر و سرور پراکسی که از آن درخواست های اشکال زدایی ارسال کردم کاملاً "خورده" شد - به همین دلیل درخواست را درست در نظر گرفتم.

    شگفت آورترین چیز این است که SIM900 نیز به خوبی با یک درخواست "بد" کنار آمد (و سپس درخواست ها را از طریق پشته TCP-IP ارسال کردم). با این حال، یک روز خوب، سرور شروع به پاسخ دادن به چنین درخواست هایی با خطای 404 کرد. این به دلیل شرایطی رخ داد که مشخص نشده است، یا ارائه دهنده هاست الگوریتم های پردازش درخواست را تغییر داده است (او این را رد می کند)، یا اپراتور تلفن همراه این کار را انجام داده است. آی تی. اما واقعیت همچنان پابرجاست. سپس سعی کردم همان درخواست را از طریق HTTP ارسال کنم - همه چیز کار کرد. این با این واقعیت توضیح داده می شود که پروتکل HTTP داخلی ماژول SIM900 (همانطور که گفتم، در واقع مرورگر داخلی) می تواند درخواست های نادرست را به درستی "تجزیه" کرده و آنها را به شکل صحیح به شبکه پخش کند. این یکی دیگر از مزیت‌های (البته مشکوک) استفاده از HTTP است، زیرا برخی از نادرستی‌ها را به برنامه‌نویس اجازه می‌دهد. به طور کلی، البته، درخواست باید به درستی نوشته شود و به شکل زیر باشد:

    /d_command.php?UC=1111 HTTP/1.1 را دریافت کنید
    میزبان: xxx.ru

    با چنین درخواست درستی، SIM900 با موفقیت هم از طریق پشته TCP-IP و هم از طریق HTTP تبادل می کند.

    SIM900 گیر کرده

    گاهی اوقات، هنگام تبادل از طریق GPRS، شرایطی پیش می آید که پس از آن ممکن است ماژول مسدود شود. این ممکن است به دلیل داده‌های نادرستی باشد که از طریق شبکه وارد شده و SIM900 را به حالت گیجی سوق داده است، یا تداخل در خط تبادل ماژول و کنترل‌کننده، که در آن SIM900 "آنچه انتظار داشت" را دریافت نکرده است، یا برخی مشکلات ناشناخته دیگر. سازنده تراشه هشدار می دهد که ممکن است این اتفاق بیفتد و پیشنهاد می کند که در چنین مواردی ماژول با استفاده از دنباله خاصی از پالس های اعمال شده به ورودی PWRKEY ریست شود.

    با این حال، همانطور که معلوم شد، این همیشه کمک نمی کند - پس از چنین راه اندازی مجدد، ماژول ممکن است "بیدار شود" همچنان "باگ". و سازنده نیز در این مورد به ما هشدار می دهد، اگر DataSheet ماژول را با دقت بخوانید. در اینجا آنچه اسناد توصیه می کند:

    توجه: هنگامی که SIM900 نمی تواند به دستور AT "AT+CPOWD=1" و پین PWRKEY پاسخ دهد، توصیه می شود به جای استفاده از پین تنظیم مجدد خارجی، منبع تغذیه VBAT را مستقیماً قطع کنید.

    بنابراین، صحیح ترین راه برای راه اندازی مجدد ماژول این است که به طور کامل برق را از آن (از پین VBAT) حذف کنید، یک مکث (حداقل یک ثانیه، فقط برای هر مورد) نگه دارید و دوباره برق را اعمال کنید. برای ریست کردن ماژول روی برد، بهتر است یک رله یا سوئیچ ترانزیستوری که توسط کنترلر کنترل می شود تهیه کنید.

    نتیجه

    در آینده قصد دارم مجموعه ای از مقاله ها-درس ها را منتشر کنم که در آنها به شما خواهم گفت که چگونه یک تبادل بین یک برنامه وب سرور و SIM900 را سازماندهی کنید، از خرید هاست از یک ارائه دهنده شروع می شود و با نوشتن کد برای برنامه های کنترلی پایان می یابد.

    خداحافظ! منتظر به روز رسانی در باهوش تنبل .

    در نهایت، من موفق به مطالعه، شاید محبوب ترین ماژول GSM در محیط DIY - GSM900 شدم. ماژول GSM چیست؟ این دستگاهی است که عملکردهای تلفن همراه را اجرا می کند. به عبارت دیگر GSM900 امکان تماس با سایر مشترکین شبکه تلفن همراه، دریافت تماس، ارسال و دریافت پیامک را فراهم می کند. و البته برای انتقال داده ها از طریق پروتکل GPRS.

    من به این ماژول برای یک هدف بسیار خاص نیاز داشتم: پروژه ای برای یک سیستم روشنایی کنترل از راه دور ظاهر شد. ساده ترین راه برای حل این مشکل از طریق پیامک است: یک پیامک ارسال کرد - چراغ روشن شد، دیگری فرستاد - خاموش شد. نیازی به ریموت نیست و همه تلفن دارند (حتی افراد بی خانمان). در واقع، در این مقاله دقیقاً این گزینه را برای استفاده از ماژول GSM900 در نظر خواهم گرفت.

    1. سیستم عامل

    به خواست سرنوشت، ماژول GSM900A را در دست داشتم. پس از خواندن اولین انجمنی که در مورد احیای این چیز برخورد کردم، معلوم شد که حرف A در نام به این معنی است که ماژول متعلق به منطقه آسیا است. و بنابراین، او با اپراتورهای ما کار نخواهد کرد. ناامیدی 🙁

    خوشبختانه، پست های زیر در همان انجمن حاوی اطلاعات اطمینان بخش بود :) معلوم شد که همه چیز آنقدر بد نیست و برای اینکه ماژول در منطقه ما کار کند، فقط باید reflash شود. این فرآیند به خوبی در وبلاگ همکار ما Alex-EXE توضیح داده شده است: سیستم عامل "همه در یک" sim900
    من سعی خواهم کرد همین کار را انجام دهم، اما با جزئیات بیشتر و با در نظر گرفتن ویژگی های ماژول خود.

    اگر ماژول درستی دارید و نیازی به سیستم عامل ندارید، می توانید بلافاصله به بخش شماره 2 بروید.

    ابزار

    بنابراین، برای شروع، ما تمام ابزار لازم را آماده خواهیم کرد. در مرحله اول، برای سیستم عامل به طور مستقیم، به برنامه دانلود Tools Develop سری SIM900 نیاز دارید که به راحتی در اینترنت یافت می شود ().

    ثانیا، خود فایل سیستم عامل 1137B02SIM900M64_ST_ENHANCE نیز مفید است که به راحتی نیز به دست می آید ().

    در نهایت، سوم، ما به یک ترمینال خوب برای آزمایش با ماژول نیاز خواهیم داشت. معمولا من از تراترم استفاده می کنم، اما این بار کافی نبود (یا متوجه نشدم). مجبور شدم یک هیولا با نام درخشان نصب کنم.

    اتصال به پل USB-UART

    حالا خطوط RX و TX را به پل وصل می کنیم. به عنوان آخرین مورد من از CP2102 استفاده کردم. در مورد من، بر خلاف منطق، RX و TX پل به طور متقارن به RX و TX ماژول GSM متصل شدند (و نه به صورت متقاطع، همانطور که مرسوم است).

    شما همچنین باید ماژول را از یک منبع پایدار و قدرتمند تغذیه کنید، زیرا حداکثر جریان در ماژول می تواند به 2A برسد (ظاهرا). مناسب 4 باتری AA نمودار سیم کشی کامل به این صورت است:

    SIM900
    CP2102 Gnd Gnd
    CP2102 +5V VCC_MCU
    CP2102RX SIMR
    CP2102TX SIMT
    منبع خارجی +5 ولت VCC5
    منبع خارجی Gnd Gnd
    RST

    این مدل دکمه ریست ندارد، بنابراین برای فریمور باید کنتاکت RST را برای چند ثانیه به زمین پرتاب کنیم. برای این کار فعلاً آن را در هوا معلق می گذاریم.

    پیش پیکربندی ماژول

    قبل از ادامه فریمور، به ماژول متصل می شویم و سرعت UART آن را تغییر می دهیم. برای انجام این کار، ترمینال ترمینال را راه اندازی کنید، پورت صحیح را انتخاب کنید و نرخ مبادله را روی 9600 تنظیم کنید. پس از آن، روی "اتصال" کلیک کنید.

    تمام ارتباط با ماژول از طریق دستورات AT انجام می شود.

    اولین چیزی که به ماژول می گوییم ابتدایی ترین دستور AT است: "AT". این یک نوع پینگ است که ماژول باید با کلمه "OK" به آن پاسخ دهد.

    اگر همه چیز خوب پیش رفت و ماژول واقعاً به ما "OK" پاسخ داد ، دستور تنظیم سرعت را ارسال می کنیم:

    AT+IPR=115200

    در پایان دستور، باید یک کاراکتر بازگشتی کالسکه خدمات وجود داشته باشد - CR. در جدول ASCII، کد 13 (یا 0x0D در هگزادسیمال) را دارد. اگر کادر "+CR" را در کنار خط ورودی در ترمینال ما علامت بزنید، نماد به طور خودکار جایگزین می شود. پایانه های دیگر نیز تنظیمات مشابهی دارند.

    در پاسخ به دستور وارد شده، دوباره "OK" را دریافت خواهیم کرد.

    برای سرعت بخشیدن به فرآیند سیستم عامل به این تنظیمات نیاز داریم. در غیر این صورت، همانطور که Alex-EXE در وبلاگ خود اشاره کرده است، سیستم عامل حدود یک ساعت طول می کشد.

    تنظیمات برنامه

    پس از اینکه همه سیم‌ها به مکان‌های مناسب وصل شدند و ماژول برای سیستم‌افزار آماده شد، برنامه دانلود Tools Develop سری SIM900 را راه‌اندازی می‌کنیم. راه اندازی برنامه فقط شامل چند مورد است:

    • در قسمت Target تراشه مورد نظر را مشخص کنید. بنا به دلایلی نتوانستم سیستم عامل را در SIM900A آپلود کنم، بنابراین "SIM900" را انتخاب کردم.
    • پورت صحیح را در قسمت Port انتخاب کنید.
    • Baud Rate روی 115200 تنظیم شد.
    • در نهایت فایل فریمور را در قسمت Core File (فایلی با پسوند cla) مشخص کنید.

    همه چیز با تنظیمات

    سیستم عامل

    اکنون شش مرحله مهم را به طور دقیق و پیوسته انجام می دهیم.

    • ما برق را به ماژول (4 باتری ما) وصل می کنیم. چراغ قرمز پاور باید روشن شود و چراغ وضعیت شروع به چشمک زدن کند.
    • ما USB-UART را به کامپیوتر وصل می کنیم.
    • سیم RST را به زمین می بندیم (به یاد داشته باشید که در تمام این مدت در هوا معلق بود).
    • دکمه Start Download را در برنامه فشار دهید.
    • ما در ذهن خود تا سه می شماریم و RST را از روی زمین بلند می کنیم.

    6 دقیقه منتظر می مانیم تا فریمور تکمیل شود.

    بعد از فریمور چه داریم

    اولا، ماژول اکنون می تواند با اپراتورهای ما کار کند. ثانیا، ما سفت‌افزار توسعه‌یافته‌ای را نصب کرده‌ایم که به عنوان مثال، دریافت مختصات ماژول از برج‌های سلولی، کار با ایمیل و دسترسی به ۲.۵ مگابایت حافظه اضافی را دارد.

    2. آزمایش با ماژول GSM

    بیایید اکنون سعی کنیم عملیات مفید مختلفی را با ماژول انجام دهیم. ابتدا کد پین (در صورت وجود) را وارد کنید:

    AT+CPIN=8899

    پاسخ ماژول به صورت زیر خواهد بود:

    CPIN: آماده است.

    پس از آن، اطلاعاتی را از ماژول دریافت می کنیم.

    AT+GMR - شناسه سیستم عامل. AT+GSN-IMEI. AT+CPAS - حالت (0 - آماده به کار، 2 - ناشناخته، 3 - تماس ورودی، 4 - اتصال صوتی). AT+COPS؟ - اطلاعات مربوط به اپراتور

    تماس های تلفنی

    حالا بیایید تعدادی شماره بگیریم. این با استفاده از دستور انجام می شود:

    ATD+790XXXXXXXXX;

    نقطه ویرگول انتهای دستور بسیار مهم است، فراموش نکنید!

    اگر شخصی در طول جلسه UART با دستگاه تماس بگیرد، پیام زیر برگردانده می شود:

    با دستور زیر می توانید به تماس پاسخ دهید (تلفن را بردارید)

    اگر هدفون و میکروفون به ماژول متصل هستند، می توانید با یک مشترک از راه دور مانند استفاده از یک تلفن همراه معمولی ارتباط برقرار کنید.

    دستور به تماس پایان می دهد:

    ارسال اس ام اس

    ابتدا حالت پیام متنی را فعال کنید:

    AT+CMGF=1

    و کدگذاری را تنظیم کنید:

    AT+CSCS="GSM"

    این ماژول همچنین از رمزگذاری های دیگری پشتیبانی می کند که برای سیستم های خودکار راحت تر هستند. اما برای آزمایش‌های ما، استفاده از حالت GSM راحت‌تر است، که در آن تلفن به صورت اعداد تنظیم می‌شود و متن پیام با رمزگذاری ASCII نوشته می‌شود. حالا بیایید به کسی پیام بفرستیم:

    AT+CMGS="+79123456789"

    و در پایان دستور، باید دو کاراکتر سرویس را به طور همزمان اضافه کنید: CR و LF. در ترمینال، این کار را می توان با زدن تیک CR=CR+LF یا با اضافه کردن دستی در انتهای خط انجام داد: AT+CMGS="+79123456789"&0D&0A

    پس از وارد کردن این دستور، پاسخ با علامت ">" خواهد بود که نشان دهنده شروع وارد کردن یک پیام است. چند متن می نویسیم:

    سلام دنیا!

    در پایان پیام، باید یکی از دو کاراکتر ویژه را پاس کنیم. برای ارسال پیام، کاراکتر را از جدول ASCII با عدد 26 وارد کنید. برای لغو ارسال، کاراکتر را با عدد 27 وارد کنید.

    در ترمینالی که استفاده می کنیم، یکی از دو عبارت می تواند برای ارسال یک کاراکتر با کد استفاده شود: به صورت هگزادسیمال: $1A، و به صورت اعشاری: #026

    دریافت پیامک

    اگر در طول جلسه پیامکی روی دستگاه دریافت شود، پیامی با فرمت زیر برگردانده می شود:

    CMTI: "SM"، 4

    که در آن 4 شماره پیام خوانده نشده دریافتی است.

    AT+CMGR=4

    در پاسخ دریافت می کنیم:

    CMGR: "REC READ"،"+790XXXXXXXXX"،""،"13/09/21,11:57:46+24" سلام دنیا! خوب

    به طور کلی، همه چیز ساده است. این برای ما کافی است تا بتوانیم برنامه های خود را اجرا کنیم. برای مطالعه عمیق‌تر قابلیت‌های GFM900، توصیه می‌کنم مقاله دیگری از Alex-EXE را بخوانید: مودم sim900 gsm at-commands.

    3. تعامل با میکروکنترلرها

    به طور کلی برای کنترل دستگاه های خارجی، جفت کردن ماژول GSM900 با میکروکنترلر دیگری اصلا ضروری نیست. در این ماژول می توانید برنامه خود را بدوزید که با پین های رایگان GPIO هر کاری را انجام دهد. با این حال، GPIOها در اکثر بردهای آماده سیم‌کشی نمی‌شوند، بنابراین برای ایجاد یک نمونه اولیه از دستگاه تصور شده، از ساده‌ترین Arduino Uno / Nano استفاده می‌کنیم.

    آردوینو و GSM900 از طریق یک رابط UART با هم ارتباط برقرار می کنند. برای این کار این دو دستگاه را طبق طرح زیر به هم وصل می کنیم:

    GSM900 GND VCC_MCU SIMT SIMR
    آردوینو اونو GND + 5 ولت RX TX

    حالا بیایید برنامه ای ایجاد کنیم که پیام های SMS را دریافت کند و LED روی پای شماره 13 را برای چند ثانیه روشن کند. با این کار کنترل برخی از دستگاه های خارجی را شبیه سازی می کنیم.

    Const String spin = "1234"; const int rel_pin = 13; String ss = ""; // ارسال کد پین void sendPin()( String cmd = "AT+CPIN="+spin+char(0x0D); Serial.print(cmd); ) // روشن کردن LED به مدت 2 ثانیه void receiveSMS(string s )( digitalWrite(rel_pin, HIGH); delay(2000)؛ digitalWrite(rel_pin, LOW); ) // رشته ای را که از ماژول void parseString (رشته src) آمده است را تجزیه کنید (bool collect = false; String s = ""; برای (بایت i =0;i

    ما برنامه را روی آردوینو بارگذاری می کنیم و سیستم را تست می کنیم. اگر همه چیز به درستی انجام شود، با ارسال پیامک به دستگاه، LED به مدت 2 ثانیه روشن می شود. البته، به جای LED، می توانید یک رله قدرتمند را روشن / خاموش کنید که یک دیگ گرمایش در یک خانه روستایی به آن متصل است.