بعضی اوقات نیاز است که برای برخی از پروژهها یک ردیاب درست کنید، حالا این ردیاب ممکن است که برای خودروهای شخصی یا ردیابی اشخاص و یا برای کارهای دیگری که مدنظر است به کار رود. حال مسئلهای که وجود دارد این است که چطور باید این کار را انجام داد.
دقت کنید نکتهای که در ساخت ردیابها بسیار حائز اهمیت است، اندازه برد و توان مصرفی است، که این پارامترها کاملا بستگی به نوع پروژه دارد. فرض کنید برای یک خودرو شخصی ردیاب درست میکنید، مسلما در این نوع پروژهها شما با محدودیت فضا مواجه هستید که باید حتما آن را در نظر بگیرید.
در این پروژه از سری پروژه های آردوینو میخواهیم اطلاعات GPS ماژول SIM808 را توسط آردوینو دریافت و سپس در قالب یک پیام به همراه نقشه گوگل (GoogleMap) به مخاطب ارسال کنیم.
برای انجام این پروژه به موارد زیر نیاز است:
ماژول سیم SIM808
آنتن GPS و GSM
آردوینو UNO
خب همانطور که میدانید یک پروژه الکترونیکی از دو بخش کدنویسی و طراحی سخت افزار تشکیل شده است، البته هر کدام از این دو بخش برای خود یک دنیای کاملا مجزایی است که حرفهای شدن در هر یک از اینها مستلزم تلاش بیوقفه است. در این آموزش تمرکز ما صرفا روی بخش اول، یعنی کدنویسی است.
کدنویسی ماژول SIM808
مقاله راه اندازی GSM Modem با آردوینو (MC60) را مطالعه کنید.
در این بخش به موارد زیر میپردازیم.
- راه اندازی GPS
- ارسال پیام
- دریافت پیام
- تنظیمات فعال سازی
- اعلام موجودی
- شناسایی اپراتور
- تغییر زبان سیم کارت به انگلیسی
- دریافت شماره تلفن
- معرفی تابع فیلتر پیام
- حذف پیامهای دریافتی جهت مدیرت حافظه
- ارسال پیام به همراه مختصات GoogleMap
- معرفی تابع فیلتر برای بدست آوردن مقادیر GPS
- معرفی تابع ارسال پیام به همراه داشتن TimeOut و Debug
نکته: تمامی قابلیتها با کمی خلاقیت قابل تعمیم برای تمام میکروکنترلرهای دیگر هم میباشد
راه اندازی GPS با SIM808
برای راهاندازی این قسمت نیاز است که یک دید کلی نسبت به دیتاشیت این ماژول داشته باشیم تا بتوانیم کار موردنظر خود را انجام دهیم.
به طور مثال اگر دستور روشن کردن GPS را به صورت AT+CGPSPWR=1 وارد کنید ماژول EEROR را نمایش خواهد داد حال برای رفع این موضوع فقط کافیست که دستور را به صورت AT+CGNSPWR=1 وارد کنید و به طور کلی میتوان گفت که به جای GPS واژه GNS قرار دهید.
دلیل اینکار هم این است که در سری های قبلی این ماژولها از سیستم GPS پشتیبانی میشد اما چند سالی است که ورژنهای جدید این ماژول ها از سیستم GNSS پشتیبانی میکنند و همین امر سبب تغییر برخی از دستورات ماژول شده است.
خب برای راه اندازی GPS ماژول SIM808 به دستورات زیر نیاز داریم.
- AT+CGNSPWR=1 روشن کردن GPS
- AT+CGNSPWR=0 خاموش کردن GPS
- AT+CGNSINF ارسال اطلاعات
1 2 3 4 5 6 7 8 9 10 11 12 13 | sendData("AT+CGNSPWR=1",1000,DEBUG); for(int i;i<2;i++){ sendTabData("AT+CGNSINF",1000,DEBUG); delay(300); if (state !=0) { Serial.println("State :"+state); Serial.println("Time :"+timegps); Serial.println("Latitude :"+latitude); Serial.println("Longitude :"+longitude); } } |
این تابع جهت دیباگ GPS به کار میرود به صوریکه اطلاعاتی از قبیل طول و عرض جغرافیایی را روی سریال مانیتور نمایش میدهد و از این طریق به راحتی میتوانید تشخیص دهید که پارامترهای GPS را دریافت کرده اید.
ارسال پیام در SIM808
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | int Send_Message(String phone , String text){ mySerial.print("AT+CMGF=1"); delay(1000); mySerial.print("AT+CMGS="); mySerial.print("\"") ; mySerial.print(phone); mySerial.print("\"") ; mySerial.print("\r\n"); delay(100); mySerial.print(text); delay(100); mySerial.print(char(26)); delay(100); return 1; } |
1 | Send_Message("0938866****" , "This is GPS Location") |
فعال سازی 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 | void GSM_Initilaize() { boolean gsm_Init = 1; while (gsm_Init > 0) { mySerial.println("AT"); while (mySerial.available()) { if (mySerial.find("OK") > 0) gsm_Init = 0; } delay(100); } boolean Ready = 1; while (Ready > 0) { mySerial.println("AT+CPIN?"); while (mySerial.available()) { if (mySerial.find("+CPIN: READY") > 0) Ready = 0; } delay(1000); } mySerial.write("AT+CMGF=1\r\n"); delay(1000); } |
دریافت پیام در 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 | String receive message(){ if(mySerial.find("CNMI")>=0){ mySerial.println("AT+CMGR=1") ; delay(10); mySerial.setTimeout(2000) ; String input = mySerial.readString(); delay(500); String number ="0"; String firstword = "\",\""; String lastword = "\",\"\",\""; int n1 = input.indexOf(firstword) + firstword.length() ; int n2 = input.lastIndexOf(lastword); if(n1>-1 and n2>-1){ number = input.substring(n1 , n2); } if(number=="0"){ return "0"; }else{ mySerial.println("AT+CMGD=1,4") ; return input; } } } |
تشخیص اپراتور در SIM808
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | String Operator(){ delay(50); mySerial.println("AT+COPS?"); mySerial.setTimeout(100) ; String input = mySerial.readString(); mySerial.setTimeout(10) ; input = word_filter(input,"\"","\""); input.trim(); delay(10); if(input=="43235"){ return "Irancell"; }else{ return "Not Recognized"; } } |
دریافت اعلام موجودی در 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 | String Balance(String Operator){ if(Operator=="Irancell"){ mySerial.println("AT+CUSD=1,\"*141*1#\""); mySerial.setTimeout(6000); String Balance_Read = mySerial.readString(); delay(100); mySerial.println(input ); String firsword = "Credit"; String lastword = "WOW"; int Word1 = Balance_Read.indexOf(firsword) + firsword.length() ; int Word2 = Balance_Read.lastIndexOf(lastword); if(Word1 ==-1 or Word2==-1){ return "0" ; }else{ Balance_Read = Balance_Read.substring(Word1 , Word2); } delay(100); Balance_Read.replace("Rial", ""); Balance_Read.replace(".", ""); Balance_Read.replace("IRR", ""); Balance_Read.trim(); return Balance_Read; } } |
تغییر زبان اپراتور به زبان انگلیسی در SIM808
1 2 3 4 5 6 7 8 9 10 11 | void Operator_Setting(String Operator) { String oprator = service(); if(oprator == "Irancell"){ mySerial.println("AT+CUSD=1,\"*555*4*3*2#\""); } delay(3000); mySerial.println("AT+CUSD=2"); } |
دریافت شماره تلفن در SIM808
1 2 3 4 5 6 7 8 9 10 11 12 13 | String Get_PhoneNumber(String Number){ String word1 = "+98"; String word2 = "\",\"\",\""; int Word1 = Number.indexOf(word1) + word1.length() ; int Word2 = Number.lastIndexOf(word2); if(Word1 ==-1 or Word2==-1){ return "0" ; }else{ Number = "0" + Number.substring(Word1 , Word2 ); } return Number; } |
ارسال پیام توسط نقشه GoogleMap
برای این کار نیاز داریم که لینک گوگل را پیدا کنیم که دقیقا با چه فرمتی نوشته شده است و دقیقا همان فرمت را پیاده سازی کنیم.
1 | https://www.google.com/maps/@52.2129919,5.2793703,7z |
اگر به خط بالا دقت کنید میبینید که دارای مقادیر مختلفی است حالا این اعداد چه چیزی را بیان میکنند؟
این اعداد دقیقا همان طول و عرض جغرافیایی هستند، کاری هم که ما باید انجام دهیم دقیقا بدست آوردن همین مقادیر است و در نهایت جایگزین کردن مقادیر بدست آمده در مختصات GoogleMap.
فرمت صحیح به صورت خط زیر میباشد:
1 | http://maps.google.com/maps?q=loc:xxxx,xxxxx |
تابع GPS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | void sendTabData(String command , const int timeout , boolean debug){ mySerial.println(command); long int time = millis(); int i = 0; while((time+timeout) > millis()){ while(mySerial.available()){ char c = mySerial.read(); if (c != ',') { data[i] +=c; delay(100); } else { i++; } } } if (debug) { state = data[1]; timegps = data[2]; latitude = data[3]; longitude =data[4]; } } |
تابع ارسال پیام به همراه داشتن TimeOut و Debug
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | String sendData (String command , const int timeout ,boolean debug){ String response = ""; mySerial.println(command); long int time = millis(); int i = 0; while ( (time+timeout ) > millis()){ while (mySerial.available()){ char c = mySerial.read(); response +=c; } } if (debug) { Serial.print(response); } return response; } |
از این جهت مهم است که طبق یک زمان بندی خاص، دیتا را ارسال میکند و تا زمان تعیین شده منتظر جواب میماند در صورتیکه جواب دریافت نشد منتظر نخواهد ماند و ادامه کد را انجام خواهد داد. البته دقت کنید مدل حرفهای تر آن توسط تایمر پیاده سازی میشود و به راحتی قابل تعمیم برای تمام میکروکنترلرهای دیگر است.
نحوه اتصال برد آردوینو به SIM808
کد نهایی
خب حالا وقت تلفیق کدها با یکدیگر رسیده است که تمامی آپشنها را در قالب یک کد پیاده سازی کنیم.
نکتهای که حائز اهمیت است، این مقاله صرفا آموزشی است و به روشهای بسیار ساده کدنویسی شده است تا خوانایی کد برای تمامی خوانندگان واضح باشد. کد را میتوانید از اینجا دانلود کنید.
دقت داشته باشید که ماژول SIM808 جریان زیای را برای اتصال به شبکه همراه نیاز دارد، بنابراین از یک منبع تغذیه کمک بگیرید، همچنین موازی کردن یک خازن 1000nf با منبع تغذیه میتواند به جریان کشی ابتدایی ماژول کمک کند. همچنین دقت داشته باشید که ماژول بدون آنتن GPS و GSM ممکن است به درستی عمل نکند.
طبق کد بالا هر 1 ثانیه یک بار مختصات به روز میشوند. و در نهایت اگر همه چیز به درستی صورت گرفته باشد باید به جواب شکل زیر برسید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | Starting ... Irancell Welcome SMS send to 09**** No sms! No sms! No sms! new message from 09******* State :1 Time :20190714064955.000 Latitude :29.950066 Longitude :76.15333 http://maps.google.com/maps?q=loc:29.950066,76.15333 No sms! No sms! |
امیدواریم که این آموزش هم برای شما مفید واقع شده باشد. با سیسوگ همراه باشید.
اللهم صل علی محمد و آل محمد و عجل فرجهم
درود و سپاس فراوان برای زحمتی که جهت تهیه و انتشار این مطلب انجام داده اید. نکته ای که در تجربه کار با gps این ماژول داشتم را با شما و سایر کاربران در میان می گذارم. این که بلافاصله پس از ارسال دستور روشن شدن واحد gps، ممکن است این اتفاق نیافتد و گاهی تا چندین دقیقه طول بکشد. آماده به کار شدن gps پس از روشن شدن led مربوطه است.
سلام
یک سوال داشتم
من داخل پروژه ای از sim800c استفاده کردم و برای استعلام شارژ از ussd استفاده میکنم. این استعلام شارژ دائمی هستش و پس از ارسال چند اس ام اس یا برقراری تماس انجام میشه. حالا اگه سیمکارت دائمی باشه این عملیات استعلام شارژ چون موفقیت آمیز نیست میافته توی لوپ.
راهی هست که تشخیص بدم سیمکارت دائمی هست یا اعتباری؟
سلام دوست عزیز، شما باید برنامه رو اصلاح کنید تا اونجا که من میدونم راهی برای تشخیص اعتباری یا دائمی بودن وجود نداره
مثلا گرفتن شارژ سیم کارت رو هر ده دقیقه یک بار انجام بدید یا خطا رو تشخیص بدید و بر اساس اون متوجه بشید سیم کارت دائمی هست
یا حالا هر ترفند دیگری از این دست
خیلی ممنون
میتونم تنظیمی قرار بدم که کاربر نوع سیمکارت رو خودش وارد کنه ولی دنبال راهکاری برای اتوماتیک کردن این مورد بودم.
ممنون از راهنماییتون.
خواهش میکنم
با سلام
برنامه فعال سازی sim808 رو آپلود کردم میگه ک رو برد آردینو مگا ۲۵۶۰ کامپایل نمیشه
چیکار کنم؟
باید ببینید به کدام بخش از کد داره خطا میده و اون مشکل رو حل کنید
سلام مشکل اتصال به سایتهای با پروتکل امن رو دارم تمامی مراحل اتصال رو به درستی رفتم ولی زمان اتصال ERROR 606 میده لطفا کمک کنید
مدل SIM: Revision:1418B04SIM808M32
سلام دوست عزیز
منظور شما از پروتکل امن چه پروتکلی هست و بر اساس چه داکیومنتی پیش رفتید
سلام پرتکل ssl برای اتصال به https که متاسفانه متصل نمیشه و از داکیومنت
SIM800 Series_SSL
application Note
استفاده شده
سلام و دورد دوست عزیز
من با ماژٰول های SIM800 مدت زیادی هست که کار نکردم، ولی توی ارتباط SSL اولین چیزی که اهمیت داره اینه که شما درخواست هاتون رو میخوان HTTPS ارسال کنید یا با SSL Socket و مرحله بعد دقت به این مهم هست که آیا کلیدها رو با فرمتی که برای ماژول قابل خوندن هست قرار میدید یا نه و آیا میتونید کلیدها رو توسط خود ماژول وریفای کنید یا نه و ….
توصیه میکنم از ماژول های کویکتل استفاده کنید مثلا ماژولی مثل MC60 با مدلهای دیگه- خودم به شخصه SSL این ماژولها رو راه اندازی کردم و اگر مشکلی بود میتونم کمک کنم
سلام وقتتون بخیر
من با ماژول sim808 کار می کنم. تقریبا هفته ی گذشته به دستور AT+CGNSPWR=1 و AT+CGPSPWR=1 جواب میداد و ok بر میگردوند ولی امروز کلا بهشون جواب نمیده. به نظرتون مشکل چیه و چکار کنم درست بشه؟
سلام اگر کلا جواب AT کامند نمیده ببنید LED ها چشمک میزنه یا نه
اگر LED هاش هم چشمک نمیزنه شاید مشکل سخت افزاری پیدا کرده بردتون یا جتی ماژولتون اسیب دیده
با سلام
من سیمکارتم ایرانسل هستش. پاور هم اوکیه و مشکلی نداره. این برنامه رو run کردم ولی شبکه رو not recognized میده و انگار به شبکه ای متصل نمیشه. لیست شبکه های ماژول رو هم چک کردم ایرانسل رو ندیدم توی لیست
برای اینکه شبکه رو بشناسه باید کاری انجام بدم؟
سلام تو حالت عادی اگر مشکل سخت فازار وجود نداشته باشه اتوماتیک به شبکه رجیستر میشه
سلام من sim900a دارم و دارم روی پروژه ساخت gps کار میکنم میخواستم ببینم ایا کد های sim808 که بالا قراردادین به sim900 میخوره یا خیر ؟ و اگه نخوره من از کجا میتونم کمک بگیرم برای کد نویسی ؟
سلام SIm900A فقط GSM هست ولی SIM808 هم جی پی اس داره و هم GSM
کامندهای جی اس ام ها عالبا یکسان هستند و دیتاشیت هر کدوم بهترین رفرنس برای کمک گرفتن هست
ببخشید sim800l چطور؟؟
سلام باید دیتاشیت ماژول مراجعه کنید
سلام
ممنون از پروژه خوبتون
من بستم مدارو دقیق و کد رو بارکذاری کردم ولی متاسفانه در قسمت سریال مانیتور ارور
Starting …
Not Recognized رو دریافت میکنم و روی خود برد سیم 808 بعد از زدن دکمه ایستاده ال ای دی قرمز چندبار چشمک میزنه و مجدد خاموش میشه
اتصالات رو چک کردم و شماره رو هم قرار دادم صحیح
بیزحمت راهنمایی کنید
سلام کد رو وارد کردم و دوتا خطا اشت اون ها روهم درست کردم ولی هنوز یه خطا میده میشه راهنمایی کنید
exit status 1
‘sendData’ was not declared in this scope
This report would have more information with
“Show verbose output during compilation”
option enabled in File -> Preferences.
این خطایی که دارید میگیرید به این دلیله که تایع sendData رو پیدا نمی کنه
سلام خسته نباشید من کد رو وارد کردم ولی این خطا رو میده
redefinition of ‘string phone’
میشه اشکالش رو بگین
میگه شما دوبار (یا چند بار ) شماره تلفن رو وارد کردید 😐
redefinition of ‘String Phone’
This report would have more information with
“Show verbose output during compilation”
option enabled in File -> Preferences.
سلام خسته نباشید برای من ارور میاد یعنی چه
به این دلیله خطا که ظاهرا Phone رو چند بار توی برنامه تعریف کردید.
Arduino: 1.8.13 (Windows 7), Board: “Arduino Uno”
sketch_apr28a:8:8: error: redefinition of ‘String Phone’
String Phone = “0903584226” ; // like a 0938*****75
^~~~~
C:\Users\SAJAD\Documents\Arduino\sketch_apr28a\sketch_apr28a.ino:6:8: note: ‘String Phone’ previously declared here
String Phone= “090********”;
^~~~~
C:\Users\SAJAD\Documents\Arduino\sketch_apr28a\sketch_apr28a.ino: In function ‘void setup()’:
sketch_apr28a:17:6: error: ‘sendData’ was not declared in this scope
sendData(“AT+CGNSPWR=1”,1000,DEBUG);
^~~~~~~~
C:\Users\SAJAD\Documents\Arduino\sketch_apr28a\sketch_apr28a.ino:17:6: note: suggested alternative: ‘data’
sendData(“AT+CGNSPWR=1”,1000,DEBUG);
^~~~~~~~
data
sketch_apr28a:22:15: error: ‘Ooperator’ was not declared in this scope
Operator= Ooperator();
^~~~~~~~~
C:\Users\SAJAD\Documents\Arduino\sketch_apr28a\sketch_apr28a.ino:22:15: note: suggested alternative: ‘Operator’
Operator= Ooperator();
^~~~~~~~~
Operator
sketch_apr28a:28:16: error: ‘Operator_Setting’ was not declared in this scope
Operator_Setting(Operator);
^~~~~~~~~~~~~~~~
C:\Users\SAJAD\Documents\Arduino\sketch_apr28a\sketch_apr28a.ino:28:16: note: suggested alternative: ‘Operator’
Operator_Setting(Operator);
^~~~~~~~~~~~~~~~
Operator
sketch_apr28a:29:16: error: ‘GSM_Initilaize’ was not declared in this scope
GSM_Initilaize();
^~~~~~~~~~~~~~
sketch_apr28a:30:24: error: ‘balance’ was not declared in this scope
Balance=balance(Ooperator());
^~~~~~~
C:\Users\SAJAD\Documents\Arduino\sketch_apr28a\sketch_apr28a.ino:30:24: note: suggested alternative: ‘Balance’
Balance=balance(Ooperator());
^~~~~~~
Balance
sketch_apr28a:33:15: error: ‘Send_Message’ was not declared in this scope
Send_Message(Phone, “Welcome to SIM808”);
^~~~~~~~~~~~
C:\Users\SAJAD\Documents\Arduino\sketch_apr28a\sketch_apr28a.ino: In function ‘void loop()’:
sketch_apr28a:47:24: error: ‘receive_message’ was not declared in this scope
String Read_Message = receive_message();
^~~~~~~~~~~~~~~
C:\Users\SAJAD\Documents\Arduino\sketch_apr28a\sketch_apr28a.ino:47:24: note: suggested alternative: ‘Read_Message’
String Read_Message = receive_message();
^~~~~~~~~~~~~~~
Read_Message
sketch_apr28a:51:17: error: ‘Get_PhoneNumber’ was not declared in this scope
String phones = Get_PhoneNumber(Read_Message);
^~~~~~~~~~~~~~~
sketch_apr28a:55:2: error: ‘sendTabData’ was not declared in this scope
sendTabData(“AT+CGNSINF”,1000,DEBUG);
^~~~~~~~~~~
Multiple libraries were found for “SoftwareSerial.h”
Used: C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\SoftwareSerial
Not used: C:\Users\SAJAD\Documents\Arduino\libraries\EspSoftwareSerial
exit status 1
redefinition of ‘String Phone’
This report would have more information with
“Show verbose output during compilation”
option enabled in File -> Preferences.
سلام خسته نباشید برای من ارور میاد یعنی چه
سلام این کد بالا خرابه ؟
این کد اینقدر کامنت گرفته فردا به همکارم میگم کد رو کامل کنه و فایل رو به شکل زیپ قرار بده که مشکل دوستان حل بشه
سلام میشه یک متن خاص ارسال کرد مثلا عدد یک و موقعیت برای ارسال کننده عدد یک ارسال بشه
ممنون
سلام مطمئنا امکان پذیر هست
با سلام
دقت GPS این ماژول چقدر است؟
سلام دقت ماژولهای GPS در حالت عادی و البته بهترین کارکرد ذکر میشه کمتر از دو نیم متر
ممنون از آموزش خیلی خوبتون..
چطوری میشه به جای ارسال به شماره موبایل،
مثلا یه سایت طراحی کرد که… ( طراحی سایت با خودم، من برنامه نویس وب و بکند php هستم و یه چنتا برنامه gps نوشتم که میاد لوکیشن های مختلف رو روی نقشه نشون میده: مثلاً: https://amirhossein.dev/narmafzaran/mapline.php?loc_id=5 )
آردوینو فقط بیاد چنتا مشخصه مثه Latetude و Longitude و یه چنتا متغیر ثابت رو به یه API ارسال کنه..
با اینترنت..
ممنون میشم راهنماییم کنین.
خواهش میکنم دوست عزیز
لازمه شما با دستورات Get یا Post متغیرها را پاس بدید به ادرسی که میخاهید
AT+Command های SIM8080 مربوطه را نگاه کنید نحوه استفاده از دستورات کاملا مشخص هست
سلام
امکان انجام پروژه با شما وجود داره در زمینه GPS ؟
در صورتیکه درخواست انجام پروژه دارید RFQ خودتون را به ادرس Prj At sisoog.com بفرستید حتما بررسی و نتیحه را اعلام خواهیم کرد
سلام برنامه ها باید با چه ترتیبی نوشته بشن اول باید راه اندازی GPS نوشته بشه ؟لطفا به ترتیب توضیح بدین؟
سعی میکنیم انتهای مطلب لینک دانلود پروژه رو قرار بدیم.
سلام، چه مطلب پر مغز و جامعی بود. تشکر از این انتشار مطالب خیلی خوبتون. در بین متن گفته شد که ” این مقاله صرفا آموزشی است و به روشهای بسیار ساده کدنویسی شده است تا خوانایی کد برای تمامی خوانندگان واضح باشد.”؛ خیلی مشتاق هستم که نمونه حرفه ای ترش رو هم قرار بدید یا آموزشش رو بفرمایید. باز هم تشکر از این انتقال تجربه و مطالب خوبتون.
خواهش میکنم دوست عزیز
نمونه های حرفه ای زیادی رو میتونید توی گیت هاب پیدا کنید 🙂
با سلام
من عین مدار شما را شبیه سازی کردم ولی GPS و چراغ سبز رنگ آن به هیچ عنوان روشن نمی شه حتی برق 5 ولت 2 آمپر نیز به آن وصل کردم و همین طور برق 9 ولت ولی باز تغییری حاصل نشد ممنون میشم کمک کنید
این که شبیه سازی کردید یعنی دقیقا چکار کردید
خیلی عوامل داخل کار کرد یا عدم کار کرد یه مدار میتونه تاثیر داشته باشه – مهم ترین مساله هم بحث پاور مدار هست مخصوصا در استفاده از ماژول های مخابراتی
سلام میتونید بگید که کدوم کد هارو زیر void setup بنویسیم وکدوم زیر void loop
خوب خیلی بستگی به خودتون داره آخه
تابع setup یک بار بعد از روشن شدن و به کار افتادن آردینو اجرا خواهد شد و تابع لوپ به شکل مداوم صدا زده میشه
سلام کد هارو باید زیر void setup نوشت یا زیرvoid loop نوشت
شما کد زیر رو آزمایش کنید
https://gist.github.com/Sisoog/4824924b4a3acae91ed33cba45f92ff5
سلام دوستان . من این برنامه را برای کار با آردوینو نانو دانلود کردم و در همان ابتدا خطای costumer , Phone خطا میگیرد.
دیگر دوستان هم همین مشکل رو داشتند
کامنت ها رو مطالعه کنید احتمالا جوب سوالتون رو پیدا کنید.
سلام خوب هستید من هم همین مشکل رو دارم میشه راهنمایی کنید
سلام چرا رو خط String Phone= costumer; گیر میده؟
متن خطا ‘costumer’ was not declared in this scope
سلام دوست عزیز شما به جای costumer باید شماره همراه رو وارد کنید مثلا به این شکل “09xxxxxxxx” که برنامه خطا نگیره
invalid digit “9” in octal constant
سلام الان اینو میده بعد اگه خط رو پاک کنم رو sendData(“AT+CGNSPWR=1”,1000,DEBUG); اروری مشابه قبلی میده
این کد کتابخونه ای نداره؟
بعد چرا دوتا string phone داره یکی چنتا x دادین بهش یکی هم که costumer قضیش چیه؟
احتمالا اونجا یادش رفته – منظور این بوده که شماره دلخواه خودتون رو وارد کنید دوست عزیز
الان کدی که تغییر دادید و خطا دریافت میکنید رو می شه برام بفرستید
سلام بفرمایید
#include
#define DEBUG true
SoftwareSerial mySerial(10,11 );// RX, TX
String data[5];
String state,timegps,latitude,longitude;
String Operator,Balance;
String Phone = “***********”; // like a 0938*****75
void setup() {
Serial.begin(9600);
mySerial.begin(9600);
mySerial.println(“AT&F”);
delay(100);
mySerial.println(“AT+CMGF=1”);
mySerial.setTimeout(100);
sendData(“AT+CGNSPWR=1″,1000,DEBUG);
delay(50);
while(1){
Operator= Ooperator();
if(Operator==”nothing”){
Serial.println(Operator);
}// end if operator
else{
Serial.println(Operator);
Operator_Setting(Operator);
GSM_Initilaize();
Balance=balance(Ooperator());
// Send_Message(Phone, Balance);
Send_Message(Phone, “Welcome to SIM808”);
Serial.println(Balance);
return;
}
}// end while
} // end of Main
void loop() {
String Read_Message = receive_message();
if(Read_Message != “0”){
String phones = Get_PhoneNumber(Read_Message);
delay(100);
sendTabData(“AT+CGNSINF”,1000,DEBUG);
delay(300);
if (state !=0) {
Serial.println(“State :”+state);
Serial.println(“Time :”+timegps);
Serial.println(“Latitude :”+latitude);
Serial.println(“Longitude :”+longitude);
}
delay(1000);
//send_sms(Phone , “http://maps.google.com/maps?q=loc:”+latitude+”,”+longitude);
Serial.println(“http://maps.google.com/maps?q=loc:”+latitude+”,”+longitude);
}
}
بله درست میتونه باشه! 😐
اگه موردی نداره از طریق any desk یه ارتباط بگیریم
متاسفانه امکان ریموت دسکتاپ ندارم
یعنی چه
من این کار رو کردم ولی یه خطای دیگه داد
سلام.ببخشید چرا به دستور sendData(“AT+CGNSPWR=1”,1000,DEBUG);
گیر میده ؟؟؟ متن خطا ‘sendData’ was not declared in this scope
سلام
تابع sendData در قسمت «تابع ارسال پیام به همراه داشتن TimeOut و Debug» از مقاله تعریف شده است متونید کپی کنید توی متنتون
سلام من هرچی سرچ کردم نتونستم پیدا کنم میشه این کد رو جوری بزارید که با یک پیامک بشه یک رله رو روشن کرد
بفرمایید یک نمونه
https://maker.pro/arduino/projects/how-to-use-arduino-to-control-a-relay-through-sms
سلام خدمت شما اگه بخواهم چند رله به اردوینو وصل کنم و با ارسال پیام رله ها روشن بشه باید چیکار کنم میشه راهنمایی کنید و برنامشو بهم بدید
احتمالا با یه سرچ کوچولو میتونید نمونه سورس کد رو پیدا کنید 😐
با سلام و خسته نباشید.
word_filter در قسمت تشخیص اپراتور یه متده؟ کتابخونه خاصی داره یا خودتون ساختید؟ چون من جایی پیداش نکردم و اردوینو گیر میده بهش ارور میده.
سلام فکر کنم فراموش کردن این تابع رو بنویسن
چیزی که مشخصه اینه که این تابع میآد و یه بخش از رشته رو جدا میکنه و توی خروجی بر میگردونه
احتمالا تایع به شکل زیر تعریق شده
String word_filter(String str,String start,String end)
{
int Word1 = str.indexOf(start);
int Word2 = str.lastIndexOf(end);
retrun str.substring(Word1 , Word2);
}
سلام
من یه سوال دارم از خدمت شما در مورد دستگاه های جی پی اس ترکر شخصی که ممنون می شم راهنمایی کنید.
آیا در صورتی که بخواهیم داده های ارسالی این ابزار ها را به طور مستقیم و به شکل قابل استفاده روی سرور خودمان دریافت کنیم باید چه مواردی را از فروشنده خارجی بخواهم؟ فروشنده مذکور یک اپ موبایل و یک نرم افزار برای استفاده از داده ها و مدیریت آن معرفی کرده ولی من می خواهم داده ها را بتوانیم به شکل مورد نظر کار خودمان هم استفاده کنیم.در این صورت چنانچه یک وب سرویس در اختیار قرار دهد داده ها به شکل رمز گشایی شده قابل اشتفاده هستند؟ در این صورت چه چیزی از آنها بخواهم؟
خیلی ممنون از راهنمایی شما
سلام
دوست عزیز اکثر اینها یک پروتکل ارتباطی دارند که اون را از فروشنده بخاهید و بعد از اون میتونید با تنظیم ای پی و پورت و نوشتن یک برنامه روی سرور خودتون داشته باشید
حتی نرم افزارهای اپن سورسی هم هستند که اکثر پروتکلها را پشتیبانی میکنند و فقط کافیه شما اون را روی سرور نصب کنید و اطلاعات کامل خیلی راحت روی دیتابیس سرور شما میشینه
مثل
https://www.traccar.org/
سلام .
بسیار عالی.
من همیشه علاقه مند بودم با ماژولهای gsm کار کنم . از مقاله شما لذت بردم ، این که به صورت تابعی مطالب رو تشریح کردید باعث شده مطلب خیلی روان باشه .
یک سوال هم دارم . مثلا اگر بخواهیم اون مختصات گوگل روی گوشی نمایش بدیم چطور میتونیم اون رو به صورت اتوماتیک توی مرورگر یاmap گوشی وارد کنیم؟
اینکار مستلزم نرم افزار های اندرویدی هست یا با یک سری تنظیمات توی گوشی امکانپذیره ؟
برای pc چطوز امکانپذیره ؟
اگر بخواهیم مسیر حرکت رو روی map گوشی نمایش بده ایا باز هم از همون لینک گوگل استفاده میشه یا راهکار دیگه ای داره ؟
ببخشید یک مقدار سوالات زیاد شد.
باز هم متشکر از مطلب خوبتون .
سلام دوست عزیزم
در مورد بخش اول سوالتون: همونطوری که میدونید در برنامه ما یک طول و عرض جغرافیایی رو از GPS دریافت میکنیم و در نهایت توی این مقاله اونا رو نمایش میدیم اما برای اینکه بیاد روی نقشه گوگل اگر دقت کنید یک لینکی رو برای شما قرار دادم که مربوط به گوگل مپ هستش توسط این لینک اگر شما طول و عرض رو داخل این لینک قرار بدید و سپس ارسال پیام رو انجام بدید اتفاقی که میفته یک لینک گوگل مپ به همراه طول و عرض جغرافیایی رو دریافت میکنید که اگر روی اون بزنید به صورت خودکار وارد گوگل مپ میشه و نقطه رو میبینید.
بخش دوم سوالتون که چطور اونو روی گوشی بیارید
در بخش اول توضیح دادم که با ارسال پیام این کار صورت میگیره اما فکر میکنم منظور شما تحت اپلیکیشن هست.
برای اینکار شما نیاز به نوشتن یک نرمافزار اندروید یا IOS دارید بسته به نوع گوشیتون حالا اتفاقی که میفته
شما باید تابعی رو بنویسید (همون تابع فیلتری که معرفی کردم برای دریافت پیام) برای اندروید که این قابلیت رو داشته باشه دیتای دریافتی رو از هم تفکیک کنه یعنی چی؟ یعنی اینکه فرض کنید شما پیامی با عنوان لینک گوگل + طول جغرافیایی + عرض جغرافیایی برای گوشی ارسال میکنید حالا توی نرمافزار باید بتونید این رو فیلتر کنید چطور؟ به این روشی که میگم خدمتتون اول پیامتون مثلا BLOOM+ لینک گوگل + طول جغرافیایی + عرض جغرافیایی +bloom برای گوشی ارسال کنید و توی نرمافزاری که نوشتید تابع فیلتری رو که گفتم پیاده سازی کنید و تعریف کنید زمانی که پیامی داشتید اولش BLOOM , bloom بود رو تشخیص بده و پس از اینکه تشخیص داد به روی کلید مدنظرتون کلیک کنید و در نهایت به صورت خودکار وارد گوگل مپ خواهد شد
بخش سوم سوالتون
بله برای PC هم کاملا امکان پذیره فقط مستلزم اینه که شما شما یک نرمافزار دقیقا طبق توضیحاتی که دادم مجددا بنویسید
البته مدل پیشرفته ترش اینکه شما توسط یک وب سایت که نوشتید پیاده سازی کنید که این مسله هم چیز سختی نیست چون تقریباکسی نرمافزاری رو برای PC نمینویسه بلکه همه سعیشون بر اینکه اونو توسط یه وب سایت پیاده سازی کنند.
بخش چهارم سوالتون
اگر بخواید که لحظه به لحظه دیتا رو مشخص کنید و اصطلاحا مسیر یابی کنید مسلما باید نقاطی رو که ارسال میکنید به صورت لحظه به لحظه باشه و از طرف گوشی و یا وب سایت این داده ها رو تفکیک کنید که با این روش، قابلیت هایی از جمله مختصات لحظه ای دستگاه رو خواهید داشت و همینطور اگر به درستی فیلتر صورت بگیرد میتوانید ساعت دقیق را از GPS دریافت کنید و به طور مثال بگویید که دستگاه در چه ساعتی در کجا بوده و …
بخش پنجم سوالتون
برای اینکه این تنظیمات را انجام دهیم نیازی به تنظیمی از طرف گوشی نیست که فکر کنید باید تنظیم خاصی رو انجام بدید فقط تنها چیزی که باید ان را انجام دهید روشن کردن دیتاتونه البته اگر اینترنت هم روشن نباشه میتونید مختصات رو ذخیره کنید توی یه SD CARD و در نهایت نقط رو چک کنید و بسیاری از اپشن های دیگر که کاملا ممکنه بسته به سلیقه شما متفاوت باشه
امیدوارم توضیحاتی رو که دادم مفید واقع شده باشه برای شما.
موفق باشید
سلام .
مرسی . لطف کردید توضیحات کاملی بود . جواب سوالاتم رو گرفتم .
سلام دوست عزیز
خواهش میکنم وظیفه بود
موفق باشید.