在本教程中,我將深入介紹SIM808硬件接口。您可能擁有一個(gè)從中國(guó)制造的SIM808模塊,但發(fā)現(xiàn)它們沒有附帶任何文檔或測(cè)試代碼。本教程可以幫助初學(xué)者快速了解SIM808接口規(guī)范以及機(jī)械和電氣細(xì)節(jié)。另外,我將在GitHub上添加文檔和庫(kù),以便您能夠快速設(shè)計(jì)各種應(yīng)用程序。
這個(gè)項(xiàng)目是一個(gè)簡(jiǎn)單的跟蹤系統(tǒng),使用相同的GSM和GPS模塊,內(nèi)置于SIM808模塊中。在本教程結(jié)束時(shí),當(dāng)您從任何手機(jī)發(fā)送GSM模塊時(shí),您將能夠根據(jù)模塊的GPS位置獲得模塊的GPS位置響應(yīng)。
什么是SIM808模塊?
基本上, SIM808模塊專為全球市場(chǎng)設(shè)計(jì)。它與高性能GSM/GPRS芯片集成,它還有一個(gè)GPS引擎和一個(gè)BT引擎。
SIM808是四頻GSM/GPRS模塊,工作頻率為GSM 850MHz,EGSM 900MHz,DCS 1800MHz和PCS 1900MHz。它具有GPRS多插槽12級(jí)/10級(jí),支持GPRS編碼方案CS-1,CS-2,CS-3和CS-4。 GPS解決方案提供同類最佳的采集和跟蹤靈敏度,首次定位時(shí)間(TTFF)和準(zhǔn)確度。
SIM808模塊的好處
SIM808有68引腳SMT焊盤(單芯片模塊無(wú)需焊接),提供模塊和用戶板之間的所有硬件接口。它還具有以下功能:
一個(gè)完整的調(diào)制解調(diào)器串行端口(UART接口)
一個(gè)SIM卡界面
默認(rèn)情況下能夠支持4 * 4keypads
充電界面
一個(gè)USB,支持調(diào)試和固件升級(jí)
能夠支持藍(lán)牙功能
可編程通用輸入和輸出(GPIO)
能夠支持兩個(gè)PWM和兩個(gè)ADC
集成TCP/IP協(xié)議和擴(kuò)展TCP/IP AT命令,這對(duì)數(shù)據(jù)傳輸應(yīng)用非常有用
支持GPS功能的能力
一種省電技術(shù),在睡眠模式下保持電流消耗低至1.2mA(GPS引擎斷電)
PCM/SPI接口
硬件和軟件要求
硬件 的結(jié)果,
《升i》 SIM 808模塊
Arduino UNO或Arduino MEGA
Arduino電纜
9V電源
GPS天線和GSM天線
必要的硬件
軟件
Arduino IDE
SIM808庫(kù)
建立連接
如下圖所示連接所有內(nèi)容。
Rx至引腳10
Tx至引腳11
將SIM808與9V適配器連接
提供通過(guò)USB線或9V充電器為Arduino供電
Arduino UNO的連接
Arduino Mega的連接
下圖顯示正確連接時(shí)連接的外觀:
上傳源代碼
上傳以下代碼。如果您是Arduino的新手,請(qǐng)務(wù)必查看Maker Pro的Arduino教育頁(yè)面以獲取更多教程。
#include
#include
#define MESSAGE_LENGTH 160
char message[MESSAGE_LENGTH];
int messageIndex = 0;
char MESSAGE[300];
char lat[12];
char lon[12];
char wspeed[12];
char phone[16];
char datetime[24];
#define PIN_TX 10
#define PIN_RX 11
SoftwareSerial mySerial(PIN_TX,PIN_RX);
DFRobot_SIM808 sim808(&mySerial);//Connect RX,TX,PWR,
void setup()
{
mySerial.begin(9600);
Serial.begin(9600);
//******** Initialize sim808 module *************
while(!sim808.init())
{
Serial.print(“Sim808 init error ”);
delay(1000);
}
delay(3000);
if( sim808.attachGPS())
Serial.println(“Open the GPS power success”);
else
Serial.println(“Open the GPS power failure”);
Serial.println(“Init Success, please send SMS message to me!”);
}
void loop()
{
//*********** Detecting unread SMS ************************
messageIndex = sim808.isSMSunread();
//*********** At least, there is one UNREAD SMS ***********
if (messageIndex 》 0)
{
Serial.print(“messageIndex: ”);
Serial.println(messageIndex);
sim808.readSMS(messageIndex, message, MESSAGE_LENGTH, phone, datetime);
//***********In order not to full SIM Memory, is better to delete it**********
sim808.deleteSMS(messageIndex);
Serial.print(“From number: ”);
Serial.println(phone);
Serial.print(“Datetime: ”);
Serial.println(datetime);
Serial.print(“Recieved Message: ”);
Serial.println(message);
while(!sim808.getGPS())
{
}
Serial.print(sim808.GPSdata.year);
Serial.print(“/”);
Serial.print(sim808.GPSdata.month);
Serial.print(“/”);
Serial.print(sim808.GPSdata.day);
Serial.print(“ ”);
Serial.print(sim808.GPSdata.hour);
Serial.print(“:”);
Serial.print(sim808.GPSdata.minute);
Serial.print(“:”);
Serial.print(sim808.GPSdata.second);
Serial.print(“:”);
Serial.println(sim808.GPSdata.centisecond);
Serial.print(“l(fā)atitude :”);
Serial.println(sim808.GPSdata.lat);
Serial.print(“l(fā)ongitude :”);
Serial.println(sim808.GPSdata.lon);
Serial.print(“speed_kph :”);
Serial.println(sim808.GPSdata.speed_kph);
Serial.print(“heading :”);
Serial.println(sim808.GPSdata.heading);
Serial.println();
float la = sim808.GPSdata.lat;
float lo = sim808.GPSdata.lon;
float ws = sim808.GPSdata.speed_kph;
dtostrf(la, 6, 2, lat); //put float value of la into char array of lat. 6 = number of digits before decimal sign. 2 = number of digits after the decimal sign.
dtostrf(lo, 6, 2, lon); //put float value of lo into char array of lon
dtostrf(ws, 6, 2, wspeed); //put float value of ws into char array of wspeed
sprintf(MESSAGE, “Latitude : %s Longitude : %s Wind Speed : %s kph My Module Is Working. Mewan Indula Pathirage. Try With This Link. http://www.latlong.net/Show-Latitude-Longitude.html http://maps.google.com/maps?q=%s,%s ”, lat, lon, wspeed, lat, lon);
Serial.println(“Sim808 init success”);
Serial.println(“Start to send message 。..”);
Serial.println(MESSAGE);
Serial.println(phone);
sim808.sendSMS(phone,MESSAGE);
//************* Turn off the GPS power ************
sim808.detachGPS();
}
}
全部放在一起
通過(guò)Arduino IDE上傳代碼后,只需以9600波特率打開串口監(jiān)視器。在這里您將看到以下內(nèi)容:
因此,每當(dāng)您將“Hi”或“Hello”字符串發(fā)送到已插入的SIM號(hào)碼時(shí)在GSM模塊中,Arduino會(huì)使用模塊位置的經(jīng)度和緯度信息給你發(fā)回信息。
此外,我已經(jīng)添加了一個(gè)鏈接到Google地圖,所以當(dāng)它發(fā)回給你時(shí),它也會(huì)來(lái)使用Google地圖位置,如下圖所示:
-
gps
+關(guān)注
關(guān)注
22文章
2986瀏覽量
169452 -
Arduino
+關(guān)注
關(guān)注
190文章
6498瀏覽量
192239
發(fā)布評(píng)論請(qǐng)先 登錄
汽車制造領(lǐng)域激光焊縫跟蹤系統(tǒng)的應(yīng)用案例

hyper-v 備份,hyper-v怎樣進(jìn)行虛擬機(jī)的創(chuàng)建

用邏輯和翻譯用例優(yōu)化資產(chǎn)跟蹤器

創(chuàng)想智控焊縫跟蹤系統(tǒng)運(yùn)用激光尋位在工程汽車高機(jī)底座焊接的應(yīng)用

FORT單元-不依賴GPS的步跟蹤定位穿戴設(shè)備@PNI

用CD4046組成的頻率信號(hào)跟蹤電路,仿真時(shí)發(fā)現(xiàn)根本實(shí)現(xiàn)不了頻率跟蹤,為什么?
GPS車載定位系統(tǒng)的設(shè)計(jì)
AT3340:支持BDS/GPS雙模授時(shí)板datasheet

借助TS Skydel與GNSS模擬器創(chuàng)建一顆固定的GNSS衛(wèi)星

評(píng)論