Adafruit FONA 3G GPS не показывает ответа

В настоящее время я работаю над проектом с моим другом, который включает отслеживание GPS. Это плата FONA 3G GPS, которую мы используем от Adafruit. https://www.adafruit.com/product/3147

Мы также используем рекомендованную активную GPS-антенну. Я не могу опубликовать ссылку на него из-за своей низкой репутации.

Мы создаем прототип системы на микроконтроллере LPC1768 mbed. Мы написали наш собственный код mbed, который отправляет AT-команды в FONA через UART на mbed, а затем отображает ответ на компьютере через putty. Мы попробовали несколько AT простых AT-команд, таких как информация о производителе и информация о SIM-карте, и они работали нормально. Мы также попробовали более сложные AT-команды, которые запрашивают уровень заряда батареи и тому подобное, и те тоже работали. Сейчас у нас проблемы с получением ответа GPS. Прошлой ночью, около 1 часа ночи, мы смогли получить ответ GPS с помощью команды AT + CGPSINFO, которая показывает нам долготу, широту, направление и тому подобное. Тем не менее, он был неточным примерно на 40 миль. Сегодня, когда мы вернулись к нему, чтобы попытаться исправить это, мы не смогли получить никакого ответа от GPS. Мы все еще можем получать ответы от уровня заряда батареи и других команд. Это просто GPS, который не отвечает. Мы попробовали это в помещении и на улице, и оставили модуль работать более часа в режиме GPSTEST, но безрезультатно.

Это код, который мы имеем до сих пор.

#include "mbed.h"
#define FONA_RST p12
#define FONA_TX p13
#define FONA_RX p14
#define FONA_RI p11
Serial fona(FONA_TX, FONA_RX);

Serial pc(USBTX, USBRX);
Serial esp(p28, p27); // tx, rx
DigitalOut reset(p26);
Timer t;

int  count,ended,timeout;
char buf[4024];
char snd[255];

char ssid[32] = "ycp-web-wifi";     // enter WiFi router ssid inside the                  quotes
char pwd [32] = "YCPnet2005"; // enter WiFi router password inside the quotes

void   SendCMD(),getreply(),ESPconfig(),ESPsetbaudrate(),sendFONA(),getFONAreply(), FONAconfig(), FONAsetbaudrate();int main()
{
reset=0; //hardware reset for 8266
pc.baud(9600);  // set what you want here depending on your terminal program speed
pc.printf("\f\n\r-------------ESP8266 Hardware Reset-------------\n\r");
wait(0.5);
reset=1;
timeout=2;
getreply();

esp.baud(115200);   // change this to the new ESP8266 baudrate if it is changed at any time.
fona.baud(115200);
//ESPsetbaudrate();   //******************  include this routine to set a different ESP8266 baudrate  ******************

//ESPconfig();        //******************  include Config to set the ESP8266 configuration  ***********************
FONAconfig();

while(1) {
/*
pc.printf("\n---------- GPS Test ----------\r\n");
strcpy(snd,"AT+CGPSFTM=1\r\n");
sendFONA();
timeout=10;
getFONAreply();
pc.printf(buf);

wait(5);*/

pc.printf("\n---------- Get Battery Information ----------\r\n");
strcpy(snd,"AT+CBC\r\n");
sendFONA();
timeout=5;
getFONAreply();
pc.printf(buf);

wait(1);

pc.printf("\n---------- Get GPS Coordinates ----------\r\n");
strcpy(snd,"AT+CGPSINFO\r\n");
sendFONA();
timeout=60;
getFONAreply();
pc.printf(buf);

/*
wait(2);
pc.printf("\n---------- Get Connected Devices ----------\r\n");
strcpy(snd, "AT+CWLIF\r\n");
SendCMD();
timeout=5;
getreply();
pc.printf(buf);
wait(2);*/
}

}

// Sets new ESP8266 baurate, change the esp.baud(xxxxx) to match your new setting once this has been executed
void ESPsetbaudrate()
{
strcpy(snd, "AT+CIOBAUD=115200\r\n");   // change the numeric value to the required baudrate
SendCMD();
}

void FONAsetbaudrate()
{
strcpy(snd, "AT+IPREX=115200\r\n");   // change the numeric value to the required baudrate
SendCMD();
}

// FONA Config
void FONAconfig()
{
pc.printf("---------- Starting FONA Config ----------\r\n\n");

strcpy(snd,"AT\r\n");
sendFONA();
timeout=1;
getFONAreply();
pc.printf(buf);

wait(2);
strcpy(snd,"ATI\r\n");
sendFONA();
timeout=1;
getFONAreply();
pc.printf(buf);

wait(2);
strcpy(snd,"AT+CGPSAUTO=1\r\n");
sendFONA();
timeout=1;
getFONAreply();
pc.printf(buf);

// Test Mode (0=off / 1=on)
strcpy(snd,"AT+CGPSFTM=0\r\n");
sendFONA();
timeout=1;
getFONAreply();
pc.printf(buf);

/*
wait(2);
strcpy(snd,"AT+CGPS=0,1\r\n");
sendFONA();
timeout=1;
getFONAreply();
pc.printf(buf);

wait(5);

strcpy(snd,"AT+CGPSHOT\r\n");
sendFONA();
timeout=1;
getFONAreply();
pc.printf(buf);strcpy(snd,"AT+CGPS=1,1\r\n");
sendFONA();
timeout=1;
getFONAreply();
pc.printf(buf);*/

}

