1.目标:利用蓝牙与ESP32建立连接后,手机通过蓝牙串口助手发送数据'L'(后续会升级成#cmd+指令的方式),串口接收到之后进行流水灯显示。
除此以外,还设置电容中断。将g15设置成电容终端检测口,触摸后进入电容中断,实时发送ESP现在在执行的指令。(目前只有“NUM"和"BLINKY")然后串口显示出来。
2.执行结果:
开启流水灯前
手机发送L以开启流水灯
开启流水灯
触摸touch接口,电脑显示ESP32工作状态:
3.代码:
main.cpp
#include <Arduino.h>
#include <BluetoothSerial.h>
#include "userconmmon.h"
BluetoothSerial SerialBLUE;
#include "pinmux.h"
void setup()
{
long lRetVal = -1;
Serial.begin(115200);
PinMuxConfig();
touchAttachInterrupt(T3, &TouchEvent, 40);
if (SerialBLUE.begin(SSID_NAME))
{
Serial.print("BLETOOTH BUILDED;\r\n");
}
else
{
ERR_PRINT("ERROR_BLETOOTH_BEGIN\r\n");
}
SerialBLUE.setPin("1234");
Serial.printf("BLETOOTH READY TO PAIR. \r\n");
}
void loop()
{
int RxBuf;
if (Serial.available())
{
SerialBLUE.write(Serial.read());
}
if (SerialBLUE.available())
{
RxBuf=SerialBLUE.read();
Serial.write(RxBuf);
Serial.print(RxBuf);
if(RxBuf)
{
if(RxBuf=76)
{
blinky();
}
}
}
delay(1);
}
pinmux.cpp
#include "pinmux.h"
#include <Arduino.h>
int INPUT_PULLUP_num = 0;
int OUT_num = 0;
int PIN_OUTPUT[] = {2, 4, 16, 17};
int PIN_INPUT_PULLUP[] = {};
status_gpio status1;
void PinMuxConfig(void)
{
status1=NUM;
OUT_num = sizeof(PIN_OUTPUT) / sizeof(PIN_OUTPUT[0]);
INPUT_PULLUP_num = sizeof(PIN_INPUT_PULLUP) / sizeof(PIN_INPUT_PULLUP[0]);
for (int i1 = 0; i1 < OUT_num; i1++)
{
pinMode(PIN_OUTPUT[i1], OUTPUT);
digitalWrite(PIN_OUTPUT[i1], HIGH);
}
}
void blinky()
{
status1 = BLINKY;
while (1)
{
for (int i1 = 0; i1 < OUT_num; i1++)
{
digitalWrite(PIN_OUTPUT[i1], HIGH);
delay(1000);
}
delay(5000);
for (int i2 = 0; i2 < OUT_num; i2++)
{
digitalWrite(PIN_OUTPUT[i2], LOW);
delay(1000);
}
}
}
ICACHE_RAM_ATTR void TouchEvent(void)
{
Serial.printf("TouchEvent.\r\n");
switch (status1) {
case BLINKY:
Serial.printf("ARE BLINKING.\n");
break;
case PWM:
Serial.printf("ARE PWMING.\n");
break;
default :
Serial.printf("NUM.\n");
break;
}
}
pinmux.h
#ifndef __PINMUX__H__
#define __PINMUX__H__
typedef enum{
NUM=-1,
BLINKY=NUM-1,
PWM=BLINKY-1
}status_gpio;
void blinky();
void PinMuxConfig(void);
void TouchEvent();
#endif
4.关于为什么用简单蓝牙不用低功耗或者wifi
(1)我原先写了一个wifi和蓝牙一起使用的代码,我烧录的时候出现了flash被撑爆的问题,单用低功耗蓝牙和我这个pwm加上touch中断和blinky也出现了flash被撑爆的情况。查阅了一下,可能需要对Platformlo做一些配置。
今天就懒得搞了,大概试了下,加上我想要的PWM,blinky和touch中断后,wifi_tcp用的时候不会撑爆,低功耗蓝牙一用就撑爆。
wifi_TCP和这个原理相同,懒得写了。
其他的等考完试我再去配置好Platformlo就再说吧。
下次写一写温度传感和oled屏幕使用好了。