车辆检测demo由esp32,HMC5883(磁传感器),lora模块构成。目前实现能检测地磁变动并通过lora模块发送到另一个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()数据
#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);
}
本文章使用limfx的vscode插件快速发布