توصیه شده, Quectel کویکتل, Gsm Modem

کار با ماژول تمام عیار mc60 – قسمت چهارم – OpenCPU و تکمیل ردیاب

ساخت ردیاب

در قسمت‌های قبل، بر اساس برد سیسوگ پیش رفتیم و چند برنامه مختلف رو برای اون نوشتیم. حالا توی این قسمت میخوایم برنامه ردیاب mc60 که نوشته بودیم رو کامل‌تر بکنیم و چند قابلیت دیگه از جمله ارسال مکان به صورت آفلاین توسط پیامک و ذخیره مسیرهای پیموده شده به صورت فایل متنی در کارت حافظه رو بهش اضافه کنیم. برای اینکار میخوایم از هدربرد جدیدی استفاده کنیم که توی اون میتونیم از تمام قابلیت‌های ماژول mc60 استفاده کنیم. این امکانات شامل کارت حافظه، ADC،I2C، بلوتوث، GPS، هدفون (میکروفن و اسپیکر)، دو سیم کارت و چند LED هست که کار با ماژول رو راحت‌تر میکنه. تصویر اون رو هم در پایین می‌بینید. (برای اطلاعات بیشتر و خرید برد میتونید به انتهای مطلب برید.)

 

اول از همه کدهای برنامه ردیاب mc60 رو قرار می‌دم و بعد به توضیح هر قسمت می‌پردازیم:

 

توی قسمت دوم طریقه ارسال و دریافت پیامک رو توضیح دادیم و توی قسمت سوم هم دریافت اطلاعات از gps و نحوه ارسال اون توسط GPRS رو، برای همین از توضیح این قسمت‌ها صرف نظر می‌کنیم.

توجه داشته باشید که توی این کد هم مثل قسمت قبل از قابلیت RTOS استفاده کردیم پس این سه خط رو به فایل custom_task_cfg.h اضافه می‌کنیم.

تنظیم کردن ساعت ماژول :

ما میخوایم در ردیاب mc60 اطلاعات مکان رو به صورت روزانه توی یک فایل ذخیره کنیم که اسم هر فایل برابر با روز و ماه جاری باشه، برای این کار میتونیم از دو راه استفاده کنیم، یکی اینکه زمان دقیق رو از GPS دریافت کنیم که خیلی دقیق و خوب هست و برای اینکار میتونیم زمان دقیق رو که توی پارامتر دوم دیتای RMC جی پی اس هست به خونیم و از اون استفاده کنیم، اما اگر توی پروژمون GPS نداشتیم یا هر چیز دیگه، میتونیم از زمان شبکه GSM استفاده کنیم. برای اینکار از دستور AT+QNITZ=1  استفاده میکنیم که یکی از AT COMMAND های ماژول هست. من تابع RIL اون رو توی example هایی که داده بود، پیدا نکردم. برای همین به صورت مستقیم اون رو اجرا کردم و توی خط 84 هست.

همون طور که از اسمش پیداست این تابع کلاً برای ارسال دستورات AT COMMAND به کار میره و میتونید هر دستوری رو باهاش بفرستید.

دستور AT+QNITZ=1  میاد و توی اولین اتصال ماژول به شبکه ساعت داخلی ماژول رو با زمان شبکه تنظیم میکنه. البته این دستور توی حافظه ماژول میمونه و لازم نیست هر بار که ماژول روشن شد اون رو فراخوانی کنیم. (یه نکته ای هم توی پرانتز بگم، اونم اینکه بعضی از اپراتورها از این قابلیت پشتیبانی نمی‌کنند. مثلاً من با سیم کارت رایتل نتونستم زمان رو از شبکه بگیرم، اما همراه اول مشکلی نداشت.)

 

ذخیره اطلاعات در کارت حافظه :

برای استفاده از کارت حافظه اول باید هدر ql_fs.h  رو اضافه کنیم تا توابعش برامون قابل دسترسی بشه.

