分类存档: Electronics - 第2页

简单逆向某蓝牙血氧仪通信协议,配合 ESP32 实现全天血氧监控

之前买了个血氧仪,带蓝牙数据传输功能,想使用它监控一下整晚睡眠时的血氧。

lepu-oximeter-re-1

但是在使用时才发现,如果想要持续监控,配套的 App 需要一直在前台保持激活状态,就是手机不能息屏,浪费电不说,在后续查看数据时发现 App 中查看也不太好用。

这时想到它既然是使用蓝牙传输数据的,那大概率是直接用了 BLE,如果传输没有加密的话,那不是可以直接用 ESP32-S3 直接来读取一下,再转发到 MQTT 服务器,就可以实现全天的血氧监控了,而且可以有全部数据点的详细数据。

注:本文仅供学习研究与互操作性分析之用。请仅在对目标设备与数据拥有合法权利或已获明确授权的前提下使用。禁止用于未授权访问、数据窃取、绕过安全机制等违法用途;一切后果由使用者自行承担。

拿 Lightblue 测试一下

说干就干,先在电脑上用 BLE 测试软件看看能不能抓到一些数据。

将手指放进血氧仪,待数据稳定之后,打开 Lightblue 看看能不能找到设备~

很快就找到一个 PC-60F 打头的设备。

lepu-oximeter-re-2

可以看到这个设备,有一个 Notify 的 Character,看看这个是不是

lepu-oximeter-re-3

可以看到在订阅这个 Character 之后,血氧仪在一直发送数据,这时把这些数据日志保存下来,看看能不能找到血氧数值在哪条消息里。

怎么逆向?

好吧,其实我用了一个笨方法,通过观察血氧仪的读数,再在日志中查找对应的数字,一般来说,血氧最大值 100%,那么用一个字节就可以表示了,应该是可以直接搜索到的。

在观察过程中,血氧仪显示 97%,那么在日志中搜索对应的 16 进制数 0x61:

lepu-oximeter-re-4

截取这段中有 3 条数据出现了 0x61,但是前一个字节不太一样,分别是 0x01 和 0x02,这个时候可以选择再继续观察后续数据,来确认哪一个是上报的血氧数据。

但是我选择了对比一下心率,当时看到的心率是 81,对应 16 …

阅读全文 »

ESP32-S3 + Arduino 各种 JPEG 解码库速度对比,到底哪个才是最快的?

前段时间做了个 ESP32-S3 串流小电视(见 桌面小电视新思路,ESP32-S3 + 12864 OLED 串流视频)的项目,最近准备试试显示彩色图片,这就需要持续显示 JPEG 图片来模拟视频播放。

在 Arduino 生态中找到了好几个解码库,虽然也有一些对比测试,还是想自己实测一下,看看具体的效果怎么样 😃。

起因

在串流进行视频播放时,需要视频的每一帧解码、上屏,如果需要达到 30 FPS 的刷新率,那么解码 + 上屏的时间要在 1000 / 30 = 33.333 ms 以内。在这种情况下,图片解码性能直接影响用户体验。

另外,ESP32-S3 有双核 + 更高主频 + PSRAM + SIMD 指令支持,理论上应该可以跑得更快,但是具体能快多少,不同库之间差距多大,都需要实测数据。

测试环境

硬件平台

  • 开发板: ESP32-S3-Zero 开发板
  • PSRAM: 2MB


阅读全文 »

使用 CH32L103 + 低功耗反射屏,验证太阳能供电“无限续航”卫星摆件的可能性

前段时间复刻了一个基于 ESP32-C3 开发板的桌面卫星摆件(见 这个用 ESP32 开发板 DIY 的“卫星”感觉挺不错),在文章里也提到了,虽然这个卫星摆件带了太阳能电池板,但是发电功率太低,完全没有实用价值。

后来就想了想,是不是可以搞个低功耗 MCU + 低功耗显示屏来做一个可以真正使用太阳能电池板供电的卫星摆件

最近沁恒的 MCU 玩得比较多,刚好看到有一个 CH32L103 是低功耗系列,就拿它来试试~

硬件选型

之前测试过,单块太阳能电池板在室内约 500 lux 的光照条件下,大概能提供 50uA 的供电电流,因此 MCU + 屏幕 + 温湿度传感器的总电流需求小于这个值就可以了。

在大概调研了一下之后,初步硬件选型如下:

  • 主控 MCU:WCH CH32L103,沁恒 RISC-V 低功耗系列
  • 屏幕:鱼鹰光电 1.54 寸单色 TFT 反射式显示屏,分辨率 200x200
  • 传感器:SHT31,查了下数据手册,在不检测时,功耗也相当低
  • 时钟芯片:继续使用之前墨水屏 Tag 中的


