『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 1235|回复: 16

[新奇玩法] 用esp32开发板来实现蓝牙接近开关功能,手机蓝牙定位

[复制链接]

8

主题

73

帖子

586

积分

高级会员

Rank: 4

积分
586
金钱
513
HASS币
0
发表于 2024-2-13 13:53:19 | 显示全部楼层 |阅读模式
本帖最后由 syhzjnbxs 于 2024-2-22 09:05 编辑

今天用苹果手机测试了一下,发现苹果手机先验证,再连接,和安卓手机不一样,代码已经优化(压缩包已经更新),苹果手机也能正常连接使用了。

用esp32开发板来实现蓝牙接近开关功能,手机蓝牙定位等,可同时连接3台手机,蓝牙配对手机绑定,理论上支持15台不同的手机

这是homeassistant中mqtt自动发现的实体

这是homeassistant中mqtt自动发现的实体

这是手机和esp32蓝牙配对后的连接

这是手机和esp32蓝牙配对后的连接

esp32-cs.rar (944.46 KB, 下载次数: 26)

压缩包里有三个文件,固件esp32-cs.ino.bin,引导文件esp32-cs.ino.bootloader.bin,分区表文件esp32-cs.ino.partitions.bin
用esptool将三个文件分别刷入esp32开发板,已实现的esp32开发板型号是DOIT ESP32 DEKIT,理论上esp32芯片的设备都可以刷入,esp32 s3、c3等支持ble5的芯片可能不兼容,手头没有这样的板子,没办法确认



esptool输入三个文件的命令如下:
刷分区表
esptool.py --chip esp32 --port COM3 --baud 921600 write_flash 0x8000 esp32-cs.ino.partitions.bin
刷bootloader
esptool.py --chip esp32 --port COM3 --baud 921600 write_flash 0x1000 esp32-cs.ino.bootloader.bin
刷固件
esptool.py --chip esp32 --port COM3 --baud 921600 write_flash 0x10000 esp32-cs.ino.bin
这里把COM3换成自己对应的串口,新开发板或者串口不能刷入的,esp32开发板上按下boot键(这个应该都会吧)

刷完后,最好拔掉电源重新上电,前10秒左右会读取EEPROM中保存的信息用来连接wifi,10秒钟过了以后,没有连上wifi,自动创建名称是esp32-cs的热点,这里设置了20秒的连接时间,务必在这20秒钟里面用手机或者电脑连接这个wifi热点,否则20秒钟过后,将取消这个wifi热点,接下来会一直重试连接EEPROM中保存的wifi。如果超时或者没有连上,可以反复插拔电源重试
连上esp32-cs的热点后,网页打开192.168.1.1

这是配置信息的登录界面,用户名和密码都是admin

这是配置信息的登录界面,用户名和密码都是admin

用户名和密码都是admin
登录后的配置页面如下

这里填写配置信息,保存后重启

这里填写配置信息,保存后重启

这里填写你实际的wifi信息,homeassistant中的mqtt信息,BLE Pin中填写的是手机和esp32蓝牙初次配对时要用的配对码,6位数字,自己随意设定,比如123456。确认无误后,点save保存并确认,点击restart后确认,esp32开发板会重启。
如果配置信息都正确的话,homeassistant中的mqtt设备应该会出现名称是esp32-cs的设备,设备里的实体和上面的图片一样(这里已经接入了dht11在针脚13上,开关信号的光感元件在针脚19上,开关信号的红外传感器在针脚18上,如有需要可以接上对应针脚,能直接使用)
这时,手机蓝牙应该能搜索到名称是esp32-cs的蓝牙设备,点击连接,用上面设置的6位数字配对码就能连接上,比如123456,手机连接后homeassistant中的rssi_value0实体就会每秒更新手机蓝牙的信号强度,接下来要怎么利用这个就看你们自己的了,比如信号值达到要求,自动开门,开灯,或者根据信号值,判断人体位置等


这里说明一下,之前想买网上那种蓝牙模块,有蓝牙接近开关功能的那种,所以才有了用esp32来直接实现这个功能的想法,目前这个固件可以同时连接3台手机,判断3台手机的信号强度,那种蓝牙模块我看到过的只支持一台手机连接,
而且我测试过一台手机连接两个esp32开发板,这样就可以实现室内蓝牙定位了,后续有什么新的功能或者想法,也会继续更新这个固件,固件可以OTA升级,配置信息页面的选择文件和update就是用来OTA升级的,可以直接选择esp32-cs.ino.bin文件,点击update更新固件


回复

使用道具 举报

3

主题

62

帖子

333

积分

中级会员

Rank: 3Rank: 3

积分
333
金钱
271
HASS币
0
发表于 2024-2-13 14:22:41 来自手机 | 显示全部楼层
不想刷固件,只想要代码
回复

使用道具 举报

17

主题

420

帖子

1891

积分

金牌会员

Rank: 6Rank: 6

积分
1891
金钱
1471
HASS币
0
发表于 2024-2-13 17:34:42 | 显示全部楼层
我之前折腾esphome的蓝牙接近
接近开启倒是反应快
离开关闭都要延迟8分钟
回复

使用道具 举报

8

主题

73

帖子

586

积分

高级会员

Rank: 4

积分
586
金钱
513
HASS币
0
 楼主| 发表于 2024-2-13 20:51:23 | 显示全部楼层
kjjuhfv 发表于 2024-2-13 17:34
我之前折腾esphome的蓝牙接近
接近开启倒是反应快
离开关闭都要延迟8分钟

这个和esphome的不一样的,这个是手机和esp32蓝牙配对连接的,超过距离就断开,距离远的话,信号值也变低,每秒读取连接的rssi值得,有空的esp32开发板,你可以刷了试试,绝对好用
回复