برای وارد کردن اطلاعات توی یک فایل چند مرحله رو باید طی کنیم اول از همه باید با دستور Ql_FS_Open یک فایل رو باز کنیم، بعد با دستور Ql_FS_Seek انتخاب کنیم که کجای فایل میخوایم بنویسیم (مثلاً اول یا آخر فایل) و بعد از اون با دستور Ql_FS_Write متنی رو به فایل اضافه می‌کنیم و بعد با دستور Ql_FS_Flush تغییراتمون رو توی فایل اعمال می‌کنیم و بعد با دستور Ql_FS_Close فایل رو می‌بندیم و آزاد می‌کنیم و تمام😬. البته هر کدوم از این دستورها آپشن های مختلفی دارند که پیشنهاد می‌کنم طریقه استفاده هر کدوم از اونها رو به طور کامل توی داکیومنت Quectel_MC60-OpenCPU_User_Guide بخونید که توی فایل‌هایی که توی قسمت اول قرار دادیم هست.

حالا توی خط 189 تا 222 اومدیم و از این دستورات استفاده کردیم، البته اول از همه بررسی کردیم که سال سیستم بزرگ‌تر از 2020 باشه تا مطمئن بشیم که تاریخ ماژول درست هست بعد از اون هم اومدیم و خروجی تقسیم ثانیه رو بر 2 بررسی کردیم که برابر با 0 باشه، این باعث میشه تا این شرط هر 2 ثانیه یکبار اجرا به شه، مثلاً میتونید عدد 15 رو قرار بدید تا هر 15 ثانیه یکبار اجرا بشه.

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

 

ارسال مکان آفلاین با SMS :

توی تابع زیر هم اومدیم و بررسی کردیم اگر پیامکی با محتوای “send loc” برای ردیاب mc60 اومد، اول طول و عرض جغرافیایی رو استخراج کنیم و بعد توی پیامک برای شماره‌ای که توی خط 36 تعریف کردیم بفرسته.

 

توی قسمت بعد سراغ ساخت یک MP3 پلیر با ماژول MC60 و همین برد جدید میریم و موزیک‌ها رو از روی کارت حافظه خوانده و با چند تا دکمه وضعیت پخش اون رو کنترل می‌کنیم.

 

خرید برد:

برای خرید برد میتونید از لینک مقابل در سایت پالت سیسوگ استفاده کنید : https://pallet.sisoog.com/?p=4216

شماتیک برد رو هم میتونید از اینجا دانلود کنید.

انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

شما نیز میتوانید یکی از نویسندگان سیسوگ باشید.   همکاری با سیسوگ

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

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

