找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6138|回复: 1
打印 上一主题 下一主题
收起左侧

安信可A6A7模块资料及ARDUINO MEGA2560 GPS解析程序

[复制链接]
跳转到指定楼层
楼主


全部资料51hei下载地址:
A7模块原理图.pdf (315.26 KB, 下载次数: 17)
A6模块原理图.pdf (308.72 KB, 下载次数: 10)
sscom33串口调试助手.zip (341.93 KB, 下载次数: 9)
A6A7用户手册 V1.2.pdf (2.46 MB, 下载次数: 17)
04.ARDUINO MEGA2560 GPS解析.zip (2.93 KB, 下载次数: 30)



ARDUINO源程序如下:
  1. /*********************************************************************
  2.                  作者:神秘藏宝室

  3.         本例程仅适用于在本店购买模块的用户使用,鄙视其它店铺的盗用行为
  4.         版权所有,盗版必究!!!
  5.         A6模块链接:
  6.         A6 GSM/GPRS模块:       
  7.        
  8.         接线方式
  9.         A7                                ARDUINO MEGA2560
  10.         GND          --->                GND
  11.         U_TXD        --->                RX3
  12.         U_RXD        <---                TX3

  13.         GPS_TXD        --->                RX2
  14. *********************************************************************/
  15. #include <TimerOne.h>



  16. #define DebugSerial Serial
  17. #define GprsSerail Serial3
  18. #define GpsSerial  Serial2

  19. struct
  20. {
  21.         char GPS_Buffer[80];
  22.         bool isGetData;   //是否获取到GPS数据
  23.         bool isParseData; //是否解析完成
  24.         char UTCTime[11];   //UTC时间
  25.         char latitude[11];    //纬度
  26.         char N_S[2];    //N/S
  27.         char longitude[12];   //经度
  28.         char E_W[2];    //E/W
  29.         bool isUsefull;   //定位信息是否有效
  30. } Save_Data;

  31. const unsigned int gpsRxBufferLength = 600;
  32. char gpsRxBuffer[gpsRxBufferLength];
  33. unsigned int gpsRxCount = 0;

  34. #define Success 1U
  35. #define Failure 0U

  36. int L = 13; //LED指示灯引脚

  37. unsigned long  Time_Cont = 0;       //定时器计数器

  38. const unsigned int gprsRxBufferLength = 500;
  39. char gprsRxBuffer[gprsRxBufferLength];
  40. unsigned int gprsBufferCount = 0;

  41. char messageBuffer[100] = {};

  42. char send_buf[100] = {0};

  43. const char TCPServer[] = "122.228.19.57";                //TCP服务器地址
  44. const char Port[] = "30396";                                                //端口

  45. unsigned int count = 0;


  46. void setup() {
  47.         pinMode(L, OUTPUT);
  48.         digitalWrite(L, LOW);

  49.         DebugSerial.begin(9600);
  50.         GprsSerail.begin(115200);
  51.         GpsSerial.begin(9600);      //定义波特率9600,和我们店铺的GPS模块输出的波特率一致

  52.         Timer1.initialize(1000);
  53.         Timer1.attachInterrupt(Timer1_handler);

  54.         initGprs();                //初始化模块


  55.         DebugSerial.println("\r\nsetup end!");
  56.         clrGprsRxBuffer();
  57. }

  58. void loop() {
  59.         gpsRead();  //获取GPS数据
  60.         parseGpsBuffer();//解析GPS数据
  61.         printGpsBuffer();//输出解析后的数据
  62. }


  63. void initGprs()
  64. {
  65.         if (sendCommand("AT+RST\r\n", "OK\r\n", 3000, 10) == Success);
  66.         else errorLog(1);

  67.         if (sendCommand("AT\r\n", "OK\r\n", 3000, 10) == Success);
  68.         else errorLog(2);

  69.         delay(10);

  70.         if (sendCommand("AT+GPS=1\r\n","OK\r\n", 1000, 10) == Success);
  71.         else errorLog(3);
  72.         delay(10);

  73. }

  74. void(* resetFunc) (void) = 0; //制造重启命令

  75. void errorLog(int num)
  76. {
  77.         DebugSerial.print("ERROR");
  78.         DebugSerial.println(num);
  79.         while (1)
  80.         {
  81.                 digitalWrite(L, HIGH);
  82.                 delay(100);
  83.                 digitalWrite(L, LOW);
  84.                 delay(100);
  85.                 digitalWrite(L, HIGH);
  86.                 delay(100);
  87.                 digitalWrite(L, LOW);
  88.                 delay(300);

  89.                 if (sendCommand("AT\r\n", "OK", 100, 10) == Success)
  90.                 {
  91.                         DebugSerial.print("\r\nRESET!!!!!!\r\n");
  92.                         resetFunc();
  93.                 }
  94.         }
  95. }

  96. void printGpsBuffer()
  97. {
  98.         if (Save_Data.isParseData)
  99.         {
  100.                 Save_Data.isParseData = false;

  101.                 DebugSerial.print("Save_Data.UTCTime = ");
  102.                 DebugSerial.println(Save_Data.UTCTime);

  103.                 if (Save_Data.isUsefull)
  104.                 {
  105.                         Save_Data.isUsefull = false;
  106.                         DebugSerial.print("Save_Data.latitude = ");
  107.                         DebugSerial.println(Save_Data.latitude);
  108.                         DebugSerial.print("Save_Data.N_S = ");
  109.                         DebugSerial.println(Save_Data.N_S);
  110.                         DebugSerial.print("Save_Data.longitude = ");
  111.                         DebugSerial.println(Save_Data.longitude);
  112.                         DebugSerial.print("Save_Data.E_W = ");
  113.                         DebugSerial.println(Save_Data.E_W);

  114.                         digitalWrite(L, !digitalRead(L));//发送一组数据翻转一次
  115.                 }
  116.                 else
  117.                 {
  118.                         DebugSerial.println("GPS DATA is not usefull!");
  119.                 }

  120.         }
  121. }

  122. void parseGpsBuffer()
  123. {
  124.         char *subString;
  125.         char *subStringNext;
  126.         if (Save_Data.isGetData)
  127.         {
  128.                 Save_Data.isGetData = false;
  129.                 DebugSerial.println("**************");
  130.                 DebugSerial.println(Save_Data.GPS_Buffer);


  131.                 for (int i = 0 ; i <= 6 ; i++)
  132.                 {
  133.                         if (i == 0)
  134.                         {
  135.                                 if ((subString = strstr(Save_Data.GPS_Buffer, ",")) == NULL)
  136.                                         errorLog(12);  //解析错误
  137.                         }
  138.                         else
  139.                         {
  140.                                 subString++;
  141.                                 if ((subStringNext = strstr(subString, ",")) != NULL)
  142.                                 {
  143.                                         char usefullBuffer[2];
  144.                                         switch (i)
  145.                                         {
  146.                                         case 1: memcpy(Save_Data.UTCTime, subString, subStringNext - subString); break; //获取UTC时间
  147.                                         case 2: memcpy(usefullBuffer, subString, subStringNext - subString); break; //获取UTC时间
  148.                                         case 3: memcpy(Save_Data.latitude, subString, subStringNext - subString); break; //获取纬度信息
  149.                                         case 4: memcpy(Save_Data.N_S, subString, subStringNext - subString); break; //获取N/S
  150.                                         case 5: memcpy(Save_Data.longitude, subString, subStringNext - subString); break; //获取纬度信息
  151.                                         case 6: memcpy(Save_Data.E_W, subString, subStringNext - subString); break; //获取E/W

  152.                                         default: break;
  153.                                         }

  154.                                         subString = subStringNext;
  155.                                         Save_Data.isParseData = true;
  156.                                         if (usefullBuffer[0] == 'A')
  157.                                                 Save_Data.isUsefull = true;
  158.                                         else if (usefullBuffer[0] == 'V')
  159.                                                 Save_Data.isUsefull = false;

  160.                                 }
  161.                                 else
  162.                                 {
  163.                                         errorLog(13);  //解析错误
  164.                                 }
  165.                         }


  166.                 }
  167.         }
  168. }


  169. void gpsRead() {
  170.         while (GpsSerial.available())
  171.         {
  172.                 gpsRxBuffer[gpsRxCount] = GpsSerial.read();
  173.                 if (gpsRxBuffer[gpsRxCount++] == '\n')
  174.                 {
  175.                         char* GPS_BufferHead;
  176.                         char* GPS_BufferTail;
  177.                         if ((GPS_BufferHead = strstr(gpsRxBuffer, "$GPRMC,")) != NULL || (GPS_BufferHead = strstr(gpsRxBuffer, "$GNRMC,")) != NULL )
  178.                         {
  179.                                 if (((GPS_BufferTail = strstr(GPS_BufferHead, "\r\n")) != NULL) && (GPS_BufferTail > GPS_BufferHead))
  180.                                 {
  181.                                         memcpy(Save_Data.GPS_Buffer, GPS_BufferHead, GPS_BufferTail - GPS_BufferHead);
  182.                                         Save_Data.isGetData = true;

  183.                                         clrGpsRxBuffer();
  184.                                 }
  185.                         }
  186.                         clrGpsRxBuffer();
  187.                 }
  188.                 if (gpsRxCount == gpsRxBufferLength)clrGpsRxBuffer();
  189.         }


  190. }

  191. void clrGpsRxBuffer(void)
  192. {
  193.         memset(gpsRxBuffer, 0, gpsRxBufferLength);      //清空
  194.         gpsRxCount = 0;
  195. }



  196. unsigned int sendCommand(char *Command, char *Response, unsigned long Timeout, unsigned char Retry)
  197. {
  198.         clrGprsRxBuffer();
  199.         for (unsigned char n = 0; n < Retry; n++)
  200.         {
  201.                 DebugSerial.print("\r\n---------send AT Command:---------\r\n");
  202.                 DebugSerial.write(Command);

  203.                 GprsSerail.write(Command);

  204.                 Time_Cont = 0;
  205.                 while (Time_Cont < Timeout)
  206.                 {
  207.                         gprsReadBuffer();
  208.                         if (strstr(gprsRxBuffer, Response) != NULL)
  209.                         {
  210.                                 DebugSerial.print("\r\n==========receive AT Command:==========\r\n");
  211.                                 DebugSerial.print(gprsRxBuffer); //输出接收到的信息
  212.                                 clrGprsRxBuffer();
  213.                                 return Success;
  214.                         }
  215.                 }
  216.                 Time_Cont = 0;
  217.         }
  218.         DebugSerial.print("\r\n==========receive AT Command:==========\r\n");
  219.         DebugSerial.print(gprsRxBuffer);//输出接收到的信息
  220.         clrGprsRxBuffer();
  221.         return Failure;
  222. }

  223. unsigned int sendCommandReceive2Keyword(char *Command, char *Response, char *Response2, unsigned long Timeout, unsigned char Retry)
  224. {
  225.         clrGprsRxBuffer();
  226.         for (unsigned char n = 0; n < Retry; n++)
  227.         {
  228.                 DebugSerial.print("\r\n---------send AT Command:---------\r\n");
  229.                 DebugSerial.write(Command);

  230.                 GprsSerail.write(Command);

  231.                 Time_Cont = 0;
  232.                 while (Time_Cont < Timeout)
  233.                 {
  234.                         gprsReadBuffer();
  235.                         if (strstr(gprsRxBuffer, Response) != NULL && strstr(gprsRxBuffer, Response2) != NULL)
  236.                         {
  237. ……………………

  238. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:370599 发表于 2018-7-13 00:02 | 只看该作者
终于找到可以用的了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表