兴趣内容
相关好价
全部产品
精选
最新
超便宜,主频高达240Mhz的单片机
芯片涨价潮的当下,各种单片机也玩不起了,不知道哪里的广告给我推送了W806这款芯片,主频高达240M,淘宝上开发板的活动价不到6元💰开发板上为紫色,从GPIO接了三个LED灯,可通过芯片控制。芯片IO都引出到开发板两侧,我在两侧各焊了两排排针,方便调试和信号抓取。开发板上还集成了USB转串口,同时芯片内部集成的bootrom支持串口下载程序。两个按键分别是控制复位和boot,下载程序时用。使用平头哥CDK进行开发,官方提供了多个DEMO,我找了一个240✘240的彩屏,一行代码都不用改,下进去就能完美运行  
用esp32和LD2410B通过ESPHOME搭建人体存在传感器并在homeassistant中与米家联动
书接上回,拆了领普的ES1人在传感器,发现核心部件就是LD2410B。https://post.smzdm.com/p/a8pokr56/海凌科LD2410BLD2410B 人体存在传感器介绍LD2410B 是一款高精度人体存在传感器,广泛应用于智能家居、办公自动化和安全监控等领域。它通过检测微波信号的变化来感知人体的存在,即使在静止状态下也能精确检测。那么只要将LD2410B接入自己的可联网控制板,并写入驱动代码,就能制作自己的人体存在传感器。这里选用ESP32模块,能接入wifi,能接入homeassistant,有大量的例程参考,正所谓前人栽树后人乘凉,能CV就CV。理论上更为便宜的ESP8266也可以。ESP32ESP32 模块介绍ESP32 是由乐鑫科技(Espressif Systems)开发的一款高性能、低功耗 Wi-Fi 和双模蓝牙芯片。该模块广泛应用于物联网 IoT、可穿戴设备、智能家居、工业自动化等领域。一般来说,开发ESP32需要用到ESP-IDF,并在Arduino IDE等开发环境下写代码烧录,这需要懂一点代码,懂一点单片机。那么有没有更为简单的方法呢?当然有!ESP32作为一款炙手可热的芯片,在市场拥有巨大的保有量,以及众多的开发者。其中ESPHOME可以说是一个专门为ESP芯片和homeassistant智能家庭定做的傻瓜式变成下载平台。ESPHOMEESPHome 介绍ESPHome 是一个用于创建自定义固件以控制 ESP8266 和 ESP32 芯片的工具。它简化了物联网设备的配置、管理和集成,尤其适用于智能家居自动化系统。主要特点简化配置:使用 YAML 文件进行配置,易于编写和维护。丰富的配置选项,支持多种传感器、执行器和组件。与 Home Assistant 集成:无缝集成 Home Assistant,提供自动发现功能,方便设备管理和控制。支持通过 Home Assistant 界面直接管理和更新设备固件。广泛的硬件支持:支持各种 ESP8266 和 ESP32 板子。支持多种传感器和执行器,如温湿度传感器、继电器、LED 控制等。自动更新:通过 OTA(空中下载)更新设备固件,无需物理连接设备即可进行固件升级。强大的功能:支持复杂的自动化逻辑、脚本和定时任务。支持 Wi-Fi 和蓝牙连接,适应多种应用场景。总的来说,通过ESPhome,可以在网页上在线编译ESP系列的固件,并且通过有线或者WiFi的方式下载到ESP模块内。具体步骤是:1、将ESP32模块通过USB串口连接到电脑2、在ESPhome WEB界面连接设备,写入esphome专用的底层固件,并配置wifi信息联网。3、刷入的底层固件后就可以在ESPhome里编写YAML文件生成固件,网页编译,在线OTA刷入,十分方便。安装ESPHOME安装ESPhome的方法有两种,一种是在homeassistant的加载项里面直接安装addon,另一种是通过docker安装。特别注意点是homeassistant有多种安装方式,我们一般用dokcer和虚拟机VM的方式安装homeassistant OS,只有在homeassistant os上才能直接安装esphome,通过docker安装的hs是没有的。至于homeassistant的安装可以搜索站内其他文章,这里默认大家都会homeassistant了。所以这里建议用docker的方式安装ESPhome。同样这里默认大家都会docker了。用群晖的,可以在注册表映像里面拉esphome/esphome,然后一路新建-next-启动就行。用docker管理器的,先登录终端,然后用root权限输入docker run -d --name="ESPHome" -e TZ=Asia/Shanghai -v /home/esphome:/config -v /run/udev:/run/udev --privileged --restart=always --net=host esphome/esphome安装好后,输入http://主机地址:6052就能访问ESPHOME了。小tips:现在dockerhub被和谐,可能需要一些魔法才能直接拉取,不然可能会报错。这里要说明ESPHOME与ESPHOME WEB的区别,ESPHOME WEB 是一个在线网站无需安装,网址为https://web.esphome.io/,在这里可以直接给esp32安装底层固件以便在ESPHOME里面操作。而ESPHOME 要通过homeassistant OS里面的插件或者docker安装。开始合成准备工具:ESP32模块,LD2410B模块,模块转杜邦线,USB线,电脑一台。准备环境:装好homeassistant,装好ESPHOME,浏览器一个。模块连接ESP32的IO17和IO16分别当做RX和TX,和LD2410B的TX和RX连接。不同的模块的IO口有出入,这里随便选两个就好,只要自己记住后面代码用到。由此可见只需要两个IO口便可,所以esp8266也是足够的。安装底层固件首先,将ESP32模块连接到电脑并装好串口驱动,记录串口号如COM4口。打开esphome web网页,点击connect并选择COM4然后点击蓝色的prepare for fist install,网页会自动识别esp32并自动下载底层固件。安装完成可以设置路由器的ssid以及密码,随后ESP32就会自动联网了。点击visit device会跳转到esp32的后台,在后台我们能看到esp32模块的名字ESP32-XXXX-XXXX,以及当前模块的IP地址。编写固件打开ESPHOME(docker方式或者HSos方式),这时一般就会显示discover模块了。我们在右下角点击“new device”-“continue”-然后把发现的名字填进去ESP32-XXXX-XXXX,然后选择ESP32模块的型号,这时会自动生成一个api秘钥(后面会用到)该发现的模块就会从“discover”变成“online”了。点击模块下面的edit,进入编程。这些默认的信息橙色的都不要改动,是esp32的联网信息,秘钥凭证等。牛逼的代码就像上文说的,ESP32已经有海量成熟的代码,LD2410B也是一款商用的传感器,在开源社区已经有人合成了!所以只管CV!快乐CV!但是有一些坑踩过的还是要造福值友的,就是要知道改什么地方,CV的价值就在于知道怎么CV能跑起来。首先将上面默认生成的信息备份到记事本,再将YAML里面的信息全部删掉,将下面贴出的代码全部复制上去。然后需要改动的地方:1、上面橙字的秘钥改成记事本内备份的2、esp32:board:后面的型号改成记事本内备份的实际型号)3、tx_pin和rx_pin的实际IO口(杜邦线连哪个改哪个)#Define Projectsubstitutions: name: diy-ld2410 device_description: ${name} guide by SmartHomeScene.com esphome: name: "${name}" friendly_name: LD2410人在传感器 comment: DIY LD2410 人在传感器 with ESPHome by 核动力井盖 on_boot: - priority: 900.0 then: - lambda: |- idcpu_speed = ESP.getCpuFreqMHz;#Define Board Typeesp32: board: esp-wrover-kit framework: type: arduino# Enable Home Assistant APIapi: encryption: key: "i+KlOgNL6ovigWNWNaXfKXyXFA/1SGLjSGXsyGuKb6M="logger:ota: - platform: esphome password: "558899a70f2ef41d3b2a2e270afbfc98"captive_portal:wifi: ssid: !secret wifi_ssid password: !secret wifi_password #Enable fallback hotspot captive portal in case wifi connection fails ap: ssid: "Esphome-Web-17Eda4" password: "RIxA0lr8td3y" #Open web port for browser accessweb_server: port: 80uart: tx_pin: GPIO19 rx_pin: GPIO18 baud_rate: 256000 parity: NONE stop_bits: 1globals: - id: cpu_speed type: int restore_value: no initial_value: "0"ld2410: id: ld2410_radar #Configuration entitiesnumber: - platform: ld2410 timeout: name: Radar Timeout max_move_distance_gate: name: Radar Max Move Distance max_still_distance_gate: name: Radar Max Still Distance g0: move_threshold: name: g0 move threshold still_threshold: name: g0 still threshold g1: move_threshold: name: g1 move threshold still_threshold: name: g1 still threshold g2: move_threshold: name: g2 move threshold still_threshold: name: g2 still threshold g3: move_threshold: name: g3 move threshold still_threshold: name: g3 still threshold g4: move_threshold: name: g4 move threshold still_threshold: name: g4 still threshold g5: move_threshold: name: g5 move threshold still_threshold: name: g5 still threshold g6: move_threshold: name: g6 move threshold still_threshold: name: g6 still threshold g7: move_threshold: name: g7 move threshold still_threshold: name: g7 still threshold g8: move_threshold: name: g8 move threshold still_threshold: name: g8 still threshold # Setting ending of zone 1 occupancy - platform: template name: "Radar End Zone 1" id: radar_z1_end device_class: distance min_value: 0 max_value: 600 step: 1 mode: box update_interval: never optimistic: true restore_value: true initial_value: 10 icon: "mdi:arrow-collapse-right" entity_category: CONFIG # Setting ending of zone 2 occupancy - platform: template name: "Radar End Zone 2" id: radar_z2_end device_class: distance min_value: 0 max_value: 600 step: 1 mode: box update_interval: never optimistic: true restore_value: true initial_value: 36 icon: "mdi:arrow-collapse-right" entity_category: CONFIG # Setting ending of zone 3 occupancy - platform: template name: "Radar End Zone 3" id: radar_z3_end device_class: distance min_value: 0 max_value: 600 step: 1 mode: box update_interval: never optimistic: true restore_value: true initial_value: 100 icon: "mdi:arrow-collapse-right" entity_category: CONFIG#Occupancy sensorbinary_sensor: - platform: ld2410 has_target: name: Radar Target id: radar_has_target has_moving_target: name: Radar Moving Target has_still_target: name: Radar Still Target ## Set Up Radar Zones Based On Distance - platform: template name: "Radar Zone 1 Occupancy" device_class: occupancy icon: mdi:motion-sensor lambda: |- if idradar_has_target.state && idradar_detection_distance.state < idradar_z1_end.state { return true; } else { return false; } - platform: template name: "Radar Zone 2 Occupancy" device_class: occupancy icon: mdi:motion-sensor lambda: |- if idradar_has_target.state && idradar_z1_end.state < idradar_detection_distance.state && idradar_detection_distance.state < idradar_z2_end.state { return true; } else { return false; } - platform: template name: "Radar Zone 3 Occupancy" device_class: occupancy icon: mdi:motion-sensor lambda: |- if idradar_has_target.state && idradar_z2_end.state < idradar_detection_distance.state && idradar_detection_distance.state < idradar_z3_end.state { return true; } else { return false; }#Exposes configuration and status sensorssensor: #Device UPTIME - platform: uptime name: Uptime id: sys_uptime update_interval: 60s #Device CPU Speed - platform: template name: "ESP Cpu Speed" accuracy_decimals: 0 unit_of_measurement: Mhz lambda: |- return idcpu_speed; entity_category: "diagnostic" #Device Memory - platform: template id: esp_memory icon: mdi:memory name: ESP Free Memory lambda: return heap_caps_get_free_sizeMALLOC_CAP_INTERNAL / 1024; unit_of_measurement: "kB" state_class: measurement entity_category: "diagnostic" #Device Temperature - platform: template id: sys_esp_temperature name: ESP Temperature lambda: return temperatureRead; unit_of_measurement: °C device_class: TEMPERATURE update_interval: 60s #Device RSSI - platform: wifi_signal name: RSSI id: wifi_signal_db update_interval: 60s entity_category: "diagnostic" - platform: ld2410 moving_distance: name: Radar Moving Distance id: moving_distance still_distance: name: Radar Still Distance id: still_distance moving_energy: name: Radar Move Energy still_energy: name: Radar Still Energy detection_distance: name: Radar Detection Distance id: radar_detection_distance g0: move_energy: name: g0 move energy still_energy: name: g0 still energy g1: move_energy: name: g1 move energy still_energy: name: g1 still energy g2: move_energy: name: g2 move energy still_energy: name: g2 still energy g3: move_energy: name: g3 move energy still_energy: name: g3 still energy g4: move_energy: name: g4 move energy still_energy: name: g4 still energy g5: move_energy: name: g5 move energy still_energy: name: g5 still energy g6: move_energy: name: g6 move energy still_energy: name: g6 still energy g7: move_energy: name: g7 move energy still_energy: name: g7 still energy g8: move_energy: name: g8 move energy still_energy: name: g8 still energy#Exposes control buttonsbutton: - platform: restart icon: mdi:power-cycle name: "ESP Reboot" - platform: factory_reset disabled_by_default: True name: "Factory Reset ESP" id: factory_reset_all - platform: ld2410 factory_reset: name: "Factory Reset Radar" restart: name: "Restart Radar" query_params: name: query params#Exposes control switchesswitch: - platform: ld2410 bluetooth: name: "Radar Control Bluetooth" id: radar_bluetooth engineering_mode: name: "Radar Engineering Mode"time: - platform: sntp id: time_sntp#Radar firmware versiontext_sensor: - platform: ld2410 version: name: "Radar Firmware Version"#Set distance resolution - 0.75m or 0.2mselect: - platform: ld2410 distance_resolution: name: "Radar Distance Resolution"然后SAVE-INSTALL,等待编译。编译过程需要自动下载对应的库,可能也需要魔法来加速。编译完后就可以通过无线ota,或者有线串口的方式下载模块里面了。重启模块电源。homeassistant添加传感器如无意外,重启后模块就能正常工作了。可以通过esphome控制面板看到模块的信息,点该模块下visit按钮在homeassistant中,点击配置-设备与集成,一般如果模块正常工作就会出现在“已发现”列表里面,如果没有就右下角“添加集成-ESPHOME-输入模块的IP”,这时候HS会问你要API秘钥,可以在上述备份的记事本中找到,或者在ESPHOME控制面板的show api key中看到,即可。至此已经可以在HS中自定义各种联动场景了。总结:合成成功后的人体存在传感器可以说在功能上和领普的es1十分接近了,diy的话成本15+15=30吧,如果用裸esp32核心,或者esp8266会更便宜,适合手头上已经有esp芯片的垃圾佬。而领普es1各种券后也能做到44元的超好价格,还能直接在米家超控,也很超值!但是垃圾佬的乐趣就是在于折腾,是吧!下面欣赏下人体存在传感器-探索者版本的美照  
仅需13元,让传统音箱摆脱“线”制
 准备材料1.蓝牙接收模块这应该是目前市面上成本最低的全新模块了,并且它自带单端音频焊点和电源焊点,在内置改装方面比BT201要强许多(BT201没有音频焊点,如果从3.5座子引出线略麻烦;但BT201拥有更多的可扩展性和可定制性,只需要一根串口调试线即可随意定制功能)DIY蓝牙5.0音频接收器模块MP3蓝牙解码板车载音箱音响功放板4.16.98元淘宝精选去购买 BT201双模5.0蓝牙无损音频功放板模块TF卡U盘BLESPP串口透传AT9.5元淘宝精选去购买  2.电源模块(给蓝牙模块供电)本次改装的音箱原厂使用AC- AC变压器方案,没有直流输出,所以需要另加一个AC- DC 5V电源模块给蓝牙供电,蓝牙模块的功耗非常小,这个最便宜的3.5W模块甚至都已经可以说留有大量的冗余了。当然,也可以用废旧的手机充电器改装,老手机的那种5V几百mA的都可以。Hilink AC- DC5V 300mA电源转换模块6元天猫精选去购买为了完成改装,还需要准备一些基础零件:(非必选,直接用线连接亦可。这么做是为了留出更多的后期改装空间)零件清单:开始改装首先,卸下背板螺丝。拔掉与功放板相连的所有排线。(这款音箱分别是前面板排线和低音喇叭排线)可以看到,这款音箱使用的是AC- AC变压器。把电源模块插到万能板上,同时插上两个2P母座,焊锡连接。AC端不需要在意正负,DC端需要注意,我这里使用的端子线是左正右负,对应进行焊接。如果焊接错了也没有关系,直接把端子线拆出来对换即可。接下来,需要在蓝牙模块上焊接电源线。在蓝牙模块预留的音频焊点上焊接3P母座这里同样需要注意端子线的对应问题,红L黑G绿R。由于原功放板上没有预留另外的音频输入焊点,只能并联在原输入焊点上。找一根莲花线连接上,把万用表打到蜂鸣档,然后在功放板上对应的位置寻找音频焊点。测试完毕,找到了R L G三个焊点。焊接3P音频线,注意对应:红L黑G绿R接下来就要改造原有的供电电路了。先在原有背板上挖一个16mm的孔用于安装蓝牙板的开关完美安装,没有痕迹。把2p端子线的一边与AC输入线焊接到一起,然后热缩管伺候在开关的两边分别焊接AC输入,2p端子线的另一半。为了让开关处保持密封,上一坨热熔胶,同时起到绝缘的作用。把所有端子线插到对应的地方,改造就完成啦~插上电试一下蓝牙模块正常工作,接下来就可以装箱啦。不过为了美观,加上 扎带理一下线,蓝牙模块和电源模块同样用热熔胶固定。 这样,有线音箱就变成蓝牙音箱啦。假如要使用有线输入,关闭蓝牙开关即可~当然了,几块钱的蓝牙板子都是最基本的SBC协议,只能在对音质要求不高的地方听听,听个响那是没问题的~后续会出低价改造aptX/AAC蓝牙的教程,对音质有追求的各位点个关注吧~  
