我之前对嵌入式、开发板的使用没太接触过。这篇文章记录我用esp32开发板制作钉钉打卡神器的过程,如果能对其他人有一点点小帮助那就更好啦。
关于打卡环境(打卡方式)。我们实验室门口墙上有一个考勤机,考勤机具有扫脸功能,可以通过扫脸进行打卡。同时,考勤机里面配有蓝牙模块,可以打开钉钉APP,在距离打卡机约5m之内的距离处就可以感应(连接)到考勤机的蓝牙信号,然后从钉钉里扫脸打卡。
在esp32制作的过程中发现,其实钉钉打卡并不会验证考勤机蓝牙的MAC地址,手机只要收到考勤机发出的蓝牙广播信息就可以连接到考勤机。基于这一点,我们只需要将esp32开发板启动蓝牙模块 并且广播和考勤机相同的蓝牙数据就可以了(要提前通过nRF Connect APP获得考勤机广播的蓝牙数据,后续介绍),即使开发板蓝牙的MAC地址和考勤机蓝牙的MAC地址不相同也不影响。
其实整个过程很简单,但对于我这种没接触过开发板的来说,确实需要踩踩坑走走弯路。如果打卡环境(打卡方式)和我一样或类似的话,那么可以按下面的步骤同我一起用esp32制作一个打卡神器,做好后即使身处国外也能让手机连接实验室的蓝牙考勤机。
需要的准备
以下是我所用到的所有软硬件工具:
1. YD-ESP32-C3-C(如图)
2. MicroPython固件
下载地址:MicroPython - Python for microcontrollers
下拉找到对应自己的开发板,比如我是ESP32-C3-C,那我就找ESP32-C3然后点进去。我一开始下载的ESP32的固件,所以踩坑踩了好长时间才出来。点进去之后,我的下载地址就对应为:MicroPython - Python for microcontrollers。下拉选择最新版本的即可。
3. 固件烧录工具
下载地址:工具 | 乐鑫科技
使用的是乐鑫的烧录工具,直接点击下载即可。
下载后解压,无需安装,后面用到的时候直接打开这个exe文件即可。
4. MicroPython IDE
下载地址:https://randomnerdtutorials.com/uPyCraftWindows
下载下来就是uPyCraft_V1.1.exe可执行文件,无需安装,打开即可使用。
5. USB转串口驱动(无此驱动的需要安装)
如何确定是否需要安装:将esp32C3开发板用数据线(TypeC手机充电线即可)连接到电脑上,注意,ESP32-C3-C开发板有一个USB口和一个COM口,将手机充电线的TypeC端插到COM口中、USB端插到电脑USB接口,后续所有过程均将TypeC端插入esp32的COM口中。打开电脑中的设备管理器,看一下是否多了一个端口(可以反复插拔数据线进行确认),多的这个端口有没有写CH340K以及COM几(如下图所示),如果多的这个端口没这几个字眼,那就是esp32无法找到com口(无驱动),即需要进行安装串口驱动。
不需安装或已经安装好了的话,记住这个COM口是几,比如我要记下来COM5,后面需要用到。接下来介绍安装过程。
下载地址:CP210x USB to UART Bridge VCP Drivers - Silicon Labs
选择CP210x Windows Drivers with Serial Enumerator进行下载。
下载后解压,双击CP210xVCPInstaller_x64.exe进行安装即可。
此时连接esp32,设备管理器中会出现COM口,记住这个COM口。
6. nRF Connect手机APP
下载地址:nRF Connect
用手机打开该网址,下载并安装即可。
ESP32C3开发板制作蓝牙过程
1. MicroPython固件烧录
首先打开乐鑫的烧录工具(flash_download_tool_3.9.4.exe),Chip Type选择自己的开发板(这里我选择ESP32-C3),WorkMode选择Develop,LodeMode选择UART。点击OK进入。
如下图所示,点击框右侧三个点,在最上面的框中选择下载好的MicroPython固件(.bin),然后要将左侧的对勾√打上。接下来要填的参数必须正确,否则后续会出现错误。
回到之前下载MicroPython固件的网页(这里我是MicroPython - Python for microcontrollers),找到Installation instructions,如下图,看一下Installation instructions中的参数,比如我这里显示 --baud 460800,那么在上图中右下角的BAUD:中就选择460800;我这里显示 write_flash -z 0x0,那么在上图中@符号右侧就填入0x0。之前在设备管理器中还看到了COM口,设备管理器中显示COMx就在上图右下角COM的位置选择COMx。
参数选择好后点击ERASE先进行擦除,等待显示完成后再点击START开始烧录,再次等待显示完成。完成后可以关闭该烧录工具。
2. 打开MicroPython IDE
打开MicroPython IDE(uPyCraft_V1.1.exe),打开后点击OK下载所需的字体。
在顶部导航栏中点击Tools->Serial,然后选择对应的COM口,如下图,我这里要选择COM5。
若连接成功,则下方会显示>>>,如下图所示。若此时弹出Burn Firmware对话框或者出现其他错误(诸如open serial error, please try again. hope to connect internet and try again.),给两种可能的解决方法,一是查看之前下载的MicroPython固件与自己的开发板是否对应,二是烧录过程所选择的参数是否正确!
连接成功后,点击顶部导航栏中的File->New,然后写入下面的代码。这段代码很简单,首先创建一个蓝牙类,通过activate激活蓝牙,然后用gap_advertise()广播数据,100表示每100ms广播一次,adv_data就是要广播的十六进制数据。因此,只要把考勤机的广播数据raw data复制过来替换掉这里的adv_data即可。
from ubluetooth import BLE
ble = BLE()
ble.active(True)
ble.gap_advertise(100, adv_data = b'\x02\x01\x1A\x17\xFF\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x10\x00\x00\x00\x03\x03\x33\x33')
Ctrl+S保存该代码,然后按下右侧第四个按钮(DownloadAndRun),若控制台出现下图所示内容,则代表运行成功,esp32开发板正在以每100ms的速度广播指定的adv_data数据。
接下来是获取考勤机的广播数据raw data的方式。
3. 获取考勤机蓝牙的广播数据
用手机打开下载好的nRF Connect APP,手机我记得必须安卓手机才可以看到一些信息,苹果手机不行。按一下右上角扫描(SCAN)按钮,在显示出来的这么多蓝牙设备中选择自己的目标蓝牙。对于钉钉蓝牙,展开蓝牙的详细信息,对应的Company应该是Tom Tom,如下图所示,MAC地址为18:xx:xx:xx:xx:33的是我的目标考勤机的蓝牙。
找到我们的目标蓝牙后,点击右下角的RAW,出现如下图所示的对话框,此时我们可以看到完整的raw data数据,只需点一下raw data框右侧的复制按钮即可。
接下来,把复制下来的raw data数据替换掉前面代码部分的adv_data重新点击DownloadAndRun即可。如果在替换adv_data之前已经点过了DownloadAndRun,那么在nRF Connect中可以找到esp32开发板所发出的蓝牙广播数据,如下图所示,raw data即为前面代码中的adv_data。我们也可以借此知道开发板对应的MAC地址。
重新点击DownloadAndRun后,开发板将以自己的MAC地址广播我们设置的adv_data数据,可以在nRF Connect中重新点击右上角的扫描(SCAN),然后找到开发板广播的数据,看一下raw data是不是对应我们设置的adv_data。
由于钉钉蓝牙在打卡时不检测MAC地址是否匹配,只要接收正确的raw data就可以进行打卡。因此,现在打开钉钉APP,进入打卡界面,就已经显示成功连接考勤机了!
现在还剩下最后一步,我们通过upycraft把程序下载到esp32后可以让esp32广播蓝牙数据,但将esp32开发板断电后,再重新接入电源,程序不会自动运行,也就是说想要esp32继续广播数据,需要重新DownloadAndRun。这时候只需要在左侧菜单中,展开device文件夹,在对应的.py文件上右键,然后点击Default Run即可,如下图所示。点击后,对应的.py文件就会变成红色。
将esp32断电重启,程序即可自动运行。
然后就可以把所有软件全部关闭啦,此时一个esp32蓝牙开发板就制作完成啦,如果为了打卡方便,我们可以买一个typeC公口转公口的转接头,如下图所示,其中一头插入esp32,另一头插入手机为其供电,我们就可以方便地随时随地打卡啦!
整个过程实现起来没有特别难,但对于小白的话可能还是比较费劲的,有些地方需要摸索摸索,这篇文章记录我的esp32开发板制作蓝牙打卡工具的过程,希望对看到的伙伴有一点点小小的帮助,如需引用或转发,请注明出处,谢谢!
麻烦点个赞吧~!!!