车辆检测demo1

功能简介

车辆检测demo由esp32,HMC5883(磁传感器),lora模块构成。目前实现能检测地磁变动并通过lora模块发送到另一个lora模块。

原理图

实际demo

esp32-lora工作原理

lora是通过UART串口发送数据的,esp32有3个UART口,分别为UART0,UART1,UART2,其中UART0通常用于与电脑连接,不使用其他用途

在Arduino框架下编程时,UART0,1,2分别对应Serial,Serial1,Serial2,Serial其实是HardwareSerial类的对象

在这里我使用esp32的UART2作为lora的输出,所以编程时需要使用Serial2.begin()和Serial2.println()数据

pin

代码展示

#include <Wire.h> //I2C Arduino Library
#include <Arduino.h>
#define address 0x1E //0011110b, I2C 7bit address of HMC5883

int tx=0;
void setup(){
  //Initialize Serial and I2C communications
  Serial2.begin(115200);
  Serial.begin(115200);
  Wire.begin();
  pinMode(2,OUTPUT);
  //配置模式
  // pinMode(12,OUTPUT);
  // pinMode(14,OUTPUT);
  //Put the HMC5883 IC into the correct operating mode
  Wire.beginTransmission(address); //open communication with HMC5883
  Wire.write(0x02); //select mode register
  Wire.write(0x00); //continuous measurement mode
  Wire.endTransmission();
}

void loop(){
  //配置模式
  // digitalWrite(12,HIGH);
  // digitalWrite(14,0);
  int x,y,z; //triple axis data
  //Tell the HMC5883 where to begin reading data
  Wire.beginTransmission(address);
  Wire.write(0x03); //select register 3, X MSB register
  Wire.endTransmission();
 //Read data from each axis, 2 registers per axis
  Wire.requestFrom(address, 6);
  if(6<=Wire.available()){
    x = Wire.read()<<8; //X msb
    x |= Wire.read(); //X lsb
    z = Wire.read()<<8; //Z msb
    z |= Wire.read(); //Z lsb
    y = Wire.read()<<8; //Y msb
    y |= Wire.read(); //Y lsb
  }
  int dx=x-tx;
  tx=x;
  if(dx>=x/3){
    digitalWrite(2,HIGH);
    Serial2.println(1);
    Serial.println(1);
  }
  else{
    digitalWrite(2,LOW);
    Serial2.println(0);
    Serial.println(0);
  }
  delay(50);
}

成果展示

show


本文章使用limfx的vscode插件快速发布