ESP32-S基于蓝牙配网方案
Posted xiaofang113
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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";
/****************************************************/
三 . 示例程序说明
四 . 注意事项
- 需要用到的库:
#include <BluetoothSerial.h>
#include <ArduinoJson.h>
#include <WiFi.h>
- 此函数可以连接到上次连接成功的wifi
WiFi.begin();
- 以下函数分别设置设备名以及设备蓝牙名称
WiFi.hostname("myESP32");
SerialBT.begin("myESP32");
以上是关于ESP32-S基于蓝牙配网方案的主要内容,如果未能解决你的问题,请参考以下文章
微信小程序控制硬件16 安信可 ESP32-S 开发板实现移植腾讯物联开发平台蓝牙 llsync 协议,实现一键蓝牙快速配网+远程控制。(附带源码)
微信小程序控制硬件16 安信可 ESP32-S 开发板实现移植腾讯物联开发平台蓝牙 llsync 协议,实现一键蓝牙快速配网+远程控制。(附带源码)