در قسمت اول به یکسری اطلاعات کلی ماژول mc60 پرداختیم، با نرم افزار QNavigator کار کردیم و یک هدربرد هم برای کار با ماژول معرفی کردیم. توی این قسمت میخوایم از قابلیت هیجان انگیز OpenCpu ماژول mc60 استفاده کنیم تا پیامکهای دریافتی رو بخونیم و بر اساس آن کدهایی رو اجرا کنیم. در نهایت هم نتیجه رو به فرستنده پیامک میکنیم!
با این آموزش از سیسوگ همراه باشید.
برای راه اندازی ماژول mc60 به صورت OpenCpu شرکت کوئیکتل دو راه پیشنهاد داده که یکی استفاده از Eclipse IDE برای ویرایش کدها و کامپایل کردن، و دیگری ویرایش کدها با یک ادیتور و کامپایل کردن به صورت دستی هست. اما حالا ما میایم و از ویرایشگر Visual Studio Code استفاده میکنیم.
در مرحله اول vs code رو نصب میکنیم.
سپس کامپایلر GCC رو نصب میکنیم که فایل نصبی اون در پیوست موجود هست (به همراه راهنمای نصب).
بعد از نصب، از SDK که برای کار با ماژول آماده شده استفاده میکنیم و پوشه اون رو در vs code باز میکنیم. (SDK در پیوست موجود هست)
برای این کار از از منوی file-> open folder استفاده میکنیم.
حالا به کاربرد برخی فایلها و پوشههای موجود در sdk میپردازیم:
build/gcc: محل ذخیره فریمور تولید شده
custom/main.c: کدهای اصلی ماژول
docs: فایلهای راهنمای ماژول
example: نمونه کد برای کار با بخشهای مختلف ماژول
برای شروع فایل main.c رو به صورت زیر تغییر میدیم تا یک چشمک زن ساده داشته باشیم.
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 | #ifdef __CUSTOMER_CODE__ #include "ql_system.h" #include "ql_gpio.h" void proc_main_task(s32 taskId) { // Specify a GPIO pin Enum_PinName gpioPin = PINNAME_NETLIGHT; // Initialize the GPIO pin (output high level, pull up) Ql_GPIO_Init(gpioPin, PINDIRECTION_OUT, PINLEVEL_HIGH, PINPULLSEL_PULLUP); while (TRUE) { // Set the GPIO level to low after 500ms. Ql_Sleep(500); Ql_GPIO_SetLevel(gpioPin, PINLEVEL_LOW); // Set the GPIO level to high after 500ms. Ql_Sleep(500); Ql_GPIO_SetLevel(gpioPin, PINLEVEL_HIGH); } } #endif |
تابع proc_main_task تابع شروع برناممون هست
و تابع Ql_Sleep برای تأخیر بر اساس ms هست.
حالا برای کامپایل باید داخل پوشه اصلی sdk خودمون یک دستور رو توسط کامند اجرا کنیم. برای این کار میتونید cmd رو باز کرده و به پوشه sdk بیایید یا اینکه فایل MS-DOS رو باز کنید تا cmd در همون پوشه بالا بیاد، حالا دستور
1 | make clean && make new |
رو اجرا میکنیم.
اگر که با این پیغام مواجه شدید:
1 2 3 4 5 6 7 8 | ... - Building build\gcc\obj/custom/fota/src/fota_http.o - Building build\gcc\obj/custom/fota/src/fota_http_code.o - Building build\gcc\obj/custom/fota/src/fota_main.o ---------------------------------------------------- - GCC Compiling Finished Sucessfully. - The target image is in the 'build\gcc' directory. ---------------------------------------------------- |
یعنی که هیچ مشکلی وجود نداره!
اما اگر چنین پیغامی نداد یعنی در کد هاتون مشکل دارید. برای پیدا کردن مشکل به فایل build\gcc\build.log مراجعه کرده و ارور مربوطه رو پیدا کنید، به طور مثال این پیغام
1 2 3 4 5 6 | ... example/utility.c:120:17: warning: suggest parentheses around assignment used as truth value [-Wparentheses] custom/main.c: In function 'proc_main_task': custom/main.c:14:5: error: expected ',' or ';' before 'Ql_GPIO_Init' make.exe[1]: *** [build\gcc\obj/custom/main.o] Error 1 make: *** [all] Error 2 |
نشون دهنده نگذاشتن سمی کالن قبل خط 14 هست.
خب حالا کد ما به درستی کامپایل شده. تغذیه ماژول رو متصل کرده و پورت UART اون رو با یک رابط سریال به سیستم متصل میکنیم.
برای آپلود کردن فریمور از نرم افزار QFlash استفاده میکنیم. (این نرم افزار رو میتونید در پیوست همین مطلب دانلود کنید.)
از بخش 1 فایل app_image_bin.cfg رو از مسیر \build\gcc انتخاب کرده
و در بخش 2 نوع ماژول رو انتخاب میکنیم و از بخش 3 پورتی که به ماژول متصل هست انتخاب و گزینه استارت رو میزنیم.
هنگام نمایش پیغام Waiting…… یک بار ماژول رو خاموش روشن میکنیم و بعد پیغام Download … نمایش داده میشه که بعد حدود 35 ثانیه باید این پیغام نمایش داده به شه که نشون دهنده آپلود موفقیت آمیز هست.
بعد یک بار تغذیه ماژول رو قطع و وصل کرده و شاهد چشمک زدن LED روی پایه 47 (NETLIGHT) هستیم.
حالا که اولین تستمون رو گرفتیم میریم سراغ کد نویسی به طور کاملتر.
برای راه اندازی OpenCpu ماژول MC60 و استفاده از سخت افزارهای ماژول، همچنین کد نویسی راحتتر یکسری توابع توسط خود شرکت Quectel تهیه شده که فایلش در پیوست با نام OpenCPU_User_Guide موجود هست، همچنین میتونیم از example های خود sdk استفاده کنیم، اما ما در این قسمت یک برنامه ساده که با دریافت یک sms یک فعالیت ساده انجام داده و نتیجه اون رو ارسال می کنه شروع میکنیم.
کدهای ما به این صورت است:
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 | #ifdef __CUSTOMER_CODE__ #include "ril.h" #include "ril_util.h" #include "ril_sms.h" #include "ril_telephony.h" #include "ril_system.h" #include "ql_stdlib.h" #include "ql_error.h" #include "ql_trace.h" #include "ql_uart.h" #include "ql_system.h" #include "ql_memory.h" #include "ql_timer.h" #include "ql_gpio.h" #if (defined(__OCPU_RIL_SUPPORT__) && defined(__OCPU_RIL_SMS_SUPPORT__)) char PhNum[] = "+98912XXXXXXX\0"; static char DBG_BUFFER[512]; #define CON_SMS_BUF_MAX_CNT (1) #define APP_DEBUG(FORMAT, ...) \ { \ Ql_memset(DBG_BUFFER, 0, 512); \ Ql_sprintf(DBG_BUFFER, FORMAT, ##__VA_ARGS__); \ Ql_UART_Write((Enum_SerialPort)(UART_PORT1), (u8 *)(DBG_BUFFER), Ql_strlen((const char *)(DBG_BUFFER))); \ } typedef struct { u16 uMsgRef; } ConSMSStruct; ConSMSStruct g_asConSMSBuf[CON_SMS_BUF_MAX_CNT]; static bool ConSMSBuf_ResetCtx(ConSMSStruct *pCSBuf, u8 uCSMaxCnt, u8 uIdx) { Ql_memset(&pCSBuf[uIdx], 0x00, sizeof(ConSMSStruct)); return TRUE; } void SMS_TextMode_Send(char strPhNum[], char strTextMsg[]) { u32 nMsgRef; ST_RIL_SMS_SendExt sExt; Ql_memset(&sExt, 0x00, sizeof(sExt)); APP_DEBUG("< Send Normal Text SMS begin... >\r\n"); RIL_SMS_SendSMS_Text(strPhNum, Ql_strlen(strPhNum), LIB_SMS_CHARSET_GSM, strTextMsg, Ql_strlen(strTextMsg), &nMsgRef); } static void Hdlr_RecvNewSMS(u32 nIndex, bool bAutoReply) { ST_RIL_SMS_TextInfo *pTextInfo = NULL; ST_RIL_SMS_DeliverParam *pDeliverTextInfo = NULL; char aPhNum[RIL_SMS_PHONE_NUMBER_MAX_LEN] = { 0, }; pTextInfo = Ql_MEM_Alloc(sizeof(ST_RIL_SMS_TextInfo)); Ql_memset(pTextInfo, 0x00, sizeof(ST_RIL_SMS_TextInfo)); RIL_SMS_ReadSMS_Text(nIndex, LIB_SMS_CHARSET_GSM, pTextInfo); pDeliverTextInfo = &((pTextInfo->param).deliverParam); Ql_strcpy(aPhNum, pDeliverTextInfo->oa); APP_DEBUG("data = %s\r\n", (pDeliverTextInfo->data)); char text[350]; Ql_strcpy(text, (pDeliverTextInfo->data)); if (text[0] == 'p' && text[1] == 'i' && text[2] == 'n') { switch (text[4]) { case '1': Ql_GPIO_Init(PINNAME_NETLIGHT, PINDIRECTION_OUT, 0, PINPULLSEL_PULLUP); if (text[6] == 'o' && text[7] == 'n') { Ql_GPIO_SetLevel(PINNAME_NETLIGHT, 1); } else if (text[6] == 'o' && text[7] == 'f' && text[8] == 'f') { Ql_GPIO_SetLevel(PINNAME_NETLIGHT, 0); } break; } if (bAutoReply) { SMS_TextMode_Send(aPhNum, "OK\0"); } } Ql_MEM_Free(pTextInfo); return; } static void CallBack_UART_Hdlr(Enum_SerialPort port, Enum_UARTEventType msg, bool level, void *customizedPara) {} void proc_main_task(s32 iTaskID) { ST_MSG taskMsg; //Register & open UART port Ql_UART_Register(UART_PORT1, CallBack_UART_Hdlr, NULL); Ql_UART_Open(UART_PORT1, 115200, FC_NONE); APP_DEBUG("Sisoog MC60 SMS Example\r\n"); while (TRUE) { s32 i = 0; Ql_memset(&taskMsg, 0x0, sizeof(ST_MSG)); Ql_OS_GetMessage(&taskMsg); switch (taskMsg.message) { case MSG_ID_RIL_READY: { APP_DEBUG("<-- RIL is ready -->\r\n"); Ql_RIL_Initialize(); // MUST call this function for (i = 0; i < CON_SMS_BUF_MAX_CNT; i++) { ConSMSBuf_ResetCtx(g_asConSMSBuf, CON_SMS_BUF_MAX_CNT, i); } break; } case MSG_ID_URC_INDICATION: switch (taskMsg.param1) { case URC_SYS_INIT_STATE_IND: { if (SYS_STATE_SMSOK == taskMsg.param2) { RIL_SMS_DeleteSMS(0, RIL_SMS_DEL_ALL_MSG); SMS_TextMode_Send(PhNum, "Module is ON\0"); APP_DEBUG("\r\n READY \r\n", taskMsg.param2); } break; } case URC_SIM_CARD_STATE_IND: { APP_DEBUG("\r\n<-- SIM Card Status:%d -->\r\n", taskMsg.param2); } break; case URC_GSM_NW_STATE_IND: { APP_DEBUG("\r\n<-- GSM Network Status:%d -->\r\n", taskMsg.param2); break; } case URC_NEW_SMS_IND: { APP_DEBUG("\r\n<-- New SMS Arrives: index=%d\r\n", taskMsg.param2); Hdlr_RecvNewSMS((taskMsg.param2), TRUE); break; } } break; } } } #endif // __OCPU_RIL_SUPPORT__ && __OCPU_RIL_SMS_SUPPORT__ #endif // __CUSTOMER_CODE__ |
خوب، حالا به تشریح کدها میپردازیم:
در تابع proc_main_task
ابتدا پورت UART اصلی رو به عنوان دیباگ استفاده میکنیم و وضعیت ماژول رو در اون چاپ میکنیم:
1 2 | Ql_UART_Register(UART_PORT1, CallBack_UART_Hdlr, NULL); Ql_UART_Open(UART_PORT1, ۱۱۵۲۰۰, FC_NONE); |
سپس در یک حلقه While پیغامهایی که از هسته ماژول میاد رو بررسی میکنیم، ما از یک switch case استفاده کرده و مطابق با پیغامهای دریافتی میتونیم کدهایی رو اجرا کنیم.
مهمترین بخش RIL هست که کار AT_COMMAND ها رو برای ما انجام میده و توسط توابعی که RIL داره میتونیم از امکانات ماژول استفاده کنیم.
1 2 3 4 5 6 7 8 9 10 | while (TRUE) { s32 i = ۰; Ql_memset(&taskMsg, 0x0, sizeof(ST_MSG)); Ql_OS_GetMessage(&taskMsg); switch (taskMsg.message) { case MSG_ID_RIL_READY: { |
در خط 121 تا 133 آماده بودن امکان SMS رو بررسی کرده و در صورت آماده بودن یک پیام توسط تابع SMS_TextMode_Send ارسال میکنیم که مقدار اول اون شمارهای که باید پیام به اون ارسال به شه (تعریف شده در خط 17) و مقدار دوم متن پیام هست.
1 2 3 4 5 6 7 8 9 10 11 12 13 | case MSG_ID_URC_INDICATION: switch (taskMsg.param1) { case URC_SYS_INIT_STATE_IND: { if (SYS_STATE_SMSOK == taskMsg.param2) { RIL_SMS_DeleteSMS(۰, RIL_SMS_DEL_ALL_MSG); SMS_TextMode_Send(PhNum, "Module is ON\0"); APP_DEBUG("\r\n READY \r\n", taskMsg.param2); } break; } |
در خط 146 تا 151 دریافت پیام جدید رو بررسی میکنیم و در صورت وجود تابع Hdlr_RecvNewSMS رو صدا زده و در پارامتر اول اطلاعات پیام رو ارسال کرده و در پارامتر دوم مشخص میکنیم که پیامک تأیید دریافت برای فرستنده ارسال بشه یا نه
1 2 3 4 5 6 | case URC_NEW_SMS_IND: { APP_DEBUG("\r\n<-- New SMS Arrives: index=%d\r\n", taskMsg.param2); Hdlr_RecvNewSMS((taskMsg.param2), TRUE); break; } |
سپس در خط 66 تا 86 به بررسی پیام دریافتی میپردازیم و اگر پیام pin 1 on دریافت شده بود NETLIGHT روشن شده و اگر pin 1 off دریافت شده بود خاموش میشود.
سپس اگر ارسال پیامک تأیید فعال بود یک پیامک به شمارهای که از آن دستور دریافت شده بود با متن OK ارسال میشود.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | if (text[۰] == 'p' && text[1] == 'i' && text[2] == 'n') { switch (text[4]) { case '1': Ql_GPIO_Init(PINNAME_NETLIGHT, PINDIRECTION_OUT, 0, PINPULLSEL_PULLUP); if (text[۶] == 'o' && text[7] == 'n') { Ql_GPIO_SetLevel(PINNAME_NETLIGHT, 1); } else if (text[۶] == 'o' && text[7] == 'f' && text[8] == 'f') { Ql_GPIO_SetLevel(PINNAME_NETLIGHT, 0); } break; } if (bAutoReply) { SMS_TextMode_Send(aPhNum, "OK\0"); } } |
کار با بخش پیامک به طور کاملتر در بخش example های sdk موجود هست و میتوانید استفاده کنید.
توی قسمت بعد سراغ کار با بخش GPS ماژول رفته و اطلاعات مکانی رو به یک سرور ارسال میکنیم و مکان اون رو در یک نقشه گوگل نمایش میدهیم، پس قسمتهای بعدی آموزش رو هم دنبال کنید.
لازم به ذکر هست که خود شرکت کویکتل با استفاده از ادیتور Eclipse این قابلیت اپن سی پی یو را راه اندازی کرده و کلیه داکیومنت ها و حتی نسخه Eclipse مربوطه نیز درون فایل دانلودی پایین بصورت کامل در دسترس هست.
پیوست – لینکهای دانلود
اسم فایل
- MC60 OpenCPU Sisoog.rar
سلام. وقت بخیر. ممنون بابت آموزش خوبتون.
ولی یک مشکل!!
من برنامه دوم شما رو وقتی پروگرم کردم، دیگه نمیتونم با Qnavigator کار کنم. فکرکنم پورت سریال باز مونده باشه. الان اگه من بخوام با Qnavigator کد ارسال کنم، باید چکار کنم؟ ممنون از پاسخ شما.
سلام
وقتی برنامه میریزید روش و نیاز هست به حالت اول برگرده باید برنامه پیش فرض را روی ماژول بریزید
ممنون از شما. ولی برنامه پیش فرض رو از کجا باید بگیرم؟
ممنون. متوجه شدم. همون فایل main.c که اول قرار داده بودین،و بعد ما ویرایشش کردیم رو ریختم و خوب شد. خیلی خیلی ممنونم از آموزش های خوبتان.
خب خدا رو شکر مشکل حل شد
سلامی دوباره. البته فایل پیش فرض خود شرکت، فایل QUECTEL03D_M2M_11C_BB.cfg میباشد که داخل پوشه Default mode of MC60 میباشد و در همین فایل ضمیمه ای که عزیزان سیسوگ قرار داده اند، وجود دارد.
فایلی که قبلا گفته بودم(main.c پیش فرض)، وقتی پروگرم میشد، در نرم افزار qnavigator، نمیتونستیم پیامک ارسال کنیم و ارور میداد.
خواستم گفته باشم شاید به درد دوستان بخوره.ممنون از همه.
ممنون از شما
با درود و سپاس از مطالب بسیار عالی شما.
آیا MC60 قابلیت دماسنج هم دارد که از سنسور خارجی استفاده نکنیم….
لطفا راهنمایی بفرمایید….
سلام نه متاسفانه دوست عزیز
بخصوص اگر شما قرار باشه دمای خارجی را سنس کنید باید از سنسوری استفاده کنید که ترجیحا موارد دمایی روی برد تاثیر نداشته باشه
یکی از بهترین گزینه ها سنسورهای دمای I2C هست که میتونید به ماژول متصل کنید
سلام وقت بخير
ببخشيد من موقع نصب كامپايلر gccبرام پيغام Installer User Interface Mode Not Supported مياد
ممنون ميشم راهنماييم كنيد بايد چطور نصبشو كامل انجام بدم
احتمالا از ویندوز 10 استفاده میکنین!
برای حل این مشکل باید روی فایل نصبی کامپایلر راست کلیک کنین و در properties از زیر منو compatibility و در compatibility mode تیک run this program… رو بزنین و زبونه باز شو همان قسمت windows7 رو انتخاب کنین
با سلام و تشکر از این آموزش عالی
آیا با OpenCPU این قابلیت وجود داره که برای مثال با غیرفعال بودن SD memory card، از پایه های مربوطه به عنوان GPIO استفاده کرد؟ آیا دسترسی مستقیم به همه پایه های ماژول داریم؟
سلام
دوست عزیز یه سری پایه ها و پروتکل ها هست که داخل دیتاشیت هم اومده و شما دسترسی کامل برای کار با اونها دارید
حتی پروتکل هایی مثل I2C SPI هم هستند که به راحتی میتونید استفاده کنید.
با سلام و تشکر از مطالب خیلی مفید و آموزنده تون
یک سوالی که داشتم حدود مصرف ماژول توی حالت idle چقدر باید باشه؟
چون طبق چیزی که من در مستندات ماژول دیدم توی حالت معمول 13 میلی آمپر و حالت sleep حدود 1.2 میلی آمپر باید جریان بکشه
طبق اندازه گیزی های من حدود 100 میلی آمپر مصرف توان و با رفتن تو حالت sleep تغییر محسوسی احساس نمی کنم
توی ۲ مد at و open cpu تست کردم و هر دو جا اینطوری بوده
ممنون می شم اگه راهنمایی کنید چه نکاتی رو باید در نظر بگیرم که در نظر نگرفتم
سلام دوست عزیز مدارتون را حتما بررسی کنید
در حالت اسلیپ هم باید جی پی اس را خاموش کنید و هم قسمت جی اس ام را به حالت اسلیپ ببرید
مصرف اون با رعایت همه موارد به زیر 5 میلی امپر میاد
درود بر سروران گرامی:
من با eclips کار کردم با release مشکل داره اما با تارگت debug درسته.نمیدونم براچی.
حالا با debug میخوام make->target ,و Build کنم نمیشه واین خطا رو میده
12:57:47 **** Build of configuration Debug for project OpenCPU_SDK ****
“G:\\Folder\\programs\\software electronic\\Compailer\\MC60 OpenCPU Sisoog\\MC60\\OpenCPU\\MC60_OpenCPU_GS3_SDK_V1.3_Eclipse\\MC60_OpenCPU_GS3_SDK_V1.3_Eclipse\\make\\GFH_Generator.exe” “G:\\Folder\\programs\\software” “electronic\\Compailer\\MC60” OpenCPU “Sisoog\\MC60\\OpenCPU\\MC60_OpenCPU_GS3_SDK_V1.3_Eclipse\\MC60_OpenCPU_GS3_SDK_V1.3_Eclipse\\Debug\\APPGS3MDM32A01.bin”
error:parameter numbers must be 2!
12:57:47 Build Finished (took 133ms)
سپاس فراوان
برای رفع این خطا تمام تنظیمات دیباگ رو به حالت ریلیز نیز منتقل کنید
جز فلگ بهینه سازی کد (اپتیمایز)
سپاس
مشکل make build رو چکار کنم:
error:parameter numbers must be 2!
متن کامل خطا رو می نویسید ؟
G:/Folder/programs/software electronic/Compailer/M66_OpenCPU_GS3_SDK_V2.4_Eclipse_3/M66_OpenCPU_GS3_SDK_V2.4_Eclipse/make/make –no-print-directory post-build
copy /y G:\Folder\programs\software electronic\Compailer\M66_OpenCPU_GS3_SDK_V2.4_Eclipse_3\M66_OpenCPU_GS3_SDK_V2.4_Eclipse\libs\app_image_bin.cfg G:\Folder\programs\software electronic\Compailer\M66_OpenCPU_GS3_SDK_V2.4_Eclipse_3\M66_OpenCPU_GS3_SDK_V2.4_Eclipse\Debug\app_image_bin.cfg
The system cannot find the file specified.
make[1]: [post-build] Error 1 (ignored)
خوب باید مسیر ها رو هم دونه دونه اصلاح کنید
فکر میکنم راحت ترین کار این باشه که پروژه رو توی همون حالت دیباگ بذارید ولی توی تنظیمات پروژه برید و بگید اطلاعات دیباگ رو ایجاد نکنه
در حالت دیباگ فلگ اپتیمایز روی Og هست که تغییرش بدید مثلا به Os یا O2
Description Resource Path Location Type
Symbol ‘main_task_id’ could not be resolved ril_urc.c /OpenCPU_SDK_M66/ril/src line 217 Semantic Error
مهندس جان این خطا رو هم میده
این چجوری رفع میشه؟
اون راهی رو که عرض کردم رو برید جلو
درود.برشما.
آیا حافظه داخلی داره برا ذخیره ؟
بلی داره یه حافظه کمی برای کد و حتی ذخیره کردن اطلاعات داره
مقدارش چقدره ؟تو هر ماژول فرق میکنه .آیا M10 ،Open cpu داره؟داکویمنت ها مقدار زده؟
داخل داکیومنت ها هست 320 کیلو برای کد و 120 کیلو File system
سپاس فراوان.تمام ماژول ها open cpu دارن ؟یا اینه با حرف خاصی تو پارت نامبر مشخص میشه که کدوم ماژول داره؟
نه این قابلیت حدیدا اضافه شده و بخاطر قابلیتهایی هست که هسته های اونها دارند
باید دقیق ماژول را بررسی کرد آیا داره یا نه
سلام،ممنون از آموزش های خوبتون،چطور میشه سمپل هایی که میزنیم رو در فرمت example مثل خوده فایلsdk ذخیره کرد؟؟
سلام
شما باید در همون پوشه example یک فایل با نام دلخواهتون بسازید ، بعد در ابتدای فایلتون مثل بقیه سمپل ها یک شرط به این صورت بنویسید “#ifdef __MY_EXAMPLE__” و در انتهای فایل هم این شرط رو ببندید.
حالا برای استفاده از اون داخل فایل “make/gcc/gcc_makefile” در خط 21 اسمی که برای سمپلتون مشخص کردید رو وارد کنید مثلا به این صورت میشه “C_PREDEF=-D __MY_EXAMPLE__”
بنام آفریننده ماه و مهر
سلام : این لینک را عوض کردم باز جواب مثل قبل می باشد.
کجا مشکل دارد یا چه مرحله ای اجرا نشده یا … .
این کد خروجی است که بنا به جوابتان نام پوشه از mc60_1 ==> MC60 OpenCPU Sisoog.rar تغییر دادم و برنامه را کامپایل کردم.
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\Users\mahmood\Desktop\MC60 OpenCPU Sisoog.rar\GS3_SDK_V2.3>make clean && make
new
process_begin: CreateProcess(NULL, “C:\Program Files (x86)\CodeSourcery\Sourcery
_CodeBench_Lite_for_ARM_EABI/bin/cs-rm.exe” -f build\gcc\obj/custom/config/custo
m_sys_cfg.o build\gcc\obj/custom/config/sys_config.o build\gcc\obj/ril/src/ril_a
larm.o build\gcc\obj/ril/src/ril_atResponse.o build\gcc\obj/ril/src/ril_audio.o
build\gcc\obj/ril/src/ril_bluetooth.o build\gcc\obj/ril/src/ril_custom.o build\g
cc\obj/ril/src/ril_dtmf.o build\gcc\obj/ril/src/ril_ftp.o build\gcc\obj/ril/src/
ril_http.o build\gcc\obj/ril/src/ril_init.o build\gcc\obj/ril/src/ril_location.o
build\gcc\obj/ril/src/ril_network.o build\gcc\obj/ril/src/ril_ntp.o build\gcc\o
bj/ril/src/ril_sim.o build\gcc\obj/ril/src/ril_sms.o build\gcc\obj/ril/src/ril_s
ystem.o build\gcc\obj/ril/src/ril_telephony.o build\gcc\obj/ril/src/ril_urc.o bu
ild\gcc\obj/ril/src/ril_util.o build\gcc\obj/example/example_adc.o build\gcc\obj
/example/example_alarm.o build\gcc\obj/example/example_audio.o build\gcc\obj/exa
mple/example_bluetooth.o build\gcc\obj/example/example_call.o build\gcc\obj/exam
ple/example_clk.o build\gcc\obj/example/example_csd.o build\gcc\obj/example/exam
ple_download_epo.o build\gcc\obj/example/example_dtmf.o build\gcc\obj/example/ex
ample_eint.o build\gcc\obj/example/example_file.o build\gcc\obj/example/example_
float_math.o build\gcc\obj/example/example_fota_ftp.o build\gcc\obj/example/exam
ple_fota_http.o build\gcc\obj/example/example_ftp.o build\gcc\obj/example/exampl
e_gpio.o build\gcc\obj/example/Example_gps_iic.o build\gcc\obj/example/example_h
ttp.o build\gcc\obj/example/example_iic.o build\gcc\obj/example/example_location
.o build\gcc\obj/example/example_memory.o build\gcc\obj/example/example_multitas
k.o build\gcc\obj/example/example_multitask_port.o build\gcc\obj/example/example
_pwm.o build\gcc\obj/example/example_sms.o build\gcc\obj/example/example_spi.o b
uild\gcc\obj/example/example_system.o build\gcc\obj/example/example_tcp_demo.o b
uild\gcc\obj/example/example_tcpclient.o build\gcc\obj/example/example_tcpserver
.o build\gcc\obj/example/example_time.o build\gcc\obj/example/example_timer.o bu
ild\gcc\obj/example/example_transpass.o build\gcc\obj/example/example_udpclient.
o build\gcc\obj/example/example_udpserver.o build\gcc\obj/example/example_watchd
og.o build\gcc\obj/example/main1.o build\gcc\obj/example/nema_pro.o build\gcc\ob
j/example/utility.o build\gcc\obj/custom/main.o build\gcc\obj/custom/fota/src/fo
ta_ftp.o build\gcc\obj/custom/fota/src/fota_http.o build\gcc\obj/custom/fota/src
/fota_http_code.o build\gcc\obj/custom/fota/src/fota_main.o build\gcc/build.log
build\gcc/APPGS3MDM32A01.map build\gcc/APPGS3MDM32A01.bin build\gcc/APPGS3MDM32A
01.elf, …) failed.
make (e=2): The system cannot find the file specified.
make: *** [clean] Error 2
1 file(s) copied.
make.exe[1]: Entering directory
C:/Users/mahmood/Desktop/MC60 OpenCPU Sisoog.ra
C:/Users/mahmood/Desktop/MC60 OpenCPU Sisoog.rarr/GS3_SDK_V2.3'
make.exe[1]: Leaving directory
/GS3_SDK_V2.3′
C:\Users\mahmood\Desktop\MC60 OpenCPU Sisoog.rar\GS3_SDK_V2.3>
با تشکرات فراوان
به نام آفریننده جان و خرد.
سلام
هر کار می کنم فایل کامپایلر نمی شه و خطای زیر دارد. اشکال کار کجاست. کامپایلرgcc را هم نصب کردم همچنین برنامه را داخل vc code باز کردم و فایل main.c را تغییر دادم به چشمک زن لطفا در صورت امکان بصورت فیلم انیمیشن نشان دهید .
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\Users\mahmood\Desktop\mc60_1\GS3_SDK_V2.3>make clean && make new
process_begin: CreateProcess(NULL, “C:\Program Files (x86)\CodeSourcery\Sourcery
_CodeBench_Lite_for_ARM_EABI/bin/cs-rm.exe” -f build\gcc\obj/custom/config/custo
m_sys_cfg.o build\gcc\obj/custom/config/sys_config.o build\gcc\obj/ril/src/ril_a
larm.o build\gcc\obj/ril/src/ril_atResponse.o build\gcc\obj/ril/src/ril_audio.o
build\gcc\obj/ril/src/ril_bluetooth.o build\gcc\obj/ril/src/ril_custom.o build\g
cc\obj/ril/src/ril_dtmf.o build\gcc\obj/ril/src/ril_ftp.o build\gcc\obj/ril/src/
ril_http.o build\gcc\obj/ril/src/ril_init.o build\gcc\obj/ril/src/ril_location.o
build\gcc\obj/ril/src/ril_network.o build\gcc\obj/ril/src/ril_ntp.o build\gcc\o
bj/ril/src/ril_sim.o build\gcc\obj/ril/src/ril_sms.o build\gcc\obj/ril/src/ril_s
ystem.o build\gcc\obj/ril/src/ril_telephony.o build\gcc\obj/ril/src/ril_urc.o bu
ild\gcc\obj/ril/src/ril_util.o build\gcc\obj/example/example_adc.o build\gcc\obj
/example/example_alarm.o build\gcc\obj/example/example_audio.o build\gcc\obj/exa
mple/example_bluetooth.o build\gcc\obj/example/example_call.o build\gcc\obj/exam
ple/example_clk.o build\gcc\obj/example/example_csd.o build\gcc\obj/example/exam
ple_download_epo.o build\gcc\obj/example/example_dtmf.o build\gcc\obj/example/ex
ample_eint.o build\gcc\obj/example/example_file.o build\gcc\obj/example/example_
float_math.o build\gcc\obj/example/example_fota_ftp.o build\gcc\obj/example/exam
ple_fota_http.o build\gcc\obj/example/example_ftp.o build\gcc\obj/example/exampl
e_gpio.o build\gcc\obj/example/Example_gps_iic.o build\gcc\obj/example/example_h
ttp.o build\gcc\obj/example/example_iic.o build\gcc\obj/example/example_location
.o build\gcc\obj/example/example_memory.o build\gcc\obj/example/example_multitas
k.o build\gcc\obj/example/example_multitask_port.o build\gcc\obj/example/example
_pwm.o build\gcc\obj/example/example_sms.o build\gcc\obj/example/example_spi.o b
uild\gcc\obj/example/example_system.o build\gcc\obj/example/example_tcp_demo.o b
uild\gcc\obj/example/example_tcpclient.o build\gcc\obj/example/example_tcpserver
.o build\gcc\obj/example/example_time.o build\gcc\obj/example/example_timer.o bu
ild\gcc\obj/example/example_transpass.o build\gcc\obj/example/example_udpclient.
o build\gcc\obj/example/example_udpserver.o build\gcc\obj/example/example_watchd
og.o build\gcc\obj/example/main1.o build\gcc\obj/example/nema_pro.o build\gcc\ob
j/example/utility.o build\gcc\obj/custom/main.o build\gcc\obj/custom/fota/src/fo
ta_ftp.o build\gcc\obj/custom/fota/src/fota_http.o build\gcc\obj/custom/fota/src
/fota_http_code.o build\gcc\obj/custom/fota/src/fota_main.o build\gcc/build.log
build\gcc/APPGS3MDM32A01.map build\gcc/APPGS3MDM32A01.bin build\gcc/APPGS3MDM32A
01.elf, …) failed.
make (e=2): The system cannot find the file specified.
make: *** [clean] Error 2
1 file(s) copied.
make.exe[1]: Entering directory
C:/Users/mahmood/Desktop/mc60_1/GS3_SDK_V2.3'
C:/Users/mahmood/Desktop/mc60_1/GS3_SDK_V2.3′make.exe[1]: Leaving directory
C:\Users\mahmood\Desktop\mc60_1\GS3_SDK_V2.3>
با تشکرات فراوان.
سلام
لینک این فایل MC60 OpenCPU Sisoog.rar نیومده.
سپاس
لینک رو من الان چک کردم مشکلی نداشت
با سلام
ممنون بابت مطلب بالا
document های مربوط به OpenCPU ماژول M66 رو از کجا میشه دریافت کرد؟ من داخل سایت خود شرکت هم چیزی نتونستم پیدا کنم
سلام دوست عزیز
لینک M66 Hardware design :
https://www.quectel.com/UploadImage/Downlad/Quectel_M66_Hardware_Design_V1.2.pdf
موفق باشین
ممنون از پاسختون
اگر تو این فایل یکبار کلمه OpenCPU رو پیدا کردین به من هم نشون بدین. اصلا در موردش اشاره هم نشده. فک میکنم به خود شرکتش باید ایمیل بزنم
فایل های مربوطه رو به انتهای مقاله پیوست کردیم که میتونید دانلود کنید.
داکیومنت هاش هم همراهش هست
سلام دوست عزیز
فایل انتهایی همین پست رو دانلود کنید – توی اسمش هم ذکر شده opencpu
تمام فایل های مربط به راه اندازی و راهنمای اون داخل همون فایل هست
Perfect
به نام خالق متعال :
با سلام بر همگی
خیلی خوشحالم که قسمت دوم این ماژول را گذاشتید .
لطفا یک کیت آموزشی مناسب برای اینگونه open cpu ها نیز معرفی نمایید. ممنون می شوم.
ونیز برنامه ای برای کار با ماژول های هوش مصنوعی (AI) شرکت چینی مثل sc66 و معرفی دیگر ماژول های آن که خودم در کاتالوگ های آن یا در سایت شما منتشر می شود واقعا آدم فکر می کند که دارد خواب می بیند. که یک ماژولی بتواند اینقدر قدرت و یا ظرفیت بالایی داشته باشد که کار چند یا چندین آی سی مجزا را با هم انجام داده. و
با چندین خط کد به نتیجهء دلخواه برسد. با تشکر
سلام دوست عزیز
در قسمت اول ما شماتیک و پی سی بی رایگان از این برد را برای دانلود قرار دادیم که میتونید براحتی استفاده کنید 🙂
انشاله در مورد اونها هم بیشتر خواهیم نوشت