mpu6050螺陀儀+3D物件(node-red)-esp32
mpu6050螺陀儀+3D物件(node-red)-esp32
實作之前
去年一直想實驗用螺陀儀來驅使網頁上的3D物件同步動作
但礙於對html&css的知識實在太少,所以只能想想....,後來接
觸到node-red這門強大的圖形介面前/後端,支援了非常多樣
的套件,可以說只要想的到前後端大概都能找的到圖形套用
。
不久前,心血來潮查了一下3D,果然沒讓我失望,後來自己
摸索了幾天,稍微試出了一點成果。
先上視頻看一下
附言:我承認還是有一些空間可以準確點和進步,因為發現可能是
mpu-6050使用久了有點問題,有時會歸零,加上後端的設定須要給它
條件,不動時就定住。
須要的配備
- 樹莓派裡裝有Broker,Node-red
- esp32
- mpu6050
Node-red上安裝
npm install node-red-contrib-web-babylonjs
然後瀏覽器網址列輸入:http://192.168.---.---:1880/scene/
esp32的部份
接線&匯入mpu-6050函式庫
程式碼
#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <WiFi.h>
#include <PubSubClient.h>
#include <Wire.h>
WiFiClient espClient;
PubSubClient client(espClient);
Adafruit_MPU6050 mpu;
const char *ssid="---";
const char *password="-------";
const char *mqtt_ip="192.168.--.---";
const char *topic="esp32/3d";
void wificonn(){
WiFi.begin(ssid, password);
while (WiFi.status()!=WL_CONNECTED){
Serial.print(".");
delay(500);
}
Serial.println("connected successful");
Serial.println(WiFi.localIP());
}
void reconnect(){
while (! client.connected()){
Serial.println("MQTT connected");
if (client.connect("esp32Client")){
Serial.println("connected");
}else{
Serial.print("failed connected is : ");
Serial.println(client.state());
delay(2000);
}
}
}
void setup() {
Serial.begin(115200);
wificonn();
client.setServer(mqtt_ip, 1883);
if (! mpu.begin()){
Serial.print("mpu6050無法工作!");
while (1){
delay(10);
}
Serial.print("mpu6050已進入工作狀態!");
}
}
void loop() {
if (! client.connected()){
reconnect();
}
client.loop();
sensors_event_t a, g, temp;
mpu.getEvent(&a, &g, &temp);
Serial.print("Gyroscope ");
Serial.print("X: ");
Serial.print(g.gyro.x, 1);
Serial.print(" rps, ");
Serial.print("Y: ");
Serial.print(g.gyro.y, 1);
Serial.print(" rps, ");
Serial.print("Z: ");
Serial.print(g.gyro.z, 1);
Serial.println(" rps");
float x=g.gyro.x;
float y=g.gyro.y;
float z=g.gyro.z;
char gx[16]="";
char gy[16]="";
char gz[16]="";
dtostrf(x,1,2,gx);
dtostrf(y,1,2,gy);
dtostrf(z,1,2,gz);
client.publish("esp32/3dx", gx);
client.publish("esp32/3dy", gy);
client.publish("esp32/3dz", gz);
delay(300);
}
留言
張貼留言