如何使用M5Stick和M5Stamp触发蓝牙操作BLE通信

描述

  在本文中,我将向您展示如何使用 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 控制器。

Pico

  接收器编码:

  #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(leds, NUM_LEDS); // GRB 排序是典型的
  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 地址。

Pico

  在这里,我添加了我的 M5Stick C 的 BLE 地址,你在做的时候需要根据你的具体情况改变这个地址。

  将发射和接收器的结果代码上传到M5Stamp

  上,将 M5Stamp 连接 PC 并随后显示到您,然后点击 M5Stick C 上的 A,TFT 将继续上载显示。

Pico

  每当您在 M5Stick C 看到消息时,请检查中搜索结果。

Pico

  M5Stamp 的 LED 指示灯也将显示在 ESP 发送器中的名称、RSS 和播放器中。

Pico

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分