移远L76K模组简介
L76K 是一款支持多卫星系统(GPS、BeiDou、GLONASS、QZSS)、可多系统联合定位和单系统独立定位、支持AGNSS 功能、内置低噪声放大器和声表面滤波器、可向用户提供快速、精准、高性能定位体验的 GNSS 模块。
多卫星系统相比于单一的 GPS 系统,使得可见和可用卫星数目大幅度增加,提高定位精度,即使是在复杂城市环境中也能实现稳定的高精度定位。支持 AGNSS 功能,能够大大的减少首次定位的时间。
编写程序测试功能
在Arduino环境下编写一个L76K_GNSS的程序,主要实现通过串口读取并解析L76K的GPS数据
#include <TinyGPSPlus.h>
#include <SoftwareSerial.h>
#define RXD2 16
#define TXD2 17
#define GPSRXD 14
#define GPSTXD 4
HardwareSerial SerialPort(2);
SoftwareSerial GPSSerial(GPSTXD, GPSRXD);
TinyGPSPlus gps;
void CommandtoNBIOT (String cmd, char *res)
{
while (1)
{
SerialPort.println(cmd);
delay(300);
while (SerialPort.available() > 0)
{
if (SerialPort.find(res))
{
Serial.println(res);
return;
}
else
{
Serial.print(cmd);
Serial.println("Return ERROR!");
}
}
delay(200);
}
}
void BC260Y_init(void)//初始化BC260Y
{
Serial.println("1");
// prints title with ending line break
CommandtoNBIOT("AT", "OK");
//SerialPort.println("ATE0&W");//关闭回显
delay(300);
CommandtoNBIOT("ATI", "OK");//返回制造商信息
delay(300);
CommandtoNBIOT("AT+CPIN?", "+CPIN: READY"); //返+CPIN:READY,表明识别到卡
Serial.println("2");
CommandtoNBIOT("AT+CGATT?", "+CGATT: 1"); //返+CGACT: 1,就能正常工作
Serial.println("3");
SerialPort.println("AT+QMTCLOSE=0");//关闭上一次socekt连接
delay(300);
}
void displayInfo()
{
Serial.print(F("Location: "));
if (gps.location.isValid())
{
Serial.print(gps.location.lat(), 6);
Serial.print(F(","));
Serial.print(gps.location.lng(), 6);
}
else
{
Serial.print(F("INVALID"));
}
Serial.print(F(" Date/Time: "));
if (gps.date.isValid())
{
Serial.print(gps.date.month());
Serial.print(F("/"));
Serial.print(gps.date.day());
Serial.print(F("/"));
Serial.print(gps.date.year());
}
else
{
Serial.print(F("INVALID"));
}
Serial.print(F(" "));
if (gps.time.isValid())
{
if (gps.time.hour() < 10) Serial.print(F("0"));
Serial.print(gps.time.hour());
Serial.print(F(":"));
if (gps.time.minute() < 10) Serial.print(F("0"));
Serial.print(gps.time.minute());
Serial.print(F(":"));
if (gps.time.second() < 10) Serial.print(F("0"));
Serial.print(gps.time.second());
Serial.print(F("."));
if (gps.time.centisecond() < 10) Serial.print(F("0"));
Serial.print(gps.time.centisecond());
}
else
{
Serial.print(F("INVALID"));
}
Serial.println();
}
void setup(){
Serial.begin(9600);
SerialPort.begin(9600, SERIAL_8N1, RXD2, TXD2);
GPSSerial.begin(9600);
BC260Y_init();
delay(2000);
}
void loop(){
while (GPSSerial.available() > 0){
int c = GPSSerial.read();
if(gps.encode(c)){
displayInfo();
}
if (millis() > 5000 && gps.charsProcessed() < 10)
{
Serial.println(F("No GPS detected: check wiring."));
while(true);
}
}
}
编译程序后上传到板卡,执行结果如下
可正常采集到经纬度数据,可以到百度地图上查看一下获取到的位置
这个定位位置有一定偏差,需要进一步的处理,至此已经可以正常采集到GPS数据。