در مطلب قبل به معرفی ماژول و نحوه برقراری ارتباط با آن پرداختیم و در این مطلب قصد داریم که به نحوه استفاده از SDK ماژول بپردازیم و با هم یک پروژه کوچک (Hello World!) انجام دهیم تا با این ماژول بیشتر آشنا شوید و بتوانید برنامه ی خود را روی ماژول بریزید. کار با SDK ماژول سخت نیست چراکه خود شرکت برای شما کدهایی به عنوان مثال آماده کرده که میتوانید از آنها استفاده کنید. در این SDK تمام قابلیتهای ماژول مثل تماس، پیامک، پروتکل های ارتباطی مثل MQTT، آپدیت از راه دور، مدیریت مصرف و چندین و چند قابلیت دیگر با مثال آورده شده که کار شما را برای توسعه محصول آسان میکند. لازم به ذکر است که در این آموزش از لینوکس Debian استفاده شده است. چنانچه از ویندوز استفاده میکنید میتوانید با استفاده از ابزارهای ویندوز مانند WSL از مطالب این آموزش بهره ببرید.
ابزار ما برای کار با ماژول SDK برای برنامه نویسی و Qloader جهت نصب برنامه روی ماژول است که در ادامه با روش استفاده از آن ها آشنا میشوید. ابتدا لازم است که SDK را دانلود کنید و سپس آن را از حالت zip خارج کنید و وارد دایرکتوری SDK شوید. سپس لازم است که تغییراتی ایجاد کنیم تا SDK بیلد شود. اول از همه دسترسی Shell Scriptی که مربوط به بیلد کردن SDK هست را تغییر میدهیم و سپس خط اول آن را با این عبارت (#!/bin/bash) عوض کنید.
1 2 | chmod 777 build_all.sh nano ./build_all.sh |
پس از تغییر باید اسکریپت شما به شکل زیر باشد.
برای بیلد کردن پروژه از این دستور استفاده کنید
1 | ./build_all.sh new EC200UEU_AA V01 |
اگر پروژه شما به درستی بیلد شد در دایرکتوری target خروجی چیزی را که ساختید مشاهده میکنید.
1 2 | sisoog@sisoog:~/LTE01R03A04_C_SDK_U/target/EC200UEU_AA_V01$ ls 8915DM_cat1_open.elf 8915DM_cat1_open_V01_merge.pac app 8915DM_cat1_open.map 8915DM_cat1_open_V01.pac prepack |
فایلی که باید استفاده کنید به این اسم (8915DM_cat1_open_V01_merge.pac) است.
حالا برای نصب فایل روی ماژولتان باید از (QDloader) استفاده کنید. پس از دانلود و خارج کردن آن از حالت zip نیاز است که آن را بیلد کنید. به این صورت که وارد دایرکتوری آن شده و با دستور make آن را بیلد کنید.
1 2 | sisoog@sisoog:~/QDloader_Linux_Android_V1.0.14/out$ ls QDloader |
حالا که لودر را دارید با کپی کردن فایل (8915DM_cat1_open_V01_merge.pac) که با SDK ساختید در دایرکتوری out در QDloader میتوانید کد را روی ماژولتان بریزید. برای اینکار از دستور زیر استفاده کنید.
1 | sudo ./QDloader -s /dev/ttyUSB0 -f 8915DM_cat1_open_V01_merge.pac -g EC200U |
دقت کنید که میتوانید پورت USB را با استفاده از تغییر این قسمت (/dev/ttyUSB0) در دستور بالا تنظیم کنید.
خب اگر تا الان همه چیز خوب پیش رفته به سراغ تغییر کد ماژول میرویم. به دایرکتوری SDK بر میگردیم و فایل (ql_int.c) را ادیت میکنیم. این فایل را در دایرکتوری زیر پیدا میکنید.
1 | sisoog@sisoog:~$ nano LTE01R02A05_C_SDK_U/components/ql-application/init/ql_int.c |
تابع (ql_ledcfg_app_init();) را پیداکنید و آن را از حالت کامنت خارج کنید و سپس با کلیک سمت راست و (go to defenition) یا در VsCode با (F12) وارد فایل (led_cfg_demo.c) شوید.
میتوانیم برنامه ای که در این فایل وجود دارد را به سه قسمت تقسیم کنیم. قسمت اول که در انتهای فایل قرار دارد مربوط به ساخت یک تسک توسط OS است.
1 2 3 4 5 6 7 8 9 10 | void ql_ledcfg_app_init(void) { QlOSStatus err = QL_OSI_SUCCESS; err = ql_rtos_task_create(&ledcfg_task, 1024, APP_PRIORITY_NORMAL, "ql_ledcfgdemo", ql_ledcfg_demo_thread, NULL, 1); if( err != QL_OSI_SUCCESS ) { QL_LEDCFGDEMO_LOG("led config demo task created failed"); } } |
قسمت دوم تابعی است که لازم است توسط OS اجرا شود.
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 | static void ql_ledcfg_demo_thread(void *param) { QL_LEDCFGDEMO_LOG("led config demo thread enter, param 0x%x", param); /*** LPG open ***/ ql_pwm_open(PWM_LPG); QL_LEDCFGDEMO_LOG("led config start"); /* set NET_MODE */ ql_pin_set_func(QL_PIN_GPIO1, QL_PIN_GPIO1_FUNC_ZSP_CTS); //Pin126 set zsp_uart_cts, two pins can't set the same GPIO ql_pin_set_func(QL_PIN_NET_MODE, QL_PIN_NET_MODE_FUNC_GPIO); ql_gpio_init(QL_GPIO_NET_MODE, GPIO_OUTPUT, PULL_NONE, LVL_LOW); ql_event_t event; ql_ledcfg_callback_register(_ledcfg_demo_cb); while(1) { if( ql_event_try_wait(&event) != 0 ) { continue; } if( event.id == QUEC_LEDCFG_EVENT_IND ) { switch( event.param1 ) { case IND_SIM_NOT_INSERT: case IND_SIM_INITIALIZING: case IND_SIM_PIN_LOCK: case IND_SIM_CPIN_READY: case IND_SEARCHING: case IND_CAMP_ON_CELL: case IND_REGISTERING: QL_LEDCFGDEMO_LOG("led config slow twinkle [%d]", event.param1); ql_pwm_lpg_enable(QL_LED_TWINKLE_SLOW_PERIOD, QL_LED_TWINKLE_SLOW_ONTIME); break; case IND_STANDBY: case IND_PDP_ACTIVING: case IND_PDP_ACTIVED: case IND_SOCKET_SET_UP: case IND_PDP_DEACTIVING: QL_LEDCFGDEMO_LOG("led config fast twinkle [%d]", event.param1); ql_pwm_lpg_enable(QL_LED_TWINKLE_FAST_PERIOD, QL_LED_TWINKLE_FAST_ONTIME); break; case IND_DATA_TRANSMIT: QL_LEDCFGDEMO_LOG("led config speed twinkle [%d]", event.param1); ql_pwm_lpg_enable(QL_LED_TWINKLE_SPEED_PERIOD, QL_LED_TWINKLE_SPEED_ONTIME); break; case IND_DIALING: QL_LEDCFGDEMO_LOG("led config keep on [%d]", event.param1); ql_pwm_lpg_enable(QL_LED_TWINKLE_ON_PERIOD, QL_LED_TWINKLE_ON_ONTIME); break; default: QL_LEDCFGDEMO_LOG("led config error!"); break; } if( event.param2 == IND_NET_TYPE_4G ) { QL_LEDCFGDEMO_LOG("led config network is 4G"); ql_gpio_set_level(QL_GPIO_NET_MODE, LVL_HIGH); } else { QL_LEDCFGDEMO_LOG("led config network is not 4G"); ql_gpio_set_level(QL_GPIO_NET_MODE, LVL_LOW); } } } ql_rtos_task_delete(NULL); } |
قسمت سوم کد مربوط به توابع لاگ است.
1 2 3 | #define QL_LEDCFGDEMO_LOG_LEVEL QL_LOG_LEVEL_INFO #define QL_LEDCFGDEMO_LOG(msg, ...) QL_LOG(QL_LEDCFGDEMO_LOG_LEVEL, "ql_LEDCFGDEMO", msg, ##__VA_ARGS__) #define QL_LEDCFGDEMO_LOG_PUSH(msg, ...) QL_LOG_PUSH("ql_LEDCFGDEMO", msg, ##__VA_ARGS__) |
برای اینکه بتوانیم LED روی برد را خاموش و روشن کنیم باید تابع (static void ql_ledcfg_demo_thread(void *param)) را به دلخواه خودمان تغییر دهیم. مثلا برای خاموش و روشن شدن LED مربوط به NET Status تابع را به شکل زیر تغییر میدهیم.
1 2 3 4 5 6 7 8 9 10 11 12 | static void ql_ledcfg_demo_thread(void *param) { ql_pin_set_func(QL_PIN_NET_MODE, QL_PIN_NET_MODE_FUNC_GPIO); ql_gpio_init(QL_GPIO_NET_MODE, GPIO_OUTPUT, PULL_NONE, LVL_LOW); while(1) { ql_gpio_set_level(QL_GPIO_NET_MODE,1); ql_rtos_task_sleep_s(1); ql_gpio_set_level(QL_GPIO_NET_MODE,0); ql_rtos_task_sleep_s(1); } } |
پس از اینکه کد را نوشتید برای کامپایل کد از دستور زیر استفاده میکنیم.
1 | ./build_all.sh new EC200UEU_AA V01 |
سپس در دایرکتوری (target) فایل (8915DM_cat1_open_V01_merge.pac) را پیداکنید و در دایرکتوری (out) لودر (QDloader_Linux_Android) قراردهید و با دستور زیر ماژول را پروگرم کنید.
1 | sudo ./QDloader -s /dev/ttyUSB0 -f 8915DM_cat1_open_V01_merge.pac -g EC200U |
پس از اینکه ماژول با موفقیت پروگرم شد باید LED مربوط به NET Status به صورت چشمک زن خاموش و روشن شود.
امیدوارم از این آموزش استفاده لازم را برده باشید. منتظر آموزش بعدی ما باشید 🙂
وبسایت: http://www.arvidtek.com
www.arvidtek.com | گروه مهندسی آرویدتک | فعال حوزه الکترونیک و مخابرات | فروشگاه تخصصی قطعات الکترونیک
مقالات بیشتر
نویسنده شو !
سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.