37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来——小小的进步或是搞不掂的问题,希望能够抛砖引玉。
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百三十四:Wemos D1 迷你Arduino Uno R3 D1 R32 ESP32 Wifi蓝牙无线开发板CH340 4M内存
Wemos D1 ESP32 开发板是一款紧凑而强大的设备,它集成了天线和射频巴伦、功率放大器、低噪声放大器、滤波器和电源管理模块。整个解决方案占用的印刷电路板面积最少。该板采用台积电 40nm 低功耗技术,搭配 2.4GHz 双模 Wi-Fi 和蓝牙芯片,功率和射频性能最佳,安全可靠,可扩展至各种应用。将 WiFi 和蓝牙连接结合在单个 ESP32 芯片上。Wemos D1 ESP32 开发板是基于乐鑫 ESP32 芯片的开发板。它具有 Wi-Fi 和蓝牙连接,以及一系列用于连接传感器、执行器和其他设备的输入和输出引脚。该板具有高性能处理器和广泛的功能,是物联网和家庭自动化项目的理想选择。此外,该板具有易于使用的界面,采用 Arduino UNO 外形尺寸,并与 Arduino 平台兼容,可以轻松开发项目并与其他设备集成。借助 Wemos D1 ESP32 开发板,您可以轻松地为各种应用创建智能、互联的解决方案。该板的一些规格包括:
- 240 MHz 双核 LX6 芯片
- Wi-Fi 802.11 b/g/n 连接
- 蓝牙 4.2 BLE 连接
- 4 MB 闪存
- 520 KB SRAM
- 30 针输入/输出,包括 GPIO、I2C、SPI、UART 和 ADC
- MicroSD支持
- LiPo电池充电支持
该板与 Arduino 平台兼容,可以使用 Arduino IDE 进行编程。此外,它还支持 MicroPython 平台,该平台允许使用 Python 进行编程。
ESP32是一款功能强大的微控制器,内置了Wi-Fi和蓝牙功能。特别是其低功耗蓝牙(BLE)功能,使其在物联网(IoT)应用中非常受欢迎。以下是对ESP32 BLE的详细介绍:
1、BLE基础知识
BLE(Bluetooth Low Energy)是一种专为低功耗、短距离通信设计的无线技术。它在2.4 GHz ISM频段运行,适用于需要传输少量数据的电池供电设备,如可穿戴设备和传感器1。
2、ESP32的BLE功能
ESP32支持双模蓝牙,包括经典蓝牙(BR/EDR)和低功耗蓝牙(BLE)。其BLE功能具有以下特点:
多角色支持:ESP32可以同时作为BLE服务器和客户端运行。
高效的电源管理:BLE的设计使其在不活动时消耗极少的电力,非常适合电池供电的设备。
丰富的库支持:ESP32的开发环境(如ESP-IDF和Arduino IDE)提供了丰富的BLE库,简化了开发过程。
3、BLE架构
ESP32的BLE架构分为控制器(Controller)和主机(Host)两部分:
控制器:负责物理层和链路层的处理,包括发送和接收无线电信号。
主机:管理设备间的通信协议和数据处理,提供应用层接口。
4、应用场景
智能家居:通过BLE连接智能灯泡、门锁等设备,实现远程控制和自动化。
健康监测:结合心率监测器、血氧仪等设备,实时监测健康数据。
环境监测:使用BLE传感器网络,监测温度、湿度、空气质量等环境参数。
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百三十四:Wemos D1 迷你Arduino Uno R3 D1 R32 ESP32
Wifi蓝牙无线开发板CH340 4M内存
{花雕动手做}项目之六:WeMos D1R32 蓝牙BLE中心设备扫描
实验开源代码
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百三十四:Wemos D1 迷你Arduino Uno R3 D1 R32 ESP32
Wifi蓝牙无线开发板CH340 4M内存
{花雕动手做}项目之六:WeMos D1R32 蓝牙BLE中心设备扫描
*/
#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEScan.h>
#include <BLEAdvertisedDevice.h>
class MyAdvertisedDeviceCallbacks: public BLEAdvertisedDeviceCallbacks {
void onResult(BLEAdvertisedDevice advertisedDevice) {
String deviceName = advertisedDevice.getName().c_str();
if (deviceName.length() == 0) {
deviceName = "未知设备";
}
Serial.print("设备名称:");
Serial.println(deviceName);
Serial.print("设备地址:");
Serial.println(advertisedDevice.getAddress().toString().c_str());
Serial.print("信号强度:");
Serial.println(advertisedDevice.getRSSI());
}
};
BLEScan* pBLEScan;
void setup() {
Serial.begin(115200);
BLEDevice::init("");
pBLEScan = BLEDevice::getScan();
pBLEScan->setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks());
pBLEScan->setActiveScan(true);
pBLEScan->start(10);
Serial.println("蓝牙BLE中心设备扫描已完成!");
}
void loop() {
delay(2000);
}
代码解释:
#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEScan.h>
#include <BLEAdvertisedDevice.h>
首先,我们导入一些必要的库。这些库提供了处理蓝牙设备、工具函数、扫描功能和广播设备的功能。
class MyAdvertisedDeviceCallbacks: public BLEAdvertisedDeviceCallbacks {
void onResult(BLEAdvertisedDevice advertisedDevice) {
String deviceName = advertisedDevice.getName().c_str();
if (deviceName.length() == 0) {
deviceName = "未知设备";
}
Serial.print("设备名称:");
Serial.println(deviceName);
Serial.print("设备地址:");
Serial.println(advertisedDevice.getAddress().toString().c_str());
Serial.print("信号强度:");
Serial.println(advertisedDevice.getRSSI());
}
};
我们定义了一个名为 MyAdvertisedDeviceCallbacks 的类,继承自 BLEAdvertisedDeviceCallbacks。这个类包含一个 onResult 方法,当扫描到一个设备时会调用这个方法。方法内部获取设备名称,如果设备名称为空,设置为“未知设备”。然后,依次打印设备名称、设备地址和信号强度。
BLEScan* pBLEScan;
定义一个指向 BLEScan 对象的指针变量 pBLEScan,用于保存扫描对象。
void setup() {
Serial.begin(115200);
BLEDevice::init("");
pBLEScan = BLEDevice::getScan();
pBLEScan->setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks());
pBLEScan->setActiveScan(true);
pBLEScan->start(10);
Serial.println("蓝牙BLE中心设备扫描已启动");
}
在 setup 函数中,初始化串口通信,并将波特率设置为115200。接下来,初始化BLE设备。然后获取BLE扫描对象 pBLEScan,并设置自定义的回调函数 MyAdvertisedDeviceCallbacks。接下来将扫描设置为主动模式,并设置扫描时间为10秒。最后,打印“蓝牙BLE中心设备扫描已启动”提示信息。
void loop() {
delay(2000);
}
在 loop 函数中,使用 delay 函数延迟2秒。因为 setup 函数中已经处理了主要的扫描逻辑,所以 loop 函数中不需要执行其他操作。
这个代码会扫描附近的蓝牙设备并打印设备名称、地址和信号强度,方便你查看和调试。
实验串口返回情况