به نام خدا : ارسال پیامک فارسی و انگلیسی با sim808 ؛ سلام خدمت تمام دوستان گل، یه چند مدتی بود نبودیم و مطلب نمیزاشتیم، درگیر یه چندتا پروژه ساده بودیم که به زودی ان شاء الله میزارمشون تو سایت کم کم، هاست سایتو هم عوض کردیم و بنا به دلایلی مجبور به ایجاد یه هاست دانلود برای سایت شدیم!!! و بعد مجبور به تغیر لینک تمام فایلهای سایت شدم *_* ؛ که دیگه کل فایلهای سایت تو هاست دانلود خود سایت قرار میگیره و دیگه تو سایت هایی مثل پیکوفایل و … قرار نمیگیره، خب مزیتش اینه که دانلود مستقیم هستش، بگذریم، این حرفا زیاد مهم نیست؛ تو این مطلب میخوام آموزش ارسال پیامک با sim808 رو براتون قرار بدم؛ یه کتابخونه نوشتم برای این کار که در مرور زمان تکمیلش هم میکنم، شما فقط کافیه 3-4 تا تابعو فراخونی کنید تا پیامک ارسال بشه!؛ تو این مطلب همچنین میخوام آموزش ارسال پیامک فارسی با sim808 رو هم قرار بدم.
ارسال پیامک با sim808 وقتی که سیم کارت شارژ ندارد
نکته مهم : یه نکته ای رو همین اول کار بگم، این عکس زیر مربوط به تست پروژه ارسال پیامک انگلیسی هستش، که میبینید پیامک به 2 حالت ارسال شده! دلیلش اینه که حالت اول برا وقتیه که سیمکارت توی sim808 شارژ نداشته ( و اگه سیمکارتتون ایرانسل باشه، دیدین که یه پیامک ارسال میکنه مبنی بر این که شما یه پیامک از طرف x دارید، برای دریافت پیامک عدد 5، دریافت همیشیگی عدد 6 و … یه همچین پیامکی براشون میاد، من اون عدد 6 که دریافت همیشگی هستش رو قبلا زدم!، فک کنم عددش 6 بود، دقیقا خاطرم نیست، لذا الان اگه سیمکارت توی sim808 هم شارژ نداشته باشه، پیامک برام میاد، چون من قبلا گفتم پیامکای این سیمکارت رو پولشو پرداخت کن، لذا اول پیامک شماره تلفتن رو اضافه میکنه، این از این مورد، امیدوارم متوجه شده باشین )؛ پیامک شماره دوم هم که برا وقتی هستش که سیمکارت ما شارژ داشته باشه.
حالا اگه این مورد براتون مهم نیست ( اول پیامک شماره موبایلو اضافه کنه )، میتونید سیمکارتتونو ( اونی که داخل sim808 هستش ) شارژشو خالی کنید تا دیگه مشکل خالی و پر شدن شارژ ( پولی! ) سیمکارت توی ماژول sim808 رو نداشته باشید ( البته نمیدونم همراه اول و … این ویژگی رو دارن یا نه ولی خب میدونم ایرانسل داره ^_^ )
پروژه های ارسال پیامک فارسی و انگلیسی با sim808
1) ارسال پیامک انگلیسی با sim808
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#include "SIM808.h" SIM808 SIM808; SIM808::Setting SIM808Setting; SIM808::SMS SIM808SMS; void setup() { Serial.begin( 115200 ); SIM808Setting.Init( &Serial1, 115200/*B.R*/, 3/*Powerkey*/, 2/*riInterruptPin*/ ); pinMode(13, OUTPUT); digitalWrite(13, 0); delay(5000); SIM808.SerialEmpty(); // English Character while( SIM808SMS.Select_TE_Character_Set("IRA") != 1 ); while( SIM808SMS.SetFormat(Textmode) != 1 ); while( SIM808SMS.DeleteAllSMS(4/*Delete All Type SMS*/) != 1 ); int16_t status = SIM808SMS.SendSMS( "+989372431686", "DMF313.IR Mahdi Damirchilu" ); Serial.println( status ); // SMSnumber } void loop() {} |
خط 18 : پاک کردن تمام پیامک های موجود در حافظه هستش ( وجودش الزامی نیست )
خط20 : ارسال پیامک که شماره و متن رو بهش دادم، ورودی های این تابع از نوع string هستش؛ خروجی تابع شماره پیامک در حافظه هستش.
2) ارسال پیامک فارسی با sim808
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 |
#include "SIM808.h" SIM808 SIM808; SIM808::Setting SIM808Setting; SIM808::SMS SIM808SMS; int Temprator = 313; int16_t status = 0; void setup() { Serial.begin( 115200 ); SIM808Setting.Init( &Serial1, 115200/*B.R*/, 3/*Powerkey*/, 2/*riInterruptPin*/ ); delay(5000); SIM808.SerialEmpty(); // Persian Character while( SIM808SMS.Select_TE_Character_Set("HEX") != 1 ); while( SIM808SMS.Set_SMS_Text_Mode_Parameters() != 1 ); while( SIM808SMS.SetFormat(Textmode) != 1 ); while( SIM808SMS.DeleteAllSMS(4/*Delete All Type SMS*/) != 1 ); // a persian text status = SIM808SMS.SendSMS( "+989372431686", "0633064406270645002006280631002006280686064700200647062706CC002006AF06310648064700200627064406A9062A06310648064606CC06A900200641064206370021002100210020062E062E062E062E062E062E"); Serial.println( (String)"SMSnumber = " + status ); delay(5000); // persian : temp = ? String SMSstring = "062F064506270020003D0020" + SIM808SMS.Text_to_UTF16((String)Temprator); status = SIM808SMS.SendSMS( "+989372431686", SMSstring ); Serial.println( (String)"SMSnumber = " + status ); } void loop() {} |
خط 20 : پاک کردن تمام پیامکا ( فک کنم inbox باشه – حالا فعلا بود نبود این خط مهم نیست، کاری بهش ندارم فعلا )
خط 23 : یه متن فارسی ( “سلام بر بچه های گروه الکترونیک فقط!!! خخخخخخ” ) رو نمایش میدیم، حالا میبینید که تو قیمت محتوای پیامک اومدم یه سری عدد رو وارد کردم، که اومدیم در واقع UTF8 رو به UTF16 تبدیل کردیم، برای این کار میتونید از سایت زیر استفاده کنید : UTF Converter که جعبه اول رو روی TEXT بزارید و متن فارسیتونو توش بنویسید و جعبه بعدی رو روی UTF-16M بزارید، عدد داده شده رو فاصله هاشو حذف کنید و تو پروژه کپی کنید، فقط همین! ( در شکل زیر پیامک شماره 1 برای این خط هستش )
خب برا گرفتن کد متون فارسی میتونید از لینک بالا استفاده کنید یا تو گوگل بسرچید "UTF Converter"، یه 2 تا لینک دیگه برای این کار من میزارم :
اینم یه لینک مفید که کد تمام حروف فارسی رو میده : MacFarsi encoding
خب با توجه به این که سایت های فوق ممکنه از دسترس خارج بشن، یه نرم فزار کوچولو تحت ویندوز نوشتم که این کارو انجام میده ( حجمش کمه، حدود 20 کیلو بایته )
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 |
using System; using System.Text; using System.Windows; namespace WpfApp1 { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } // convert utf-8 string to Persian unicode private void Button_Click(object sender, RoutedEventArgs e) { string source = TB_Input.Text; byte[] utfb = Encoding.UTF8.GetBytes(source); byte[] resb = Encoding.Convert(Encoding.UTF8, Encoding.GetEncoding("ISO-8859-6"), utfb); string result = Encoding.GetEncoding("ISO-8859-6").GetString(resb); RT_OutPut.Document.Blocks.Clear(); try { for (int i = 0; result[i] != '\0'; i++) { RT_OutPut.AppendText("0" + ((Int32)result[i]).ToString("X")); if (result[i + 1] == '\0') break; RT_OutPut.AppendText(TB_Separator.Text); } } catch (Exception) { } } } } |
تو جعبه اولی متن فارسی رو مینویسید، تو دومی هم کاراکتر جدا کننده کدها رو وارد میکنید، جعبه آخری هم که کد ( عدد هگزا دسیمال ) رو به ما میده ( البته بعد از این که روی دکمه Convert کلیک کردیم )
توجه : برای استفاده از این کد، باید همون طور که در پروژه 2 خط 23 میبینید، کدها رو کنار هم ( بدون هیچ کاراکتر جدا کننده ای ) قرار بدید و به تابع SendSMS بدید.
واو چقدر پیچوندم، الان کد مربوط به سلام شد "0633, 0644, 0627, 0645" و این کاراکتر جدا کننده ", " هم برا زیباییه ^_^ و تو پروژه باید به این صورت استفاده کنید :
"0633064406270645" ؛ این میشه متن ما، همینو به تابع SendSMS میدیم ( به عنوان متن پیامی که قراره ارسال بشه )
خط 29 : خب شاید شما نیاز داشته باشید یه مثلا دما رو ارسال کنید ( مثلا “دما = 313” ) که اون عدده یه مقدار متغییر هستش، برای این کار اون کلمه “دما” که ثابت هستش رو مثل روش بالا تبدیل کنید و برا اون قسمت عدد از تابع Text_to_UTF16 ( که در کلاس SIM808SMS قرار داره ) استفاده میکنیم ( در شکل زیر پیامک شماره 2 برای این خط هستش )
عکس پروژه در عمل :
یه چند تا توضیح درباره مدار بالا بدم :
- ماژول sim808 بدون آنتن کار نمیکنه، این آنتن برا GSM هستش.
- آنتن GPS هستش، تو این پروژه کاری بهش ندارم ( لذا بود و نبودش زیاد مهم نیست )
- منبع تغذیه ماژول، تغذیه ماژول و برد آردوینو مگا از این باتری تامین میشه؛ باتری من از نوع لیتیوم و 11.1ولت و 2.2آمپر هستش؛ البته این مدل باتری برای ربات های پرنده استفاده میشه ولی خب من فقط همینو داشتم، شما باید حداقل یه باتری ( منبع تغذیه ) 1آمپر و 7-8 ولت داشته باشین؛ البته بستگی به برد SIM808 و مدارتون داره که باتری چند ولت باشه ^_^
- ماژول SIM808 ما، توجه داشته باشید که ماژولی بخرین که پایه RI رو داشته باشه، ماژول من نداشت و مجبور شدم یه جوری ازش بکشم بیرون این پایه رو!!!
- از برد آردوینو مگا استفاده کردم، چون 2 تا سریال نیاز دارم، یکی برا ماژول و یکی هم برا بحث ارسال دیتا به پنجره سریال توی PC، البته اگه بخواین از سریال مجازی استفاده کنید به مطلب روبرو مراجعه کنید، برای دانلود کتابخوه توی این مطلب هم به همین لینک مقابل برید : دانلود کتابخانه راه اندازی ماژول sim808 ( برای این مطلب من از ویرایش 1 کتابخونه استفاده کردم )
- برد آردوینو مگا رو به PC وصل کردم تا اطلاعات مد نظرمو به PC بفرستم.
فیلم پروژه : این فیلم برای 3 مطلب ( پروژه SIM808 ) هستش ( فیلم 3 تا پروژه یجا گرفته شده )
خب امیدوارم این مطلب مفید باشه براتون، فعلا یا علی.
مهمان
با سلام
دوستان اگه میخواید بدون پاک کردن فاصله و راحت این تبدیل رو انجام بدید این سایت خوبه :
https://www.coderstool.com/utf16-encoding-decoding
مهمان
سلام بر دوستان.
دوستان من یه برنامه دارم تو بسکام نوشتم و از ماژول SIM800L استفاده کردم وقتی پیام کوتاه انگلیسی می فرستم مشکلی نداره ولی وقتی متن فارسی رو توست unicode به صورت هگز می فرستم متن فارسی به این صورت نمایش میده.
@@ä @@@@ @@ @@@@@ @Ñ@@@ @¿å @@@
ممنون میشم یه راهنمایی کنید و مهندس جان اگه وقت دارن من کد نوشته شده رو براشون ارسال کنم یه نگاهی بکنند و نظر بدن ممنونم
مهمان
سلام وقت بخیر
برای ارسال پیامک فارسی همراه با متغیر در اتمل استدیو و کدویژن چطور باید عمل کرد؟
با تشکر
مهمان
سلام.من این برنامه رو با sim800میخواستم انجام بدم اگر کسی انجام داده لطفا کد رو بزاره .ممنون میشم راهنمایی کنید
مهمان
سلام
ممنون از برنامه کاربردی که گذاشتی و همچین سایت خوبت و این که دانشت رو با بقیه به اشتراک میذاری
برنامه ات با حروف غیر فارسی و همچنین فاصله مشکل داره (به خاطر رعایت نکردن padding) اگر خط ۲۸ برنامه رو به این تغییر بدی اون مشکل هم حل میشه، در پناه حق
RT_OutPut.AppendText(((Int32)result[i]).ToString(“X”).PadLeft(4, ‘0’));
مهمان
سلام.خسته نباشید.
میخواستم بدونم استفاده از ماژول های gsm با اردوینو due ممکن هست یا خیر؟
نویسنده این مطلب
سلام – due? بحث سطح ولتاژ ماژول و میکرو فوق رو باید بررسی کنی – کتابخونه توی این مطلب رو نمیدونم که سازگاره یا نه.
مهمان
سلام..بی نهایت سپاسگزارم….
اجرت با خدا که بی منت اینهمه وقت میذاری و زکات علم رو به این زیبایی ادا میکنی…در کلاس هام ذکر خیر شما با سایت زیباتون بود…
مهمان
سلام
ممنون از اینکه کدها رو گذاشتین.
من پروژه ای را با نانو و sim800l بستم. وقتی منبع تغذیه خارجی (12 ولت که به 5 و بعدش 4.3 تبدیلش کردم) و کابل سریلا به برد متصل هستند ارسال و دریافت پیامک مشکلی نداره. اما وقتی کابل سریال رو قطع می کنم و sim800 رو ریست می کنم یا اینکه منبع تغذیه رو قطع و وصل می کنم، ارسال و دریافت پیامک انجام نمیشه، هرچند چراغ ماژول طبق منوآلش هر سه ثانیه چشمک می زنه و ظاهره به شبکه وصله.
برای راه افتادن اولیه sim800 حتما باید کابل سریال وصل باشه؟! به نشرم این موضوع خیلی عجیبه؟ می تونید راهنمایی کنین مشکل رو حل کنم؟
متشکرم
مهمان
ساغول کیشه
مهمان
سلام
ممنون از مطالب خوب و مفیدی سایت
یه نکته:
تو برنامه تبدبل کد متن فارسی، فاصله رو به جای 0020 به اشتباه به 020 تبدیل میکنه
دوستان میتونن دستی اصلاح کنند.
مهمان
سلام میشه اتصالات شو توضیح
ممنون میشم
نویسنده این مطلب
سلام – خط 7و8 پروژه اول و خط 10 و 11 پروژه دوم رو ببین
مهمان
سلام درود بر اقا مهدی گل . از اینکه میبینم افرادی مثل شما هم تخصص دارند و هم اینکه بدون هیچ چشم داشتی برای همه نشر میدند واز همه مهمتر اینکه تک بعدی نیستند بسیار لذت میبرم به امید نابودی ال سعود ملعون و یروزی کامل مردم مظلوم یمن
دوست دلرم اقا مهدی عزیز
مهمان
با عرض سلام وخسته نباشید
ماژول sim808 من پایه ri ندارد میخواستم بدونم چه جوری میتونم ازش استفاده کنم ,
و آیا پایه powerkey هم می بایست به پایه 3 آردوینو مصل شود یا لازم نیست چون در داخل متد زیر
SIM808Setting.Init( &Serial1, 115200/*B.R*/, 3/*Powerkey*/, 2/*riInterruptPin*/ )
برای powerkry عدد 3 تعریف شده است
با تشکر از اموزشهای خوبتن
خدا قوت یا علی مدد
مهمان
سلام و عرض خسته نباشید
اون سایتی که معرفی کردین برای تبدیل متن فارسی لینکش کار نمیکنه میشه لطفا یک منبع دیگه معرفی کنین با تشکر
نویسنده این مطلب
سلام
چند تا لینک جدید + یه نرم افزار برا این کار به مطلب اضافه کردم.
مهمان
با سلام من تازه میخوام سیم 808 رو رااندازی کنم ابتدا چی نکاتی رو می بایست در نظز بگیرم. ممنون
نویسنده این مطلب
سلام
چیشو میخوای راه بندازی؟
اگه تازه کاری ماژولی بگیر که پایه RI رو داشته باشه – برا بحث پیامک بودنش خیلی تو کد نویسی کمک میکنه.
و این که ماژولی بگیر که مشکل تغذیه نداشته باشه یعنی مدار رگولاتور رو توش داشته باشه.
بازم بستگی به ماژولت داره ولی اگه این موردی که الان میگم تو ماژول تعبیه نشده بود باید خودت قرار بدی – یه تقسیم ولتاژ برا پایه های سریال بزن تا نسوزن.
آنتن رو به برد وصل باید بکنی.
مهمان
سلام من شماره تلفنی رو به صورت رشته در متغیری ذخیره کردم و میخوام هربار به این شماره و یا شماره تلفن های دیگری که ذخیره کردم پیام بدم.
من تا جایی که شماره رو ذخیره کنم پیش رفتم ولی زمانی که متغییر رو داخل تابع میزارم نمیشه?
لطفا کمکم کنید؟
نویسنده این مطلب
سلام
ورودی تابع SendSMS از نوع String هستش لذا باید متغیری از نوع String تعریف کنی وشماره موبایلو توش ذخیره کنی
مهمان
با سلام و تشکر من ماژول SIM800 دارم با تغییر کتابخوانه اول برنامه و گذاشتن برنامه شما جواب میگیرم؟یا AT comant ها هم فرق رمیکنه؟
نویسنده این مطلب
سلام
اول تست کنید – نباید فرقی کنه – ولی خب مثلا میتونید هر کامند رو بین 800 و 808 مقایسه کنید ببیند فرق کرده یا نه – چون مثلا تغییراتی ممکنه به این صورت رخ بده که یه کامند در 800 اسمش aaa باشه و در 808 اسمش بشه aab مثلا – یکم تغییر کنه – ولی خب این که کلا تغییر کنه – نه از این خبرا نیست.
مهمان
سلام
ایا امکان دارد ماژول 808 را یکبار با اردینو برنامه ریزی کرد و بعد از ان با اردینو را جداکرد و موقعیت جی پی اس را با ارسال یک پیامک دریافت کرد
–
درواقع ماژول 808 می تواند دستورات پیامکی را بدون برد اردینو دریافت کند و پاسخ مناسب را بدهد
نویسنده این مطلب
سلام – والا درباره این که میشه یا نمیشه اطلاع ندارم و بلد نیستم.
مهمان
سلام، نمیشه
حتما باید یه میکروکنترلری باشه تا به ماژول فرمان بده
مهمان
سلام؛
در زمینه ماژول های سیمکارت خیلی کم کتابخونه پیدا میشه؛ فارسی که بماند!
خداقوت برای نوشتن این کتابخونه
راستی برای اون ماژول اثرانگشته (وارد کردن کد اثرانگشت) کاری نکردید؟
نویسنده این مطلب
سلام-نه.
مهمان
عالی بود، دستت درد نکنه