使用Arduino开发ESP32(二十一):WiFiBlueToothSwitch例程,按键切换esp32为蓝牙或wifi模式

之前写项目正好卡在这个地方,结果发现了这个官方例程
顺带就写篇博客

虽说是按键切换模式,但官方例程并未使用中断

代码


// 演示如何在wifi和蓝牙模式之间切换,或者同时使用
// 按键绑定在GPIO 0 和 GND之间,模式也随之按下而切换

#include "WiFi.h"
#define STA_SSID "wifi名称"
#define STA_PASS "wifi密码"
#define AP_SSID  "Esp32"

enum {
      STEP_BTON, STEP_BTOFF, STEP_STA, STEP_AP, STEP_AP_STA, STEP_OFF, STEP_BT_STA, STEP_END };  //枚举,即别名   
//没有指定值的枚举元素,其值为前一元素加 1。也就说 STEP_BTON 的值为 0,STEP_BTOFF 的值为 1...
void setup() {
     
    Serial.begin(115200);
    pinMode(12, INPUT_PULLUP);                    //引脚12,输入模式
    WiFi.onEvent(WiFiEvent);
    Serial.print("ESP32 SDK: ");
    Serial.println(ESP.getSdkVersion());
    Serial.println("按下按键切换至下一模式");
}

void loop() {
     
    static uint8_t lastPinState = 1;      //unsigned int ,esp32引脚默认电平为高
    uint8_t pinState = digitalRead(12);    //unsigned char
    if(!pinState && lastPinState){
            //如果本次引脚电平不等于前次
        onButton();
    }
    lastPinState = pinState;
}

void onButton(){
     
  static uint32_t step = STEP_BTON;
  switch(step){
     
    case STEP_BTON://BT only
      Serial.println("** 启动蓝牙");
      btStart();
    break;
    
    case STEP_BTOFF://ALL Off
      Serial.println("** 关闭蓝牙");
      btStop();
    break;
    
    case STEP_STA://STA Only
      Serial.println("** 启动wifi站点模式");
      WiFi.begin(STA_SSID, STA_PASS);       //连接wifi
    break;
    
    case STEP_AP://AP Only
      Serial.println("** 关闭wifi站点模式");
      WiFi.mode(WIFI_AP);
      Serial.println("** 开启AP模式");
      WiFi.softAP(AP_SSID);                 //初始化AP,wifi名字为AP_SSID
    break;
    
    case STEP_AP_STA://AP+STA
      Serial.println("** 启动wifi站点模式");
      WiFi.begin(STA_SSID, STA_PASS);
    break;
    
    case STEP_OFF://All Off
      Serial.println("** wifi关闭");
      WiFi.mode(WIFI_OFF);
    break;
    
    case STEP_BT_STA://BT+STA
      Serial.println("** 启动 wifi站点模式+蓝牙");
      WiFi.begin(STA_SSID, STA_PASS);
      btStart();
    break;
    
    case STEP_END://All Off
      Serial.println("** 关闭 wifi站点模式+蓝牙");
      WiFi.mode(WIFI_OFF);
      btStop();
    break;
    
    default:
    break;
  }
  if(step == STEP_END){
     
    step = STEP_BTON;
  } else {
     
    step++;
  }
  
  //抖动消除
  delay(100);
}

void WiFiEvent(WiFiEvent_t event){
     
    switch(event) {
     
        case SYSTEM_EVENT_AP_START:
            Serial.println("AP Started");
            WiFi.softAPsetHostname(AP_SSID);
            break;
        case SYSTEM_EVENT_AP_STOP:
            Serial.println("AP Stopped");
            break;
        case SYSTEM_EVENT_STA_START:
            Serial.println("STA Started");
            WiFi.setHostname(AP_SSID);
            break;
        case SYSTEM_EVENT_STA_CONNECTED:
            Serial.println("STA Connected");
            WiFi.enableIpV6();
            break;
        case SYSTEM_EVENT_AP_STA_GOT_IP6:
            Serial.print("STA IPv6: ");
            Serial.println(WiFi.localIPv6());
            break;
        case SYSTEM_EVENT_STA_GOT_IP:
            Serial.print("STA IPv4: ");
            Serial.println(WiFi.localIP());
            break;
        case SYSTEM_EVENT_STA_DISCONNECTED:
            Serial.println("STA Disconnected");
            break;
        case SYSTEM_EVENT_STA_STOP:
            Serial.println("STA Stopped");
            break;
        default:
            break;
    }
}


结果:
使用Arduino开发ESP32(二十一):WiFiBlueToothSwitch例程,按键切换esp32为蓝牙或wifi模式_第1张图片

你可能感兴趣的:(ESP32学习之路)