#include <Arduino.h> #include <BLEDevice.h> #include <BLEServer.h> #include <BLEUtils.h> #include <BLE2902.h> #include <String.h> BLECharacteristic *pCharacteristic; //创建一个BLE特性pCharacteristic bool deviceConnected = false; //连接否标志位 uint8_t txValue = 0; //TX的值 long lastMsg = 0; //存放时间的变量 String rxload = "BlackWalnutLabs"; //RX的预置值 #define SERVICE_UUID "6E400001-B5A3-F393-E0A9-E50E24DCCA9E" // UART service UUID #define CHARACTERISTIC_UUID_RX "6E400002-B5A3-F393-E0A9-E50E24DCCA9E" #define CHARACTERISTIC_UUID_TX "6E400003-B5A3-F393-E0A9-E50E24DCCA9E" //服务器回调 class MyServerCallbacks : public BLEServerCallbacks { void onConnect(BLEServer *pServer) { deviceConnected = true; }; void onDisconnect(BLEServer *pServer) { deviceConnected = false; } }; //特性回调 class MyCallbacks : public BLECharacteristicCallbacks { void onWrite(BLECharacteristic *pCharacteristic) { std::string rxValue = pCharacteristic->getValue(); if (rxValue.length() > 0) { rxload = ""; for (int i = 0; i < rxValue.length(); i++) { rxload += (char)rxValue[i]; Serial.print(rxValue[i]); } Serial.println(""); } } }; void setupBLE(String BLEName) { const char *ble_name = BLEName.c_str(); //将传入的BLE的名字转换为指针 BLEDevice::init(ble_name); //初始化一个蓝牙设备 BLEServer *pServer = BLEDevice::createServer(); // 创建一个蓝牙服务器 pServer->setCallbacks(new MyServerCallbacks()); //服务器回调函数设置为MyServerCallbacks BLEService *pService = pServer->createService(SERVICE_UUID); //创建一个BLE服务 pCharacteristic = pService->createCharacteristic(CHARACTERISTIC_UUID_TX, BLECharacteristic::PROPERTY_NOTIFY); //创建一个(读)特征值 类型是通知 pCharacteristic->addDescriptor(new BLE2902()); //为特征添加一个描述 BLECharacteristic *pCharacteristic = pService->createCharacteristic(CHARACTERISTIC_UUID_RX, BLECharacteristic::PROPERTY_WRITE); //创建一个(写)特征 类型是写入 pCharacteristic->setCallbacks(new MyCallbacks()); //为特征添加一个回调 pService->start(); //开启服务 pServer->getAdvertising()->start(); //服务器开始广播 Serial.println("Waiting a client connection to notify..."); } void setup() { Serial.begin(115200); setupBLE("ESP32BLE"); //设置蓝牙名称 } void loop() { long now = millis(); //记录当前时间 if (now - lastMsg > 1000) { //每隔1秒发一次信号 if (deviceConnected && rxload.length() > 0) { String str = rxload; if (str=="10086\r\n") { const char *newValue = str.c_str(); pCharacteristic->setValue(newValue); pCharacteristic->notify(); } } lastMsg = now; //刷新上一次发送数据的时间 } }————————————————
ESP-Hosted 解决方案提供了将 ESP 板用作 Wi-Fi 和 Bluetooth/BLE 连接的通信处理器的方法。
ESP-Hosted 提供了一种将ESP芯片和模组用作通信协处理器的解决方案,该解决方案为主机微处理器或微控制器提供无线连接,使主机能够与其他设备通信。简单来说为网卡方案。
Arduino+ESP32上使用TFT_eSPI库快速点亮这个屏幕,驱动芯片ST7789
本文给出了一个ESP32与SPI 接口TFT显示屏接线的详细说明,供大家参考。
本文讲解如何在Micropython环境下使用ESP32的ESPNow功能进行数据传输。
ESP-Dongle 是一款基于 ESP32-S3 芯片开发的多功能 USB Device 解决方案。它不仅外形小巧,功能齐全,更集成了无线 U 盘、SD 卡读取以及 USB 无线网卡等多项功能。
ESP32 系列芯片可以利用 CSI 数据实现动作检测和存在检测。无论是自动调节灯光、风扇,还是节能控制,CSI 技术为智能家居带来了新的可能性。随着 CSI 技术的发展,未来的智能家居将能够更精确地感知和响应我们的行为,实现更高效、更人性化的控制。
ESP32-FreeRTOS项目提供了丰富的示例,帮助开发者快速掌握ESP32的硬件功能和FreeRTOS实时操作系统。
本节我们在迭代二的基础上使用四位数码管和OLED显示屏显示相关交互信息。
本节我们在迭代一的基础上增加采集土壤湿度数据,并根据湿度数据来决定是否自动进行浇水动作。