|
0.jpg (85.22 KB, 下載次數(shù): 107)
下載附件
2017-12-17 20:43 上傳
0.jpg (31.88 KB, 下載次數(shù): 88)
下載附件
2017-12-17 20:44 上傳
全部資料51hei下載地址:
A7模塊原理圖.pdf
(315.26 KB, 下載次數(shù): 17)
2017-12-17 19:08 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
A6模塊原理圖.pdf
(308.72 KB, 下載次數(shù): 10)
2017-12-17 19:08 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
sscom33串口調(diào)試助手.zip
(341.93 KB, 下載次數(shù): 9)
2017-12-17 19:08 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
A6A7用戶手冊 V1.2.pdf
(2.46 MB, 下載次數(shù): 17)
2017-12-17 19:08 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
04.ARDUINO MEGA2560 GPS解析.zip
(2.93 KB, 下載次數(shù): 30)
2017-12-17 19:09 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
ARDUINO源程序如下:
- /*********************************************************************
- 作者:神秘藏寶室
- 本例程僅適用于在本店購買模塊的用戶使用,鄙視其它店鋪的盜用行為
- 版權(quán)所有,盜版必究。!
- A6模塊鏈接:
- A6 GSM/GPRS模塊:
-
- 接線方式
- A7 ARDUINO MEGA2560
- GND ---> GND
- U_TXD ---> RX3
- U_RXD <--- TX3
- GPS_TXD ---> RX2
- *********************************************************************/
- #include <TimerOne.h>
- #define DebugSerial Serial
- #define GprsSerail Serial3
- #define GpsSerial Serial2
- struct
- {
- char GPS_Buffer[80];
- bool isGetData; //是否獲取到GPS數(shù)據(jù)
- bool isParseData; //是否解析完成
- char UTCTime[11]; //UTC時間
- char latitude[11]; //緯度
- char N_S[2]; //N/S
- char longitude[12]; //經(jīng)度
- char E_W[2]; //E/W
- bool isUsefull; //定位信息是否有效
- } Save_Data;
- const unsigned int gpsRxBufferLength = 600;
- char gpsRxBuffer[gpsRxBufferLength];
- unsigned int gpsRxCount = 0;
- #define Success 1U
- #define Failure 0U
- int L = 13; //LED指示燈引腳
- unsigned long Time_Cont = 0; //定時器計數(shù)器
- const unsigned int gprsRxBufferLength = 500;
- char gprsRxBuffer[gprsRxBufferLength];
- unsigned int gprsBufferCount = 0;
- char messageBuffer[100] = {};
- char send_buf[100] = {0};
- const char TCPServer[] = "122.228.19.57"; //TCP服務(wù)器地址
- const char Port[] = "30396"; //端口
- unsigned int count = 0;
- void setup() {
- pinMode(L, OUTPUT);
- digitalWrite(L, LOW);
- DebugSerial.begin(9600);
- GprsSerail.begin(115200);
- GpsSerial.begin(9600); //定義波特率9600,和我們店鋪的GPS模塊輸出的波特率一致
- Timer1.initialize(1000);
- Timer1.attachInterrupt(Timer1_handler);
- initGprs(); //初始化模塊
- DebugSerial.println("\r\nsetup end!");
- clrGprsRxBuffer();
- }
- void loop() {
- gpsRead(); //獲取GPS數(shù)據(jù)
- parseGpsBuffer();//解析GPS數(shù)據(jù)
- printGpsBuffer();//輸出解析后的數(shù)據(jù)
- }
- void initGprs()
- {
- if (sendCommand("AT+RST\r\n", "OK\r\n", 3000, 10) == Success);
- else errorLog(1);
- if (sendCommand("AT\r\n", "OK\r\n", 3000, 10) == Success);
- else errorLog(2);
- delay(10);
- if (sendCommand("AT+GPS=1\r\n","OK\r\n", 1000, 10) == Success);
- else errorLog(3);
- delay(10);
- }
- void(* resetFunc) (void) = 0; //制造重啟命令
- void errorLog(int num)
- {
- DebugSerial.print("ERROR");
- DebugSerial.println(num);
- while (1)
- {
- digitalWrite(L, HIGH);
- delay(100);
- digitalWrite(L, LOW);
- delay(100);
- digitalWrite(L, HIGH);
- delay(100);
- digitalWrite(L, LOW);
- delay(300);
- if (sendCommand("AT\r\n", "OK", 100, 10) == Success)
- {
- DebugSerial.print("\r\nRESET!!!!!!\r\n");
- resetFunc();
- }
- }
- }
- void printGpsBuffer()
- {
- if (Save_Data.isParseData)
- {
- Save_Data.isParseData = false;
- DebugSerial.print("Save_Data.UTCTime = ");
- DebugSerial.println(Save_Data.UTCTime);
- if (Save_Data.isUsefull)
- {
- Save_Data.isUsefull = false;
- DebugSerial.print("Save_Data.latitude = ");
- DebugSerial.println(Save_Data.latitude);
- DebugSerial.print("Save_Data.N_S = ");
- DebugSerial.println(Save_Data.N_S);
- DebugSerial.print("Save_Data.longitude = ");
- DebugSerial.println(Save_Data.longitude);
- DebugSerial.print("Save_Data.E_W = ");
- DebugSerial.println(Save_Data.E_W);
- digitalWrite(L, !digitalRead(L));//發(fā)送一組數(shù)據(jù)翻轉(zhuǎn)一次
- }
- else
- {
- DebugSerial.println("GPS DATA is not usefull!");
- }
- }
- }
- void parseGpsBuffer()
- {
- char *subString;
- char *subStringNext;
- if (Save_Data.isGetData)
- {
- Save_Data.isGetData = false;
- DebugSerial.println("**************");
- DebugSerial.println(Save_Data.GPS_Buffer);
- for (int i = 0 ; i <= 6 ; i++)
- {
- if (i == 0)
- {
- if ((subString = strstr(Save_Data.GPS_Buffer, ",")) == NULL)
- errorLog(12); //解析錯誤
- }
- else
- {
- subString++;
- if ((subStringNext = strstr(subString, ",")) != NULL)
- {
- char usefullBuffer[2];
- switch (i)
- {
- case 1: memcpy(Save_Data.UTCTime, subString, subStringNext - subString); break; //獲取UTC時間
- case 2: memcpy(usefullBuffer, subString, subStringNext - subString); break; //獲取UTC時間
- case 3: memcpy(Save_Data.latitude, subString, subStringNext - subString); break; //獲取緯度信息
- case 4: memcpy(Save_Data.N_S, subString, subStringNext - subString); break; //獲取N/S
- case 5: memcpy(Save_Data.longitude, subString, subStringNext - subString); break; //獲取緯度信息
- case 6: memcpy(Save_Data.E_W, subString, subStringNext - subString); break; //獲取E/W
- default: break;
- }
- subString = subStringNext;
- Save_Data.isParseData = true;
- if (usefullBuffer[0] == 'A')
- Save_Data.isUsefull = true;
- else if (usefullBuffer[0] == 'V')
- Save_Data.isUsefull = false;
- }
- else
- {
- errorLog(13); //解析錯誤
- }
- }
- }
- }
- }
- void gpsRead() {
- while (GpsSerial.available())
- {
- gpsRxBuffer[gpsRxCount] = GpsSerial.read();
- if (gpsRxBuffer[gpsRxCount++] == '\n')
- {
- char* GPS_BufferHead;
- char* GPS_BufferTail;
- if ((GPS_BufferHead = strstr(gpsRxBuffer, "$GPRMC,")) != NULL || (GPS_BufferHead = strstr(gpsRxBuffer, "$GNRMC,")) != NULL )
- {
- if (((GPS_BufferTail = strstr(GPS_BufferHead, "\r\n")) != NULL) && (GPS_BufferTail > GPS_BufferHead))
- {
- memcpy(Save_Data.GPS_Buffer, GPS_BufferHead, GPS_BufferTail - GPS_BufferHead);
- Save_Data.isGetData = true;
- clrGpsRxBuffer();
- }
- }
- clrGpsRxBuffer();
- }
- if (gpsRxCount == gpsRxBufferLength)clrGpsRxBuffer();
- }
- }
- void clrGpsRxBuffer(void)
- {
- memset(gpsRxBuffer, 0, gpsRxBufferLength); //清空
- gpsRxCount = 0;
- }
- unsigned int sendCommand(char *Command, char *Response, unsigned long Timeout, unsigned char Retry)
- {
- clrGprsRxBuffer();
- for (unsigned char n = 0; n < Retry; n++)
- {
- DebugSerial.print("\r\n---------send AT Command:---------\r\n");
- DebugSerial.write(Command);
- GprsSerail.write(Command);
- Time_Cont = 0;
- while (Time_Cont < Timeout)
- {
- gprsReadBuffer();
- if (strstr(gprsRxBuffer, Response) != NULL)
- {
- DebugSerial.print("\r\n==========receive AT Command:==========\r\n");
- DebugSerial.print(gprsRxBuffer); //輸出接收到的信息
- clrGprsRxBuffer();
- return Success;
- }
- }
- Time_Cont = 0;
- }
- DebugSerial.print("\r\n==========receive AT Command:==========\r\n");
- DebugSerial.print(gprsRxBuffer);//輸出接收到的信息
- clrGprsRxBuffer();
- return Failure;
- }
- unsigned int sendCommandReceive2Keyword(char *Command, char *Response, char *Response2, unsigned long Timeout, unsigned char Retry)
- {
- clrGprsRxBuffer();
- for (unsigned char n = 0; n < Retry; n++)
- {
- DebugSerial.print("\r\n---------send AT Command:---------\r\n");
- DebugSerial.write(Command);
- GprsSerail.write(Command);
- Time_Cont = 0;
- while (Time_Cont < Timeout)
- {
- gprsReadBuffer();
- if (strstr(gprsRxBuffer, Response) != NULL && strstr(gprsRxBuffer, Response2) != NULL)
- {
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
|
|