阅读全文 »

成了,ESP32 卫星不完全复刻指南

前段时间分享了一个国外 Maker 制造的 ESP32 卫星(见 https://mp.weixin.qq.com/s/IYBiLbzDh12QjvQngUoUtA),我也花了点时间完成了复刻,为了制作方便,也做了一些小修改,这里整理了一下需要注意的地方以及一些小技巧

铜丝有紫铜和黄铜

一开始没注意,搜索了一下直接买了个紫铜丝,做了一半才发现原来铜丝还分紫铜丝和黄铜丝,原作者使用的黄铜丝,不过既然已经做了也不管了,紫铜丝的颜色看起来也不错。

PS. 铜丝需要买 2 米。框架加内部搭桥要用掉的铜丝比想象中更多一些,加上浪费的 2 米刚好够用。

esp32-satellite-tutorial-2

esp32-satellite-tutorial-3

电铬铁,一定要好的

一开始用的电铬铁是很久之前买的一个内热式电铬铁,60W 功率,但是焊接的时候总是不上锡,每次在先给铜丝加热好久,然后锡才能到铜丝上。

后来挑了个便宜的德力西 75W T12 电铬铁,效果好多了,真的能有作者视频中那效果一碰就能上锡的效果。

加商品

先折弯再焊接

1mm 粗的铜丝还是有点硬的,建议先比划好尺寸,并且先裁剪好一个模块所有对应搭桥的铜丝,再进行焊接。

对于要连接的焊盘的部分,可以多留一点,这样在没有对齐的情况下可以重新调整,焊接时再剪掉多余的部分。

esp32-satellite-tutorial-4

太阳能其实没啥用

之前找 DeepSeek 算过,这个尺寸的太阳能电池板在室内只有 1mW 的发电功率,纯粹图一乐。因此完全没有必要添加太阳能充电模块,可以省不小焊接工作量 😃。

当然也不能直接断接太阳能电池板的正负极,我加了个 100K 电阻在正极铜丝上,然后直接连接到负极了,测试过电流只有 50uA,不会影响啥。

esp32-satellite-tutorial-5

其他模块要省也可以省

太阳能充电没有意义之后,那这个光靠一个小小的锂电池也没办法续航特别久了。如果作为一个常开的桌面摆件,还要频繁充电,不如直接插电使用。

这样的话就可以去掉不少模块了:

  • 锂电池:不需要电池了
  • 电池指示器:没必要了
  • 开关:都插电了,想断电直接断电源就行了


阅读全文 »

为了 DIY 更带劲,用 CH339 手搓一个四路电流检测、独立开关的 USB Hub,全开源~

在相当长一段时间里,玩电子 DIY 的时候我用的 USB Hub 都是之前用 CH334R 做的一个 4 位 USB 2.0 Hub(见 听人劝吃饱饭,试试CH334R来做USB 2.0 Hub),不过逐渐发现常规 USB Hub 一些不方便的地方,特别是在调试一些设备的时候,需要拔插 USB 连接,一手要按住 BOOT 按钮,一手要拔插 USB 基本上不太现实

因此就想着再做一些更符合自己需求的、更方便辅助电子 DIY 的 USB Hub。

项目介绍

为了更好地辅助电子 DIY 中的调试工作,先列举一下痛点:

  • 需要自带 UART 调试接口,这样可以省掉一个 USB 转串口工具。虽然一些 MCU 也可以通过 USB CDC 进行调试日志输出,但是在 RESET


阅读全文 »

AI 误诊 macOS IOKIT Bug:ESP32-S3 USB HID 通信调试记录

前段时间想模仿 BLEUnlock 搞个使用指纹给 macOS 解锁的应用,让 AI Vibe Coding 了很多代码,特别是 USB HID 通信以及 CTAP 协议处理部分。

这中间在调试协议时,AI 花了相当多的时间来反复调整 USB HID 通信时的 Payload 大小,AI 最终的结论是:macOS IOKIT 在发送数据到 USB 设备时有 Bug,会缺少 1 个字节,所以通过宏定义的方式,将包大小减少 1 个字节来绕过这个 Bug 😂。

当然我是不相信这个结论的,毕竟 macOS 上通过 USB HID 通信的设备那么多,不可能有这么明显的 Bug,周末花了点时间来看看到底是咋回事。

问题表现

在整个通信协议相关代码写完,并且主机和设备通信测试成功之后,在设备端会提示 USB HID 在收到消息时,Payload 大小为

阅读全文 »

用 ESP32-S3 跑 BASIC 解释器,这比当年比尔盖茨用的电脑配置高多了

之前我做了个 AI 生成外形的复古小电脑,并且同样使用 AI 生成了 3D 模型,塞了 ESP32-S3 开发板 + 0.96 英寸 OLED 进去,顺手做了个能播放《Bad Apple》的固件(见《3 步从 nana banana AI 生成的复古小电脑到真实桌面小玩具》)。

esp32-s3-arduinobasic-2

最近在 GitHub 上看到一个 ArduinoBASIC 项目,一个还算完整的 BASIC 语言解释器,支持 BASIC 语言中常用的特性,这不刚好用来把这个复古小电脑变成真的可以写代码的小电脑吗 😃。

PS. 当年比尔·盖茨和保罗·艾伦为 Altair 8800 写 BASIC 时,机器 CPU 是 2 MHz 的 Intel 8080,只有 4 KB



阅读全文 »

3 步从 nana banana AI 生成的复古小电脑到真实桌面小玩具

先看看有屏幕的地方就有的 Bad Apple:

PS. 音乐是后期加进去的 🙈。

源起

这一些源于之前在 MakerWorld 上看到的摸鱼小副屏,对这种可交互的小玩具特别感兴趣,我还复刻了一个,并且把内部改造了一下,换成香橙派开发板,跑了一下 Mac OS 9,虽然有点慢 😃(见:摸鱼小电脑能跑 MacOS 了,就是速度慢到怀疑人生)。

一直以来建模只会搞横平竖直简单类型的模型,对于这种带造型的模型,完全没有能力,不过最近 nana banana 很火,突然想到现在各种 AI 工具已经相当成熟了,是不是也可以借助 AI 来实现呢,说干就干。

PS. 稍微标题党了一下,这从 AI 生成到完成 3D 打印,也用到了其他平台,以及最终加装 MCU + 屏幕也花了额外的时间 🥳。

第 1 步:让 AI 生成期望的模型

这一步一开始是让 Gemini 2.5 Flash nano banana 生成的,但是感觉可能因为没有 Thinking,效果不是很好,后来换成 ChatGPT …

阅读全文 »

不到 1 元,64K Flash + 8K RAM:CH32V006 直驱彩色 TFT LCD,100 FPS 无压力

上上周发了篇文章介绍了一下用 CH32V003 做过的项目(那些年用 7 毛钱单片机 CH32V003 做过的 DIY 项目),总的感觉用起来还是很舒服的,不过最近也了解到沁恒推出了差不多加量不加价的 CH32V006,资源不止翻倍, 价格在某宝上也只要 8 毛钱一颗

稍微研究了下,发现 CH32V006F8P6 和我在用的 TSSOP20 封装的 CH32V003F4P6,可以算是能 Pin2Pin 替换,这连开发板都可以直接用之前自己画的 V003 的开发板 PCB 😃。

0.96 寸 TFT LCD 驱动实测

之前用 CH32V003 的时候,即使它有 SPI 总线,但是 16KB Flash 实在有些捉襟见肘,即使驱动像 0.96 寸 TFT LCD 这样的小尺寸屏幕,分辨率为 160x80,色深为 16 位,一张全屏背景图就要消耗 …

阅读全文 »

汇报一下基于 CH32V003 + 电子墨水屏的超低功耗 Tag 续航测试结果

在 5 月份的时候,分享了一个基于沁恒 CH32V003 + 电子墨水屏的一个超低功耗时间 Tag 项目(见 电流15uA续航一年?CH32V003低功耗应用尝试 ),想借此学习了一下低功耗嵌入式开发,到上周,这个测试设备的终于支撑不住,已经差不多耗尽了电池。

回顾一直技术方案

之前的文章已经介绍了大概的技术方案,使用 CH32V003 作为主控 MCU,电子墨水屏作为显示设备,PCF8563 作为 RTC 时钟保存时间,CH32V003 使用待机模式,每 10 分钟唤醒一次,从 RTC 读取时间并刷新电子墨水屏,然后通过 PMOS 将电子墨水屏的供电断开。

在实际测试过程中,不刷新电子墨水屏且 CH32V003 处于待机状态时,电流大概是 17uA,在 CH32V003 唤醒且刷新屏幕时,电流大概是 15mA。回去看了下之前的文章,发现把刷新屏幕的电流算小了,原先用的 5mA,这次刷新期间使用 15mA 来计算。

综合刷新屏幕所使用的时间和次数,估算整体电流消耗大概是 142uA。

配合一个 450mAh 的电池,理论续航时间是 450 / .142 / 24 =132 天

RTC



阅读全文 »