本帖最后由 yun59t 于 2024-9-3 10:11 编辑
一、来由:企业VX打卡麻烦,准备自己做个电容触摸手指,毕竟米家的真贵,手指+网关遭不住,自己制作esp32+电容触摸模块,还能上点别的功能。问题是,这个东西准备放办公室用,办完有wifi但没有ha主机,想想用什么办法能把它直接通过联网接入ha,或者退求其次,怎样异地控制esphome的web页面。
二、要准备的材料及做法:
①硬件材料:esp32-C3、电阻若干、光耦若干、游戏导电硅胶按钮若干;(或者淘宝上有直接屏幕点击触发模块,但我想把电路部份尽量归一起)
②软件方面:esphome制作固件、巴法云mqtt同步及远程控制。(因为办公室没有ha主机,也没有内网穿透的设备。理论上是不是也可以用esp制作一个或者直接在这个esphome设备里面集成相应功能,但我不会!)
三、进度:
1、硬件:淘宝中~~!
2、软件部分:已基本完成框架,剩下就是功能的完善。
在此。要先感谢@ganguotu大佬的热心指导,本人是外行小白,今年4月初开始倒腾这些东西,对代码编程一窍不通,基本是靠翻论坛+ai来倒腾这些东西。所以遇到一些问题,有人帮忙指导方向,并给出具体做法,能边抄边学是非常重要的。
mqtt互交代码:
①有些备注可能会影响编译,记得自行去除;
②巴法云提供了两种登录方式,方法一:主机+端口+秘钥;方法二:主机+端口+用户名+登录密码。
③如果用方法一和二都登录不上,出现无法识别ip的提示,记得在静态ip后增加dns设置,我不太懂这个,是不是dns是用来将网址解析成IP地址形式。
mqtt:
broker: "bemfa.com"
port: 9501
client_id: "你的秘钥"
topic_prefix: null
discovery: false
reboot_timeout: 0s
on_message: # 当收到MQTT消息时的处理逻辑
- topic: SamsungTouch006 # 监听的MQTT主题名称
then:
- lambda: |-
ESP_LOGD("custom", "Received message: %s", x.c_str()); //这步是读取esp收到的消息是on还是off
if (x == "on") {
id(samsung_touch_switch).turn_on(); //收到on则打开开关
} else if (x == "off") {
id(samsung_touch_switch).turn_off(); //收到off则关闭开关
}
switch:
- platform: gpio # 使用GPIO平台的开关
pin: GPIO0 # 定义开关连接的GPIO引脚
name: "SamsungTouch Switch" # 开关的名称
id: samsung_touch_switch # 为开关设置ID以便在其他地方引用
on_turn_on: # 当开关被打开时的动作
- mqtt.publish:
topic: "SamsungTouch006" # 要发布到巴法云里对应的的MQTT主题
payload: "on" # 发送的消息内容为小写"on"
on_turn_off: # 当开关被关闭时的动作
- mqtt.publish:
topic: "SamsungTouch006" # 要发布到巴法云里对应的的MQTT主题
payload: "off" # 发送的消息内容为小写"off"
顺便上下IP配置
# 配置Wi-Fi网络
wifi: #配置路由器wifi名称和密码
networks:
- ssid: "XXX"
password: "XXX"
- ssid: "YYY"
password: "YYY"
# 配置静态 IP,便于管理,缩短wifi连接时间
manual_ip:
static_ip: 192.168.8.43 # 本设备ip,不要和已被占用的IP冲突
gateway: 192.168.8.1 # 网关=路由器ip
subnet: 255.255.255.0 # 子网掩码
dns1: 114.114.114.114 # 免费全国通用dns
dns2: 8.8.8.8 # 免费全球通用dns
巴法云:
四、控制效果
目前成果如下,后面还需要进一步完善功能。
五、其他一些备忘或想法
1、有没其他办法,在esp32设备只能联网,没有其他设备中转或的情况下,远程控制它的web操作页面,或者将一些内网穿透的功能直接编进去?
2、巴法云文档:https://cloud.bemfa.com/docs/src/index_device.html
3、arduino做法参考:https://blog.51cto.com/u_15440897/4673140
六、新的问题:
1、esp32联网运行时都没问题,但办公室网络经常掉线,esp32在离线后,通电状态下,还能定时进行动作么,或者说esp32有没内部时钟,能离线状态下,判断时间到8点了,开始自动化打卡操作。还是说需要给它接个时钟类元件,作为记时及触发条件。
|