- ESP32 蓝牙接收发送消息
最近在使用ESP32的蓝牙开发,总结自己的学习笔记,注:本笔记作为自己学习参考,可能有不规范的地方,如有请多多指正。 蓝牙APP如下图所示
具体如以下位代码注释。 - EPS32 IIC切换引脚
由于硬件中默认的IIC硬脚被占用,但是VL53L0X 激光测距模块也需要IIC ,于是只有改IIC的引脚,具体见代码注释。 - 在整个测试文件中包括开启震动检测任务;LED呼吸灯状态显示任务。具体见代码注释,其原理自行百度。
- ESP32 输入检测 在文件中对于I/O的输入检测,首先初始化为输入上拉设置,之后就直接检测I/O的电平状态。
#include <Arduino.h>
#include <Wire.h>
#include "Adafruit_SPIDevice.h"
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "Adafruit_VL53L0X.h"
#include <Filters.h>
#include "BluetoothSerial.h"
#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
#endif
#define I2C_SDA 18 //自定义IIC——SDA
#define I2C_SCL 19 //自定义IIC——SCL
BluetoothSerial SerialBT;
#define LED_contorl 23 //LED状态显示
#define vibrator_contorl 27 //震动检测
Adafruit_VL53L0X lox = Adafruit_VL53L0X();
//LED控制
int LEDfreq = 5000; //频率
int LEDChanne = 0; //通道
int LED_resolution = 8; //分辨率
void vibrator_task(void *parameter);
void Run_State_Task(void *parameter);
void Run_state();
#if (SSD1306_LCDHEIGHT != 32)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif
void setup() {
pinMode(vibrator_contorl,INPUT_PULLUP); //内部上拉
ledcSetup(LEDChanne, LEDfreq, LED_resolution); // 设置通道
ledcAttachPin(LED_contorl, LEDChanne); // 将通道与对应的引脚连接
Serial.begin(115200); //开启串口
SerialBT.begin("ESP32test"); //开启蓝牙
Serial.println("The device started, now you can pair it with bluetooth!"); //串口打印消息
delay(1000);
Wire.begin(I2C_SDA,I2C_SCL); //开启IIC
if (!lox.begin())
{
// while(1)
// {
// Serial.println(F("Failed to boot VL53L0X"));
// }
}
xTaskCreate(vibrator_task,"vibrator_task",15000,NULL,1,NULL); //创建网络任务
xTaskCreate(Run_State_Task,"Run_State_Task",1000,NULL,1,NULL); //创建状态指示任务
// put your setup code here, to run once:
}
/*********************************************************
* 函数功能:状态指示灯
* 输入参数:无
* 输 出:无
* ******************************************************/
void Run_state()
{
for(int dutyCycle = 50; dutyCycle <= 250;dutyCycle = dutyCycle + 5)
{
ledcWrite(LEDChanne,dutyCycle);
delay(20);
}
for (int dutyCycle = 250; dutyCycle >= 50;dutyCycle = dutyCycle - 5)
{
ledcWrite(LEDChanne,dutyCycle);
delay(20);
}
}
void loop() {
char text;
if (SerialBT.available()) { //获取蓝牙状态
text = SerialBT.read(); //读取蓝牙接收信息
SerialBT.print(text); //将接收到的信息发送出去
Serial.print(text); //串口发送接收消息
}
vTaskDelay(1 / portTICK_RATE_MS); //延时
// put your main code here, to run repeatedly:
VL53L0X_RangingMeasurementData_t measure;
lox.rangingTest(&measure, false); // pass in 'true' to get debug data printout!
if (measure.RangeStatus != 4) { // phase failures have incorrect data
Serial.print("now distance:");
Serial.print(measure.RangeMilliMeter);
// SerialBT.print(measure.RangeMilliMeter);
Serial.print("mm");
Serial.print("\r\n");
} else {
return;
}
}
void vibrator_task(void *parameter)
{
int munber =0;
for (;;)
{
if(digitalRead(vibrator_contorl)==0)
{
if(digitalRead(vibrator_contorl)==0)
{
printf("\n\t vibrator coming \n\t");
}
}
munber ++;
SerialBT.printf("measure.RangeMilliMeter:%d\n\r",munber);
delay(1);
}
vTaskDelete(NULL);
}
void Run_State_Task(void *parameter)
{
for(;;)
{
Run_state();
}
vTaskDelete(NULL);
}
附录:
1、蓝牙APP ,在百度中直接可以下载,这个百度搜索比较多就不放下载连接了
2、调试信息 蓝牙手机端
3、上位机端显示