//  +++++++++++++++++++++++++++++++++ This is for ESP8266 config only, run this once to set up the ESP8266 +++++++++++++++
void ESPconfig()
{
wait(5);
strcpy(snd,"AT\r\n");
SendCMD();
wait(1);
strcpy(snd,"AT\r\n");
SendCMD();
wait(1);
strcpy(snd,"AT\r\n");
SendCMD();
timeout=1;
getreply();
wait(1);
pc.printf("\f---------- Starting ESP Config ----------\r\n\n");

pc.printf("---------- Reset & get Firmware ----------\r\n");
strcpy(snd,"AT+RST\r\n");
SendCMD();
timeout=5;
getreply();
pc.printf(buf);

wait(2);

pc.printf("\n---------- Get Version ----------\r\n");
strcpy(snd,"AT+GMR\r\n");
SendCMD();
timeout=4;
getreply();
pc.printf(buf);

wait(3);

// set CWMODE to 1=Station,2=AP,3=BOTH, default mode 1 (Station)
pc.printf("\n---------- Setting Mode ----------\r\n");
strcpy(snd, "AT+CWMODE_CUR=3\r\n");
SendCMD();
timeout=4;
getreply();
pc.printf(buf);

wait(2);

pc.printf("\n---------- SoftAP Configuration ----------\r\n");
strcpy(snd, "AT+CWSAP_CUR=\"ESP8266\",\"\",11,0\r\n");
SendCMD();
timeout=10;
getreply();
pc.printf(buf);

wait(2);

// set CIPMUX to 0=Single,1=Multi
pc.printf("\n---------- Setting Connection Mode ----------\r\n");
strcpy(snd, "AT+CIPMUX=1\r\n");
SendCMD();
timeout=4;
getreply();
pc.printf(buf);

wait(2);

/*
pc.printf("\n---------- Listing Access Points 2 ----------\r\n");
strcpy(snd, "AT+CWLAP\r\n");
SendCMD();
timeout=15;
getreply();
pc.printf(buf);*/

wait(2);

pc.printf("\n---------- Connecting to AP ----------\r\n");
pc.printf("ssid = %s   pwd = %s\r\n",ssid,pwd);
strcpy(snd, "AT+CWJAP=\"");
strcat(snd, ssid);
strcat(snd, "\",\"");
strcat(snd, pwd);
strcat(snd, "\"\r\n");
SendCMD();
timeout=10;
getreply();
pc.printf(buf);

wait(5);

pc.printf("\n---------- Get IP's ----------\r\n");
strcpy(snd, "AT+CIFSR\r\n");
SendCMD();
timeout=3;
getreply();
pc.printf(buf);

wait(1);

pc.printf("\n---------- Get Connection Status ----------\r\n");
strcpy(snd, "AT+CIPSTATUS\r\n");
SendCMD();
timeout=5;
getreply();
pc.printf(buf);

pc.printf("\n++++++++++ Pinging Site ++++++++++\r\n");
strcpy(snd, "AT+PING=\"172.31.5.67\"\r\n");
timeout=5;
SendCMD();
getreply();
pc.printf(buf);

strcpy(snd, "AT+PING=\"www.google.com\"\r\n");
timeout=5;
SendCMD();
getreply();
pc.printf(buf);

pc.printf("\n++++++++++ List of APs ++++++++++\r\n");
strcpy(snd, "AT+CWLAP\r\n");
timeout=5;
SendCMD();
getreply();
pc.printf(buf);
}

void SendCMD()
{
esp.printf("%s", snd);
}

void sendFONA()
{
fona.printf("%s", snd);
}

void getreply()
{
memset(buf, '\0', sizeof(buf));
t.start();
ended=0;
count=0;
while(!ended) {
if(esp.readable()) {
buf[count] = esp.getc();
count++;
}
if(t.read() > timeout) {
ended = 1;
t.stop();
t.reset();
}
}
}

void getFONAreply()
{
memset(buf, '\0', sizeof(buf));
t.start();
ended=0;
count=0;
while(!ended) {
if(fona.readable()) {
buf[count] = fona.getc();
count++;
}
if(t.read() > timeout) {
ended = 1;
t.stop();
t.reset();
}
}
}

Здесь также есть код для модуля ESP, с которым мы работаем, но он закомментирован, и я не верю, что это проблема.

Вот ответ, который мы получаем, когда запускаем этот код. Выход из FONA

Мы пробовали это в помещении и на улице, и с разной степенью времени между вызовами функций, и, кажется, ничто не заставляет это работать. Это особенно раздражает, потому что это, по крайней мере, давало нам координаты прошлой ночью, хотя это были неправильные данные. Теперь, как вы видите, он вообще не дает нам координаты.

Кто-нибудь имеет какие-либо идеи, в чем может быть проблема здесь? Похоже, что из-за того, что эта доска является относительно новой и непроверенной, у этих проблем не очень большая группа поддержки. Спасибо за любую помощь, которую вы могли бы оказать!

Sidenote: Кто-нибудь знает, что означают значения AmpI / AmpQ? Мы полагали, что это как-то связано с силой сигнала, но это выглядит довольно произвольно.

0

Решение

Это был просто аппаратный сбой. Adafruit отправил нам новый модуль FONA в качестве бесплатной замены, и модуль замены работал нормально. Вывод был в градусных минутах и ​​должен быть преобразован в десятичные минуты.

0

Другие решения

Других решений пока нет …