15 دیدگاه در “کار با ماژول تمام عیار mc60 – قسمت چهارم – OpenCPU و تکمیل ردیاب

  1. Mmohammadi236 Mmohammadi236 گفت:

    سلام وقتتون بخیر
    در قسمت حافظه از IC AT45DB161E استفاده کردیم ایا نحوه ارتباط گرفتنن با این ای سی فرق میکنه با SD ؟؟؟؟
    میشه همین نحوه کد نویسی شمارو روی این ای سی پیاده کرد ؟؟؟
    ممنون میشم توضیح بدین

    1. م میرزایی مرتضی گفت:

      با سلام بله میشه از این ای سی برای تولید انبوه ردیاب استفاده کرد

      1. Mmohammadi236 Mmohammadi236 گفت:

        میشه یه مقدار توضیح بدین که چطوری میشه اطلاعات رو داخل ای سی بفرستم و. باز در صورت نیاز بخونم اطلاعات رو ؟؟؟؟

        1. م میرزایی مرتضی گفت:

          ای سی رو وصل میکنیم با دستور save اطلاعات ذخیره و با دستور read اطلاعات رو میخونیم

          1. Mmohammadi236 Mmohammadi236 گفت:

            کد زیر رو نوشتیم برای ارتباط mc60 با ای سی حافظه at45

            u32 rdLen=0;
            u32 wdLen=0;
            u8 spi_write_buffer[]={0x01,0x02,0x03,0x0a,0x11,0xaa};
            u8 spi_read_buffer[]={0x02,0x03,0x04,0x05,0x06,0x07};

            APP_DEBUG(“\r\n\r\n”);
            APP_DEBUG(“\r\n\r\n”,spi_read_buffer[3]);

            ret=Ql_SPI_Init(0,PINNAME_PCM_IN,PINNAME_PCM_SYNC,PINNAME_PCM_OUT,PINNAME_PCM_CLK,0);
            APP_DEBUG(“\r\n\r\n”,ret);
            ret=Ql_SPI_Config(0,1,1,1,1000);
            APP_DEBUG(“\r\n\r\n”,ret);

            wdLen=Ql_SPI_Write(0,spi_write_buffer,6);
            APP_DEBUG(“\r\n\r\n”,wdLen);
            rdLen=Ql_SPI_Read(0,spi_read_buffer,6);
            Ql_Sleep(500);
            APP_DEBUG(“\r\n\r\n”,spi_write_buffer[5]);
            APP_DEBUG(“\r\n\r\n”,spi_read_buffer[3]);

            APP_DEBUG(“\r\n\r\n”,rdLen);

            ret=Ql_SPI_Uninit(0);
            APP_DEBUG(“\r\n\r\n”,ret);

            ولی انگار که داخل حافظه چیزی ذخیره و خوانده نمیشه
            کد داخل داکیومنت mc60 و اطلاعاتی که داده بود همین بود

            اینم محیط دیباگ که ازش لاگ گرفتیم

            Received URC: type: 3
            GSM Network Status:2

            اگر کسی کار کرده ممنون میشم کمکم کنه

          2. Mmohammadi236 Mmohammadi236 گفت:

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

            Received URC: type: 3
            GSM Network Status:2

  2. جواد نجاتی جواد گفت:

    سلام
    خداقوت، ممنون از آموزش عالیتون
    فکر میکنم خط 266 باید تساوی با صفر چک بشود
    if (Ql_strcmp(“send loc”, text) == 0)

    1. Mahdi.h Mahdi.h گفت:

      سلام
      باتشکر از توجهتون
      اصلاح میشه🙂

      1. جواد گفت:

        فایل ril.c داخل فایل ها نیست
        از کجا میتونم دانلودش کنم

        1. Mahdi.h Mahdi.h گفت:

          در اصل فایلی با نام ril.c وجود نداره
          اکثر توابعی که در فایل ril.h معرفی شدند از نوع extern هستند ، یعنی در جایی دیگه تعریف شدند و غیر اونا چندتا متغیر میمونه

          1. جواد گفت:

            سلام
            خروجی توابع Q1 رو از کجا میتونم بدونم چیه؟
            مثلا این تابع Ql_OS_GetMessage

        2. Mahdi.h Mahdi.h گفت:

          برای بررسی ورودی و خروجی های توابع و عملکرد اونها میتونید از داکیومنت Quectel_MC60-OpenCPU_User_Guide استفاده کنید

          1. جواد گفت:

            ممنون
            ولی این داکیومنت خیلی توضیح نداده که مقادیر خروجی ها چه حالت هایی میتونن باشن
            مثلا تو این تابع از کد شما متوجه شدم خروجی param1 وقتی 3 باشه یعنی پیام مربوط به gsm هست

  3. محمود گفت:

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

    1. Mahdi.h Mahdi.h گفت:

      باسلام و تشکر از ثابت قدمی شما
      سعی بر این هست که آموزش ها روان و خلاصه باشد تا هر نوع کاربری بتونه ازشون استفاده کنه و خسته کننده نباشه.
      یکسری از مشکلات جوابشون در کامنت ها قابل پاسخ نیست. میتونید از طریق ایمیل در ارتباط باشید تا بیشتر بتونم کمکتون کنم😉
      mahdi2001h@gmail.com