当前位置: 代码迷 >> 综合 >> ESP32-S基于蓝牙配网方案
  详细解决方案

ESP32-S基于蓝牙配网方案

热度:51   发布时间:2023-11-24 05:01:45.0

一 . ESP32-S简介

在这里插入图片描述

二 . 示例程序

/*********************导入库*************************/
#include <BluetoothSerial.h>
#include <ArduinoJson.h>
#include <WiFi.h>
/**********************初始值************************/
#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
#endif
static String data_app;
BluetoothSerial SerialBT;
//****************初始化联网*************************
bool init_wifi(){
    int count = 0;WiFi.begin();while(WiFi.status()!=WL_CONNECTED){
    Serial.print(".");delay(500);count++;if (count==20){
    return false;}}return true;
}
/**********************初始化*************************/
void setup() {
    Serial.begin(115200);WiFi.hostname("myESP32");SerialBT.begin("myESP32");Serial.println("现在可进行蓝牙配对!");if(init_wifi()){
    Serial.println();Serial.println("wifi连接成功");}else{
    Serial.println();Serial.println("wifi连接失败请使用蓝牙配网");}
}
/**********************自循环************************/
void loop() {
    bluetooth();
}
/***********************蓝牙*************************/
void bluetooth() {
     //接收蓝牙数据if (Serial.available()) {
                   //用于调试SerialBT.write(Serial.read());}if (SerialBT.available()){
    data_app = "";data_app = SerialBT.readString();Serial.print("接收数据为:");        //用于调试Serial.println(data_app);           //用于调试if (data_app=="ip_mac"){
    String ip_mac = ipmac();SerialBT.println(ip_mac);Serial.println(ip_mac);}else if(data_app.indexOf("ssid")!=-1){
    StaticJsonDocument<200> doc;DeserializationError error = deserializeJson(doc, data_app);if (error) {
    Serial.println("数据格式错误");  //用于调试SerialBT.print("Incorrect format of incoming data");}else {
    String sid = doc["ssid"];String pwd = doc["password"];if (sid!="null"){
    Serial.printf("SSID:%s\r\n",sid); //用于调试if (pwd=="null"){
    pwd = "";}Serial.printf("PAWD:%s\r\n",pwd); //用于调试if(wifiPW(sid,pwd)){
    SerialBT.println("True");}else{
    SerialBT.println("False");}}else {
    Serial.println("未识别到wifi数据"); //用于调试SerialBT.print("Incorrect format of incoming data");}}}else{
    Serial.println("未接收到指令"); //用于调试SerialBT.print("Incorrect format of incoming data");}}
}
bool wifiPW(String sid,String pwd){
    //配网WiFi.begin(sid.c_str(), pwd.c_str());int count = 0;delay(1000);while (WiFi.status()!=WL_CONNECTED){
    Serial.print(".");delay(500);count++;if (count>20){
    Serial.println();Serial.println("配网失败");return false;}}Serial.println();Serial.println("配网成功");return true;
}
String ipmac(){
    //获取ip、mac地址if(WiFi.isConnected()){
    String ip = WiFi.localIP().toString();String mac = WiFi.macAddress();return "{'ip':'"+ip+"','mac':'"+mac+"'}";}else{
    return "Not connected to wifi";}
}
/****************************************************/

三 . 示例程序说明

在这里插入图片描述

四 . 注意事项

  1. 需要用到的库:
#include <BluetoothSerial.h>
#include <ArduinoJson.h>
#include <WiFi.h>
  1. 此函数可以连接到上次连接成功的wifi
WiFi.begin(); 
  1. 以下函数分别设置设备名以及设备蓝牙名称
WiFi.hostname("myESP32");
SerialBT.begin("myESP32");