1、接线方式
按下图接好usb头
usb头 ky9250模块
3.3v ------ vcc
Rx ------ Tx
Tx ------ Rx
Gnd ------ Gnd
2、安装ch340-64串口驱动(文章后下载包中有)
3、python的ide中拷贝入下面代码:(文章后有完整的代码包)
import serial
import serial.tools.list_ports
ACCData = [0.0] * 52
FrameState = 0 # 通过值判断属于哪一种情况
Bytenum = 0 # 读取到这一段的第几位
a = [0.0] * 3
w = [0.0] * 3
m = [0.0] * 3
Angle = [0.0] * 3
q = [0.0] * 4
def DueData(inputdata): # 读取的数据到数组里
global FrameState # 在局部修改全局变量,要进行global的定义
global Bytenum
global a # 陀螺仪
global w # 加速度
global m # 地磁计
global Angle # 角度
global q # 四元数
for data in inputdata: # 输入的数据进行遍历
if FrameState == 0: # 当未确定状态的时候,进入以下判断
if data == 0x50: # 0x55位于第一位时候,开始读取数据,增大bytenum
Bytenum = 0
FrameState = 1
continue
elif FrameState == 1: # acc #已确定数据
if Bytenum < 51: # 读取51个数据
ACCData[Bytenum + 1] = data # 从0开始
Bytenum += 1
else:
if (ACCData[49] * 256.0 * 256.0 + ACCData[50] * 256.0 + ACCData[51] - 1000000) * 0.001 == 128: # 校验
a = get_gyro(ACCData) # 陀螺仪
w = get_acc(ACCData) # 加速度
m = get_mg(ACCData) # 地磁计
q = get_q(ACCData) # 四元数
Angle = get_angle(ACCData) # 角度
# 各数据归零,进行新的循环判断
# Bytenum=0
# FrameState=0
d = a + w + m + Angle + q # 合成一个大串
print(
"g(g):%10.3f %10.3f %10.3f a(m/s*s):%10.3f %10.3f %10.3f m():%10.3f %10.3f %10.3f angle():%10.3f %10.3f %10.3f q():%10.3f %10.3f %10.3f %10.3f" % d)
Bytenum = 0
FrameState = 0
def get_gyro(datahex): # 陀螺仪
gyro_x = (datahex[1] * 256.0 * 256.0 + datahex[2] * 256.0 + datahex[3] - 1000000) * 0.001; # gx
gyro_y = (datahex[4] * 256.0 * 256.0 + datahex[5] * 256.0 + datahex[6] - 1000000) * 0.001; # gy
gyro_z = (datahex[7] * 256.0 * 256.0 + datahex[8] * 256.0 + datahex[9] - 1000000) * 0.001; # gz
return gyro_x, gyro_y, gyro_z
def get_acc(datahex):
acc_x = (datahex[10] * 256.0 * 256.0 + datahex[11] * 256.0 + datahex[12] - 1000000) * 0.001; # ax
acc_y = (datahex[13] * 256.0 * 256.0 + datahex[14] * 256.0 + datahex[15] - 1000000) * 0.001; # ay
acc_z = (datahex[16] * 256.0 * 256.0 + datahex[17] * 256.0 + datahex[18] - 1000000) * 0.001; # az
return acc_x, acc_y, acc_z
def get_mg(datahex):
mg_x = (datahex[19] * 256.0 * 256.0 + datahex[20] * 256.0 + datahex[21] - 1000000) * 0.001; # mx
mg_y = (datahex[22] * 256.0 * 256.0 + datahex[23] * 256.0 + datahex[24] - 1000000) * 0.001; # my
mg_z = (datahex[25] * 256.0 * 256.0 + datahex[26] * 256.0 + datahex[27] - 1000000) * 0.001; # mz
return mg_x, mg_y, mg_z
def get_angle(datahex):
angle_x = (datahex[28] * 256.0 * 256.0 + datahex[29] * 256.0 + datahex[30] - 1000000) * 0.001; # roll angle_x
angle_y = (datahex[31] * 256.0 * 256.0 + datahex[32] * 256.0 + datahex[33] - 1000000) * 0.001; # pitch
angle_z = (datahex[34] * 256.0 * 256.0 + datahex[35] * 256.0 + datahex[36] - 1000000) * 0.001; # yaw
return angle_x, angle_y, angle_z
def get_q(datahex):
fan_a = (datahex[37] * 256.0 * 256.0 + datahex[38] * 256.0 + datahex[39] - 1000000) * 0.001; # q0
fan_b = (datahex[40] * 256.0 * 256.0 + datahex[41] * 256.0 + datahex[42] - 1000000) * 0.001; # q1
fan_c = (datahex[43] * 256.0 * 256.0 + datahex[44] * 256.0 + datahex[45] - 1000000) * 0.001; # q2
fan_d = (datahex[46] * 256.0 * 256.0 + datahex[47] * 256.0 + datahex[48] - 1000000) * 0.001; # q3
return fan_a, fan_b, fan_c, fan_d
if __name__ == '__main__':
# use raw_input function for python 2.x or input function for python3.x
# port = raw_input('please input port No. such as com3:');
print("智创微芯,谢谢你使用该模块")
print("请按提示步骤操作")
port = input('please input port No. such as com3:');
baud = int(input('please input baudrate(115200 for mpu9250):'))
ser = serial.Serial(port, baud, timeout=0.5) # ser = serial.Serial('com3',115200, timeout=0.5)
print(ser.is_open)
while (1):
datahex = ser.read(33)
DueData(datahex)
4、运行即可取得数据
17位ky9250软件包(内有stm32\arduino\C#\Matlab\树莓\Unity3d\python\ROS\英飞凌\Nvidia jetson linux 访问例程)
2024年3月3日驱动和上位机
链接:https://pan.baidu.com/s/16zoUz5U4WCZIcFwD02ytgA
提取码:abcd
--来自百度网盘超级会员V5的分享