风筝
发表于: 2021-9-7 11:48:22 | 显示全部楼层

MPU6050传感器模块由单芯片上的加速度计和陀螺仪组成。它在每个通道的数字转换器中包含模拟16位。因此它可以同时捕获x、y和z通道。该传感器使用I2C总线与Arduino或任何其他微控制器进行交互。 MPU-6050传感器模块用于许多应用,如无人机、机器人、运动传感器。该传感器也称为陀螺仪或三轴加速度计。


在本篇文章中,我们将使用ESP32连接MPU6050加速度计和陀螺仪,并通过Web服务器显示值。在本文中,我们将对MPU6050进行基本介绍,并演示如何与ESP32 开发板连接以及如何在网页上显示其值。


所需的组件

●    ESP32 NodeMCU开发板

●    MPU6050加速度计和陀螺仪模块

●    连接跳线


电路图

MPU6050加速度计和陀螺仪模块与ESP32连接的电路图如下。

MPU6050-Gyro-Sensor-Interfacing-with-ESP32.png


MPU6050通过I2C协议与ESP32通信,所以我们只需要两根线来连接ESP32和MPU6050。 MPU6050的SCL和SDA引脚连接到ESP32的D22和D21引脚,MPU6050的VCC和GND引脚连接到ESP32的3.3V和GND。

MPU6050-Gyro-Sensor-Interfacing-with-ESP32.jpg


MPU6050传感器模块

MPU6050 基于微机械系统 (MEMS) 技术。该传感器包含一个3轴加速度计、一个3轴陀螺仪和内置温度传感器。它可用于测量加速度、速度、方向、位移等参数。

MPU6050-Accelerometer-and-Gyroscopic-Sensor-Module.jpg


MPU6050模块体积小、功耗低、重复性高、抗震性高、用户价位低。 MPU6050带有I2C总线和辅助I2C总线接口,可以轻松连接其他传感器,例如磁力计和微控制器。


代码说明

MPU6050 ESP32的编程部分很简单。在这里,我们将解释一些重要的部分。


首先在代码中包含所有必需的库。 Wire.h库允许您与I2C/TWI设备进行通信,而WiFi.h库可以将ESP32连接到网络。

  1. #include <Wire.h>
  2. #include <WiFi.h>
复制代码

在包含库之后,定义变量来存储加速度计和陀螺仪的值。

  1. int16_t AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ;
复制代码

在接下来的代码中,输入您的Wi-Fi名称和密码。

  1. const char *ssid =  "Galaxy-M20";     // Enter your Wi-Fi Name
  2. const char *pass =  "ac312124"; // Enter your Wi-Fi Password
复制代码

void setup()函数中,初始化波特率、wire库、Web服务器和数据传输。

  1. Serial.begin(115200);
  2. Wire.begin();
  3. Wire.beginTransmission(MPU_addr);
  4. Wire.write(0x6B);
  5. Wire.write(0);
  6. server.begin();
复制代码

loop()函数中,调用mpu_read()函数来获取加速度计和陀螺仪的读数。这些读数将使用client.println()函数发送到网页。

  1. mpu_read();
复制代码

在接下来的几行中,检查是否有客户端发送了HTTP请求。如果ESP32收到客户端请求,那么它将以字符形式存储并显示在串口监视器上。

  1. WiFiClient client = server.available();
  2. if (client)
  3.   {                           
  4.     Serial.println("new client");         
  5.     String currentLine = "";                  
  6.     while (client.connected())
  7.     {           
  8.       if (client.available())                 
  9.       {               
  10.         char c = client.read();               
  11.         if (c == '\n')   
复制代码

接下来,使用html设计网页,并使用client.println()函数将每一行发送到网页。 <style> 标签用于更改文本和背景颜色。您可以更改以下代码中的属性。

  1. client.print("<html><title> ESP32 WebServer</title></html>");
  2. client.print("<body bgcolor="#E6E6FA"><h1 style="text-align: center; color: blue"> ESP32 WebServer </h1>");
  3. client.print("<p style="text-align: left; color: red; font-size:150% ">Accelerometer Values: ");
  4. client.print("<p style="text-align: left; font-size:150% ">AcX: ");
  5. client.print(AcX);
  6. client.print("<br/>AcY: ");
  7. client.print(AcY);
  8. client.print("<br/>AcZ: ");
  9. client.print(AcZ);
  10. client.print("<p style="text-align: left; color: red; font-size:150% ">Gyroscope Values: ");
  11. client.print("<p style="text-align: left; font-size:150% ">GyX: ");
  12. client.print(GyX);
  13. client.print("<br/>GyY: ");
  14. client.print(GyY);
  15. client.print("<br/>GyZ: ");
  16. client.print(GyZ);
  17. client.print("</p></body>");
复制代码

mpu_read loop()中,读取加速度计和陀螺仪的X、Y和Z轴的所有六个寄存器。

  1. AcX=Wire.read()<<8|Wire.read();  // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)     AcY=Wire.read()<<8|Wire.read();  // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
  2. AcZ=Wire.read()<<8|Wire.read();  // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)
  3. GyX=Wire.read()<<8|Wire.read();  // 0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L)
  4. GyY=Wire.read()<<8|Wire.read();  // 0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L)
  5. GyZ=Wire.read()<<8|Wire.read();  // 0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L)
复制代码

测试MPU6050与ESP32的连接

将ESP32连接到笔记本电脑连接并上传代码。不要忘记正确选择开发板和端口号。


确保您的笔记本电脑与ESP32共享相同的 Wi-Fi 网络。上传代码后,打开串口监视器。将串口监视器的波特率更改为115200。您将在串口监视器上看到IP 地址以及加速度计和陀螺仪的值,复制此IP并粘贴到浏览器中。现在您将在网页上看到MPU6050陀螺仪和加速度计的值,如下所示:

MPU6050-with-ESP32-Webserver.png


现在,您可以使用这些知识来制作一些很酷的东西,例如自平衡机器人、手势控制的机械臂等。如果遇到问题,请随时在本帖下面回复。

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 56 | 回复: 109



手机版|

GMT+8, 2024-12-22 14:22 , Processed in 0.040553 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表