MPU-6050&webServer網頁顯示-ESP32

 MPU-6050&webServer網頁顯示-ESP32

實驗目標:

此次實驗要把實時量測的xyz值顯示於網頁上。

MPU-6050簡介

MPU-6050 IMU(慣性測量單元)是一個 3 軸加速度計和 3 軸陀螺儀傳感器。加速度計測量重力加速度,陀螺儀測量旋轉速度。此外,該模塊還測量溫度。該傳感器非常適合確定移動物體的方向。
MPU-6050 是一個帶有 3 軸加速度計和 3 軸陀螺儀的模組。
螺儀-用於測量旋轉速度 (rad/s),這是角度位置沿 X、Y 和 Z 軸(滾動、俯仰和偏航)隨時間的變化。這使我們能夠確定物體的方向。
速度計-測量加速度它可以感應重力 (9.8m/s2) 等靜態力或振動或運動等動態力。 
MPU-6050 測量 X、Y 和 Z 軸上的加速度。理想情況下,在靜態物體中,Z 軸上的加速度等於重力,並且在 X 和 Y 軸上應為零。
速度計-可以使用三角法計算橫滾角和俯仰角。但無法計算偏航。

接線



須匯入的程式庫


程式碼

#include <Arduino.h>
//包含 MPU-6050 傳感器所需的庫:Adafruit_MPU6050 和 Adafruit_Sensor。
#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <WiFi.h>
#include <ESPAsyncWebServer.h>

//wifi帳密
const char *ssid = "CTK";
const char *password = "ctk674011";


Adafruit_MPU6050 mpu;

AsyncWebServer server(80);

//html
const char indexHtml[] PROGMEM = R"===(
  <html>
<head>
    <meta charset="utf-8" />
    <meta http-equiv="refresh" content="0.5" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <style>
        h1 {text-align: center; background-color: rgb(226, 155, 23); color: rgb(47, 49, 42); margin-right: 5px;}
        h2 {text-align: center;  color: rgb(47, 49, 42); background-color: rgb(197, 194, 11);margin-right: 5px;}
        dl {width: 320px; margin: auto;}
        dt {font-size: 20pt; color: rgb(36, 45, 168); background-color: rgb(197, 194, 11);
            margin: 6pt 0; padding: 6pt 12pt;}
        p {text-align: center; padding-right: 6pt; 6pt; line-height:20px}
        .val p{ margin:0 auto} 
        .val { font-size: 20pt; color: rgb(255, 120, 30); }
    </style>
</head>
<body>
    <h1>MPU-6050加速度&陀螺儀測試</h1>
    <h2>加速度計 (m/s^2)</h2>
    <p class=val>AX %ax%</p>
    <p class=val>AY %ay%</p>
    <p class=val>AZ %az%</p>
    <h2>陀螺儀(rad/s)</h2>
    <p class=val>GX %gx%</p>
    <p class=val>GY %gy%</p>
    <p class=val>GZ %gz%</p>
</body>
</html>
)===";
//以下是讀取加速度計和陀螺儀的xyz值
String readX(){
  mpu.begin();
  sensors_event_t agtemp;
  mpu.getEvent(&a, &g, &temp);
  return String(a.acceleration.x);
}
String readY(){
  sensors_event_t agtemp;
  mpu.getEvent(&a, &g, &temp);
  return String(a.acceleration.y);
}
String readZ(){
  sensors_event_t agtemp;
  mpu.getEvent(&a, &g, &temp);
  return String(a.acceleration.z);
}

String readGX(){
   sensors_event_t agtemp;
  mpu.getEvent(&a, &g, &temp);
  return String(g.gyro.x);
}
String readGY(){
   sensors_event_t agtemp;
  mpu.getEvent(&a, &g, &temp);
  return String(g.gyro.y);
}
String readGZ(){
   sensors_event_t agtemp;
  mpu.getEvent(&a, &g, &temp);
  return String(g.gyro.z);
}

String mpuProcessor(const String & val){
  if (val == "ax"){
    return readX();
  }else if (val == "ay"){
    return readY();
  }else if (val == "az"){
    return readZ();
  }else if (val == "gx"){
    return readGX();
  }else if (val == "gy"){
    return readGY();
  }else if (val == "gz"){
    return readGZ();
  }
  return String();
}

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssidpassword);
  mpu.begin();
  while (WiFi.status() != WL_CONNECTED){
      Serial.print(".");
      delay(500);
  }
  Serial.println("Connected successful!");
  Serial.print("IP: "); Serial.println(WiFi.localIP());
  //傳送給網頁伺服器並顯示於頁面的值
  server.on("/"HTTP_GET, [](AsyncWebServerRequest *request){
        request->send_P(200"text/html"indexHtmlmpuProcessor);
    });
  server.on("/AX"HTTP_GET, [](AsyncWebServerRequest *request){
        request->send_P(200"text/plain"readX().c_str());
    });
  server.on("/AY"HTTP_GET, [](AsyncWebServerRequest *request){
        request->send_P(200"text/plain"readY().c_str());
    });
  server.on("/AZ"HTTP_GET, [](AsyncWebServerRequest *request){
        request->send_P(200"text/plain"readZ().c_str());
    });
  server.on("/GX"HTTP_GET, [](AsyncWebServerRequest *request){
        request->send_P(200"text/plain"readGX().c_str());
    });
  server.on("/GY"HTTP_GET, [](AsyncWebServerRequest *request){
        request->send_P(200"text/plain"readGY().c_str());
    });
  server.on("/GZ"HTTP_GET, [](AsyncWebServerRequest *request){
        request->send_P(200"text/plain"readGZ().c_str());
    });
  server.begin();

}

void loop() {
  
}


留言

這個網誌中的熱門文章

ESP32-CAM燒錄出現fd_forward.h: No such file or directory錯誤信息<解決方案>