VBLUno kit - Tutorial 5 - Demo thiết bị nhiệt kế y tế với VBLUno

Mô tả dự án: 

Trong tutorial này sẽ giới thiệu các nét chính về chức năng và tham số kỹ thuật quan trọng của một thiết bị nhiệt kế y tế - Health Thermometer. Tiếp đó sẽ trình bày một ví dụ demo nhiệt kế y tế sử dụng VBLUno và cảm biến nhiệt độ bên trong chip nRF51822 (Tutorial 4). Với VBLUno, ví dụ được thực hiện một các nhanh chóng và hiệu quả.

Nội dung trình bày

  • Giới thiệu các nét chính về nhiệt kế y tế (Health Thermometer – HTM);
  • Ví dụ demo thiết bị nhiệt kế y tế với VBLUno.

Giới thiệu các nét chính về nhiệt kế y tế - HTM

Nhiệt kế y tế là thiết bị có chức năng đo nhiệt độ cơ thể, phục vụ chuẩn đoán sức khỏe và các ứng dụng liên quan đến thể dục thể thao (fitness). Bài viết này nói đến thiết bị nhiệt kế y tế thông minh, đo nhiệt độ cơ thể và gửi thông tin cần thiết đến các thiết bị thông minh (Smartphone, Tablet, PC). Chuẩn truyền thông không dây Bluetooth Low Energy (BLE) thường được sử dụng trong các thiết bị này.

Hình 1: Hoạt động của thiết bị nhiệt kế y tế qua giao tiếp BLE

Các nhiệt kế y tế này sẽ hoạt động như GATT (Generic Attribute Profile) Server, trong khi các thiết bị Central sẽ hoạt động như GATT Client. Nhiệt kế sẽ có hai services là Health Thermometer Service và Device Information Service.

Đầu tiên, ứng dụng tại Central tiến hành khám phá (discovery) các services có trên nhiệt kế, và sau đó sẽ tiến hành khám phá các characteristics đi kèm.  Với Heatlth Thermometer Service (HTS), các characteristics sau có thể được tích hợp: temperature measurement, temperature type, intermediate temperature and measurement interval characteristics. Trong đó temperature measurement là characteristic quan trọng nhất của service này, giúp cung cấp thông tin về giá trị nhiệt độ đo được của cảm biến.

Chi tiết về HTS và các characteristics tương ứng được trình bày chi tiết tại đường dẫn sau:

https://www.bluetooth.com/specifications/gatt/viewer?attributeXmlFile=org.bluetooth.service.health_thermometer.xml

Hình 2: Thông tin chi tiết về các characteristic của HTS

Hình trên cho thấy kiểu của Temperature Measurement characteristic  bắt buộc phải là Indicate. Đây sẽ là thông tin quan trọng khi bạn lập trình.

Kiểu giá trị nhiệt độ trong HTM

Dữ liệu về sức khỏe cá nhân được truyền nhận theo một chuẩn riêng – IEEE 11073 Personal Health Data (PHD). Nhiệt kế y tế truyền giá trị nhiệt độ dưới dạng số thực với độ chính xác đơn (FLOAT), cụ thể là chuẩn ISO/IEEE 11073-20601.  Bạn có thể tham khảo tài liệu chi tiết tại đây:

Ví dụ demo thiết bị nhiệt kế y tế với VBLUno.

Trong tutorial trước, chúng ta đã cùng tìm hiểu cách sử dụng cảm biến nhiệt độ sẵn có bên trong chip nRF51822 của VBLUno. Trong phần này chúng ta sẽ sử dụng nó để minh họa một thiết bị nhiệt kế y tế (HTM) thông minh.

Chạy demo

  • Tải mã nguồn sau về máy, tiến hành biên dịch và nạp vào VBLUno.
  • Đặt jump J7 về vị trí chạy application và nhấn nút Reset
  • Sử dụng chương trình nRF Toolbox của Nordic để kết nối và nhận dữ liệu từ thiết bị.

Hình 3: Giao diện chương trình nRF Toolbox

Hình 4: Ứng dụng tìm thấy thiết bị HTM

Hình 5: Thiết bị HTM đo nhiệt độ, tạo giả mức pin và gửi lên Central

Giải thích một số điểm cơ bản

Phần khai báo các services và characteristics của thiết bị HTM (VBLUno)

Trong ví dụ này có cài đặt 2 services:

  • Health Thermomerter Services: Cung cấp giá trị về nhiệt độ đo được.
  • Battery Level Services: Cung cấp thông tin về mức pin còn lại của thiết bị
/* Health Thermometer Service */
uint8_t             thermTempPayload[5] = { 0, 0, 0, 0, 0 };
GattCharacteristic  thermTemp (GattCharacteristic::UUID_TEMPERATURE_MEASUREMENT_CHAR,thermTempPayload,
                               5, 5, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_INDICATE);      //Indicate
GattCharacteristic   *thermChar[] = {&thermTemp};
GattService         thermService (GattService::UUID_HEALTH_THERMOMETER_SERVICE, thermChar, sizeof(thermChar)/sizeof(GattCharacteristic *));

