Đọc dữ liệu của cảm biến nồng độ carbon dioxide (CO2) WP6003 thông qua BLE. WP6003 là một cảm biến giá rẽ. Bạn có thể mua nó tại FUVITECH.
- Hướng dẫn sử dụng cảm biến phao mực nước với Arduino Uno R3
- Các phím tắt trên Altium Designer hay sử dụng
- Giới thiệu về bút đo tổng chất rắn hòa tan máy kiểm định EC TDS FVTek V1.0
- Tép Bạc định hình tự động hóa trong nuôi tôm công nghệ cao
- CÁCH XUẤT FILE BOM VÀ CPL TRONG ALTIUM
Ngoài CO2, bạn có thể đọc các thông số TVOC, HCHO, nhiệt độ. Tôi có thể đọc dữ liệu bằng ứng dụng điện thoại thông minh, nhưng tôi đọc nó qua BLE vì ứng dụng gốc đi theo cảm biến thì hoạt động không mượt cho lắm.
Chuẩn bị
Bạn hãy thử kết nối thiết bị với BLE Scanner và bạn sẽ thấy địa chỉ của nó với đầu 6003# …. .
Dữ liệu kèm theo
Dữ liệu có tổng cộng 18 byte và có vẻ ở định dạng sau (một số không xác định). TVOC và HCHO có thể ngược lại.
- 6 byte: Dấu thời gian 0x0a (?), Năm (2 chữ số), tháng, ngày, giờ và phút được thể hiện bằng 1 byte mỗi
- 2 byte: Nhiệt độ (đơn vị 0,1 ° C)
- 2 byte: không xác định
- 2 byte: TVOC (0,001 mg / m3)
- 2 byte: HCHO (0,001 mg / m3)
- 2 byte: không xác định (0100)
- 2 byte: nồng độ CO2 (ppm)
Code Python và Arduino
Mã https://github.com/zu2/wp6003
Code Python
# -*- coding: utf-8 -*-
import Adafruit_BluefruitLE, uuid
from Adafruit_BluefruitLE.services import UART, DeviceInformation
import struct
import atexit
import time
import datetime
DEVICE = '6003#XXXXXXXXXXXXX' # デバイス名
SERVICE = uuid.UUID('0000FFF0-0000-1000-8000-00805F9B34FB')
SENSOR = uuid.UUID('0000FFF4-0000-1000-8000-00805F9B34FB')
provider = Adafruit_BluefruitLE.get_provider()
provider.initialize()
def main():
adapter = provider.get_default_adapter()
adapter.power_on()
print('adapter:', adapter.name)
try:
print('adapter.start_scan()')
adapter.start_scan()
atexit.register(adapter.stop_scan)
known_uarts = set()
isnotFound = True
while(isnotFound):
found = set(provider.find_devices())
new = found - known_uarts
for device in new:
print('Found device: {0} [{1}]'.format(device.name, device.id))
if(device.name == DEVICE):
print('connecting...')
device.connect()
print('connected.')
isnotFound = False
adapter.stop_scan()
known_uarts.update(new)
time.sleep(0.5)
if device is None:
raise RuntimeError('Failed to find UART device!')
finally:
adapter.stop_scan()
print(device.name)
device.discover([SERVICE],[SENSOR])
service = device.find_service(SERVICE)
print('got service',SERVICE)
sensor = service.find_characteristic(SENSOR)
print('got characteristic',SENSOR)
def received(data):
dt_now = datetime.datetime.now()
print('Notify:',dt_now,' ',data.hex())
print('Time: 20',data[1],'年',data[2],'月',data[3],'日', data[4],':',data[5])
print('Temp:',(data[6]*256+data[7])/10,'℃')
print('TVOC:',(data[10]*256+data[11])/1000,'mg/㎥')
print('HCHO:',(data[12]*256+data[13])/1000,'mg/㎥')
print('CO2 :',(data[16]*256+data[17]),'ppm')
sensor.start_notify(received)
print('start notifications.')
while (True):
time.sleep(5)
provider.run_mainloop_with(main)
Trả về kết quả:
Chúc các bạn thành công!
Dịch và chỉnh nội dung: FUVITECH. Nguồn zukeran.org