Go Down

Topic: MPU6050 Azure IoT Hub (Read 29 times) previous topic - next topic

Esmeralda1992

Jun 19, 2019, 10:52 am Last Edit: Jun 19, 2019, 10:55 am by Esmeralda1992
Hallo alle zusammen,

ich habe hier einen MPU6050 Sensor und habe den erfolgreich mit einem ESP8266 angeschlossen. Den Skript für die Datenermittlung wurde auch geschrieben (siehe unten). Nun würde ich gerne diese Daten an Azure IoT Hub schicken. Ich weiß aber leider nicht wie ich den Code verändern muss für die Übertragung an Azure. Ich hab bei Google auch nach Beispielen gesucht... leider habe ich keine gefunden. :(

Ich habe nur diesen Link gefunden: http://archicode.be/esp8266-the-iot-prototyping-graal/ und die Anleitung von Microsoft https://docs.microsoft.com/de-de/azure/iot-hub/iot-hub-arduino-huzzah-esp8266-get-started einmal mit dem DHT11 Sensor durchgeführt, um das Prinzip zu verstehen. Ich habe versucht die Codes von dem Microsoft Tutorial anzupassen für den MPU6050 Sensor, das hat leider nicht geklappt.

Kann mir bitte jemand auf einen Beispielcode verweisen oder ein paar Tipps geben wie ich den Code verändern muss, um die Daten (geForceX, gForceY und gForceZ) an Azure IoT Hub zu schicken?

Vielen Dank!


Code für die Datenermittlung:

#include "Wire.h" // Wire library of Arduino platform
const int MPU_addr=0x68; // I2C address of the MPU-6050

long AcX,AcY,AcZ; // variables for accelerometer raw data
float gForceX, gForceY, gForceZ; // variables for scaled accelerometer data

void setup() {
Wire.begin(4,5); // sda and scl pin
Serial.begin(115200);

check_I2c(MPU_addr); // check that there is an MPU

Wire.beginTransmission(MPU_addr); // Begins a transmission to the I2C slave (GY-521 board)
Wire.write(0x6B); // access the register 6B PWR_MGMT_1 Power Management
Wire.write(0); // set to zero (wakes up the MPU-6050)disbale sleep mode
Wire.endTransmission(true);
}

void loop() {
Wire.beginTransmission(MPU_addr);
Wire.write(0x3B); // starting with register 0x3B (ACCEL_XOUT_H) [MPU-6000 and MPU-6050 Register Map and Descriptions Revision 4.2, p.40]
Wire.endTransmission(false); // the parameter indicates that the Arduino will send a restart. As a result, the connection is kept active.
Wire.requestFrom(MPU_addr, 7*2, true); // request a total of 7*2=14 registers

// "Wire.read()<<8 | Wire.read();" means two registers are read and stored in the same variable
AcX = Wire.read()<<8 | Wire.read(); // reading registers: 0x3B (ACCEL_XOUT_H) and 0x3C (ACCEL_XOUT_L)
AcY = Wire.read()<<8 | Wire.read(); // reading registers: 0x3D (ACCEL_YOUT_H) and 0x3E (ACCEL_YOUT_L)
AcZ = Wire.read()<<8 | Wire.read(); // reading registers: 0x3F (ACCEL_ZOUT_H) and 0x40 (ACCEL_ZOUT_L)

processAccelData(); //convert raw values to scaled values

// print out scaled data
Serial.print("AcX = "); Serial.print (gForceX);
Serial.print(" | AcY = "); Serial.print (gForceY);
Serial.print(" | AcZ = "); Serial.print (gForceZ);

//Serial.print("AcX = "); Serial.print(AcX);
//Serial.print(" | AcY = "); Serial.print(AcY);
//Serial.print(" | AcZ = "); Serial.print(AcZ);
Serial.println();
delay(500);
}

void processAccelData(){
gForceX = (float)AcX / 16384.0;
gForceY = (float)AcY / 16384.0;
gForceZ = (float)AcZ / 16384.0;
}

byte check_I2c(byte addr){
// We are using the return value of
// the Write.endTransmisstion to see if
// a device did acknowledge to the address.
byte error;
Wire.beginTransmission(addr);
error = Wire.endTransmission();

if (error == 0)
{
Serial.print(" Device Found at 0x");
Serial.println(addr,HEX);
}
else
{
Serial.print(" No Device Found at 0x");
Serial.println(addr,HEX);
}
return error;
}

Go Up