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 a, g, temp;
mpu.getEvent(&a, &g, &temp);
return String(a.acceleration.x);
}
String readY(){
sensors_event_t a, g, temp;
mpu.getEvent(&a, &g, &temp);
return String(a.acceleration.y);
}
String readZ(){
sensors_event_t a, g, temp;
mpu.getEvent(&a, &g, &temp);
return String(a.acceleration.z);
}
String readGX(){
sensors_event_t a, g, temp;
mpu.getEvent(&a, &g, &temp);
return String(g.gyro.x);
}
String readGY(){
sensors_event_t a, g, temp;
mpu.getEvent(&a, &g, &temp);
return String(g.gyro.y);
}
String readGZ(){
sensors_event_t a, g, temp;
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(ssid, password);
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", indexHtml, mpuProcessor);
});
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() {
}
留言
張貼留言