- Thành phần bắt buộc
- Sử dụng Ứng dụng Android nRF Connect cho iBeacon ESP32
- Lập trình ESP32 để hoạt động như BLE iBeacon
ESP32 thực sự là một thiết bị IoT mạnh mẽ có hỗ trợ sẵn cho Bluetooth và WiFi. ESP32 là phiên bản nâng cao của người tiền nhiệm ESP8266 với các tính năng bổ sung như RAM, ROM, GPIO, v.v. Mô-đun ESP32 hỗ trợ cả Bluetooth cổ điển và Bluetooth Low Energy (BLE), Bluetooth cổ điển có thể được sử dụng để truyền các bài hát hoặc tệp và BLE tùy chọn có thể được sử dụng cho các ứng dụng tối ưu hóa pin như đèn hiệu Bluetooth, dải thể dục, độ gần, v.v. Cũng có thể sử dụng ESP32 làm Bluetooth nối tiếp như mô-đun HC-05 hoặc HC-06 cho các dự án vi điều khiển đơn giản.
Như chúng ta đã biết BLE có thể hoạt động ở hai chế độ khác nhau - Chế độ máy chủ và chế độ Máy khách. Cả hai chế độ đã được thảo luận trong Hướng dẫn ESP32 trước đây của chúng tôi:
- Máy chủ BLE ESP32 - Dịch vụ GATT để chỉ báo mức pin
- Máy khách ESP32 BLE - Kết nối với Dây đeo thể dục để kích hoạt bóng đèn
Trong hướng dẫn này, chúng tôi sẽ xây dựng một BLE iBeacon bằng cách sử dụng ESP32 trong đó ESP32 sẽ hoạt động như một máy chủ và điện thoại thông minh sẽ hoạt động như một máy khách. Tôi giả sử rằng bạn đã quen thuộc về cách sử dụng bảng ESP32 với Arduino IDE, nếu không quay lại hướng dẫn bắt đầu với ESP32.
Bạn cũng có thể biết thêm về Công nghệ Beacon / iBeacon là gì bằng cách xem qua các dự án Bluetooth iBeacon trước đây của chúng tôi sử dụng Raspberry Pi và HM-10 BLE iBeacon.
Thành phần bắt buộc
Phần cứng:
- Ban phát triển ESP32
- Cáp Micro USB
Phần mềm:
- Arduino IDE
- Ứng dụng Android: nRF Connect dành cho điện thoại di động (Bởi Nordic Semiconductor)
Có rất nhiều ứng dụng máy quét BLE, một trong số chúng đã được chúng tôi sử dụng trong dự án Cách sử dụng mô-đun HM-10 BLE với Arduino trước đây. Ứng dụng máy quét BLE này cung cấp Giao diện đồ họa (GUI) tốt nhưng thiếu thông tin bổ sung nên trong dự án này, chúng tôi đang sử dụng ứng dụng NRF Connect dành cho thiết bị di động.
Sử dụng Ứng dụng Android nRF Connect cho iBeacon ESP32
1. Tải xuống ứng dụng nRF Connect từ Cửa hàng Google Play và mở nó.
2. Màn hình trông giống như bên dưới. Các tùy chọn Hữu ích cho dự án này sẽ là 'Quét', 'Máy quét' và 'Thông tin' khi tìm thấy thiết bị.
Các 'Quét' tùy chọn sẽ được sử dụng để xem tất cả các iBeacons sẵn. Để bắt đầu tìm kiếm iBeacon, hãy kéo màn hình xuống hoặc chuyển đến tùy chọn 'Quét' ở góc trên cùng bên phải của Màn hình. Thao tác này sẽ bắt đầu tìm kiếm các iBeacons có sẵn.
3.Sau khi tìm kiếm iBeacon, bạn sẽ có thể thấy RSSI, UUID, Major và Minor của iBeacon. RSSI sẽ thay đổi nếu bạn đặt thiết bị di động hoặc iBeacon cách xa nhau. Ở đây trong màn hình này, RSSI là (-37). Ngoài ra còn có một số chi tiết như Tên công ty giả, Loại thiết bị, Độ dài của byte, Tên địa phương của ESP32. Đây là “ ESP32 as iBeacon ”. Bạn có thể thay đổi tên địa phương trong bản phác thảo.
4. Sau khi lấy điện thoại thông minh khỏi iBeacon, giá trị RSSI thay đổi từ -37 thành -58. Các giá trị này sẽ tiếp tục thay đổi nếu bạn di chuyển một trong các thiết bị.
Các giá trị được chấp nhận của tín hiệu RSSI như sau:
Cường độ tín hiệu | TL; DR | Yêu cầu | |
---|---|---|---|
-30 dBm | Kinh ngạc | Cường độ tín hiệu có thể đạt được tối đa. Khách hàng chỉ có thể cách AP vài feet để đạt được điều này. Không điển hình hoặc không mong muốn trong thế giới thực. | N / A |
-67 dBm | Rất tốt | Cường độ tín hiệu tối thiểu cho các ứng dụng yêu cầu cung cấp gói dữ liệu rất đáng tin cậy, kịp thời. | VoIP / VoWiFi, phát video trực tuyến |
-70 dBm | Được chứ | Cường độ tín hiệu tối thiểu để phân phối gói tin đáng tin cậy. | Email, web |
-80 dBm | Không tốt | Cường độ tín hiệu tối thiểu cho kết nối cơ bản. Giao hàng theo gói có thể không đáng tin cậy. | N / A |
-90 dBm | Không dùng được | Tiếp cận hoặc chết chìm trong sàn ồn ào. Bất kỳ chức năng nào rất khó xảy ra. | N / A |
Lập trình ESP32 để hoạt động như BLE iBeacon
Có sẵn chương trình mẫu của ESP32 BLE iBeacon khi bạn cài đặt Bảng ESP32 trong Arduino IDE. Nhưng chúng tôi đã chỉnh sửa một chút bản phác thảo này trong hướng dẫn này, phiên bản chỉnh sửa hoàn chỉnh của chương trình mẫu được đưa ra ở cuối hướng dẫn này.
Để mở Chương trình mẫu của ESP32 BLE_iBeacon, chỉ cần làm theo các Bước dưới đây.
- Mở Arduino IDE và chọn “Mô-đun nhà phát triển ESP32”. (Nếu bạn không tìm thấy bảng này thì hãy kiểm tra xem bạn đã cài đặt Gói bảng ESP32 chưa)
- Đi tới Tệp > Ví dụ > ESP32 BLE Arduino > BLE_iBeacon
- Mở "BLE_iBeacon" Sketch.
Bây giờ có một sửa đổi nhỏ trong mã được thực hiện trong hướng dẫn này. Tên ESP32 cũng sẽ được cập nhật trong bản phác thảo này. Vì vậy, hãy bắt đầu với việc bao gồm các Thư viện cần thiết sẽ được sử dụng trong Tạo BLE Server và iBeacon.
#include "sys / time.h"
Đây là thư viện thời gian để lấy thời gian hệ thống hiện tại. Điều này chứa các hàm như tv_sec, gettimeofday (), v.v. Để biết thêm thông tin, bạn có thể truy cập bản phát hành UNIX chính thức của ' sys / time.h'.
Sau đó, các thư viện BLE của ESP32 được bao gồm trong đó có nhiều chức năng được sử dụng để tạo ESP32 trong các cấu hình khác nhau như BLE Client hoặc BLE Server.
#include "BLEDevice.h" #include "BLEUtils.h" #include "BLEServer.h"
Các thư viện iBeacon được bao gồm trong đó đặt ESP32 như iBeacon. Cùng với điều này, thư viện giấc ngủ sâu được bao gồm cho ESP32. Thư viện sẽ được sử dụng để gửi ESP32 ở chế độ ngủ sâu trong một khoảng thời gian xác định.
#include "BLEBeacon.h" #include "esp_sleep.h"
Xác định thời lượng ngủ cho ESP32. Ở đây, ESP32 sẽ ở trạng thái ngủ sâu trong 10 giây và nó sẽ quảng cáo và sau đó lại chuyển sang chế độ ngủ sâu trong 10 giây.
#define GPIO_DEEP_SLEEP_DURATION 10
Ở đây RTC_DATA_ATTR được xác định. Lưu ý rằng nếu bạn xác định một biến toàn cục với thuộc tính RTC_DATA_ATTR, thì biến đó sẽ được đặt vào bộ nhớ RTC_SLOW_MEM. Vì vậy, cấu trúc được khai báo là RTC_DATA_ATTR và sao chép bộ nhớ động vào cấu trúc này trước khi ngủ sâu sẽ giúp khôi phục nó thành bộ nhớ động sau khi thức dậy. Nói một cách dễ hiểu, chúng ta đang tiết kiệm thời gian trong bộ nhớ tĩnh từ bộ nhớ động để khôi phục lại sau một giấc ngủ sâu. Ở đây hai biến được xác định. ' Last ' được sử dụng để lấy lần cuối cùng khi ESP32 chuyển sang chế độ ngủ sâu và bootcount được sử dụng để đếm số lần đặt lại.
RTC_DATA_ATTR thời gian tĩnh_tần cuối cùng; RTC_DATA_ATTR tài khoản khởi động tĩnh uint32_t;
Sau đó, xác định Loại quảng cáo BLE. Định nghĩa được thực hiện như sau.
BLEAdvertising * pAdvertising;
Các timeval được định nghĩa là cấu trúc để truy cập thời điểm hiện tại.
cấu trúc thời gian ngay bây giờ;
Ngoài ra UUID cũng được xác định. Các UUID có thể được tạo từ liên kết này .
#define BEACON_UUID "87b99b2c-9XXd-11e9-bXX2-526XXXX64f64"
Bây giờ, hãy tạo một hàm chứa các thuộc tính iBeacon như UUID, Major, Minor, v.v. Trong hàm này, hãy tạo một phiên bản cho BLE dưới dạng iBeacon và đặt một ID nhà sản xuất giả, UUID, major và small cho ESP32 là iBeacon.
void setBeacon () { BLEBeacon oBeacon = BLEBeacon (); oBeacon.setManosystemurerId (0x4C00); oBeacon.setProximityUUID (BLEUUID (BEACON_UUID)); oBeacon.setMajor ((số lượng khởi động & 0xFFFF0000) >> 16); oBeacon.setMinor (tài khoản khởi động & 0xFFFF);
Đặt cờ là 0x04 để nó xuất ra BrEdrNotSupported trong máy quét.
oData.setFlags (0x04);
Đặt dữ liệu quảng cáo để xuất bản.
std:: string strServiceData = "";
Thêm chuỗi lần lượt để quảng cáo.
strServiceData + = (char) 26; // Len strServiceData + = (char) 0xFF; // Gõ strServiceData + = oBeacon.getData (); oData.addData (strServiceData);
Bắt đầu quảng cáo bằng cách xuất bản dữ liệu.
pAdvertising-> setData (oData); pAdvertising-> setScanResponseData (oScanResponseData);
Bắt đầu màn hình nối tiếp ở tốc độ 115200 baud và xem thời gian. Cũng tăng số lượng khởi động để lưu trữ số lần Đặt lại.
Serial.begin (115200); gettimeofday (& now, NULL); Serial.printf ("start ESP32% d \ n", bootcount ++);
Lưu trữ thời gian hiện tại trong bộ nhớ tĩnh.
last = now.tv_sec;
Tạo thiết bị BLE và đặt tên như bạn muốn. Ở đây, ESP32 được đặt tên là “ ESP2 as iBeacon ”. Lưu ý rằng, các tên có thể dài nhưng phiên bản mã này đã bắt đầu hỗ trợ cho các tên dài.
BLEDevice:: init ("ESP32 dưới dạng iBeacon");
Tạo máy chủ BLE để quảng cáo và bắt đầu.
BLEServer * pServer = BLEDevice:: createServer (); pAdvertising = BLEDevice:: getAdvertising (); BLEDevice:: startAdvertising ();
Sau đó đặt ESP32 ở chế độ iBeacon.
setBeacon ();
Bắt đầu quảng cáo sau đó dừng quảng cáo và đi vào giấc ngủ sâu trong 10 giây.
pAdvertising-> start (); pAdvertising-> stop (); esp_deep_sleep (1000000LL * GPIO_DEEP_SLEEP_DURATION);
Cuối cùng Cắm Bảng phát triển ESP32 với Máy tính xách tay của bạn bằng cáp Micro USB và tải mã lên ESP32 bằng Arduino IDE. Sau đó, mở Ứng dụng nRF Connect Android trên điện thoại thông minh của bạn và bắt đầu quét. Bạn sẽ tìm thấy ESP32 dưới dạng chương trình phát sóng iBeacon như trong hình bên dưới:
Đây là cách ESP32 có thể được sử dụng như BLE Beacon để quảng cáo UUID, Major và Minor. Nếu bạn muốn biết thêm về iBeacon thì hãy làm theo hướng dẫn trước đây của chúng tôi về HM10 với tên iBeacon. Ngoài ra nếu bạn có bất kỳ nghi ngờ thì bình luận bên dưới hoặc đặt câu hỏi trong các diễn đàn.
Mã hoàn chỉnh với một video hoạt động được cung cấp dưới đây.
/>