使用道具 举报

5

主题

227

帖子

2685

积分

金牌会员

Rank: 6Rank: 6

积分
2685
金钱
2458
HASS币
0
发表于 2024-2-14 10:59:47 | 显示全部楼层
刷机软件去哪里下载呢?
回复

使用道具 举报

8

主题

73

帖子

586

积分

高级会员

Rank: 4

积分
586
金钱
513
HASS币
0
 楼主| 发表于 2024-2-14 20:40:02 | 显示全部楼层
ilongjiang 发表于 2024-2-14 10:59
刷机软件去哪里下载呢?

要安装Python和esptool,你可以按照以下步骤进行操作:

1. 安装Python
首先,你需要安装Python。你可以从Python的官方网站(https://www.python.org/downloads/)下载适合你操作系统的Python版本。安装过程相对简单,只需按照安装程序的指示进行操作即可。

2. 安装pip(如果尚未安装)
pip是Python的包管理器,用于安装和管理Python包。在较新版本的Python中,pip通常已经预安装。如果没有安装,你可以从Python的官方网站下载get-pip.py脚本,然后在命令行中运行以下命令来安装pip:

bash
python get-pip.py
3. 使用pip安装esptool
一旦你安装了Python和pip,你就可以使用pip来安装esptool。在命令行中运行以下命令:

bash
pip install esptool
这将从Python软件包索引(PyPI)下载并安装esptool。

注意事项:
确保你的Python和pip版本是最新的,或者至少是兼容的。
如果你的系统同时安装了Python 2和Python 3,你可能需要使用pip3来代替pip,并使用python3来代替python。
在某些情况下,你可能需要管理员权限来安装Python包。如果遇到权限问题,你可以尝试在命令前加上sudo(Linux/macOS)或以管理员身份运行命令提示符(Windows)。
完成上述步骤后,esptool应该已经成功安装在你的系统上。你可以通过在命令行中运行esptool.py --version来验证其是否已正确安装并查看其版本信息。

bash
esptool.py --version
如果一切正常,这将显示esptool的版本号。现在你可以使用esptool来与ESP8266和ESP32芯片进行通信了。
回复

使用道具 举报

19

主题

598

帖子

4051

积分

版主

Rank: 7Rank: 7Rank: 7

积分
4051
金钱
3438
HASS币
40
发表于 2024-2-15 10:23:18 来自手机 | 显示全部楼层
比如说在 120 平米,3 室的房间,需要几个 esp32 做蓝牙定位?以及每个的有效距离是多少?
回复

使用道具 举报

5

主题

227

帖子

2685

积分

金牌会员

Rank: 6Rank: 6

积分
2685
金钱
2458
HASS币
0
发表于 2024-2-15 20:55:03 | 显示全部楼层
syhzjnbxs 发表于 2024-2-14 20:40
要安装Python和esptool,你可以按照以下步骤进行操作:

1. 安装Python

谢谢大佬回答得如此详细v
回复

使用道具 举报

8

主题

73

帖子

586

积分

高级会员

Rank: 4

积分
586
金钱
513
HASS币
0
 楼主| 发表于 2024-2-15 22:01:52 | 显示全部楼层
whxciotw 发表于 2024-2-15 10:23
比如说在 120 平米,3 室的房间,需要几个 esp32 做蓝牙定位?以及每个的有效距离是多少? ...

这个也要看实际环境的,比如中间有几堵墙,是承重墙还是分割墙,需要你自己测试,我只能告诉你我现在固件设置的esp32蓝牙信号档位是下面这个
  //设置BLE发射功率为-14dBm,类型为默认,从小到大N14(-14dBm)、N11、N8、N5、N2、P1、P4、P7(7dBm)
  BLEDevice::setPower(ESP_PWR_LVL_P7, ESP_BLE_PWR_TYPE_DEFAULT);
我自己测试过,P7和N14两个参数的话,手机连接esp32的蓝牙距离确实是P7最远(有没有连上,看手机上的蓝牙配对状态,homeassistant上看蓝牙的rssi_value值是不是每秒在变化,没有变化说明没有连上),N14最近,但是连接以后查询到的rssi值基本上差不多,还有查询到的rssi值每秒更新的,当距离比较近的时候,可以查询到较大的值,比如-65这样,但是也会出现比较小的值,比如-92db这样,但是在距离远的时候只能查询到比较小的值,所以你要做定位的话,自己根据实际情况,要查询在一段时间内得到的最大值作为判断依据,比如10秒内查询到的最大值是-72db,判断手机离这个esp32的大概位置是在哪里。

假如空间比较大,两个esp32放的比较远,也可以设置esp32的蓝牙发射参数是N14,以手机是否连接上esp32作为判断依据,要是有这个需求的话,我可以在参数设置页面增加  //设置BLE发射功率为-14dBm,类型为默认,从小到大N14(-14dBm)、N11、N8、N5、N2、P1、P4、P7(7dBm)
  BLEDevice::setPower(ESP_PWR_LVL_P7, ESP_BLE_PWR_TYPE_DEFAULT);这个的设置参数,你可以自己试下每个参数下的连接情况
回复

使用道具 举报

8

主题

73

帖子

586

积分

高级会员

Rank: 4

积分
586
金钱
513
HASS币
0
 楼主| 发表于 2024-2-17 00:04:24 | 显示全部楼层
今天用苹果手机测试了一下,发现苹果手机先验证,再连接,和安卓手机不一样,代码已经优化(压缩包已经更新),苹果手机也能正常连接使用了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-4-28 12:18 , Processed in 0.081113 second(s), 34 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表