总览
1.arduino 代码和库等…
2.Unity 的部分,创建一个 3D 工程,然后创建一个 cube,绑定一个脚本文件
3.效果预览:
【Arduino】BNO085 姿态的 3D模型 展示方法(映射到 Unity)
一、Arduino 部分
1.使用的硬件
· 单片机:使用了 ESP32S3,当然了,我没拿我的 atmega328P 去试,应该也可以。
· 使用的通讯方式:I2C
· 引脚连接方式:
ESP32S3 ----- ----- BNO085
3V3 ----- ----- VCC
GND ----- ----- GND
19 ----- ----- SDA
18 ----- ----- SCL
CS ----- ----- GND(必须接,否则地址跳变)
6 ----- ----- INT(看情况使用,我没使用)
2.软件部分
在使用此代码前,请搜索安装这个库:
代码片:
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BNO08x.h>
#define BNO08X_INT_PIN 6 // 使用 GPIO 6 作为中断引脚
#define I2C_SCL_PIN 18
#define I2C_SDA_PIN 19
Adafruit_BNO08x bno;
void setup() {
Serial.begin(115200); // 设置串口波特率
// 初始化 I2C 接口并指定引脚
Wire.begin(I2C_SDA_PIN, I2C_SCL_PIN);
// 使用 I2C 地址 0x4B 初始化 BNO085
if (!bno.begin_I2C(0x4B)) {
Serial.println("BNO085 I2C 初始化失败!");
while (1);
}
Serial.println("BNO085 已经初始化");
// 启用需要的传感器报告
if (!bno.enableReport(SH2_GAME_ROTATION_VECTOR, 2500)) {
Serial.println("无法启用旋转向量报告");
}
}
void loop() {
if (digitalRead(BNO08X_INT_PIN) == LOW) {
sh2_SensorValue_t sensorValue;
// 读取传感器数据
if (bno.getSensorEvent(&sensorValue)) {
if (sens