ESP32-S基于蓝牙配网方案

一 . 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");
  • 18
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaofang113

新人报到,请多关照

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值