ESP-32S实现mpu6050采集与fsr-402压力采集

该博客介绍了如何使用ESP32S通过轮询方式采集6个MPU6050传感器的数据,详细展示了通过控制GPIO改变MPU6050的物理地址来实现多个设备的独立采集。同时,文中提到在数据处理上应用了卡尔曼滤波以提高采集精度,尽管代码有优化空间。
摘要由CSDN通过智能技术生成

对于ESP-32S而言,有16个ADC采集通道(需要注意在开启wifi的情况下ADC2是不能进行采集的,详情请搜索ESP-32S引脚图),由于项目需求需要采集6个mpu6050的角度以及加速度,故在mpu6050采集时,采用轮回采集的方式,在mpu6050上有AD0,当AD0电压为0v时(低电平),mpu6050的物理地址为0x68,而当mpu6050AD0为高电压时,物理地址变为0x69,故可以通过ESP-32S引脚控制采集的mpu6050。
以下为部分核心代码

void loop()
{
  while(true){
    if(key==1){
    Serial.print("1");Serial.print(":");
    pinMode(32,OUTPUT);  
     pinMode(4,OUTPUT);  
      pinMode(15,OUTPUT);  
       pinMode(13,OUTPUT);  
        pinMode(12,OUTPUT);  
         pinMode(14,OUTPUT);  
     digitalWrite(32,HIGH);  //输出高电平,LOW就是低电平
     digitalWrite(4,LOW);
     digitalWrite(15,LOW);
     digitalWrite(13,LOW);
     digitalWrite(12,LOW);
     digitalWrite(14,LOW);
       mpu();
      key=2;
    }
        if(key==2){
           Serial.print("2");Serial.print(":");
              pinMode(32,OUTPUT);  
     pinMode(4,OUTPUT);  
      pinMode(15,OUTPUT);  
       pinMode(13,OUTPUT);  
        pinMode(12,OUTPUT);  
         pinMode(14,OUTPUT);  
              digitalWrite(32,LOW);  //输出高电平,LOW就是低电平
              digitalWrite(4,HIGH);
              digitalWrite(15,LOW);
              digitalWrite(13,LOW);
              digitalWrite(12,LOW);
              digitalWrite(14,LOW);
          mpu();
      key=3;
    }
        if(key==3){
           Serial.print("3");Serial.print(":");
              pinMode(32,OUTPUT);  
     pinMode(4,OUTPUT);  
      pinMode(15,OUTPUT);  
       pinMode(13,OUTPUT);  
        pinMode(12,OUTPUT);  
         pinMode(14,OUTPUT);  
            digitalWrite(32,LOW);  //输出高电平,LOW就是低电平
              digitalWrite(4,LOW);
              digitalWrite(15,HIGH);
              digitalWrite(13,LOW);
              digitalWrite(12,LOW);
              digitalWrite(14,LOW);
          mpu();
      key=4;
    }
        if(key==4){
           Serial.print("4");Serial.print(":");
              pinMode(32,OUTPUT);  
     pinMode(4,OUTPUT);  
      pinMode(15,OUTPUT);  
       pinMode(13,OUTPUT);  
        pinMode(12,OUTPUT);  
         pinMode(14,OUTPUT);  
                       digitalWrite(32,LOW);  //输出高电平,LOW就是低电平
              digitalWrite(4,LOW);
              digitalWrite(15,LOW);
              digitalWrite(13,HIGH);
              digitalWrite(12,LOW);
              digitalWrite(14,LOW);
          mpu();
      key=5;
    }
        if(key==5){
           Serial.print("5");Serial.print(":");
                      pinMode(32,OUTPUT);  
     pinMode(4,OUTPUT);  
      pinMode(15,OUTPUT);  
       pinMode(13,OUTPUT);  
        pinMode(12,OUTPUT);  
         pinMode(14,OUTPUT);  
                       digitalWrite(32,LOW);  //输出高电平,LOW就是低电平
              digitalWrite(4,LOW);
              digitalWrite(15,LOW);
              digitalWrite(13,LOW);
              digitalWrite(12,HIGH);
              digitalWrite(14,LOW);
          mpu();
      key=6;
    }
        if(key==6){
          Serial.print("6");Serial.print(":");
             pinMode(32,OUTPUT);  
     pinMode(4,OUTPUT);  
      pinMode(15,OUTPUT);  
       pinMode(13,OUTPUT);  
        pinMode(12,OUTPUT);  
         pinMode(14,OUTPUT);  
                      digitalWrite(32,LOW);  //输出高电平,LOW就是低电平
              digitalWrite(4,LOW);
              digitalWrite(15,LOW);
              digitalWrite(13,LOW);
              digitalWrite(12,LOW);
              digitalWrite(14,HIGH);
          mpu();
      key=1;
    }
    for(int i=0;i<8;i++){
   long Fdata = getPressValue(sensorPin[i]);
   DEBUGSerial.print(i);
 DEBUGSerial.print("F = ");
  DEBUGSerial.print(Fdata);
  DEBUGSerial.println(" g,");
  }
  }
}

由于时间紧凑,其实代码方面可以进行大幅度优化,在mpu6050的采集方面采用了卡尔曼滤波。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_51741751

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值