You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将MPU6050数据通过ESP8266上传至Azure IoT Hub?

我来帮你一步步梳理怎么把MPU6050的代码整合到ESP8266上传数据到Azure IoT Hub的项目里,其实核心就是把MPU的数据读取逻辑和Azure的消息发送逻辑结合起来,具体步骤如下:

1. 确认依赖库已安装

首先确保你已经安装了以下库:

  • Wire:Arduino自带,用于I2C通信(MPU6050需要)
  • ESP8266核心库:包含ESP8266WiFi,用于WiFi连接
  • Azure IoT相关库:比如AzureIoTHub、AzureIoTProtocol_MQTT、AzureIoTUtility,这些可以通过Arduino库管理器搜索安装,或者参考你提到的教程获取
2. 代码整合核心逻辑

整合的思路是:

  • 在头文件中同时引入MPU6050和Azure IoT的相关库,定义各自的配置参数
  • 在setup()中先初始化MPU6050,再完成WiFi连接和Azure IoT客户端的初始化
  • 在loop()中先读取MPU6050的传感器数据,然后把数据打包成Azure接受的JSON格式,最后调用Azure的API发送数据
3. 完整整合示例代码
#include <Wire.h>
#include <ESP8266WiFi.h>
#include <AzureIoTHub.h>
#include <AzureIoTProtocol_MQTT.h>
#include <AzureIoTUtility.h>

// MPU6050配置参数
const int MPU_addr = 0x68; // MPU6050的I2C地址
int16_t AcX, AcY, AcZ, Tmp, GyX, GyY, GyZ;

// Azure IoT Hub配置参数(替换成你自己的信息)
static const char* ssid = "你的WiFi名称";
static const char* password = "你的WiFi密码";
static const char* connectionString = "你的Azure设备连接字符串";

// Azure IoT客户端句柄
IOTHUB_CLIENT_LL_HANDLE iotHubClientHandle;

void setup() {
  Serial.begin(9600);
  
  // 初始化MPU6050(保留你原代码的逻辑)
  Wire.begin();
  Wire.beginTransmission(MPU_addr);
  Wire.write(0x6B); // PWR_MGMT_1寄存器
  Wire.write(0);    // 唤醒MPU6050
  Wire.endTransmission(true);
  
  // 连接WiFi(来自微软教程的逻辑)
  Serial.print("连接WiFi...");
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("\nWiFi连接成功");
  
  // 初始化Azure IoT Hub客户端(来自你提到的教程逻辑)
  iotHubClientHandle = IoTHubClient_LL_CreateFromConnectionString(connectionString, MQTT_Protocol);
  if (iotHubClientHandle == NULL) {
    Serial.println("初始化Azure IoT客户端失败,请检查连接字符串");
    return;
  }
  
  // 设置消息发送确认回调(可选,用于验证发送状态)
  IoTHubClient_LL_SetSendConfirmationCallback(iotHubClientHandle, sendConfirmationCallback, NULL);
}

void loop() {
  // 读取MPU6050数据(完全保留你原代码的读取逻辑)
  Wire.beginTransmission(MPU_addr);
  Wire.write(0x3B); // 从ACCEL_XOUT_H寄存器开始读取
  Wire.endTransmission(false);
  Wire.requestFrom(MPU_addr, 14, true); // 请求14个寄存器的数据
  
  AcX = Wire.read() << 8 | Wire.read();
  AcY = Wire.read() << 8 | Wire.read();
  AcZ = Wire.read() << 8 | Wire.read();
  Tmp = Wire.read() << 8 | Wire.read();
  GyX = Wire.read() << 8 | Wire.read();
  GyY = Wire.read() << 8 | Wire.read();
  GyZ = Wire.read() << 8 | Wire.read();
  
  // 串口打印数据(可选,用于调试)
  Serial.print("AcX = "); Serial.print(AcX);
  Serial.print(" | AcY = "); Serial.print(AcY);
  Serial.print(" | AcZ = "); Serial.print(AcZ);
  Serial.print(" | Tmp = "); Serial.print(Tmp/340.00+36.53);
  Serial.print(" | GyX = "); Serial.print(GyX);
  Serial.print(" | GyY = "); Serial.print(GyY);
  Serial.print(" | GyZ = "); Serial.println(GyZ);
  
  // 将传感器数据打包成JSON格式(Azure IoT Hub推荐的payload格式)
  char payload[256];
  snprintf(payload, sizeof(payload), 
           "{\"AccelerometerX\":%d,\"AccelerometerY\":%d,\"AccelerometerZ\":%d,\"Temperature\":%.2f,\"GyroscopeX\":%d,\"GyroscopeY\":%d,\"GyroscopeZ\":%d}",
           AcX, AcY, AcZ, Tmp/340.00+36.53, GyX, GyY, GyZ);
  
  // 发送数据到Azure IoT Hub
  IOTHUB_MESSAGE_HANDLE messageHandle = IoTHubMessage_CreateFromByteArray((const unsigned char*)payload, strlen(payload));
  if (messageHandle == NULL) {
    Serial.println("创建IoT消息失败");
  } else {
    Serial.print("发送消息到Azure: "); Serial.println(payload);
    IoTHubClient_LL_SendEventAsync(iotHubClientHandle, messageHandle, sendConfirmationCallback, NULL);
    IoTHubMessage_Destroy(messageHandle); // 释放消息资源
  }
  
  // 处理Azure客户端的后台任务(必须调用,否则消息无法正常发送)
  IoTHubClient_LL_DoWork(iotHubClientHandle);
  
  delay(333); // 保持你原代码的采样间隔
}

// 消息发送确认回调函数
void sendConfirmationCallback(IOTHUB_CLIENT_CONFIRMATION_RESULT result, void* userContextCallback) {
  if (result == IOTHUB_CLIENT_CONFIRMATION_OK) {
    Serial.println("消息已成功发送到Azure IoT Hub");
  } else {
    Serial.println("消息发送失败,请检查网络或Azure配置");
  }
}
4. 关键注意事项
  • 替换代码中的WiFi名称、密码和Azure设备连接字符串(连接字符串可以从Azure门户的设备详情中获取)
  • 先单独测试你的MPU6050代码,确保传感器能正常输出数据,再整合Azure部分,这样更容易排查问题
  • 确保ESP8266能正常连接到WiFi和Azure IoT Hub,如果连接失败,可以通过串口输出的信息排查
参考思路

你提到的两个教程核心逻辑是通用的:

  • 微软的教程重点展示了如何让ESP8266连接WiFi并向Azure发送传感器数据,你只需要把DHT11的数据读取替换成MPU6050的读取逻辑即可
  • archicode的教程详细介绍了Azure IoT所需的库和连接方法,你可以参考其中的客户端初始化和消息发送逻辑,和上面的代码是一致的

内容的提问来源于stack exchange,提问作者es_jm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:59:06