栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

Arduino读取JY901+GPS/北斗双模定位模块信息(提高定位精度)串口和I2C通信

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Arduino读取JY901+GPS/北斗双模定位模块信息(提高定位精度)串口和I2C通信

Arduino读取JY901+GPS/北斗双模定位模块信息

上一篇JY901模块连接ATK-1218-BD,GPS/北斗通过JY901上位机显示数据
采用JY901的上位机查看信息后,确定JY901,GPS模块连接没问题,下面通过arduino读取串口数据,便于进行接下来的应用开发。

本篇主要是串口通信和I2C的源码。
先安装库文件:
JY901的Arduio库文件:
JY901的Arduio库文件下载(免费、免积分)
内涵arduino的JY901库文件,包括串口通信和I2C通信源码例子。

  1. 将 JY901.zip 文件解压然后将解压出来的文件夹 JY901 拷贝到 Arduino 库安装目录下:
    C:Program Files (x86)Arduinolibraries.

  2. 打开 ArduinoIDE,点击 File->Examples->JY901,然后选择对应的实例程序。

  3. 可以使用的函数可以再 JY901.h 文件中看到。

串口通信:

接线:

 

源码:
注意,如果使用例子,修改波特率为9600

#include 
#include 

int aax=0, aay=0,aaz=0, agx=0, agy=0, agz=0;    //角度变量

int magx=0, magy=0,magz=0, mag=0;    //

void setup() 
{
  Serial.begin(9600);
}

void loop() 
{
  //print received data. Data was received in serialEvent;
 Serial.print("Time:20");Serial.print(JY901.stcTime.ucYear);Serial.print("-");Serial.print(JY901.stcTime.ucMonth);Serial.print("-");Serial.print(JY901.stcTime.ucDay);
  Serial.print(" ");Serial.print(JY901.stcTime.ucHour);Serial.print(":");Serial.print(JY901.stcTime.ucMinute);Serial.print(":");Serial.println((float)JY901.stcTime.ucSecond+(float)JY901.stcTime.usMiliSecond/1000);
               
  Serial.print("Acc:");Serial.print((float)JY901.stcAcc.a[0]/32768*16);Serial.print(" ");Serial.print((float)JY901.stcAcc.a[1]/32768*16);Serial.print(" ");Serial.println((float)JY901.stcAcc.a[2]/32768*16);
  
  Serial.print("Gyro:");Serial.print((float)JY901.stcGyro.w[0]/32768*2000);Serial.print(" ");Serial.print((float)JY901.stcGyro.w[1]/32768*2000);Serial.print(" ");Serial.println((float)JY901.stcGyro.w[2]/32768*2000);
  //读取角度
  Serial.print("Angle:");aax = (float)JY901.stcAngle.Angle[0]/32768*180;
  aay = (float)JY901.stcAngle.Angle[1]/32768*180;
  aaz = (float)JY901.stcAngle.Angle[2]/32768*180;
  Serial.print("Angle:");Serial.print("aax:");Serial.print(aax);Serial.print(" ");
  Serial.print("aay:");Serial.print(aay);Serial.print(" ");
  Serial.print("aaz:");Serial.println(aaz);

  
  Serial.print("Mag:");
  magx=JY901.stcMag.h[0];
  magy=JY901.stcMag.h[1];
  magz=JY901.stcMag.h[2]; 
  Serial.print(magx);Serial.print("magx ");
  Serial.print(magy);Serial.print("magy ");
  Serial.print(magz);Serial.print("magz ");
  mag = sqrt(magx*magx+magy*magy+magz*magz);
  Serial.println(mag);Serial.print("mag ");
  
  Serial.print("Pressure:");Serial.print(JY901.stcPress.lPressure);Serial.print(" ");Serial.println((float)JY901.stcPress.lAltitude/100);
  
  Serial.print("DStatus:");Serial.print(JY901.stcDStatus.sDStatus[0]);Serial.print(" ");Serial.print(JY901.stcDStatus.sDStatus[1]);Serial.print(" ");Serial.print(JY901.stcDStatus.sDStatus[2]);Serial.print(" ");Serial.println(JY901.stcDStatus.sDStatus[3]);
  
  Serial.print("Longitude:");Serial.print(JY901.stcLonLat.lLon/10000000);Serial.print("Deg");Serial.print((double)(JY901.stcLonLat.lLon % 10000000)/1e5);Serial.print("m Lattitude:");
  Serial.print(JY901.stcLonLat.lLat/10000000);Serial.print("Deg");Serial.print((double)(JY901.stcLonLat.lLat % 10000000)/1e5);Serial.println("m");
  
  Serial.print("GPSHeight:");Serial.print((float)JY901.stcGPSV.sGPSHeight/10);Serial.print("m GPSYaw:");Serial.print((float)JY901.stcGPSV.sGPSYaw/10);Serial.print("Deg GPSV:");Serial.print((float)JY901.stcGPSV.lGPSVelocity/1000);Serial.println("km/h");
  
  Serial.println("");
  delay(1000);
}


