BNO055 USB Stick Linux Python驱动程序
bno055-usb-stick-p的Python项目详细描述
BNO055 USB Stick Python驱动程序
tl;dr:“瑞士军刀”用于
^{python3
。
BNO055 USB Stick
附带
^{
如果你有一个BNO055 USB Stick
并且想
在Linux平台上使用
(例如ubuntu、raspbian、yocto、suse等)
这个repo为您提供了一个python 3
驱动程序,
能够读/写寄存器/突发读,
和流数据读取
操作系统先决条件
当插入Linux系统时, 应该出现
BNO055 USB Stick
作为/dev/ttyACM*
设备。 这个装置就是所谓的 ^{} (通讯设备类),但让我们离开 现在这些细节。您的Linux用户必须是
dialout
群 (例如,请参阅此thread) 能够读/写ttyACM*
设备 没有根权限udev
已安装在系统上。 我们依靠来自 乌德夫。
安装
pip install bno055_usb_stick_py
支持的Python版本
python v3.6+
python依赖项
tl;dr:安装
(i)pyserial
,
(ii)pyudev
,
(iii)dataclasses
(如果使用python3.6
),以及
(iv)可选:pyquaternion
以及matplotlib
,
或使用
^{
有关创建conda
senvironment的更多详细信息,请阅读this指南。
快速启动
读取bno寄存器:
frombno055_usb_stick_pyimportBnoUsbStickbno_usb_stick=BnoUsbStick()reg_addr=0x00reg_val=bno_usb_stick.read_register(reg_addr)print(f"bno chip id addr: 0x{reg_addr:02X}, value: 0x{reg_val:02X}")
写入寄存器:
frombno055_usb_stick_pyimportBnoUsbStickbno_usb_stick=BnoUsbStick()reg_addr=0x3Freg_value=0x01bno_usb_stick.write_register(reg_addr,reg_value)print(f"bno self test started!")
突发寄存器读取:
frombno055_usb_stick_pyimportBnoUsbStickbno_usb_stick=BnoUsbStick()reg_start_addr=0x08num_registers=0x12burst_read_result=bno_usb_stick.burst_read(reg_start_addr,num_registers)print(f"bno burst read result: {burst_read_result}")
在流模式下获取10个数据包(使用生成器):
frombno055_usb_stick_pyimportBnoUsbStickbno_usb_stick=BnoUsbStick()bno_usb_stick.activate_streaming()forpacketinbno_usb_stick.recv_streaming_generator(num_packets=10):print(f"bno data: {packet}")
在流模式下获取100个数据包(通过接收单个数据包):
frombno055_usb_stick_pyimportBnoUsbStickbno_usb_stick=BnoUsbStick()bno_usb_stick.activate_streaming()for_inrange(100):packet=bno_usb_stick.recv_streaming_packet()print(f"{packet}")
接收无限数量的数据包(如果您等待无限时间:wink:):
frombno055_usb_stick_pyimportBnoUsbStickbno_usb_stick=BnoUsbStick()bno_usb_stick.activate_streaming()forpacketinbno_usb_stick.recv_streaming_generator():print(f"{packet}")
bNo USB Stick数据包
当以流模式接收数据时,结果
是BNO055
数据类(来自bno055.py
)文件的对象。
BNO055
数据类有以下字段:
frombno055_usb_stick_pyimportBNO055bno_data=BNO055()bno_data.a_raw# raw accelerometer data (a_raw_x, a_raw_y, a_raw_z)bno_data.g_raw# raw gyro data (g_raw_x, g_raw_y, g_raw_z)bno_data.m_raw# raw magnetometer data (m_raw_x, m_raw_y, m_raw_z)bno_data.euler_raw# raw euler angles (heading, roll, pitch)bno_data.quaternion_raw# raw quaternion data (q_raw_w, q_raw_x, q_raw_y, q_raw_z)bno_data.lin_a_raw# raw linear acceleration data (lin_a_raw_x, lin_a_raw_y, lin_a_raw_z)bno_data.gravity_raw# raw gravity vector (gravity_raw_x, gravity_raw_y, gravity_raw_z)bno_data.a# accelerometer (a_x, a_y, a_z)bno_data.g# gyroscope (g_x, g_y, g_z)bno_data.m# magnetometer (m_x, m_y, m_z)bno_data.euler# euler angler (heading, roll, pitch)bno_data.quaternion# quaternion values (q_w, q_x, q_y, q_z)bno_data.lin_a# linear acceleration (lin_a_x, lin_a_y, lin_a_z)bno_data.gravity# gravity vector (gravity_x, gravity_y, gravity_z)bno_data.temp# temperature registerbno_data.calib_stat# calibration status (addr 0x35) registerbno_data.st_result# status result (addr 0x36) registerbno_data.int_sta# interrupt status (addr 0x37) registerbno_data.sys_clk_status# system clock status (addr 0x38) registerbno_data.sys_status# system status (addr 0x39) register
阻止调制解调器管理器捕获串行设备
在ubuntu上插入bno_usb_stick
时,
设备在前10-15秒不可用,
因为ModemManager
进程
接管并尝试使用设备
为了避免这种ubuntu特有的行为,
向udev
规则添加异常,
s.t.ModemManager
忽略bno_usb_stick
。
运行脚本:
python disable_modem_manager_bno_usb_stick.py
脚本需要根权限。基本上是复制的
将97-ttyacm.rules
文件加载到/etc/udev/rules.d
,并重新加载
udev规则
维修人员
Dr. Konstantin Selyunin, 建议/问题/评论 请联系: 塞尔尤宁[dot]k[dot]v[at]gmail[dot]com