Mục lục:
- Bước 1: Thiết lập Raspberry Pi
- Bước 2: Thiết lập MySQL trên Raspberry Pi
- Bước 3: Thiết lập SensorBugs
- Bước 4: Cài đặt Bluetooth LE Python Wrapper
- Bước 5: Quét và tìm ra địa chỉ của SensorBug
- Bước 6: Thêm tập lệnh Python
- Bước 7: Kiểm tra tập lệnh Python
- Bước 8: Thêm Python Scrip vào Crontab
- Bước 9: Thêm: Định cấu hình Bộ cảm biến cho Đầu ra Cảm biến Vị trí
Video: Theo dõi và ghi lại nhiệt độ với Bluetooth LE và RaspberryPi: 9 bước (có hình ảnh)
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:33
Tài liệu hướng dẫn này là về cách kết hợp một hệ thống theo dõi nhiệt độ nhiều nút với lỗi cảm biến Bluetooth LE từ Blue Radios (BLEHome) và RaspberryPi 3BT. Nhờ sự phát triển của tiêu chuẩn Bluetooth LE, hiện đã có sẵn các cảm biến không dây công suất thấp trên thị trường với chi phí rất thấp và có thể chạy trên một ô đồng xu trong nhiều tháng tại một thời điểm. Một trong những cảm biến mà tôi nhặt được là từ Blue Radio có tên là Sensor Bugs. Có giá khoảng 25 đô la trên Amazon, đây là một thiết bị Bluetooth LE với cảm biến Nhiệt độ, cảm biến ánh sáng và cảm biến đo độ ẩm, tất cả đều được xây dựng thành một thiết bị nhỏ có thể giao tiếp không dây..
Bước 1: Thiết lập Raspberry Pi
Bước đầu tiên là thiết lập Raspberry Pi đang hoạt động. Làm theo hướng dẫn từ trang web của Raspberry Pi, tải Raspbian vào thẻ SD, lắp vào Raspberry Pi và khởi động nó. múi giờ thành múi giờ hiện tại thay vì UTC. Bạn có thể thực hiện việc này thông qua lệnh: $ sudo dpkg-recfigure tzdata Kiểm tra lại hướng dẫn giả sử quá trình thiết lập được thực hiện thông qua giao diện dòng lệnh.
Bước 2: Thiết lập MySQL trên Raspberry Pi
Sẽ rất hữu ích nếu có một cơ sở dữ liệu được cài đặt cục bộ để lưu trữ tất cả các dữ liệu đã chụp. Cài đặt MySQL trên Raspberry Pi rất dễ dàng. Cũng không khó để sửa đổi script để kết nối với máy chủ SQL bên ngoài, bạn có thể bỏ qua bước này nếu muốn sử dụng máy chủ SQL trên mạng. Có rất nhiều hướng dẫn trên mạng, tôi đề xuất như sau: https:// www.stewright.me/2014/06/tutorial-install-…
Sau khi máy chủ SQL được cài đặt, bạn có thể sử dụng máy khách MySQL CLI để tạo người dùng, cơ sở dữ liệu và bảng. Để nhập MySQL CLI, hãy sử dụng lệnh:
$ sudo mysql -uroot-p Đầu tiên, tạo người dùng cục bộ để chèn dữ liệu đã chụp:> TẠO NGƯỜI DÙNG 'datasrc' @ 'localhost' ĐƯỢC XÁC ĐỊNH BẰNG 'datasrc000'; Tiếp theo, tạo cơ sở dữ liệu và bảng:> TẠO CƠ SỞ DỮ LIỆU Bộ cảm biến; Thiết lập người dùng quyền:> CẤP TẤT CẢ QUYỀN RIÊNG TƯ TRÊN SensorBug. * ĐẾN 'datasrc' @ 'localhost'; Bây giờ hãy thêm một bảng mới vào cơ sở dữ liệu. Đối với ví dụ này, tôi sẽ thêm một bảng với các cột sau: NGÀY, THỜI GIAN, ĐỊA CHỈ, VỊ TRÍ, NHIỆT ĐỘ và KHÁCH HÀNG
- DATE / TIME - Đây là ngày và giờ dữ liệu được ghi lại
- ĐỊA CHỈ - Đây là MAC của SensorBug mà tin nhắn được chụp từ
- VỊ TRÍ - Một chuỗi con người có thể đọc được để chỉ ra vị trí đặt cảm biến
- TEMPERATURE - Đây là nhiệt độ được ghi lại
- ACCELE - Đây là giá trị của đầu ra gia tốc kế, hữu ích để ghi lại vị trí cảm biến (nếu được bật)
Lệnh thực hiện việc này là:> USE SensorBug; > TẠO dữ liệu BẢNG (ngày DATE, thời gian TIME, địa chỉ TINYTEXT, vị trí TINYTEXT, nhiệt độ FLOAT, tốc độ INT); Bây giờ cơ sở dữ liệu đã sẵn sàng, chúng ta có thể chuyển sang thiết lập sensorBugs.
Bước 3: Thiết lập SensorBugs
Các lỗi cảm biến là những thiết bị nhỏ khá gọn gàng. Thật không may, nhà sản xuất chỉ cung cấp ứng dụng IOS để lập trình nó. Không bao giờ ít hơn, bạn vẫn có thể làm việc với nó nếu bạn chỉ có thiết bị Android. Bước đầu tiên, hãy ghép nối thiết bị với điện thoại. Nếu không ghép nối thiết bị, SensorBug sẽ không quảng cáo dữ liệu. Tôi đã thử xem liệu tôi có thể thực hiện việc này trực tiếp với RaspberryPi hay không, rất tiếc, có vẻ như trình điều khiển Bluetooth LE trên RaspberryPi vẫn đang thử nghiệm và có lỗi để ngăn nó ghép nối với các thiết bị Bluetooth LE. Phiên bản trình điều khiển blueZ trong tương lai có thể khắc phục điều này, nhưng theo cách viết hiện tại, không có cách nào để ghép nối SensorBug với RaspberryPi. May mắn thay, chúng tôi không cần phải ghép nối thiết bị để thu thập dữ liệu được quảng cáo của nó. Thứ duy nhất chúng ta cần là một chiếc điện thoại để cấu hình SensorBug. Theo mặc định, SensorBug sẽ bắt đầu quảng cáo dữ liệu nhiệt độ ở khoảng thời gian 1 giây sau khi nó được ghép nối với một thiết bị. Để nắm bắt dữ liệu nhiệt độ, đó là tất cả những gì cần thiết. Nếu bạn định mở rộng để sử dụng vị trí hoặc cảm biến ánh sáng, thiết bị sẽ cần thiết hơn cấu hình. Đối với người mới bắt đầu, chúng tôi sẽ ghép nối thiết bị và ngắt kết nối. Điều này sẽ đủ tốt cho mục đích chụp nhiệt độ. Bắt đầu bằng cách nhấn cả hai nút trên SensorBug. Đèn LED màu xanh lam / xanh lục sẽ nhấp nháy cho biết nó đã được bật nguồn. Nhấn một trong các nút, đèn LED màu xanh lá cây sẽ sáng lên, cho biết nguồn đã được bật. Nếu đèn LED màu xanh lục không sáng, hãy nhấn cả hai nút để thử bật lại thiết bị. Nhấn và giữ một trong các nút cho đến khi đèn LED màu xanh lam bắt đầu nhấp nháy. Thao tác này sẽ đưa thiết bị vào chế độ ghép nối. Hãy vào menu cấu hình Bluetooth trên điện thoại và tìm thiết bị SensorBug. Sau khi nó hiển thị, hãy chọn nó để ghép nối với thiết bị. Vậy là xong, SensorBug đã được cấp nguồn và quảng cáo dữ liệu nhiệt độ
Bước 4: Cài đặt Bluetooth LE Python Wrapper
Tiếp theo, chúng ta cần cài đặt thư viện cho python để nói chuyện với ngăn xếp Bluetooth LE. Bạn có thể tìm thấy hướng dẫn tại đây: https://github.com/IanHarvey/bluepy Đối với Python 2.7, chỉ cần nhập các lệnh sau:
$ sudo apt-get install python-pip libglib2.0-dev $ sudo pip install bluepy
Bước 5: Quét và tìm ra địa chỉ của SensorBug
Để tìm ra địa chỉ MAC của SensorBug, hãy sử dụng lệnh này: $ sudo hcitool lescan Bạn sẽ thấy đầu ra như:
EC: FE: 7E: 10: B1: 92 (không xác định) Nếu xung quanh bạn có nhiều thiết bị bluetooth LE, có thể khó tìm ra thiết bị bạn đang nói chuyện với. Bạn có thể thử bluetoothctl để biết thêm chi tiết:
$ sudo bluetoothctl [bluetooth] # quét trên [MỚI] Thiết bị EC: FE: 7E: 10: B1: 92 Cảm biếnBug10B192 [CHG] Thiết bị EC: FE: 7E: 10: B1: 92 Nhà sản xuất Khóa dữ liệu: 0x0085 [CHG] Thiết bị EC: FE: 7E: 10: B1: 92 Nhà sản xuất Giá trị dữ liệu: 0x02 [CHG] Thiết bị EC: FE: 7E: 10: B1: 92 Nhà sản xuất Giá trị dữ liệu: 0x00 [CHG] Thiết bị EC: FE: 7E: 10: B1: 92 Nhà sản xuất Giá trị dữ liệu: 0x3c [CHG] Thiết bị EC: FE: 7E: 10: B1: 92 Nhà sản xuất Giá trị dữ liệu: 0x25 [CHG] Thiết bị EC: FE: 7E: 10: B1: 92 Nhà sản xuất Giá trị dữ liệu: 0x09 [CHG] Thiết bị EC: FE: 7E: 10: B1: 92 Nhà sản xuất Giá trị dữ liệu: 0x41 [CHG] Thiết bị EC: FE: 7E: 10: B1: 92 Nhà sản xuất Giá trị dữ liệu: 0x02 [CHG] Thiết bị EC: FE: 7E: 10: B1: 92 Nhà sản xuất Giá trị dữ liệu: 0x02 [CHG] Thiết bị EC: FE: 7E: 10: B1: 92 Nhà sản xuất Giá trị dữ liệu: 0x43 [CHG] Thiết bị EC: FE: 7E: 10: B1: 92 Nhà sản xuất Giá trị dữ liệu: 0x0b [CHG] Thiết bị EC: FE: 7E: 10: B1: 92 Nhà sản xuất Dữ liệu Giá trị: 0x01 [CHG] Thiết bị EC: FE: 7E: 10: B1: 92 Nhà sản xuất Giá trị dữ liệu: 0x6f
Ghi lại địa chỉ MAC, địa chỉ này sẽ cần được nhập vào tập lệnh python để lọc ra các thiết bị Bluetooth LE không mong muốn
Bước 6: Thêm tập lệnh Python
Một bản sao của tập lệnh Python có sẵn từ:
drive.google.com/open?id=10vOeEAbS7mi_eXn_…
Đây là cùng một tệp, hãy chú ý đến phần thụt lề khi sao chép:
Ngoài ra, hãy cập nhật địa chỉ MAC trong tệp python để khớp với địa chỉ cảm biến thu được từ kết quả quét.
# Chương trình này là phần mềm miễn phí: bạn có thể phân phối lại nó và / hoặc sửa đổi
# nó theo các điều khoản của Giấy phép Công cộng GNU như được xuất bản bởi
# Tổ chức Phần mềm Miễn phí, phiên bản 3 của Giấy phép, hoặc
# (theo tùy chọn của bạn) bất kỳ phiên bản nào mới hơn.
#
# Chương trình này được phân phối với hy vọng rằng nó sẽ hữu ích, # nhưng KHÔNG CÓ BẤT KỲ BẢO HÀNH NÀO; mà không có bảo hành ngụ ý
# KHẢ NĂNG HOẶC PHÙ HỢP VỚI MỤC ĐÍCH CỤ THỂ. Xem
# Giấy phép Công cộng GNU để biết thêm chi tiết.
#
# Bạn nên nhận được một bản sao của Giấy phép Công cộng GNU
# cùng với chương trình này. Nếu không, hãy xem.
# bscan.py - Máy quét và trích xuất dữ liệu bluetooth LE đơn giản
từ bluepy.btle import Scanner, DefaultDelegate
thời gian nhập khẩu
nhập pymysql
nhập cấu trúc
hostname = 'localhost'
tên người dùng = 'datasrc'
password = 'datasrc000'
database = 'SensorBug'
# Nhập địa chỉ MAC của cảm biến từ máy quét
SENSOR_ADDRESS = ["ec: fe: 7e: 10: b9: 92", "ec: fe: 7e: 10: b9: 93"]
SENSOR_LOCATION = ["Nhà để xe", "Ngoại thất"]
lớp DecodeErrorException (Ngoại lệ):
def _init _ (self, value):
self.value = giá trị
def _str _ (bản thân):
trả về repr (self.value)
lớp ScanDelegate (DefaultDelegate):
def _init _ (bản thân):
DefaultDelegate._ init _ (self)
def handleDiscovery (self, dev, isNewDev, isNewData):
nếu isNewDev:
print "Thiết bị đã phát hiện", dev.addr
elif isNewData:
print "Đã nhận dữ liệu mới từ", dev.addr
def doQueryInsert (conn, addr, loc, temp, accero):
Bảng #blesensor là ngày, giờ, addr, vị trí, tạm thời, accero
cur = conn.cursor ()
dostr = 'CHÈN VÀO GIÁ TRỊ dữ liệu (CURRENT_DATE (), NOW (),% s,% s,% s,% s);'
cur.execute (dostr, (addr, loc, temp, accero))
conn.commit ()
máy quét = Máy quét (). withDelegate (ScanDelegate ())
myConnection = pymysql.connect (máy chủ = tên máy chủ, người dùng = tên người dùng, passwd = mật khẩu, db = cơ sở dữ liệu)
ManuDataHex =
ReadLoop = True
cố gắng:
trong khi (ReadLoop):
thiết bị = scanner.scan (2.0)
ManuData = ""
dành cho nhà phát triển trong các thiết bị:
entry = 0
AcceroData = 0
AcceroType = 0
TempData = 0
cho saddr trong SENSOR_ADDRESS:
mục nhập + = 1
if (dev.addr == saddr):
in "Thiết bị% s (% s), RSSI =% d dB"% (dev.addr, dev.addrType, dev.rssi)
CurrentDevAddr = saddr
CurrentDevLoc = SENSOR_LOCATION [entry-1]
for (adtype, desc, value) trong dev.getScanData ():
in "% s =% s"% (desc, value)
if (desc == "Nhà sản xuất"):
ManuData = giá trị
if (ManuData == ""):
in "Không nhận được dữ liệu, kết thúc giải mã"
tiếp tục
#print ManuData
cho i, j trong zip (ManuData [:: 2], ManuData [1:: 2]):
ManuDataHex.append (int (i + j, 16))
# Bắt đầu giải mã dữ liệu thô của Nhà sản xuất
if ((ManuDataHex [0] == 0x85) và (ManuDataHex [1] == 0x00)):
print "Đã tìm thấy byte tiêu đề 0x0085"
khác:
in "Không tìm thấy byte tiêu đề 0x0085, dừng giải mã"
tiếp tục
#Skip Major / Minor
#Index 5 là 0x3c, cho biết mức pin và # cấu hình
if (ManuDataHex [4] == 0x3c):
BatteryLevel = ManuDataHex [5]
ConfigCounter = ManuDataHex [6]
idx = 7
#print "TotalLen:" + str (len (ManuDataHex))
while (idx <len (ManuDataHex)):
#print "Idx:" + str (idx)
#print "Dữ liệu:" + hex (ManuDataHex [idx])
if (ManuDataHex [idx] == 0x41):
# Dữ liệu đại kế
idx + = 1
AcceleroType = ManuDataHex [idx]
AcceleroData = ManuDataHex [idx + 1]
idx + = 2
elif (ManuDataHex [idx] == 0x43):
# Dữ liệu nhiệt độ
idx + = 1
TempData = ManuDataHex [idx]
TempData + = ManuDataHex [idx + 1] * 0x100
TempData = TempData * 0,0625
idx + = 2
khác:
idx + = 1
print "Địa chỉ thiết bị:" + CurrentDevAddr
print "Vị trí thiết bị:" + CurrentDevLoc
in "Mức pin:" + str (BatteryLevel) + "%"
print "Bộ đếm cấu hình:" + str (Bộ đếm cấu hình)
in "Accelero Data:" + hex (AcceleroType) + "" + hex (AcceleroData)
print "Temp Data:" + str (TempData)
doQueryInsert (myConnection, CurrentDevAddr, CurrentDevLoc, TempData, AcceleroData)
ReadLoop = Sai
ngoại trừ DecodeErrorException:
đi qua
Bước 7: Kiểm tra tập lệnh Python
Tập lệnh phải được chạy trong root, vì vậy:
$ sudo python bscan.pyThiết bị đã phát hiện ec: 6e: 7e: 10: b1: 92 Thiết bị ec: 6e: 7e: 10: b1: 92 (công khai), RSSI = -80 dB Cờ = 06 Dịch vụ 16b chưa hoàn chỉnh = 0a18 Nhà sản xuất = 850002003c25094102024309016f Đã tìm thấy byte tiêu đề 0x0085 Địa chỉ thiết bị: ec: 6e: 7e: 10: b1: 92 Vị trí thiết bị: Nhà để xe Mức pin: 37% Bộ đếm cấu hình: 9 Dữ liệu Accero: 0x2 0x2 Dữ liệu nhiệt độ: 16.5625
Bước 8: Thêm Python Scrip vào Crontab
Tập lệnh python phải được chạy trong root, vì vậy nếu bạn muốn thu thập dữ liệu tự động, nó sẽ cần phải được thêm vào crontab của root. Đối với ví dụ này, tôi chạy tập lệnh 20 phút một lần. Sử dụng lệnh:
$ sudo crontab -e
# Chỉnh sửa tệp này để giới thiệu các tác vụ sẽ được chạy bởi cron.
# # Mỗi tác vụ cần chạy phải được xác định thông qua một dòng duy nhất # cho biết các trường khác nhau khi nào tác vụ sẽ được chạy # và lệnh nào sẽ chạy cho tác vụ # # Để xác định thời gian, bạn có thể cung cấp các giá trị cụ thể cho # phút (m), giờ (h), ngày trong tháng (dom), tháng (thứ), # và ngày trong tuần (giảm) hoặc sử dụng '*' trong các trường này (đối với 'bất kỳ'). # # Lưu ý rằng các tác vụ sẽ được bắt đầu dựa trên khái niệm thời gian và múi giờ của hệ thống cron # daemon. # # Đầu ra của các công việc crontab (bao gồm cả lỗi) được gửi qua email # tới người dùng có tệp crontab thuộc về (trừ khi được chuyển hướng). # # Ví dụ: bạn có thể chạy bản sao lưu tất cả các tài khoản người dùng của mình # lúc 5 giờ sáng hàng tuần với: # 0 5 * * 1 tar -zcf /var/backups/home.tgz / home / # # Để biết thêm thông tin, hãy xem các trang thủ công của crontab (5) và cron (8) # # mh dom mon dow command 0 * * * * python /home/pi/bscan.py 20 * * * * python /home/pi/bscan.py 40 * * * * python /home/pi/bscan.py
Đó là nó. Tập lệnh python sẽ được chạy trong khoảng thời gian đều đặn và mã hóa lại đầu ra vào cơ sở dữ liệu SQL
Bước 9: Thêm: Định cấu hình Bộ cảm biến cho Đầu ra Cảm biến Vị trí
Có thể định cấu hình SensorBug trên Android cho đầu ra cảm biến vị trí Đối với cảm biến thay đổi vị trí, được gọi là cửa nhà để xe. Cảm biến, SensorBug sẽ phát hiện xem thiết bị đang đứng thẳng hay đặt xuống. Khi thiết bị bằng phẳng, giá trị được ghi là 0x20 trong khi nếu thiết bị đang đứng thẳng, giá trị là 0x02 Không phân biệt vị trí X hay Y ở trên, miễn là trục Z không lên hay xuống. Cách dễ nhất để làm điều này là sử dụng Ứng dụng LightBlue. SensorBug sẽ hiển thị trong menu quét. Chọn thiết bị bạn muốn định cấu hình, đi tới đặc điểm GATT cho cấu hình Gia tốc kế UUID: 9DC84838-7619-4F09-A1CE-DDCF63225B11
Xem hình ảnh: Viết một chuỗi cấu hình mới:
010d3f02020000002d00000002 Đọc lại chuỗi cấu hình để xác nhận việc ghi. Điều này cho phép gia tốc kế phát hiện vị trí.
Đề xuất:
Theo dõi & theo dõi các cửa hàng nhỏ: 9 bước (có hình ảnh)
Theo dõi & theo dõi cho các cửa hàng nhỏ: Đây là một hệ thống dành cho các cửa hàng nhỏ được cho là gắn vào xe đạp điện hoặc xe tay ga điện tử để giao hàng trong phạm vi ngắn, ví dụ như một tiệm bánh muốn giao bánh ngọt. Theo dõi và theo dõi nghĩa là gì? Theo dõi và theo dõi là một hệ thống được sử dụng bởi ca
Bộ dụng cụ theo dõi xe ô tô tự làm bằng rô bốt thông minh Theo dõi ô tô cảm quang: 7 bước
Tự làm bộ dụng cụ theo dõi rô bốt thông minh theo dõi ô tô Theo dõi ô tô cảm quang: Thiết kế bởi SINONING ROBOT Bạn có thể mua từ rô bốt theo dõi ô tô ChipLM393 so sánh hai điện trở quang, khi có một đèn LED cảm quang một bên TRẮNG thì bên của động cơ sẽ dừng ngay lập tức, bên kia của động cơ quay lên, để
Theo dõi thời tiết M5Stack M5stick C dựa trên ESP32 với DHT11 - Theo dõi nhiệt độ độ ẩm & chỉ số nhiệt trên M5stick-C với DHT11: 6 bước
Theo dõi thời tiết M5Stack M5stick C dựa trên ESP32 với DHT11 | Theo dõi nhiệt độ độ ẩm và chỉ số nhiệt trên M5stick-C Với DHT11: Xin chào các bạn, trong phần hướng dẫn này, chúng ta sẽ học cách giao tiếp cảm biến nhiệt độ DHT11 với m5stick-C (một bảng phát triển của m5stack) và hiển thị nó trên màn hình của m5stick-C. Vì vậy, trong hướng dẫn này, chúng ta sẽ đọc nhiệt độ, độ ẩm & nhiệt tôi
Nhiệt kế nấu ăn đầu dò nhiệt độ ESP32 NTP với cảnh báo nhiệt độ và hiệu chỉnh Steinhart-Hart.: 7 bước (có hình ảnh)
Nhiệt kế nấu ăn đầu dò nhiệt độ ESP32 NTP với cảnh báo nhiệt độ và hiệu chỉnh Steinhart-Hart. là một chương trình Có thể hướng dẫn cho thấy cách tôi thêm đầu dò nhiệt độ NTP, piezo b
Ghi lại tín hiệu điện sinh học: Điện tâm đồ và theo dõi nhịp tim: 7 bước
Ghi tín hiệu điện sinh học: Máy đo điện tâm đồ và nhịp tim: LƯU Ý: Đây không phải là thiết bị y tế. Điều này chỉ dành cho mục đích giáo dục bằng cách sử dụng các tín hiệu mô phỏng. Nếu sử dụng mạch này cho các phép đo điện tâm đồ thực, hãy đảm bảo mạch và các kết nối giữa mạch với thiết bị đang sử dụng cách ly thích hợp