我的ESP32学习(9)简单蓝牙+流水灯+touch中断显示工作状态

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屏幕使用好了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值