前段时间折腾四轴飞行器。 飞控这块打算用陀螺仪和树莓派的方式来实现。不要问哥为啥不直接买现成的,因为我们是有 ( mei ) 逼 ( you ) 格 ( qian ) 的工程师。
后来我发现原来一个飞控大概是我买的陀螺仪和树莓派的成本的1/5吧 --! 摔啊 !!!
某宝上搜索结果比较多的是国外产的10块钱都不到的大众陀螺仪~ jy901貌似是款国产的陀螺仪芯片。
本着“便宜没好货”的思想作祟下。再加上jy901 PR文稿的的忽悠,就果断的下单了。
模块的示例中,大多都是C代码。对于使用者而言比较晦涩难懂。 Python 的简易示例代码如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*
#
# @author XU Kai(xukai.ken@gmail.com)
# @date 2017-01-21 星期日
#
#
# #fileOverview 树莓派串口操作事件,用来输入和输出陀螺仪数据信息
#
#
#
from __future__ import division
import os
import sys
import math
import codecs
import serial
sensor = serial.Serial(port='/dev/ttyAMA0', baudrate='9600', timeout=1)
def convert(hexVal):
return int(codecs.encode(hexVal, 'hex'), 16)
while True:
data = sensor.read(size=1)
if (data == b'\x55'):
print('Get the data !')
sensor.read(size=10)
break
print('trying', data)
try:
while True:
data = sensor.read(size=11)
if not len(data) == 11:
print('Byte error !')
break
if data[1] == b'\x50':
# print(convert(data[7]))
pass
# Angle Output.
if (data[1] == b'\x53'):
hexVal = []
for i in range(11):
hexVal.append(convert(data[i]))
ax = ((hexVal[3] << 8) | (hexVal[2] & 0xff)) / 32768 * 180
ay = ((hexVal[5] << 8) | (hexVal[4] & 0xff)) / 32768 * 180
az = ((hexVal[7] << 8) | (hexVal[6] & 0xff)) / 32768 * 180
print(round(ax, 3), round(ay, 3), round(az, 3))
except KeyboardInterrupt:
sensor.close()
print('Close the sensor !')
其中有几点需要说明下:
- a). 该段示例代码是对串口信息的读取。不包含数据的写入。
- b). /dev/ttyAMA0 是树莓派的串口在设备中的名称,依不同的设备而异。
亲测可用,欢迎交流。
Enjoy it !
转载请注明出处
botobe.net
本文Github链接