上一篇JY901模块连接ATK-1218-BD,GPS/北斗通过JY901上位机显示数据
采用JY901的上位机查看信息后,确定JY901,GPS模块连接没问题,下面通过arduino读取串口数据,便于进行接下来的应用开发。
本篇主要是串口通信和I2C的源码。
先安装库文件:
JY901的Arduio库文件:
JY901的Arduio库文件下载(免费、免积分)
内涵arduino的JY901库文件,包括串口通信和I2C通信源码例子。
-
将 JY901.zip 文件解压然后将解压出来的文件夹 JY901 拷贝到 Arduino 库安装目录下:
C:Program Files (x86)Arduinolibraries. -
打开 ArduinoIDE,点击 File->Examples->JY901,然后选择对应的实例程序。
-
可以使用的函数可以再 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 } }
串口显示内容:
Arduino在使用I2C通信时都会用到SDA和SCL引脚,但各型号Arduino板的SDA和SCL引脚位置不同。
参考资料见Arduino官网:http://www.arduino.cc/en/Reference/Wire
各型号Arduino的I2C引脚:
| Arduino Uno/nano | A4 (SDA) ,A5 (SCL) |
|---|---|
| Arduino Mega2560 | 20 (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官方使用说明文档



