این روز ها ماژول های GSM بخش جدایی ناپذیر از خیلی پروژه ها شدند، چرا که به کمک اونها میشه از راه دور وضعیت دستگاه رو بررسی کرد و یا بهش فرمان داد. البته از مدت ها قبل این ماژول ها جاشون رو توی پروژه های الکترونیک باز کرده بودند، میشه گفت این داستان از ماژول SIM900 شروع شد و قدیمیها بیشتر باهاش کار کردند، بعد از اون هم سری SIM800 که هنوز داره برای خیلی پروژه ها استفاده میشه، هرچند که ماژول هایی با تکنولوژی 4G برای پروژه های جدید مناسب تر هستند و امکانات خیلی بیشتری دارند اما فعلا این قیمت هست که بر هرچیزی برتری پیدا کرده.
اگر با سری های SIM800 کار کرده باشید به احتمال زیاد با مشکلات زیادی دست و پنجه نرم کردید و شاید هنوز هم باهاش مشکل دارید!، مشکلاتی مثل هنگ کردن و آنتن دهی، توی این آموزش میخوایم یک ماژول 2G مناسب از شرکت کوییکتل معرفی کنیم و نحوه استفاده از اون رو آموزش بدیم تا بتونید راحت تر از همیشه اون رو جایگزین SIM800 بکنید، پس با سیسوگ همرا باشید.
شاید برای شما مفید باشد : آموزش اینترنت اشیاء از 0 تا 100
سخت افزار
شاید بشه گفت افرادی که از ماژول sim800 در پروژه هاشون استفاده میکنند دو دسته میشند، یک دسته اونهایی که خود ماژول رو در طراحی هاشون استفاده میکنند و ماژول روی بردشون مونتاژ میشه و دسته دوم افرادی هستند که از کور برد این ماژول استفاده میکنند که تصویر اون رو در ادامه مشاهده میکنید.
ما برای دسته اول اگر از ماژول SIM800C در طراحی هاشون استفاده کردند، پیشنهاد استفاده از ماژول M08R رو میدیم که بتونند این ماژول رو به راحتی و بدون تغییر در PCB در پروژه هاشون استفاده کنند.
برای دسته دوم که کم هم نیستند (با توجه به بررسی ها این کوربرد در خیلی از محصولات استفاده شده و خب این نشون دهنده کاربردی بودنش هست، همچنین اکثر افرادی که میخواند کار با ماژول های gsm رو شروع کنند به سراغ این ماژول میرند) پیشنهاد استفاده از کوربرد ماژول M66 کوییکتل رو میدیم که از هر نظر کاملا منطبق بر نمونه simcom هست (فقط پین ریست رو نداره که اونم به دلیل عدم وجود این پین در خود ماژول هست (هرچند کاربرد زیادی هم نداره!)) در ادامه تصویر این برد رو مشاهده میکنید.
ما در این آموزش از همین کور برد ماژول M66 استفاده میکنیم.
معرفی کتابخانه TinyGSM
برای راه اندازی ماژول M66 در اینجا از کتابخانه TinyGSM استفاده میکنیم، این کتابخانه مناسب برای انواع مختلف ماژول های GSM از شرکت های simcom ،Quectel ،ublox و … هست که برای آردوینو نوشته شده.
برای استفاده از این کتابخونه ابتدا از مسیر sketch->include library -> manage libraries کتابخانه TinyGSM رو به آردوینو اضافه میکنیم.
حالا میتونید از نمونه کدهای کتابخونه استفاده کرده و نحوه کار باهاش رو یاد بگیرید ، در اینجا ما نمونه کد AllFunctions رو برای M66 ادیت کردیم.
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 159 160 161 162 163 164 165 166 167 | // Select your modem: // #define TINY_GSM_MODEM_SIM800 // #define TINY_GSM_MODEM_SIM808 // #define TINY_GSM_MODEM_SIM900 // #define TINY_GSM_MODEM_M95 // #define TINY_GSM_MODEM_BG96 // #define TINY_GSM_MODEM_A6 // #define TINY_GSM_MODEM_A7 // #define TINY_GSM_MODEM_M590 #define TINY_GSM_MODEM_MC60 // #define TINY_GSM_MODEM_MC60E // Set serial for debug console (to the Serial Monitor, default speed 115200) #define SerialMon Serial // Set serial for AT commands (to the module) // Software Serial on Uno, Nano #include <SoftwareSerial.h> SoftwareSerial SerialAT(2, 3); // RX, TX // Define the serial console for debug prints, if needed #define TINY_GSM_DEBUG SerialMon /* * Tests enabled */ #define TINY_GSM_TEST_GPRS true #define TINY_GSM_TEST_CALL true #define TINY_GSM_TEST_SMS true #define TINY_GSM_TEST_BATTERY true #define TINY_GSM_TEST_TEMPERATURE true // Set phone numbers, if you want to test SMS and Calls #define SMS_TARGET "+989100000000" #define CALL_TARGET "+989100000000" // Your GPRS credentials, if any const char apn[] = "MCINET"; // const char apn[] = "ibasis.iot"; const char gprsUser[] = ""; const char gprsPass[] = ""; #include <TinyGsmClient.h> #ifdef DUMP_AT_COMMANDS #include <StreamDebugger.h> StreamDebugger debugger(SerialAT, SerialMon); TinyGsm modem(debugger); #else TinyGsm modem(SerialAT); #endif void setup() { // Set console baud rate SerialMon.begin(115200); delay(10); // Set GSM module baud rate SerialAT.begin(57600); SerialAT.println("ATE0"); DBG("Wait..."); delay(1000); } void loop() { String name = modem.getModemName(); DBG("Modem Name:", name); String modemInfo = modem.getModemInfo(); DBG("Modem Info:", modemInfo); #if TINY_GSM_TEST_GPRS // Unlock your SIM card with a PIN if needed if (GSM_PIN && modem.getSimStatus() != 3) { modem.simUnlock(GSM_PIN); } #endif DBG("Waiting for network..."); if (!modem.waitForNetwork(200000L, true)) { delay(10000); return; } if (modem.isNetworkConnected()) { DBG("Network connected"); } #if TINY_GSM_TEST_GPRS DBG("Connecting to", apn); if (!modem.gprsConnect(apn, gprsUser, gprsPass)) { delay(10000); return; } bool res = modem.isGprsConnected(); DBG("GPRS status:", res ? "connected" : "not connected"); String ccid = modem.getSimCCID(); DBG("CCID:", ccid); String imei = modem.getIMEI(); DBG("IMEI:", imei); String imsi = modem.getIMSI(); DBG("IMSI:", imsi); String cop = modem.getOperator(); DBG("Operator:", cop); IPAddress local = modem.localIP(); DBG("Local IP:", local); int csq = modem.getSignalQuality(); DBG("Signal quality:", csq); #endif #if TINY_GSM_TEST_CALL && defined TINY_GSM_MODEM_HAS_CALLING && \ defined CALL_TARGET DBG("Calling:", CALL_TARGET); // This is NOT supported on M590 res = modem.callNumber(CALL_TARGET); DBG("Call:", res ? "OK" : "fail"); if (res) { delay(1000L); // Play DTMF A, duration 1000ms modem.dtmfSend('A', 1000); // Play DTMF 0..4, default duration (100ms) for (char tone = '0'; tone <= '4'; tone++) { modem.dtmfSend(tone); } delay(8000); res = modem.callHangup(); DBG("Hang up:", res ? "OK" : "fail"); } #endif #if TINY_GSM_TEST_SMS && defined TINY_GSM_MODEM_HAS_SMS && defined SMS_TARGET res = modem.sendSMS(SMS_TARGET, String("Hello from ") + imei); DBG("SMS:", res ? "OK" : "fail"); #endif #if TINY_GSM_TEST_BATTERY && defined TINY_GSM_MODEM_HAS_BATTERY uint8_t chargeState = -99; int8_t percent = -99; uint16_t milliVolts = -9999; modem.getBattStats(chargeState, percent, milliVolts); DBG("Battery charge state:", chargeState); DBG("Battery charge 'percent':", percent); DBG("Battery voltage:", milliVolts / 1000.0F); #endif DBG("End of tests."); // Do nothing forevermore while (true) { modem.maintain(); } } |
در ابتدا باید ماژولی که میخوایم از اون استفاده کنیم رو مشخص کنیم ، اینجا ماژول MC60 رو مشخص کردیم چراکه توی کانفیگ ها ماژول M66 نیست اما اکثر توابع قابل استفاده هستند.
1 | #define TINY_GSM_MODEM_MC60 |
بعد از اون شماره ای که قرار هست بهش زنگ زده بشه و پیامک ارسال بشه رو مشخص میکنیم.
1 2 3 | // Set phone numbers, if you want to test SMS and Calls #define SMS_TARGET "+989100000000" #define CALL_TARGET "+989100000000" |
باودریت سریال رو هم روی 57600 میزاریم چراکه اینجا بهتر جواب میده. بعد از اون هم دستور ATE0 رو برای ماژول میفرستیم تا هرچی براش میفرسیم رو تکرار نکنه و راحت تر بتونیم جواب هاش رو بخونیم.
1 2 3 | // Set GSM module baud rate SerialAT.begin(57600); SerialAT.println("ATE0"); |
بعد از اون هم توسط توابعی که کتابخونه tinyGSM داره بخش های مختلف ماژول رو تست میکنیم.
نمونش هم تابع ارسال sms هست که به این صورت ازش استفاده میشه.
1 2 | res = modem.sendSMS("09100000000", String("Hello from M66")); DBG("SMS:", res ? "OK" : "fail"); |
شاید برای شما مفید باشد: آموزش آردوینو از مقدماتی تا پیشرفته
شماتیک مدار
حالا میریم سراغ بستن مدار ، از شماتیک پایین برای اتصال ماژول m66 به آردوینو میتونید استفاده کنید.
(مقدار پیشنهادی برای خازن ها1000 و 220 میکروفاراد هست.)
البته این نکته رو بگم که شماتیک بالا غیر اصولی هست و اصلا پیشنهاد نمیشه برای مدارات نهاییتون استفاده کنید (هرچند اکثر سایت های خارجی به همین صورت پیش رفتند) دلیلش هم این هست که سطح ولتاژ سریال ماژول m66 مقدار 2.8 ولت هست و سطح ولتاژ سریال آردوینو 5 ولت و این باعث آسیب زدن و کار ندادن توی طولانی مدت میشه.
در ادامه میتونید این داکیومنت از شرکت سیم کام رو بررسی کنید که برای تبدیل سطح ولتاژ چند مدار رو پیشنهاد داده.
نمونه ترانزیستوری
همچنین این ماژول های مبدل هم قابل استفاده هستند.
این هم یک مدار پیشنهادی برای تبدیل سطح ولتاژ UART از این داکیومنت شرکت texas instrument
برای بررسی نمونه های دیگر مبدل ولتاژ و خرید اونها میتونید از موتور جست و جوی آیسی استفاده کنید.