在本文中,我將向您展示如何使用 M5Stamp PICO 和 M5Stick C 觸發(fā)藍牙操作使用 BLE 通信,是非常便宜且高效的 ESP32 控制器。
所需組件:
M5Stick C
M5Stamp PICO
什么是 M5Stick 和 M5Stamp?
M5Stack 是一家設(shè)計和制造開發(fā)包的技術(shù)公司,包含硬件、編程平臺和物聯(lián)網(wǎng)解決方案。它由 Jimmy Lai 于 2017 年舉辦,總部位于中國深圳。
M5Stack 創(chuàng)建了 M5Stick 和 M5Stamps,它們都是基于 ESP32 的 M5 電池。M5Stick C 內(nèi)置了 TFT 對象和對象,而 M5Stamp 連接小圖標(biāo),可用于各種物產(chǎn)品。
按照說明這些使用 Arduino IDE 設(shè)置 M5Stamp 和 M5Stick。
M5Stick C 將 M5Stamp 發(fā)送 BLE 發(fā)送,而 PICO 將 M5 Stamp 發(fā)送 BLE 接收器。當(dāng)點擊按鈕上的按鈕 A 時,M5Stamp 的 LED 就會變成綠色。
發(fā)射機編碼:
#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 內(nèi)存中的上次啟動
RTC_DATA_ATTR static uint32_t bootcount; // 記住 RTC 內(nèi)存中的引導(dǎo)次數(shù)
#define BEACON_UUID "87b99b2c-90fd-11e9-bc42-526af7764f64" // UUID 1 128 位(可以使用 linux 工具 uuidgen 或通過 https://www.uuidgenerator.net/ 獲取隨機數(shù))
無效 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);
}
無效設(shè)置(){
M5.begin();
序列號.開始(115200);
M5.Lcd.setTextColor(黃色); //設(shè)置字體顏色為黃色。字體設(shè)置顏色為
M5.Lcd.setRotation(3);
M5.Axp.ScreenBreath(10);
M5.Lcd.setTextColor(紅色);
M5.Lcd.setCursor(3, 10);
M5.Lcd.setTextSize(2);
}
無效循環(huán)(){
M5.update();
M5.Lcd.setCursor(3, 10);
if (M5.BtnA.wasReleased()) {
M5.Lcd.setTextColor(GREEN);
M5.Lcd.println("觸發(fā)");
Serial.println("觸發(fā)方式");
// 創(chuàng)建 BLE 設(shè)備
BLEDevice::init("BLE Receiver 01");
// 創(chuàng)建 BLE 服務(wù)器
BLEServer *pServer = BLEDevice::createServer(); // <-- 不再需要實例化 BLEServer,更少的閃存和內(nèi)存使用
pAdvertising = BLEDevice::getAdvertising();
BLEDevice::startAdvertising();
設(shè)置信標(biāo)();
// 開始廣告
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 的數(shù)組
CRGB leds[NUM_LEDS];
字符串 knownBLEAddresses[] = {"24:a1:60:53:06:3e"};
int RSSI_THRESHOLD = -100;
bool device_found;
整數(shù)掃描時間 = 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("廣告設(shè)備:%s \n", AdvertisementdDevice.toString().c_str());
}
};
無效設(shè)置() {
Serial.begin(115200);//在 ESP32 上啟用 UART
FastLED.addLeds
Serial.println("Scanning..."); // 打印掃描
BLEDevice::init("");
pBLEScan = BLEDevice::getScan(); //創(chuàng)建新的掃描
pBLEScan->setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks()); //初始化回調(diào)函數(shù)
pBLEScan->setActiveScan(true); //主動掃描消耗更多能量,但更快地得到結(jié)果
pBLEScan->setInterval(100); // 設(shè)置掃描間隔
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");
發(fā)光二極管 [0] = 0xf00000;
FastLED.show();
延遲(200);
}
}
// 現(xiàn)在關(guān)閉 LED,然后暫停
leds[0] = 0x00f000;
FastLED.show();
延遲(200);
pBLEScan->clearResults(); // 從BLEScan緩沖區(qū)中刪除結(jié)果以釋放內(nèi)存
}
注意:在上面的代碼中,您必須更改 M5Stick C 的 BLE 地址。
在這里,我添加了我的 M5Stick C 的 BLE 地址,你在做的時候需要根據(jù)你的具體情況改變這個地址。
將發(fā)射和接收器的結(jié)果代碼上傳到M5Stamp
上,將 M5Stamp 連接 PC 并隨后顯示到您,然后點擊 M5Stick C 上的 A,TFT 將繼續(xù)上載顯示。
每當(dāng)您在 M5Stick C 看到消息時,請檢查中搜索結(jié)果。
M5Stamp 的 LED 指示燈也將顯示在 ESP 發(fā)送器中的名稱、RSS 和播放器中。
-
控制器
+關(guān)注
關(guān)注
112文章
16103瀏覽量
177074 -
BLE
+關(guān)注
關(guān)注
12文章
648瀏覽量
59294 -
Pico
+關(guān)注
關(guān)注
0文章
168瀏覽量
17040 -
ESP32
+關(guān)注
關(guān)注
17文章
950瀏覽量
16992
發(fā)布評論請先 登錄
相關(guān)推薦
評論