1d759380a6
WiFi and BlueTooth can now be started and stopped at will. basic functions added to esp32-hal to start and stop the BT radio SimpleBLE class added to show the most basic functionality Example to show how to switch between BT, WiFi or Both
129 lines
3.6 KiB
C++
129 lines
3.6 KiB
C++
// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
// Sketch shows how to switch between WiFi and BlueTooth or use both
|
|
// Button is attached between GPIO 0 and GND and modes are switched with each press
|
|
|
|
#include "WiFi.h"
|
|
#define STA_SSID "your-ssid"
|
|
#define STA_PASS "your-pass"
|
|
#define AP_SSID "esp32"
|
|
|
|
enum { STEP_BTON, STEP_BTOFF, STEP_STA, STEP_AP, STEP_AP_STA, STEP_OFF, STEP_BT_STA, STEP_END };
|
|
|
|
void onButton(){
|
|
static uint32_t step = STEP_BTON;
|
|
switch(step){
|
|
case STEP_BTON://BT Only
|
|
Serial.println("** Starting BT");
|
|
btStart();
|
|
break;
|
|
case STEP_BTOFF://All Off
|
|
Serial.println("** Stopping BT");
|
|
btStop();
|
|
break;
|
|
case STEP_STA://STA Only
|
|
Serial.println("** Starting STA");
|
|
WiFi.begin(STA_SSID, STA_PASS);
|
|
break;
|
|
case STEP_AP://AP Only
|
|
Serial.println("** Stopping STA");
|
|
WiFi.mode(WIFI_AP);
|
|
Serial.println("** Starting AP");
|
|
WiFi.softAP(AP_SSID);
|
|
break;
|
|
case STEP_AP_STA://AP+STA
|
|
Serial.println("** Starting STA");
|
|
WiFi.begin(STA_SSID, STA_PASS);
|
|
break;
|
|
case STEP_OFF://All Off
|
|
Serial.println("** Stopping WiFi");
|
|
WiFi.mode(WIFI_OFF);
|
|
break;
|
|
case STEP_BT_STA://BT+STA
|
|
Serial.println("** Starting STA+BT");
|
|
WiFi.begin(STA_SSID, STA_PASS);
|
|
btStart();
|
|
break;
|
|
case STEP_END://All Off
|
|
Serial.println("** Stopping WiFi+BT");
|
|
WiFi.mode(WIFI_OFF);
|
|
btStop();
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
if(step == STEP_END){
|
|
step = STEP_BTON;
|
|
} else {
|
|
step++;
|
|
}
|
|
//little debounce
|
|
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;
|
|
}
|
|
}
|
|
|
|
void setup() {
|
|
Serial.begin(115200);
|
|
pinMode(0, INPUT_PULLUP);
|
|
WiFi.onEvent(WiFiEvent);
|
|
Serial.print("ESP32 SDK: ");
|
|
Serial.println(ESP.getSdkVersion());
|
|
Serial.println("Press the button to select the next mode");
|
|
}
|
|
|
|
void loop() {
|
|
static uint8_t lastPinState = 1;
|
|
uint8_t pinState = digitalRead(0);
|
|
if(!pinState && lastPinState){
|
|
onButton();
|
|
}
|
|
lastPinState = pinState;
|
|
}
|