给爸爸做的人体感应蓝牙音箱
爸爸的车自带的蓝牙音箱有时候会有很大的延迟,在导航的时候有可能会错过路口。想给他换车他一直以我还没结婚的原因不同意。所以给他在车上配了导航用的蓝牙小音箱,因为车上夏天锂电池不安全,所以用的是usb小音箱加蓝牙模块的方案。缺点是体积比带电池的蓝牙小音箱大。音箱是科范m80,自带8002d功放,几块钱音质还行,做导航声音挺好。蓝牙模块是几块钱的这种,可能是老板改过程序,连接声音比较小,安静不吵人很好。这两个搭配音质还可以,也没有启动的冲击声。前些天爸爸和我说,上车连接蓝牙还好,但是下车时候,他的车机还有电,所以蓝牙小音箱还有电,不会自动和他手机断开。这个蓝牙板信号比较好,他走老远还连着。于是打算利用手头现有的工具,给蓝牙小音箱加个个人体感应的开关。原理也比较简单,就是利用海凌科的ld2410b雷达,配合继电器,做到人在的时候继电器给蓝牙板和小音箱供电,人离开的时候蓝牙板和小音箱断电。没有红外感应是因为人体动作幅度小时,红外检测不到。ld2410b 17元,继电器一般2-4元。继电器和蓝牙板雷达牙线盒考虑到继电器吸合发热,所以雷达设置的是有人时候输出低电平,负载接在nc常闭口上,这样有人的时候继电器是断开的,nc口通电。放到车上试了下,人离开车几米蓝牙就断开了。但是如果人围着车转,蓝牙就会连连断断。基本算上达到了想要的效果。