void serialEvent() 
{
  while (Serial.available()) 
  {
    JY901.CopeSerialData(Serial.read()); //Call JY901 data cope function
  }
}


串口显示内容:

I2C通信:

Arduino在使用I2C通信时都会用到SDA和SCL引脚,但各型号Arduino板的SDA和SCL引脚位置不同。
参考资料见Arduino官网:http://www.arduino.cc/en/Reference/Wire
各型号Arduino的I2C引脚:

Arduino Uno/nanoA4 (SDA) ,A5 (SCL)
Arduino Mega256020 (SDA), 21 (SCL)

另外,Arduino UNO / LEONARDO / YUN板都单独留有SCL、SDA引脚如下图

接线:

 

源码:

#include 
#include 

int aax = 0, aay = 0, aaz = 0, agx = 0, agy = 0, agz = 0; //角度变量
void setup()
{
  Serial.begin(9600);
  JY901.StartIIC();
}

void loop()
{
  //print received data. Data was received in serialEvent;
  JY901.GetTime();
  Serial.print("Time:20"); Serial.print(JY901.stcTime.ucYear); Serial.print("-"); Serial.print(JY901.stcTime.ucMonth); Serial.print("-"); Serial.print(JY901.stcTime.ucDay);
  Serial.print(" "); Serial.print(JY901.stcTime.ucHour); Serial.print(":"); Serial.print(JY901.stcTime.ucMinute); Serial.print(":"); Serial.println((float)JY901.stcTime.ucSecond + (float)JY901.stcTime.usMiliSecond / 1000);

  JY901.GetAcc();
  Serial.print("Acc:"); Serial.print((float)JY901.stcAcc.a[0] / 32768 * 16); Serial.print(" "); Serial.print((float)JY901.stcAcc.a[1] / 32768 * 16); Serial.print(" "); Serial.println((float)JY901.stcAcc.a[2] / 32768 * 16);

  JY901.GetGyro();
  Serial.print("Gyro:"); Serial.print((float)JY901.stcGyro.w[0] / 32768 * 2000); Serial.print(" "); Serial.print((float)JY901.stcGyro.w[1] / 32768 * 2000); Serial.print(" "); Serial.println((float)JY901.stcGyro.w[2] / 32768 * 2000);
  //读取角度
  JY901.GetAngle();
  aax = (float)JY901.stcAngle.Angle[0] / 32768 * 180;
  aay = (float)JY901.stcAngle.Angle[1] / 32768 * 180;
  aaz = (float)JY901.stcAngle.Angle[2] / 32768 * 180;
  Serial.print("Angle:"); Serial.print("aax:"); Serial.print(aax); Serial.print(" ");
  Serial.print("aay:"); Serial.print(aay); Serial.print(" ");
  Serial.print("aaz:"); Serial.println(aaz);

  JY901.GetMag();
  Serial.print("Mag:"); Serial.print(JY901.stcMag.h[0]); Serial.print(" "); Serial.print(JY901.stcMag.h[1]); Serial.print(" "); Serial.println(JY901.stcMag.h[2]);

  JY901.GetPress();
  Serial.print("Pressure:"); Serial.print(JY901.stcPress.lPressure); Serial.print(" "); Serial.println((float)JY901.stcPress.lAltitude / 100);

  JY901.GetDStatus();
  Serial.print("DStatus:"); Serial.print(JY901.stcDStatus.sDStatus[0]); Serial.print(" "); Serial.print(JY901.stcDStatus.sDStatus[1]); Serial.print(" "); Serial.print(JY901.stcDStatus.sDStatus[2]); Serial.print(" "); Serial.println(JY901.stcDStatus.sDStatus[3]);

  JY901.GetLonLat();
  Serial.print("Longitude:"); Serial.print(JY901.stcLonLat.lLon / 10000000); Serial.print("Deg"); Serial.print((double)(JY901.stcLonLat.lLon % 10000000) / 1e5); Serial.print("m Lattitude:");
  Serial.print(JY901.stcLonLat.lLat / 10000000); Serial.print("Deg"); Serial.print((double)(JY901.stcLonLat.lLat % 10000000) / 1e5); Serial.println("m");

  JY901.GetGPSV();
  Serial.print("GPSHeight:"); Serial.print((float)JY901.stcGPSV.sGPSHeight / 10); Serial.print("m GPSYaw:"); Serial.print((float)JY901.stcGPSV.sGPSYaw / 10); Serial.print("Deg GPSV:"); Serial.print((float)JY901.stcGPSV.lGPSVelocity / 1000); Serial.println("km/h");

  Serial.println("");
  delay(1000);
}



串口监视器显示内容:

JY901模块和GPS/北斗其他相关资料,请看我的分享:

JY901模块上位机程序下载(免费)

【正点原子】北斗GPS模块ATK-1218-BD相关资料下载(免费、免积分)

JY901官方使用说明文档

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/990826.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号