前段时间折腾四轴飞行器。 飞控这块打算用陀螺仪和树莓派的方式来实现。不要问哥为啥不直接买现成的,因为我们是有 ( 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 !')

其中有几点需要说明下:

  1. a). 该段示例代码是对串口信息的读取。不包含数据的写入。
  2. b). /dev/ttyAMA0 是树莓派的串口在设备中的名称,依不同的设备而异。

亲测可用,欢迎交流。

Enjoy it !
转载请注明出处
botobe.net
本文Github链接