/* Battery Level Service */
uint8_t            batt = 100;     /* Battery level */
uint8_t            read_batt = 0; /* Variable to hold battery level reads */
GattCharacteristic battLevel   ( GattCharacteristic::UUID_BATTERY_LEVEL_CHAR, (uint8_t *)&batt, 1, 1,
                                 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY |          //Notify or Read
                                 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ);
GattCharacteristic   *battChar[] = {&battLevel};                                
GattService        battService ( GattService::UUID_BATTERY_SERVICE, battChar, sizeof(battChar)/sizeof(GattCharacteristic *));

/* Advertising data and parameters */
GapAdvertisingData   advData;
GapAdvertisingData   scanResponse;
GapAdvertisingParams advParams ( GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED );
uint16_t             uuid16_list[] = {GattService::UUID_HEALTH_THERMOMETER_SERVICE,
                                      GattService::UUID_BATTERY_SERVICE};

Cập nhật các giá trị từ thiết bị lên Central

Trong ví dụ này sử dụng ticker có chu kỳ 1 giây để gửi thông tin về giá trị nhiệt độ đo được từ cảm biến và mức pin đến thiết bị Central

void periodicCallback() {
  if (ble.getGapState().connected) {
    //blink led
    led_val=!led_val;
    digitalWrite(LED, led_val);

    //Thermometer value   
    uint32_t temp_ieee11073 = quick_ieee11073_from_float(read_temp_value());
    memcpy(thermTempPayload+1, &temp_ieee11073, 4);
    ble.updateCharacteristicValue(thermTemp.getValueAttribute().getHandle(), thermTempPayload, sizeof(thermTempPayload));

    //Batt level value
    /* Decrement the battery level. */
    batt <=50 ? batt=100 : batt--;
    ble.updateCharacteristicValue(battLevel.getValueAttribute().getHandle(), (uint8_t*)&batt, sizeof(batt));
  }
}

Các phần còn lại cơ bản giống trong các bài hướng dẫn trước, các bạn có thể dễ dàng tự tìm hiểu.

Có thể thấy, công nghệ BLE đã và đang được ứng dụng rất rộng rãi trong đời sống hàng ngày. Mong rằng, với bo mạch VBLUno, các  bạn sẽ tiếp cận và làm chủ công nghệ BLE một cách dễ dàng và nhanh chóng nhất, tiếp tục tạo ra thật nhiều thiết bị hữu dụng hơn nữa.

lên
2 thành viên đã đánh giá bài viết này hữu ích.
Chuyên mục: 
Các dự án được truyền cảm hứng

Bộ điều khiển PID - ứng dụng phần 2 - xe dò line dùng thuật toán PID

Tiép nối bài viết về xe dò line cảm ơn Đỗ Hữu Toàn đã viết hộ mình phần 4. hôm nay mình sẽ làm cho chiếc xe dò line đi mượt và có hồn hơn 

lên
34 thành viên đã đánh giá bài viết này hữu ích.
Các bài viết cùng tác giả

Giới thiệu bo mạch VBLUno51 của VNG

Sau một thời gian giới thiệu bo mạch phát triển VBLUno đến cộng đồng, VBLUno đã giúp mọi người tiếp cận nhanh chóng với công nghệ Bluetooth Low Energy phục vụ phát triển ứng dụng Internet of Things.

Bên cạnh các ưu điểm trên, VBLUno phiên bản đầu tiên vẫn tồn tại khuyết điểm như: không tích hợp một interface cho phép nạp và gỡ lỗi một cách dễ dàng. Với phiên bản đầu tiên, để nạp/gỡ lỗi dễ dàng, người dùng cần sử dụng thêm mô đun CMSIS-DAP, điều này gây trở ngại không nhỏ cho người dùng.

Với tinh thần lắng nghe từ cộng đồng, chúng tôi đã nâng cấp mạch VBLUno lên phiên bản 2.0 với tên gọi là VBLUno51, bản chất là tích hợp mô đun CMSIS-DAP (DAPLink) lên mạch VBLUno và một số cải tiến quan trọng khác liên quan đến nguồn và ngoại vi. Như vậy, việc nạp chương trình cho mạch VBLUno51 sẽ dễ dàng hơn nhiều, bạn có thể xem mục Bắt đầu thôi! để biết cách nạp chương trình cho VBLUno51.

lên
32 thành viên đã đánh giá bài viết này hữu ích.

VBLUno - Tutorial hướng dẫn lập trình Arduino IDE cho bo mạch VBLUno

Đây là chuỗi các bài tutorial giới thiệu và hướng dẫn mọi người phát triển ứng dụng trên Arduino IDE cho bo mạch VBLUno của VNG. Đặc biệt là các hướng dẫn và demo về Bluetooth Low Energy. Hôm nay chúng ta sẽ cùng nhau xem cách lập trình cho VBLUno để nói hello world với thế giới từ VBLUNO.

lên
16 thành viên đã đánh giá bài viết này hữu ích.