- Bộ phát triển nRF52:
- Segger Embedded Studio
- DHT11 với nRF52DK
- Làm thế nào để làm việc với Bluetooth Low Energy (BLE)?
- Sơ đồ đặc điểm / dịch vụ BLE
- Giải thích chương trình nRF52 BLE
- Kiểm tra Chương trình của chúng tôi bằng nRF Connect
Với Dây đeo thể dục, Đồng hồ thông minh và các thiết bị đeo khác ngày càng phổ biến, việc sử dụng Bluetooth 5 / Bluetooth Low Energycác tiêu chuẩn giao tiếp đang được áp dụng rộng rãi. BLE giúp chúng tôi trao đổi dữ liệu trong một khoảng cách ngắn với rất ít năng lượng, điều này rất quan trọng đối với các thiết bị hoạt động bằng pin như thiết bị đeo được. Nó cũng giúp chúng tôi thiết lập mạng lưới BLE không dây, tính năng này rất hữu ích cho các thiết bị tự động hóa gia đình, nơi nhiều thiết bị phải giao tiếp với nhau trong một môi trường khép kín. Chúng tôi đã sử dụng BLE với Raspberry Pi và BLE với ESP32 để thực hiện một số chức năng BLE cơ bản. Các kỹ sư đang thử nghiệm với BLE để thiết kế các thiết bị không dây di động có thể chạy trong thời gian dài trên pin nhỏ và có nhiều bộ công cụ phát triển có sẵn để làm việc với BLE. Trong bài đánh giá gần đây của chúng tôi về Arduino Nano 33, chúng tôi cũng nhận thấy bảng có nRF52840 với khả năng BLE.
Trong hướng dẫn này, chúng ta sẽ khám phá một bảng phát triển thú vị và phổ biến khác được gọi là nRF52 DK để đo Nhiệt độ và Độ ẩm bằng BLE. Theo mặc định, Hồ sơ cảm biến môi trường BLE hỗ trợ một loạt các thông số môi trường nhưng hướng dẫn này chỉ giới hạn ở các giá trị nhiệt độ và độ ẩm. Giải pháp này kết nối với Điện thoại thông minh qua Bluetooth tiết kiệm năng lượng và cung cấp bản cập nhật thường xuyên về các thông số môi trường như Nhiệt độ, Độ ẩm. Chúng tôi sẽ sử dụng cảm biến DHT1 và phép đo Nhiệt độ sẽ được thực hiện với độ phân giải 0,01 độ C và phép đo Độ ẩm sẽ được thực hiện với độ phân giải 0,01 phần trăm.
Bộ phát triển nRF52:
nRF52DK là một nền tảng tạo mẫu hoàn chỉnh cho ứng dụng Bluetooth Low Energy và 2.4 GHz Wireless Internet of Things. Bộ công cụ phát triển hỗ trợ các Mã công cụ Bắc Âu tiêu chuẩn khác nhau như mã nguồn mở, GCC và các môi trường phát triển tích hợp thương mại như Keil, IAR và Segger Embedded Studio, v.v. Nordic cũng cung cấp bộ công cụ phát triển phần mềm chính thức cho nRF52, bao gồm hỗ trợ hoàn chỉnh cho nRF52DK.
nRF52DK được cung cấp bởi vi điều khiển nRF52832 ARM Cortex-M4F, được tích hợp 512Kbyte Flash Memor và 64 Kbyte SRAM. nRF52DK có trình gỡ lỗi Segger J-Link On Board tích hợp, cung cấp khả năng gỡ lỗi nhanh hơn và dễ dàng hơn mà không cần thiết bị gỡ lỗi jtag bên ngoài / bổ sung. Nó cũng bao gồm đầu nối tương thích Arduino Uno Rev3, hỗ trợ giao tiếp đầu vào tương tự và kỹ thuật số với bộ vi xử lý và nó cũng bao gồm các giao thức truyền thông tiêu chuẩn như, I2C (Mạch tích hợp liên), SPI (Giao diện ngoại vi nối tiếp) và UART (Máy thu và phát không đồng bộ đa năng). Bộ phát triển này được thiết kế với một ăng-ten PCB tích hợp bên trong cung cấp giao tiếp không dây tầm ngắn bằng cách sử dụng Bluetooth Low Energy để kết nối với Điện thoại thông minh, Máy tính xách tay và Máy tính bảng.
Segger Embedded Studio
Để lập trình bảng phát triển, chúng tôi sẽ sử dụng Segger Embedded Studio với nRF52. Segger Embedded Studio là một môi trường phát triển tích hợp C / C ++ (IDE) mạnh mẽ được nhắm mục tiêu cụ thể để phát triển hệ thống nhúng. Điều này cung cấp một giải pháp tất cả trong một hoàn chỉnh chứa mọi thứ cần thiết để lập trình, phát triển và gỡ lỗi C nhúng. Điều này bao gồm quy trình công việc hoàn chỉnh để lập trình và phát triển hệ thống nhúng, có tính năng quản lý dự án, trình chỉnh sửa, trình gỡ lỗi hỗ trợ các thiết bị ARM Cortex. IDE mạnh mẽ và dễ sử dụng này hoàn toàn miễn phí cho khách hàng Bắc Âu với đầy đủ giấy phép mà không có bất kỳ giới hạn kích thước mã nào. IDE có thể được tải xuống từ liên kết dưới đây,
Tải xuống Segger Embedded Studio
DHT11 với nRF52DK
DHT11 là một Cảm biến nhiệt độ và độ ẩm đầy đủ tính năng với Thành phần đo độ ẩm loại điện trở và Thành phần đo nhiệt độ loại NTC. Nó cung cấp chất lượng tuyệt vời, phản hồi nhanh hơn và hiệu quả về chi phí. Theo mặc định, tất cả các cảm biến DHT11 đều được hiệu chuẩn trong phòng thí nghiệm, dẫn đến độ chính xác và độ tin cậy cao. Nó giao tiếp bằng hệ thống Giao diện nối tiếp một dây và các thông số kỹ thuật khác được đưa ra bên dưới
Thông số kỹ thuật của DHT11:
- Phạm vi độ ẩm: 20 - 90% RH
- Phạm vi nhiệt độ: 0-50 độ C
- Độ chính xác độ ẩm: ± 5 % RH
- Độ chính xác nhiệt độ: ± 2 ℃
Sơ đồ thời gian của DHT11:
Việc đọc dữ liệu từ cảm biến DHT11 tương đối đơn giản bằng cách sử dụng sơ đồ thời gian hiển thị ở trên. Quy trình tương tự như bất kỳ bộ điều khiển nào và chúng tôi đã sử dụng cảm biến này với các nền tảng phát triển khác như
- Cảm biến DHT11 với Raspberry Pi
- Cảm biến DHT11 với PIC16F877A
- Cảm biến DHT11 với STM32F103C8
- Cảm biến DHT11 với NodeMCU
Để giao tiếp cảm biến Nhiệt độ và Độ ẩm DHT11 với Bộ phát triển nRF52, hãy làm theo sơ đồ kết nối dưới đây.
Tôi đang sử dụng mô-đun đầu nối để kết nối cảm biến với bo mạch của mình, vì vậy thiết lập cuối cùng của tôi trông như thế này
Lưu đồ giao tiếp với DHT11:
Lưu đồ bên dưới giải thích luồng logic chương trình mà chúng ta sẽ sử dụng để giao tiếp giữa nRF52DK và DHT11
Định dạng dữ liệu:
Làm thế nào để làm việc với Bluetooth Low Energy (BLE)?
Để hiểu cách sử dụng tính năng BLE, chúng ta phải hiểu một vài thuật ngữ cơ bản được giải thích dưới đây, bạn cũng có thể đọc bài viết ESP32 BLE để biết thêm về BLE
Cấu hình truy cập chung (GAP)
Generic Access Profile giữ trách nhiệm hoàn chỉnh các thiết lập kết nối để liên lạc giữa BLE ngoại vi và Trung Devices. GAP cũng cung cấp các quy trình khác nhau bao gồm quét / khám phá thiết bị, thiết lập kết nối lớp liên kết, kết thúc liên kết, bắt tay các tính năng bảo mật và cấu hình thiết bị chính thức. GAP hoạt động ở các trạng thái thiết bị sau
Các tiểu bang GAP |
Sự miêu tả |
Đứng gần |
Trạng thái ban đầu của thiết bị khi đặt lại |
Nhà quảng cáo |
Quảng cáo thiết bị với dữ liệu giúp quét trình khởi tạo |
Máy quét |
Nhận và gửi yêu cầu quét cho nhà quảng cáo |
Người khởi xướng |
Gửi yêu cầu kết nối để thiết lập liên kết |
Chủ nô lệ |
Khi kết nối, thiết bị như nô lệ nếu nhà quảng cáo, thiết bị chủ nếu người khởi xướng |
Lớp cấu hình thuộc tính chung (GATT)
GATT là viết tắt của Generic Attribute Profile Layer, nó chịu trách nhiệm giao tiếp dữ liệu giữa hai thiết bị BLE (Ngoại vi & Trung tâm). Truyền thông dữ liệu được đặc trưng dưới dạng các đặc tính, giao tiếp và lưu trữ dữ liệu. Thiết bị BLE đóng hai vai trò khác nhau đối với giao tiếp thiết bị được cung cấp bên dưới,
- Máy chủ GATT chứa thông tin đặc điểm sẽ được sử dụng để đọc và ghi. Trong hướng dẫn của chúng tôi, cảm biến DHT11 và nhà phát triển. bộ này là Máy chủ GATT của chúng tôi.
- GATT Client đọc và ghi dữ liệu từ / tới GATT Server. Điện thoại thông minh là một ứng dụng khách GATT có chức năng đọc và ghi dữ liệu vào bảng cảm biến của chúng tôi.
Bluetooth SIG
Nhóm lợi ích đặc biệt Bluetooth (SIG) là tổ chức tiêu chuẩn giám sát sự phát triển của các tiêu chuẩn Bluetooth và cấp phép công nghệ Bluetooth. Nhóm SIG không sản xuất hoặc bán bất kỳ sản phẩm Bluetooth nào. Nó xác định đặc điểm kỹ thuật và tiêu chuẩn hóa Bluetooth. Họ xác định Mã nhận dạng duy nhất cho cấu hình Bluetooth năng lượng thấp và các đặc điểm tương ứng. Thông số kỹ thuật của Hồ sơ GATT có thể được tìm thấy tại liên kết bên dưới
Thông số cấu hình GATT
Dựa trên Đặc tả GATT được đưa ra trong liên kết trên, chúng tôi đã thu thập các số nhận dạng duy nhất cần thiết cho dự án của chúng tôi được lập bảng bên dưới.
Hồ sơ / Đặc điểm |
UUID |
GAP (Truy cập chung) |
0x1800 |
GATT (Thuộc tính chung) |
0x1801 |
ESS (Cảm biến môi trường) |
0x181A |
Nhiệt độ |
0x2A6E |
Độ ẩm |
0x2A6F |
Sơ đồ đặc điểm / dịch vụ BLE
BLE UUID
UUID |
Giá trị 16 bit |
UUID 128 bit |
Dịch vụ ESS |
0x181A |
0000181A-0000-0000-0000-00000000000 |
Char nhiệt độ |
0x2A6E |
00002A6E-0000-0000-0000-00000000000 |
Độ ẩm Char |
0x2A6F |
00002A6F-0000-0000-0000-00000000000 |
Đặc điểm nhiệt độ
Bất động sản |
Sự miêu tả |
Đơn vị |
Độ C với độ phân giải 0,01 độ |
định dạng |
sint16 |
UUID |
0x2A6E |
Số mũ thập phân |
2 |
Đọc |
Bắt buộc |
Đặc điểm độ ẩm
Bất động sản |
Sự miêu tả |
Đơn vị |
Tỷ lệ phần trăm có độ phân giải 0,01 phần trăm |
định dạng |
uint16 |
UUID |
0x2A6F |
Số mũ thập phân |
2 |
Đọc |
Bắt buộc |
Giải thích chương trình nRF52 BLE
Chúng tôi sẽ sử dụng SDK nRF5 để lập trình bộ phát triển nRF52 của mình. nRF5 SDK là một bộ công cụ phát triển phần mềm hoàn chỉnh được tích hợp với nhiều cấu hình Bluetooth Low Energy, GATT Serializer và hỗ trợ trình điều khiển cho tất cả các thiết bị ngoại vi trên các SoC dòng nRF5. SDK này giúp các nhà phát triển xây dựng các ứng dụng Bluetooth tiết kiệm năng lượng đầy đủ tính năng, đáng tin cậy và an toàn với dòng vi điều khiển nRF52 và nRF51. Chương trình hoàn chỉnh có thể được tải xuống từ đây, giải thích mã như sau.
Định cấu hình chân DATA DHT11 làm đầu vào tại nrf52 với bật kéo lên. Trạng thái chân phải ở mức cao để xác nhận rằng nRF52 cung cấp PULLUP thích hợp cho chân dữ liệu DHT11
/ * đặt thành đầu vào và kiểm tra xem tín hiệu có được kéo lên không * / Data_SetInput (); DelayUSec (50); if (Data_GetVal () == 0) {return DHT11_NO_PULLUP; }
Tạo tín hiệu START từ Vi điều khiển nRF52 và kiểm tra tín hiệu xác nhận.
/ * gửi tín hiệu bắt đầu * / Data_SetOutput (); Data_ClrVal (); DelayMSec (20); / * giữ tín hiệu ở mức thấp trong ít nhất 18 ms * / Data_SetInput (); DelayUSec (50); / * kiểm tra tín hiệu xác nhận * / if (Data_GetVal ()! = 0) {/ * tín hiệu phải được cảm biến kéo xuống mức thấp * / return DHT11_NO_ACK_0; } / * đợi chúng tôi tối đa 100 cho tín hiệu ack từ cảm biến * / cntr = 18; while (Data_GetVal () == 0) {/ * đợi cho đến khi tín hiệu đi lên * / DelayUSec (5); if (--cntr == 0) {return DHT11_NO_ACK_1; / * tín hiệu sẽ được kích hoạt cho ACK tại đây * /}} / * đợi cho đến khi nó báo lỗi lần nữa, kết thúc chuỗi ack * / cntr = 18; while (Data_GetVal ()! = 0) {/ * đợi cho đến khi tín hiệu tắt * / DelayUSec (5); if (--cntr == 0) {return DHT11_NO_ACK_0; / * tín hiệu sẽ lại xuống 0 ở đây * /}}
Bây giờ hãy đọc 40 bit dữ liệu chứa 2 byte nhiệt độ, 2 byte độ ẩm và 1 byte tổng kiểm tra.
/ * bây giờ đọc dữ liệu 40 bit * / i = 0; dữ liệu = 0; loopBits = 40; làm {cntr = 11; / * đợi tối đa 55 us * / while (Data_GetVal () == 0) {DelayUSec (5); if (--cntr == 0) {return DHT11_NO_DATA_0; }} cntr = 15; / * đợi tối đa 75 us * / while (Data_GetVal ()! = 0) {DelayUSec (5); if (--cntr == 0) {return DHT11_NO_DATA_1; }} dữ liệu << = 1; / * bit dữ liệu tiếp theo * / if (cntr <10) {/ * tín hiệu dữ liệu cao> 30 us ==> bit dữ liệu 1 * / data - = 1; } if ((loopBits & 0x7) == 1) {/ * byte tiếp theo * / buffer = data; i ++; dữ liệu = 0; }} while (- loopBits! = 0);
Xác thực dữ liệu với sự trợ giúp của Checksum.
/ * kiểm tra CRC * / if ((uint8_t) (đệm + đệm + đệm + đệm)! = đệm) {return DHT11_BAD_CRC; }
Thao tác và lưu trữ nhiệt độ và độ ẩm
/ * lưu trữ các giá trị dữ liệu cho người gọi * / độ ẩm = ((int) đệm) * 100 + đệm; nhiệt độ = ((int) đệm) * 100 + đệm;
Khởi tạo dịch vụ nRF5 SDK Logger. nRF52 SDK nổi bật với giao diện kiểm soát ghi nhật ký được gọi là nrf_log và sử dụng chương trình phụ trợ mặc định để ghi thông tin. Phần phụ trợ mặc định sẽ là một cổng nối tiếp. Ở đây chúng ta khởi tạo cả nrf_log giao diện điều khiển và nrf_log backends mặc định là tốt.
ret_code_t err_code = NRF_LOG_INIT (NULL); APP_ERROR_CHECK (err_code); NRF_LOG_DEFAULT_BACKENDS_INIT ();
nRF52 SDK có chức năng hẹn giờ ứng dụng. Mô-đun hẹn giờ ứng dụng cho phép tạo nhiều phiên bản hẹn giờ dựa trên thiết bị ngoại vi RTC1. Ở đây chúng tôi khởi tạo mô-đun hẹn giờ ứng dụng nRF5. Trong giải pháp này, hai bộ hẹn giờ ứng dụng được sử dụng cho và khoảng thời gian cập nhật dữ liệu.
ret_code_t err_code = app_timer_init (); APP_ERROR_CHECK (err_code);
nRF52 SDK có mô-đun quản lý năng lượng đầy đủ tính năng vì các thiết bị BLE cần hoạt động trong nhiều tháng trên pin đồng xu. Quản lý nguồn điện đóng một vai trò quan trọng trong các ứng dụng BLE. nRF52 mô-đun quản lý nguồn hoàn toàn xử lý như nhau. Ở đây chúng tôi khởi chạy mô-đun Quản lý nguồn của SDK nRF5
ret_code_t err_code; err_code = nrf_pwr_mgmt_init (); APP_ERROR_CHECK (err_code);
nRF52 SDK có tệp hex chương trình cơ sở Nordic Soft Device được tích hợp sẵn, có tính năng ngăn xếp thiết bị ngoại vi và trung tâm năng lượng thấp Bluetooth. Ngăn xếp giao thức chất lượng cao này bao gồm GATT, GAP, ATT, SM, L2CAP và Lớp liên kết. Ở đây chúng tôi làm theo trình tự khởi tạo, ngăn xếp vô tuyến nRF5 BLE (Thiết bị mềm Bắc Âu) đã khởi tạo
ret_code_t err_code; err_code = nrf_sdh_enable_request (); APP_ERROR_CHECK (err_code); // Định cấu hình ngăn xếp BLE bằng cài đặt mặc định. // Tìm nạp địa chỉ bắt đầu của RAM ứng dụng. uint32_t ram_start = 0; err_code = nrf_sdh_ble_default_cfg_set (APP_BLE_CONN_CFG_TAG, & ram_start); APP_ERROR_CHECK (err_code); // Bật ngăn xếp BLE. err_code = nrf_sdh_ble_enable (& ram_start); APP_ERROR_CHECK (err_code); // Đăng ký một trình xử lý cho các sự kiện BLE. NRF_SDH_BLE_OBSERVER (m_ble_observer, APP_BLE_OBSERVER_PRIO, ble_evt_handler, NULL);
GAP chịu trách nhiệm quét / phát hiện thiết bị, thiết lập liên kết, kết thúc liên kết, khởi tạo các tính năng bảo mật và cấu hình. GAP đã nổi bật với các thông số kết nối chính như khoảng thời gian kết nối, độ trễ phụ, thời gian chờ giám sát, v.v. Bằng cách khởi tạo các thông số kết nối Cấu hình truy cập chung
ret_code_terr_code; ble_gap_conn_params_tgap_conn_params; ble_gap_conn_sec_mode_t sec_mode; BLE_GAP_CONN_SEC_MODE_SET_OPEN (& sec_mode); err_code = sd_ble_gap_device_name_set (& sec_mode, (const uint8_t *) DEVICE_NAME, strlen (DEVICE_NAME)); APP_ERROR_CHECK (err_code); memset (& gap_conn_params, 0, sizeof (gap_conn_params)); gap_conn_params.min_conn_interval = MIN_CONN_INTERVAL; gap_conn_params.max_conn_interval = MAX_CONN_INTERVAL; gap_conn_params.slave_latency = SLAVE_LATENCY; gap_conn_params.conn_sup_timeout = CONN_SUP_TIMEOUT; err_code = sd_ble_gap_ppcp_set (& gap_conn_params); APP_ERROR_CHECK (err_code);
GATT chịu trách nhiệm giao tiếp dữ liệu giữa thiết bị ngoại vi và thiết bị trung tâm BLE. mô-đun nRF52 GATT hữu ích cho việc thương lượng và theo dõi kích thước ATT_MTU tối đa. Ở đây, chúng tôi khởi chạy Mô-đun thuộc tính chung SDK nRF52, ret_code_t err_code = nrf_ble_gatt_init (& m_gatt, NULL); APP_ERROR_CHECK (err_code);
GATT thực hiện truyền thông dữ liệu dưới dạng dịch vụ và đặc điểm. Ở đây chúng tôi khởi tạo các dịch vụ cảm biến môi trường GATT, bao gồm việc khởi tạo các đặc tính như nhiệt độ và độ ẩm.
ret_code_terr_code; nrf_ble_qwr_init_t qwr_init = {0}; // Khởi tạo mô-đun ghi hàng đợi. qwr_init.error_handler = nrf_qwr_error_handler; err_code = nrf_ble_qwr_init (& m_qwr, & qwr_init); APP_ERROR_CHECK (err_code); m_ess.notif_write_handler = ble_ess_notif_write_handler; err_code = ble_ess_init (& m_ess); APP_ERROR_CHECK (err_code);
Quảng cáo đóng một vai trò quan trọng trong môi trường ứng dụng BLE. gói bao gồm thông tin về loại địa chỉ, loại quảng cáo, dữ liệu quảng cáo, dữ liệu dành riêng cho nhà sản xuất thiết bị và dữ liệu phản hồi quét. nRF52 SDK nổi bật với một mô-đun quảng cáo. Ở đây chúng tôi thực hiện khởi tạo mô-đun quảng cáo với các tham số.
ret_code_terr_code; ble_advdata_t advdata; ble_advdata_t srdata; ble_uuid_t adv_uuids = {{ESS_UUID_SERVICE, BLE_UUID_TYPE_BLE}}; // Xây dựng và thiết lập dữ liệu quảng cáo. memset (& advdata, 0, sizeof (advdata)); advdata.name_type = BLE_ADVDATA_FULL_NAME; advdata.include_appearance = true; advdata.flags = BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE; memset (& srdata, 0, sizeof (srdata)); srdata.uuids_complete.uuid_cnt = sizeof (adv_uuids) / sizeof (adv_uuids); srdata.uuids_complete.p_uuids = adv_uuids; err_code = ble_advdata_encode (& advdata, m_adv_data.adv_data.p_data, & m_adv_data.adv_data.len); APP_ERROR_CHECK (err_code); err_code = ble_advdata_encode (& srdata, m_adv_data.scan_rsp_data.p_data, & m_adv_data.scan_rsp_data.len); APP_ERROR_CHECK (err_code); ble_gap_adv_params_t adv_params; // Đặt thông số quảng cáo. memset (& adv_params, 0, sizeof (adv_params)); adv_params.primary_phy = BLE_GAP_PHY_1MBPS; adv_params.duration = APP_ADV_DURATION; adv_params.properties.type = BLE_GAP_ADV_TYPE_CONNECTABLE_SCANNABLE_UNDIRECTED; adv_params.p_peer_addr = NULL; adv_params.filter_policy = BLE_GAP_ADV_FP_ANY; adv_params.interval = APP_ADV_INTERVAL; err_code = sd_ble_gap_adv_set_configure (& m_adv_handle, & m_adv_data, & adv_params); APP_ERROR_CHECK (err_code);
BLE Connection sẽ được xử lý và giám sát với các tham số kết nối khác nhau như độ trễ cập nhật thông số kết nối đầu tiên, độ trễ liên tiếp tiếp theo, số lần cập nhật, chức năng gọi lại trình xử lý sự kiện kết nối và trình xử lý sự kiện gọi lại lỗi kết nối. Ở đây chúng tôi thực hiện khởi tạo BLE Các tham số thiết lập kết nối và một trình xử lý sự kiện gọi lại cho các sự kiện kết nối và sự kiện lỗi.
ret_code_terr_code; ble_conn_params_init_t cp_init; memset (& cp_init, 0, sizeof (cp_init)); cp_init.p_conn_params = NULL; cp_init.first_conn_params_update_delay = FIRST_CONN_PARAMS_UPDATE_DELAY; cp_init.next_conn_params_update_delay = NEXT_CONN_PARAMS_UPDATE_DELAY; cp_init.max_conn_params_update_count = MAX_CONN_PARAMS_UPDATE_COUNT; t_on_notify_cccd_handle = BLE_GATT_HANDLE_INVALID; cp_init.disconnect_on_fail = false; cp_init.evt_handler = on_conn_params_evt; cp_init.error_handler = conn_params_error_handler; err_code = ble_conn_params_init (& cp_init); APP_ERROR_CHECK (err_code);
Sau khi hoàn thành quá trình khởi tạo hệ thống, ở đây chúng tôi bắt đầu với việc quảng cáo tên thiết bị BLE và thông tin khả năng. Từ đây, thiết bị ngoại vi này có thể được nhìn thấy trong danh sách quét Ble của điện thoại thông minh.
ret_code_terr_code; err_code = sd_ble_gap_adv_start (m_adv_handle, APP_BLE_CONN_CFG_TAG); APP_ERROR_CHECK (err_code);
Vòng lặp chính chạy trong khoảng thời gian 2 giây, đọc nhiệt độ và độ ẩm và cập nhật cho thiết bị thông minh được kết nối bằng cách đọc hoặc thông báo
cho (;;) { uint16_t nhiệt độ, độ ẩm; DHTxx_ErrorCode dhtErrCode; nhàn_lịch_tử_dụng (); if (updtmrexp) { dhtErrCode = DHTxx_Read (& nhiệt độ & độ ẩm); if (dhtErrCode == DHT11_OK) { NRF_LOG_INFO ("Nhiệt độ:% d Độ ẩm:% d \ n", nhiệt độ, độ ẩm); if (temp_notif_enabled) { ble_ess_notify_temp (m_conn_handle, & m_ess, nhiệt độ); } else { ble_ess_update_temp (& m_ess, nhiệt độ); } if (ẩm_notif_enabled) { ble_ess_notify_humid (m_conn_handle, & m_ess, độ ẩm); } else { ble_ess_update_humid (& m_ess, độ ẩm); } } updtmrexp = false; } }
Kiểm tra Chương trình của chúng tôi bằng nRF Connect
nRF Connect là một công cụ Bluetooth tiết kiệm năng lượng mạnh mẽ cho phép quét và khám phá các thiết bị ngoại vi hỗ trợ BLE. nRF Connect dành cho điện thoại di động hỗ trợ một loạt các cấu hình tiêu chuẩn được thông qua Bluetooth SIG. Chúng tôi có thể xác minh chương trình của mình bằng cách sử dụng điều này, sau khi cài đặt ứng dụng, chúng tôi có thể ghép nối bo mạch nRF52 với điện thoại của mình bằng cách quét các thiết bị BLE trên ứng dụng. Bên trong thuộc tính Cảm biến môi trường, chúng ta có thể nhận thấy các giá trị nhiệt độ và độ ẩm đang được cập nhật như thể hiện trong hình dưới đây.
Hariharan Veerappan là một nhà tư vấn độc lập có hơn 15 năm kinh nghiệm trong lĩnh vực phát triển sản phẩm nhúng. Anh ấy cung cấp dịch vụ tư vấn về phát triển phần sụn / Linux nhúng, anh ấy cũng cung cấp các khóa đào tạo trực tuyến và công ty. Hariharan có bằng Cử nhân Kỹ thuật trong lĩnh vực Kỹ thuật Điện tử & Truyền thông, thông qua các bài viết và hướng dẫn của mình, anh ấy chia sẻ kinh nghiệm và suy nghĩ của mình với độc giả của Circuit Digest.