سلام. وقتی سیمکارت ایرانسل داخل ماژول sim800l میکذاریم پیامک دریافت میکند اما پیامک ارسال نمیکند! چند سیمکارت و چند ماژول را هم امتحان کردیم همین مشکل را دارد اما همراه اول و رایتل مشکلی ندارند، سیمکارتها را در گوشی هم که می اندازیم مشکلی ندارند و پیامک ارسال میکنند آنتن دهی کامل هم دارد، چطور باید مشکل ایرانسل را برطرف کنیم؟ کد و دستوراتی برای ایرانسل باید اضافه کنیم.
.
.
.
کدهایی مه برای ارسال پیامک استفاده میکنیم(البته امکان دارد چون از خفظنوشتم اشکالاتی داشته باشه اما با اندکی تفاوت همین است و با همراه اول و رایتل هم کار میکند.
sim800lSerial.println("AT+CMGF=1");
delay(500)
while (Serial.available())
sim800lSerial.write(Serial.read())
while(sim800lSerial.available())
Serial.write(sim800lSerial.read())
sim800lSerial.println(شماره همراه);
delay(500)
while (Serial.available())
sim800lSerial.write(Serial.read())
} ;{ ; };{ };{ ;
در ابندای برنامه هم برای اتصال به شبکه از دستوراتی شبیه زیر استفاده کردیم.
به صورت کلی شما میخواهید پیام را به صورت زبان فارسی یا اینگلیسی ارسال کنید. به 2 حالت text و pdu دسته بندی می شود که در ابتدا تنظیمات ماژول باید دستور.
AT+CMGF=0 برای txt
یا
AT+CMGF=1 برای pdu
تنظیم کنید.
سپس برای ارسال پیام دستور
+CMGS="+98شماره تلفن"
را ارسال میکنید.
در اینجا برای شما علامت < در سریال مانیتور نمایش داده می شود. که منتظر پیام شما می باشد.
با توجه به نوع تنظیمات خود متن پیام را ارسال میکنید (در صورتی که pdu باشد باید متن را کد گذاری کنید و سپس ارسال کنید)
پس آن نیز از کلید ترکیبی ctrl+z در سریال مانیتور های قابل پشتیبانی مانند putty یا کارکتر در سریال مانیتور ai-thinker استفاده میکنید.
تمام این موارد بالا در شرایطی می باشد که از مبدل usb-ttl برای این موضوع استفاده کنید. در صورتی که از آردوینو استفاده میکنید.
پس از آماده سازی ماژول در حالت txt از فانکشن زیر برای ارسال پیام استفاده کنید.
توجه داشته باشید Serial2 مربوط به ماژول gsm می باشد و بر روی esp32 کد نوشته شده است و با توجه به اسم سریال مانیتور خود این مقدار را عوض کنید.
int cunter = 0;
String checker ;
bool GSM::sendMessage(String number, String value)
{
sendAgin1:
Serial.println("Message to :" + number + "\t-" + value);
Serial2.flush();
delay(10);
Serial2.println("AT+CMGS=\"+98" + number + "\"");
delay(5);
while (true)
{
cunter++;
if (Serial2.available())
{
checker = Serial2.readStringUntil('\n');
checker.trim();
Serial.println(checker);
if (checker.startsWith("+CME ERROR: 58"))
{
Serial.println("Error on send line");
goto sendAgin1;
}
if (checker.startsWith(">"))
{
Serial2.println(value);
delay(10);
Serial2.write(26);
while (true)
{
if (Serial2.available())
{
checker = Serial2.readStringUntil('\n');
Serial.println(checker);
if (checker.startsWith("OK"))
{
delay(100);
serialRead("AT+CMGD=1,4", "OK");
Serial2.readStringUntil('\n');
Serial2.readStringUntil('\n');
return true;
}
else if (checker.startsWith("+CMS ERROR: "))
{
return false;
}
}
}
}
}
Serial.print(',');
delay(50);
if (cunter == 500)
{
cunter = 0;
goto sendAgin1;
}
}
سوال را ویرایش کردم و کدهایی که استفاده کردیم را نوشتیم، البته چون در کلاس نبودن و به کدها دسترسی ندارم شاید اندک اسشکالاتی داشته باشد اما همینهاست.
ممنون از پیگیری و پاسخدهی سریع جناب مهندس دمیرچی
سپاس از برنامه بسیار کامل و حرفه ای شما.
در اینترنت گشتیم برای رفع مشکل ارسال پیامک ایرانسل گفته بودند این at+csmp=17,167,0,0 را باید ارسال کنید، این کد را در برنامه اضافه کردیم مشکل سیمکارتهای ایرانسل حل شد اما متوجه نشدیم دلیلش چه بود و این کد چه تاثیری در رفع مشکل ارسال پیامک ایرانسل با ماژول داشت، اگر امکان داره بفرمایید ارتباط این کد با رفع مشکل در چی بوده؟
بله برای رایتل و همراه اول نیاز نیست و بدون مشکل کار میکند اما نمیدونم چرا تا این کد را اضافه نکنیم سیمکارتهای ایرانسل پیامک ارسال نمیکنند! هرچه هم در ارتباط با این کد مطالعه کردیم دلیلی برای حل مشکل ارسال پیامک ایرانسل و این کد نیافتیم و اینکه چرا ایرانسل این مشکل را دارد و با این کد حل می شود پیدا نکردیم که بتوانیم در گزارش پروژه برای استاد بنویسیم):
AT+CSMP=17,167,0,16 زمان اعتبار پیامک در شبکه را تعیین می کند(24 ساعت)
AT+CSMP=1,167,0,8 فرمت پیامک ارسالی را به یونیکد تغییر می دهد.(مناسب برای ارسال متون فارسی).در صورت عدم استفاده از این دستور مد ارسال ASCII خواهد بود که فقط کارکترهای لاتین را ساپورت میکند.
این دستور شامل موارد زیر است:
۱۷ مد ارسال و گزارش دریافت پیامک رو مشخص میکنه
۱۶۷ زمان حیات پیامک رو در شبکه مشخص میکنه
0 to 143 (TP-VP + 1) x 5 minutes (i.e. 5 minutes intervals up to 12 hours)
144 to 167 12 hours + ((TP-VP -143) x 30 minutes)
168 to 196 (TP-VP - 166) x 1 day
197 to 255 (TP-VP - 192) x 1 week
کد ۰ هم نشانگر PID یا مشخصه پروتکل است
در نهایت هم کد آخر نشان دهنده کدینگ پیامک هست که باید برای ۷ بیت یعنی انگلیسی عدد ۰ رو بزنید