ESP32作为物联网领域中的明星产品,其强大的WiFi和蓝牙功能使其在设备配网方面有着独特的优势。本文将详细介绍ESP32的配网方式,包括WiFi和蓝牙,并提供相应的代码示例。
一、ESP32配网方式
ESP32支持多种配网方式,主要包括SoftAP配网、Smartconfig配网、BLE配网和WEB配网。
1. SoftAP配网
在SoftAP模式下,ESP32会创建一个WiFi热点,用户将手机连接到这个热点后,将要连接的WiFi信息发送给ESP32。这种方式简单可靠,但需要用户手动切换手机WiFi连接的网络。
2. Smartconfig配网
Smartconfig配网方式不需要建立任何通信链路,手机端通过发送不同长度的UDP广播包来表示WiFi信息,ESP32在混杂模式监听信号覆盖范围内的所有数据帧,通过一定算法得到WiFi信息。这种方式简洁,但配网成功率受环境影响较大 。
3. BLE配网
BLE配网使用蓝牙方式进行配网,ESP32会进行BLE广播,附近的手机收到该广播后会询问用户是否进行BLE连接,如选择连接,则手机即可将信息发送给ESP32。这种方式用户体验好,但需要在设备端加入蓝牙相关代码 。
4. WEB配网
WEB配网方式允许在电脑端完成配网。ESP32会建立一个WiFi热点,手机或者PC端在浏览器打开配置网页,在网页中完成配网。这种方式和SoftAP配网一样可靠,但需要在设备端占用空间来嵌入网页 。
二、ESP32蓝牙功能
ESP32的蓝牙功能支持经典蓝牙BT和低功耗蓝牙BLE两种模式。
1. 经典蓝牙BT
经典蓝牙的使用非常简单,通过BluetoothSerial
库,可以轻松实现设备之间的通信。以下是一个简单的示例代码:
#include <BluetoothSerial.h>
BluetoothSerial SerialBT;
void setup() {
Serial.begin(115200);
SerialBT.begin("ESP32_BT"); // 设置蓝牙名称
Serial.println("BT initial ok and ready to pair.");
}
void loop() {
if (Serial.available()) {
SerialBT.write(Serial.read());
}
if (SerialBT.available()) {
Serial.write(SerialBT.read());
}
delay(1);
}
2. 低功耗蓝牙BLE
低功耗蓝牙BLE的使用稍微复杂一些,需要创建BLE设备、服务、特征和描述符。以下是一个简单的BLE服务器示例代码:
#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEServer.h>
BLEServer *pServer = NULL;
BLECharacteristic *pTxCharacteristic;
bool deviceConnected = false;
class MyServerCallbacks: public BLEServerCallbacks {
void onConnect(BLEServer* pServer) {
deviceConnected = true;
};
void onDisconnect(BLEServer* pServer) {
deviceConnected = false;
}
};
void setup() {
Serial.begin(115200);
BLEDevice::init("ESP32_BLE");
pServer = BLEDevice::createServer();
pServer->setCallbacks(new MyServerCallbacks());
BLEService *pService = pServer->createService(SERVICE_UUID);
pTxCharacteristic = pService->createCharacteristic(
CHARACTERISTIC_UUID_TX,
BLECharacteristic::PROPERTY_NOTIFY
);
pService->start();
BLEAdvertising *pAdvertising = BLEDevice::getAdvertising();
pAdvertising->addServiceUUID(SERVICE_UUID);
pAdvertising->setScanResponse(true);
pAdvertising->setMinPreferred(0x06); // functions that help with iPhone performance in background
pAdvertising->setMinPreferred(0x12);
BLEDevice::startAdvertising();
Serial.println("Waiting for a client connection to notify...");
}
void loop() {
if (deviceConnected) {
pTxCharacteristic->setValue("Hello World");
pTxCharacteristic->notify();
delay(2000);
}
}
三、ESP32 WiFi功能
ESP32的WiFi功能支持STA模式和AP模式,可以通过以下代码示例连接到WiFi网络:
#include <WiFi.h>
const char* ssid = "your_ssid"; // 替换为你的WiFi名称
const char* password = "your_password"; // 替换为你的WiFi密码
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected.");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void loop() {
}
四、总结
ESP32的配网方式多样,可以根据不同的应用场景选择合适的配网方法。其蓝牙和WiFi功能强大,可以满足物联网设备的各种通信需求。通过掌握这些配网方式和通信协议,可以为物联网项目提供稳定可靠的网络连接。
✅作者简介:热爱科研的嵌入式开发者,修心和技术同步精进
❤欢迎关注我的知乎:对error视而不见
代码获取、问题探讨及文章转载可私信。
☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。
🍎获取更多嵌入式资料可点击链接进群领取,谢谢支持!👇