在本文中,我将向您展示如何使用 M5Stamp PICO 和 M5Stick C 触发蓝牙操作使用 BLE 通信,是非常便宜且高效的 ESP32 控制器。
所需组件:
M5Stick C
M5Stamp PICO
什么是 M5Stick 和 M5Stamp?
M5Stack 是一家设计和制造开发包的技术公司,包含硬件、编程平台和物联网解决方案。它由 Jimmy Lai 于 2017 年举办,总部位于中国深圳。
M5Stack 创建了 M5Stick 和 M5Stamps,它们都是基于 ESP32 的 M5 电池。M5Stick C 内置了 TFT 对象和对象,而 M5Stamp 连接小图标,可用于各种物产品。
按照说明这些使用 Arduino IDE 设置 M5Stamp 和 M5Stick。
M5Stick C 将 M5Stamp 发送 BLE 发送,而 PICO 将 M5 Stamp 发送 BLE 接收器。当点击按钮上的按钮 A 时,M5Stamp 的 LED 就会变成绿色。
发射机编码:
#include
#include "BLEDevice.h"
#include "BLEUtils.h"
#include "BLEServer.h"
#include "BLEBeacon.h"
BLEAdvertising *pAdvertising; // BLE 广告类型
struct timeval now;
#define GPIO_DEEP_SLEEP_DURATION 1 // 休眠 x 秒然后唤醒
RTC_DATA_ATTR static time_t last; // 记住 RTC 内存中的上次启动
RTC_DATA_ATTR static uint32_t bootcount; // 记住 RTC 内存中的引导次数
#define BEACON_UUID "87b99b2c-90fd-11e9-bc42-526af7764f64" // UUID 1 128 位(可以使用 linux 工具 uuidgen 或通过 https://www.uuidgenerator.net/ 获取随机数)
无效 setBeacon()
{
BLEBeacon oBeacon = BLEBeacon();
oBeacon.setManufacturerId(0x4C00);
oBeacon.setProximityUUID(BLEUUID(BEACON_UUID));
oBeacon.setMajor((bootcount & 0xFFFF0000) >> 16);
oBeacon.setMinor(bootcount & 0xFFFF);
BLEAdvertisementData oAdvertisementData = BLEAdvertisementData();
BLEAdvertisementData oScanResponseData = BLEAdvertisementData();
oAdvertisementData.setFlags(0x04); // BR_EDR_NOT_SUPPORTED 0x04
std::string strServiceData = "";
strServiceData += (char)26; // Len
strServiceData += (char)0xFF; //
输入 strServiceData += oBeacon.getData();
oAdvertisementData.addData(strServiceData);
pAdvertising->setAdvertisementData(oAdvertisementData);
pAdvertising->setScanResponseData(oScanResponseData);
}
无效设置(){
M5.begin();
序列号.开始(115200);
M5.Lcd.setTextColor(黄色); //设置字体颜色为黄色。字体设置颜色为
M5.Lcd.setRotation(3);
M5.Axp.ScreenBreath(10);
M5.Lcd.setTextColor(红色);
M5.Lcd.setCursor(3, 10);
M5.Lcd.setTextSize(2);
}
无效循环(){
M5.update();
M5.Lcd.setCursor(3, 10);
if (M5.BtnA.wasReleased()) {
M5.Lcd.setTextColor(GREEN);
M5.Lcd.println("触发");
Serial.println("触发方式");
// 创建 BLE 设备
BLEDevice::init("BLE Receiver 01");
// 创建 BLE 服务器
BLEServer *pServer = BLEDevice::createServer(); // <-- 不再需要实例化 BLEServer,更少的闪存和内存使用
pAdvertising = BLEDevice::getAdvertising();
BLEDevice::startAdvertising();
设置信标();
// 开始广告
pAdvertising->start();
Serial.println("广告开始...");
延迟(1000);
pAdvertising->stop();
M5.Lcd.fillScreen(黑色);
M5.Lcd.setCursor(3, 10);
}
}
将上述代码上传到您的 M5Stick C 控制器。
接收器编码:
#include "Arduino.h"
#include
#include
#include
#include
#include
// 你的灯带中有多少个 LED?
#define NUM_LEDS 1
#define DATA_PIN 27
// 定义 LED 的数组
CRGB leds[NUM_LEDS];
字符串 knownBLEAddresses[] = {"24:a1:60:53:06:3e"};
int RSSI_THRESHOLD = -100;
bool device_found;
整数扫描时间 = 1;//以秒为单位
BLEScan* pBLEScan;
类 MyAdvertisedDeviceCallbacks: public BLEAdvertisedDeviceCallbacks {
void onResult(BLEAdvertisedDevice advertisedDevice) {
for (int i = 0; i < (sizeof(knownBLEAddresses) / sizeof(knownBLEAddresses[0])); i++)
{
if (strcmp(advertisedDevice.getAddress(). toString().c_str(), knownBLEAddresses[i].c_str()) == 0)
{
device_found = true;
休息;
}
否则
device_found = false;
}
Serial.printf("广告设备:%s \n", AdvertisementdDevice.toString().c_str());
}
};
无效设置() {
Serial.begin(115200);//在 ESP32 上启用 UART
FastLED.addLeds
Serial.println("Scanning..."); // 打印扫描
BLEDevice::init("");
pBLEScan = BLEDevice::getScan(); //创建新的扫描
pBLEScan->setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks()); //初始化回调函数
pBLEScan->setActiveScan(true); //主动扫描消耗更多能量,但更快地得到结果
pBLEScan->setInterval(100); // 设置扫描间隔
pBLEScan->setWindow(99);
void loop()
{
BLEScanResults foundDevices = pBLEScan->start(scanTime, false);
for (int i = 0; i < foundDevices.getCount(); i++)
{
BLEAdvertisedDevice device = foundDevices.getDevice(i);
int rssi = device.getRSSI();
Serial.print("RSSI:");
序列号.println(rssi);
if (rssi > RSSI_THRESHOLD && device_found == true)
{
Serial.println("Triggred");
发光二极管 [0] = 0xf00000;
FastLED.show();
延迟(200);
}
}
// 现在关闭 LED,然后暂停
leds[0] = 0x00f000;
FastLED.show();
延迟(200);
pBLEScan->clearResults(); // 从BLEScan缓冲区中删除结果以释放内存
}
注意:在上面的代码中,您必须更改 M5Stick C 的 BLE 地址。
在这里,我添加了我的 M5Stick C 的 BLE 地址,你在做的时候需要根据你的具体情况改变这个地址。
将发射和接收器的结果代码上传到M5Stamp
上,将 M5Stamp 连接 PC 并随后显示到您,然后点击 M5Stick C 上的 A,TFT 将继续上载显示。
每当您在 M5Stick C 看到消息时,请检查中搜索结果。
M5Stamp 的 LED 指示灯也将显示在 ESP 发送器中的名称、RSS 和播放器中。
-
控制器
+关注
关注
112文章
16064浏览量
176916 -
BLE
+关注
关注
12文章
646浏览量
59286 -
Pico
+关注
关注
0文章
167浏览量
17034 -
ESP32
+关注
关注
17文章
947浏览量
16957
发布评论请先 登录
相关推荐
评论