Home » linux » 基于树莓派的蓝牙打卡系统 linux嵌入式 ble

基于树莓派的蓝牙打卡系统 linux嵌入式 ble

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/zbgjhy88/article/details/88051609

写了一个基于树莓派的蓝牙打卡系统,用于记录和监督自己的工作时长情况。
代码:Github:树莓派蓝牙打卡系统

简明指南

Clone the repository


cd ~
git clone https://github.com/forskamse/RaspberryPi-Bluetooth-Punch-System.git
  • 1
  • 2
Install dependencies and python packages



sudo apt-get install pkg-config libboost-python-dev libboost-thread-dev libbluetooth-dev libglib2.0-dev python-dev sendemail libnet-ssleay-perl libio-socket-ssl-perl
pip3 install matplotlib pandas pybluez pybluez[ble] 
  • 1
  • 2
Self device MAC address setting

Replace bluetooth-punch.py – L11 (if you use common device) or bluetooth-punch.py – L12 (if you use BLE device) with your device MAC address

Self email setting

replace auto-plot-and-send-working-hours.sh – L5 with your own receiver_email_address, sender_email_smtp_server_address, sender_email_address, and sender_email_password

Set boot from power on



sudo nano /etc/rc.local
Add the following command to /etc/rc.local before "exit 0"
/bin/bash ~/RaspberryPi-Bluetooth-Punch-System/auto-bluetooth-punch.sh
  • 1
  • 2
  • 3
Set crontab



crontab -e
# Add the following command to crontab file
30 8 * * * ~/RaspberryPi-Bluetooth-Punch-System/auto-plot-and-send-working-hours.sh
  • 1
  • 2
  • 3

简单分析

蓝牙扫描

在树莓派上调用python的相应模块(python与python[ble] )可以扫描树莓派周围的蓝牙设备。但是需要注意pybluez无法扫描Bluetooth Low Energy设备(所以可能你只能搜到手机、电脑等设备),所以需要pybluez[ble] 模块;而且pybluez不需要sudo权限,但pybluez[ble] 需要sudo权限执行扫描。
蓝牙低功耗设备











# 安装依赖
sudo apt-get install pkg-config libboost-python-dev libboost-thread-dev libbluetooth-dev libglib2.0-dev python-dev
# 如果打算使用手机蓝牙作为签到标识,则安装pybluez
pip3 install pybluez
# 如果打算使用BLE设备作为签到标识,则安装pybluez[ble] 
/gattlib
pip3 install gattlib 或者 pip3 install pybluez[ble] 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

报错
/usr/bin/ld: cannot find -lboost_python-py34
collect2: error: ld returned 1 exit status
error: command ‘arm-linux-gnueabihf-g++’ failed with exit status 1
这是因为安装的依赖libboost-thread-dev与gattlib(注意,安装pybluez[ble] 实际下载的是gattlib的源码)的setup.py中的配置不符(这里面是py34,但是树莓派上安装的是python3.5)
解决
pip3 download gattlib
tar xvzf ./gattlib-0.20150805.tar.gz
cd gattlib-0.20150805/
sed -ie ‘s/boost_python-py34/boost_python-py35/’ setup.py
pip3 install .

打卡、异常控制、短时离开控制

目标蓝牙设备被树莓派检测到即可打卡成功,不需要手动操作。
首次执行程序,读取csv文件验证打卡状态,以避免因树莓派短时故障而记录下不正常的工作时间图。
短时(预设10分钟)离开,不会被记录为工作状态改变。

绘制工作时间图

用pd来读取csv文件,转化为dataframe,经查询后用matplotlib绘制工作时间图。默认绘制当月工作时间图。



# 安装相关的库
pip3 install matplotlib pandas
  • 1
  • 2

发送邮件

使用sendemail发送邮件。





# 安装sendemail及依赖
sudo apt-get install sendemail
sudo apt-get install libnet-ssleay-perl
sudo apt-get install libio-socket-ssl-perl
  • 1
  • 2
  • 3
  • 4

启动控制

  1. 开机自启蓝牙打卡程序
  • /etc/rc.local



sudo nano /etc/rc.local
# 在exit 0之前添加
/bin/bash ~/RaspberryPi-Bluetooth-Punch-System/auto-bluetooth-punch.sh
  • 1
  • 2
  • 3
  1. 每天8:30发送前一天Working Hours图片每天8:30发送前一天Working Hours图片
  • crontab


crontab -e
# 添加
30 8 * * * ~/RaspberryPi-Bluetooth-Punch-System/auto-plot-and-send-working-hours.sh