、
报一个错,找不到min函数
#define min(X,Y) ((X) < (Y) ? (X) : (Y))
手动添加
之后不报错了
、最原始的采集
/************************************************************ MPU9250_Basic Basic example sketch for MPU-9250 DMP Arduino Library Jim Lindblom @ SparkFun Electronics original creation date: November 23, 2016 https://github.com/sparkfun/SparkFun_MPU9250_DMP_Arduino_Library This example sketch demonstrates how to initialize the MPU-9250, and stream its sensor outputs to a serial monitor. Development environment specifics: Arduino IDE 1.6.12 SparkFun 9DoF Razor IMU M0 Supported Platforms: - ATSAMD21 (Arduino Zero, SparkFun SAMD21 Breakouts) *************************************************************/ #include <SparkFunMPU9250-DMP.h> #define SerialPort Serial MPU9250_DMP imu; void setup() { SerialPort.begin(115200); // Call imu.begin() to verify communication with and // initialize the MPU-9250 to it's default values. // Most functions return an error code - INV_SUCCESS (0) // indicates the IMU was present and successfully set up if (imu.begin() != INV_SUCCESS) { while (1) { SerialPort.println("Unable to communicate with MPU-9250"); SerialPort.println("Check connections, and try again."); SerialPort.println(); delay(5000); } } // Use setSensors to turn on or off MPU-9250 sensors. // Any of the following defines can be combined: // INV_XYZ_GYRO, INV_XYZ_ACCEL, INV_XYZ_COMPASS, // INV_X_GYRO, INV_Y_GYRO, or INV_Z_GYRO // Enable all sensors: imu.setSensors(INV_XYZ_GYRO | INV_XYZ_ACCEL | INV_XYZ_COMPASS); // Use setGyroFSR() and setAccelFSR() to configure the // gyroscope and accelerometer full scale ranges. // Gyro options are +/- 250, 500, 1000, or 2000 dps imu.setGyroFSR(2000); // Set gyro to 2000 dps // Accel options are +/- 2, 4, 8, or 16 g imu.setAccelFSR(2); // Set accel to +/-2g // Note: the MPU-9250's magnetometer FSR is set at // +/- 4912 uT (micro-tesla's) // setLPF() can be used to set the digital low-pass filter // of the accelerometer and gyroscope. // Can be any of the following: 188, 98, 42, 20, 10, 5 // (values are in Hz). imu.setLPF(5); // Set LPF corner frequency to 5Hz // The sample rate of the accel/gyro can be set using // setSampleRate. Acceptable values range from 4Hz to 1kHz imu.setSampleRate(10); // Set sample rate to 10Hz // Likewise, the compass (magnetometer) sample rate can be // set using the setCompassSampleRate() function. // This value can range between: 1-100Hz imu.setCompassSampleRate(10); // Set mag rate to 10Hz } void loop() { // dataReady() checks to see if new accel/gyro data // is available. It will return a boolean true or false // (New magnetometer data cannot be checked, as the library // runs that sensor in single-conversion mode.) if ( imu.dataReady() ) { // Call update() to update the imu objects sensor data. // You can specify which sensors to update by combining // UPDATE_ACCEL, UPDATE_GYRO, UPDATE_COMPASS, and/or // UPDATE_TEMPERATURE. // (The update function defaults to accel, gyro, compass, // so you don't have to specify these values.) imu.update(UPDATE_ACCEL | UPDATE_GYRO | UPDATE_COMPASS | UPDATE_TEMP); printIMUData(); } } void printIMUData(void) { // After calling update() the ax, ay, az, gx, gy, gz, mx, // my, mz, time, and/or temerature class variables are all // updated. Access them by placing the object. in front: // Use the calcAccel, calcGyro, and calcMag functions to // convert the raw sensor readings (signed 16-bit values) // to their respective units. float accelX = imu.calcAccel(imu.ax); float accelY = imu.calcAccel(imu.ay); float accelZ = imu.calcAccel(imu.az); float gyroX = imu.calcGyro(imu.gx); float gyroY = imu.calcGyro(imu.gy); float gyroZ = imu.calcGyro(imu.gz); float magX = imu.calcMag(imu.mx); float magY = imu.calcMag(imu.my); float magZ = imu.calcMag(imu.mz); // long imu_temperature=imu.temperature; SerialPort.println(); SerialPort.print("Time: " + String(imu.time) + " ms"); SerialPort.print("Accel: " + String(accelX) + ", " + String(accelY) + ", " + String(accelZ) + " g"); SerialPort.print(" "); SerialPort.print("Gyro: " + String(gyroX) + ", " + String(gyroY) + ", " + String(gyroZ) + " dps"); SerialPort.print(" "); SerialPort.print("Mag: " + String(magX) + ", " + String(magY) + ", " + String(magZ) + " uT"); SerialPort.print(" "); // SerialPort.print("temperature: " +imu_temperature); }
增加数据库交互,增加wifi连接
修改自己的数据库地址
#include <Arduino.h> #include <WiFi.h> #include <WiFiMulti.h> #include <HTTPClient.h> #include <SparkFunMPU9250-DMP.h> #define USE_SERIAL Serial #define SerialPort Serial WiFiMulti wifiMulti; MPU9250_DMP imu; const char* ssid = "love"; const char* password = "love123456"; // 1 WIFI连接初始化 void wifi_int(){ USE_SERIAL.println(); USE_SERIAL.println(); USE_SERIAL.println(); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected."); Serial.println("IP address: "); Serial.println(WiFi.localIP()); // wifiMulti.addAP("love", "love123456"); } // 2 传感器初始化 void IMU_int(){ // Call imu.begin() to verify communication with and // initialize the MPU-9250 to it's default values. // Most functions return an error code - INV_SUCCESS (0) // indicates the IMU was present and successfully set up if (imu.begin() != INV_SUCCESS) { while (1) { SerialPort.println("Unable to communicate with MPU-9250"); SerialPort.println("Check connections, and try again."); SerialPort.println(); delay(5000); } } // Use setSensors to turn on or off MPU-9250 sensors. // Any of the following defines can be combined: // INV_XYZ_GYRO, INV_XYZ_ACCEL, INV_XYZ_COMPASS, // INV_X_GYRO, INV_Y_GYRO, or INV_Z_GYRO // Enable all sensors: imu.setSensors(INV_XYZ_GYRO | INV_XYZ_ACCEL | INV_XYZ_COMPASS); // Use setGyroFSR() and setAccelFSR() to configure the // gyroscope and accelerometer full scale ranges. // Gyro options are +/- 250, 500, 1000, or 2000 dps imu.setGyroFSR(2000); // Set gyro to 2000 dps // Accel options are +/- 2, 4, 8, or 16 g imu.setAccelFSR(2); // Set accel to +/-2g // Note: the MPU-9250's magnetometer FSR is set at // +/- 4912 uT (micro-tesla's) // setLPF() can be used to set the digital low-pass filter // of the accelerometer and gyroscope. // Can be any of the following: 188, 98, 42, 20, 10, 5 // (values are in Hz). imu.setLPF(5); // Set LPF corner frequency to 5Hz // The sample rate of the accel/gyro can be set using // setSampleRate. Acceptable values range from 4Hz to 1kHz imu.setSampleRate(10); // Set sample rate to 10Hz // Likewise, the compass (magnetometer) sample rate can be // set using the setCompassSampleRate() function. // This value can range between: 1-100Hz imu.setCompassSampleRate(10); // Set mag rate to 10Hz } //3 发送数据给服务器 数据库 void send_imu_http(float accelX,float accelY , float accelZ, float gyroX , float gyroY, float gyroZ,float magX,float magY,float magZ,float imu_temperature){ HTTPClient http; USE_SERIAL.print("[HTTP] begin... "); // String http_msg="http://45.76.105.89/IMU/msql_inset.php?ax=1.0&ay=2.0&az=3.0&gx=4.0&gy=5.0&gz=6.0&mx=7.0&my=8.0&mz=9.0&temperature=10.0"; // -1 修改自己的服务器 String http_msg=String("")+"http://45.76.105.89/IMU/msql_inset.php?" +"ax="+accelX+"&ay="+accelY+"&az="+accelZ +"&gx="+gyroX+"&gy="+gyroY+"&gz="+ gyroZ +"&mx="+magX+"&my="+magY+"&mz="+magZ +"&temperature="+imu_temperature; http.begin(http_msg); //HTTP USE_SERIAL.print("[HTTP] GET... "); // start connection and send HTTP header int httpCode = http.GET(); // httpCode will be negative on error if(httpCode > 0) { // HTTP header has been send and Server response header has been handled USE_SERIAL.printf("[HTTP] GET... code: %d ", httpCode); // file found at server if(httpCode == HTTP_CODE_OK) { String payload = http.getString(); USE_SERIAL.println(payload); } } else { USE_SERIAL.printf("[HTTP] GET... failed, error: %s ", http.errorToString(httpCode).c_str()); } http.end(); } // 4 主函数 初始化 void setup() { USE_SERIAL.begin(115200);//串口初始化 wifi_int();// wifi连接初始化 IMU_int();// 传感器初始化 mpu9250 } // 5 主函数 无限循环 void loop() { delay(9000);// 延迟9秒 程序运行约1秒 加起来10秒循环一次 // 读取传感器数据 if ( imu.dataReady() ) { imu.update(UPDATE_ACCEL | UPDATE_GYRO | UPDATE_COMPASS | UPDATE_TEMP);// // 原始数据转换 float accelX = imu.calcAccel(imu.ax); //加速度 float accelY = imu.calcAccel(imu.ay); float accelZ = imu.calcAccel(imu.az); float gyroX = imu.calcGyro(imu.gx); // 陀螺仪 float gyroY = imu.calcGyro(imu.gy); float gyroZ = imu.calcGyro(imu.gz); float magX = imu.calcMag(imu.mx);//磁力计 float magY = imu.calcMag(imu.my); float magZ = imu.calcMag(imu.mz); //串口打印传感器数据 SerialPort.println(); SerialPort.print("Time: " + String(imu.time) + " ms"); SerialPort.print("Accel: " + String(accelX) + ", " + String(accelY) + ", " + String(accelZ) + " g"); SerialPort.print(" "); SerialPort.print("Gyro: " + String(gyroX) + ", " + String(gyroY) + ", " + String(gyroZ) + " dps"); SerialPort.print(" "); SerialPort.print("Mag: " + String(magX) + ", " + String(magY) + ", " + String(magZ) + " uT"); SerialPort.print(" "); // SerialPort.print("temperature: " +imu_temperature); //发送给服务器数据库 send_imu_http(accelX,accelY,accelZ,gyroX,gyroY,gyroZ,magX,magY,magZ,23.5); } }
数据库php代码
<?php // http://45.76.105.88/IMU/msql_inset.php?ax=1.0&ay=2.0&az=3.0&gx=4.0&gy=5.0&gz=6.0&mx=7.0&my=8.0&mz=9.0&temperature=10.0 echo "设备请求插入新数据:<br>"; // 1获取请求参数 echo "服务器时间:".date('Y-m-d H:i:s')."<br>";// 当前时间 echo "加速度 "; echo "ax: ";echo $_GET["ax"]." ";// echo "ay: ";echo $_GET["ay"]." ";// echo "az: ";echo $_GET["az"]." ";// echo "陀螺仪 "; echo "gx: ";echo $_GET["gx"]." ";// echo "gy: ";echo $_GET["gy"]." ";// echo "gz: ";echo $_GET["gz"]." ";// echo "磁力计 "; echo "mx: ";echo $_GET["mx"]." ";// echo "my: ";echo $_GET["my"]." ";// echo "mz: ";echo $_GET["mz"]." ";// echo "温度 "; echo $_GET["temperature"]; echo "<br>"; // 2交互数据库 // 2-1连接 $servername = "localhost"; $username = "root"; $password = "root"; $dbname = "IMU";// 数据库 $tablename = "IMU";// 数据库 //创建数据库连接 $conn = new mysqli($servername, $username, $password, $dbname); //检测是否连接成功 if ($conn->connect_error) { die("数据库连接失败: " . $conn->connect_error."<br>"); } echo "数据库连接成功<br> "; // 2-2插入 $sql="INSERT INTO ".$tablename." (ax,ay,az,gx,gy,gz,mx,my,mz,temperature) VALUES (".$_GET["ax"].",".$_GET["ay"].",".$_GET["az"].",".$_GET["gx"].",".$_GET["gy"].",".$_GET["gz"].",".$_GET["mx"].",".$_GET["my"].",".$_GET["mz"].",".$_GET["temperature"].");"; if ($conn->query($sql) === TRUE) { echo "新记录插入成功" . "<br>"; } else { echo "数据库插入失败: " . $sql . "<br>" . $conn->error; } // 2-4关闭结束 $conn->close(); //echo "数据库关闭<br>"; ?>