分类存档: Digital

超简单 DIY – AirCube 空气检测站

源由

一直以来对家里的环境状态比较在意,在很多年以前,就使用万用板 + ESP8266 + 传感器组装了很多台空气检测节点放在家里,用于监控 PM 2.5 浓度、二氧化碳浓度、温度、湿度等环境状态。

配合 ESPEasy 固件 + Domoticz,可以很方便的采集环境状态的数值,从而配置 Domoticz 的脚本来完成一些自动化动作,例如打开新风、打开空气净化器等。

进一步,也可以通过 Domoticz 将采集到的数据保存到 InfluxDB 中,使用 Grafana 图形化的展示这些环境状态的变化趋势。

在知道嘉立创的 PCB 免费打样活动之后,就产生了将这些空气检测节点进行升级的想法。

目标

这次升级,主要是为了改进以前使用洞泂板,ESP8266 等老旧部件碰到的一些问题,主要有以下几点:

  • 更美观,原先使用万用板 + 亚克力面板太多飞线,不是很好看,整体空间利用也不充分,并且现在也有 3D 打印机,可以做一个更好看的外壳。
  • 更标准,原先每个节点的传感器选型都不太一致,从而导致每块万用板的飞线都不一致,组装存在出错可能,这次通过使用统一的 PCB,将所有传感器模块位置固定,每个节点的传感器都保持一致。
  • 更强大,原先使用的 ESP8266 模组,GPIO 数量较少,在传感器数量多的情况下,GPIO 就不够用了,这次更换为更先进的 ESP32,拥有更多 GPIO,性能也更为强大。并且因为 GPIO 数量更多,还可以额外增加一个屏幕,这样即使不借助 Domoticz 的情况下,也可以独立使用,查看当前环境数据。
  • 更灵活,原先使用的 ESPEasy 固件,所有的传感器是通过在它的网页配置界面来完成的,并且它的配置保存格式为自定义的二进制格式,很难阅读以及提前配置,这次更换为更灵活的


阅读全文 »

记一次硬件 Debug:ESP32 连接 Wi-Fi 报 Auth Expired 错误

起因

前段时间准备把家里的空气质量检测节点更新一下,从原来的万用板升级为 PCB,并且将主控 MCU 从 ESP8266 升级为 ESP32,这样可以单个节点支持更多传感器,同时把固件从 ESPEasy 换成 ESPHome。

经过

在完成 PCB 打样测试后,就上淘宝采购了一批 ESP32 开发板,其中一批是 USB Type-C 接口的 NodeMCU-32S,最开始测试的时候只买了一块,使用下来并没有什么问题,但是在一次接错 VCC 和 GND 导致温度模式损坏之后,再次使用这块 ESP32 开发板时,发现它无法连接到之前已经配置好的 Wi-Fi 上。

这时还以为是由于之前温度模块损坏关联导致的,因此重新购买了几块同样型号的 ESP32 开发板,但是在完成固件烧录,完成固件配置之后,第二次运行时,同样发现了无法连接 Wi-Fi 的错误,日志中显示连接失败的原因为 Auth Expired:

[23:50:02][I][wifi:248]: WiFi Connecting to 'HOUSE_IOT'...
[23:50:03][W][wifi_esp32:495]: Event: Disconnected ssid='HOUSE_IOT' bssid=xx:xx:xx:xx:xx:xx reason='Auth Expired'
[23:50:03][W][wifi:536]: Error 


阅读全文 »

使用 ESPHome + INA219 模块构建一个简易功率计

最近在使用 ESP32 做一些小东西,其中一个设备是使用电池供电,因此对使用电池时的续航比较关心,但是手头并没有合适的电子负载仪,在翻模块库存的时候,刚好发现有一个 INA219 模块,就直接拿它现做一个功率计了。

再配上一个 12864 OLED 屏幕,这样就可以实时去观测单片机设备的实时功率以及功耗了:

EasyPower Demo

ESPHome

ESPHome 是一个配置化生成 ESP32/ESP8266 智能家居固件的系统,一般都会用它来作为智能家居节点中的系统来使用,配合很便宜的 ESP32/ESP8266 模块,使用起来很是方便。

在查阅它所支持的模块时,发现 INA219 也在其中,并且 ESPHome 本身对 12864 OLED 也有良好的支持,因此最终就直接选择了 ESPHome 来作为功率计的基础系统,这样可以省去编写很多基础代码,例如任务设计、屏幕绘制、I2C 总线读写等,只需要关注功率计核心的功能即可。

最近也使用 ESPHome 比较好,发现它还是有很多优点的,基本可以作为一个 Arduino 项目的基础应用框架来使用:

  • 配置化生成代码,无需管理复杂的库依赖
  • 丰富的模组库支持,对于开发单片机应用来说,常见的输入输出模块都内置支持
  • 完整的运行框架,开发者只需要关注业务本身,其他相关内容都内置了,例如 MQTT、OTA 等功能
  • 灵活的 Lambda 支持,它的 Lambda 就是 C++ 的 Lambda,因此对于有能力的开发者来说,可以直接写代码

总的来说,对于一般 DIY 项目来说,ESPHome 足够强大、足够灵活来处理大部分需求了。

INA219



阅读全文 »

就是要 4K 双显,M1 MacBook Pro + DisplayLink 性能体验测试

这是什么坑

在使用一段 M1 芯片的 13 寸 MacBook Pro 之后,一直有一个问题没有解决,那就是两台 4K 显示器的一台,只能闲置在那里。

虽然给 M1 MacBook Pro 配备的是 StarTech 雷电 3 接口的扩展坞,它拥有一个 DisplayPort 接口和一个全功能 USB Type-C 接口,在配备 Intel 芯片的 16 寸 MacBook Pro 上,它是可以直接驱动两个 4K 显示器。

但是由于 M1 芯片又或者是 M1 MacBook Pro 的限制,配备 M1 芯片的 MacBook Pro 只能驱动一台 4K 显示器,另外一台显示器,即使将它连接在 MacBook Pro …

阅读全文 »

六款便携 4K60Hz USB Type-C 扩展坞横向对比评测

在之前对比了一些扩展坞,以及新买了一个 DockCase 的扩展坞之后,对现在这些便携类型的 USB Type-C 扩展坞起了兴趣,并且做了一些对比测试:

然后最近想把之前购买的绿联 CM121 Type-C 扩展坞替换掉,因为它虽然接口齐全,包含了 HDMI 输出、SF/TD 读卡器、千兆网口、USB Type-A 接口、PD 充电直通,但是它的 HDMI 输出只能到达 4K30Hz,在真正感受过 4K30Hz 和 4K60Hz 的区别之后,已经不能接受 4K30Hz 的使用感受了。

因此,我在京东找了一番,筛选出来 HDMI 输出是 4K60Hz 的 Type-C 扩展坞,并且价格不算高的产品,来做一个横向对比评测,同时测试一下对 M1 MacBook 的兼容性如何,看看有哪一些能代替绿联 CM121,也可以顺便看一下在这个时间点,市面上便携类型 Type-C …

阅读全文 »

便携 Type-C 扩展坞那些事和 DockCase 7 合 1 带屏扩展坞评测

1. 为什么又买扩展坞

之前因为换了 MacBook Pro 买了一些 USB Type-C 扩展坞 ,已经做了一期对比,现在已经过去一年了,而且也有新出了 M1 芯片的 MacBook Pro,借着这个机会再看看有没有新的更好用的 Type-C 扩展坞。

在去年对比几个 Type-C 扩展坞的时候,对其中新出的 PS186 HDMI 芯片很感兴趣,它可以在 USB 3.2 Gen 2x1 10Gbps 的带宽上实现 4K60Hz 显示输出的同时,仍然有 5Gbps 的 USB 传输速率,这个基本上能满足大部分场景下的需求,所以那些只能支持到 4K30Hz 的扩展坞就不考虑。

在去年 6 月份这个时间点,带有 PS186 HDMI 芯片的扩展坞并没有太多产品可以选择,而且之前购买的威迅扩展坞,也只有 3 个 USB 3.0 和 1 …

阅读全文 »

自用 MacBook Pro USB-C 扩展坞介绍和对比

四款Type-C扩展坞

自从我淘汰了 2015 款 MacBook Pro,买了新款 MacBook Pro 16 寸版本之后,因为它只有四个 USB Type-C 口,去掉了 2015 款自带的 USB Type-A,以及 HDMI 接口,导致在使用 USB Type-A 设备,以及外接显示器时,需要额外的扩展坞才可以实现。

为了解决这个问题,就必须要好好找找便宜又大碗的扩展坞了。

筛选目标

基于 MacBook Pro 雷电 3 接口高达 40Gbps 的带宽,可以做到一根线实现显示器输出、电源输入以及扩展 USB-A 数据上行,因此在筛选目标产品时,会优先考虑以下几个功能是否能实现:

  • 一根线实现电源输入、显示器输出、数据上行
  • Dock 类型设备需要支持双显示器
  • 电源输入功率足够使用,60W 起
  • 有 SD/TF 卡槽更佳
  • 不喜欢硬连接到 MBP 上的设备,偏好使用数据线连接的扩展坞

当然因为所有扩展坞针对的场景不一样,会对设备能支持的能力有所取舍,例如对于 Dock 类型的扩展坞,会更多要求全面的功能支持,但是对于便携类型的扩展坞,则是根据自己的实际使用场景去选择必需的功能,以及可选的功能。

目标产品

在参考同事的意见,阅读网上的评测,以及实际对比各种扩展坞的功能之后,最终陆续购买了以下几款扩展坞:

  • CalDigit


阅读全文 »

Garmin vivosmart 4 使用体验

Garmin vivosmart 4

缘由

在去年秋天,我突然觉得不能继续放肆下去,需要对体能和体形进行更好的改善,刚好公司的健身房也算是设施完善,因此首先就开始了通过有氧来进行减脂的训练。

作为一个器材党、数据党,在运动的时候怎么能没有一个设备来记录训练数据呢,不管是运动的时长、距离,还是心率的波动,都是我需要关注的。

经验

在为自己购买智能手环或手表设备之前,我已经给家里人买过几款智能手环以及试用过几款智能手环或手表:

  • 荣耀手环 4
  • 米动手表青春版
  • 米动手环
  • Amazfit 智能运动手表 2S

作为一个戴配饰会死星人,我完全不能接受特别大特别重的智能手表类设备,特别是作为一个码农,在敲键盘的时候还有一个手表来哐当哐当敲着键盘托的位置,简直难以忍受。

在试用了 Amazfit 智能运动手表 2S 之后,就直接放弃了使用手表类设备的念头。秋天已经穿上长袖甚至外套,一个又厚又宽大的手表简直是穿衣脱衣的巨大障碍。

在试用了米动手环之后,发现那个屏幕的表现实在是有些差劲,颗粒感太明显,放弃。

米动手表青春版其实感受还不错,反显常亮表盘,日常使用足够,续航足够长,还带 GPS,并且本身重量体积很轻很薄,但是在使用过小米运动这个 App 之后,完全没有想要使用的想法。

荣耀手环的屏幕很惊艳,几乎没有颗粒感,但是华为运动健康 App 也是跟小米运动一样,在运动数据记录方面不够专业。

并且在使用过程中,不管是小米运动,还是华为运动健康,甚至于苹果的 Health App,都没有能提供一个运动记录的详细数据,以及提供一个除了手机之外更方便查看运动记录的 Web 或者桌面 App。

选择

作为一个 Garmin 老用户,这个时候自然会想到在运动设备领域足够专业的 Garmin 有没有提供什么设备可供选择。

在选择设备的时候,有几个功能点是我需要考虑的:

  • 续航能力
  • 是否支持 GPS
  • 是否支持全天心率监测
  • 是否防水
  • 是否支持游泳或力量训练
  • 佩戴是否舒适

在 Garmin 的运动休闲分类中挑了好久之后,找到三个备选:

  • vivosmart


阅读全文 »

玩玩智能家居8:搭建基于 Grafana 的环境数据看板

在之前的文章 《玩玩智能家居4:InfluxDB & Grafana》 已经介绍了怎么将 Domoticz 中采集到的数据存储到 Influxdb,以及使用 Grafana 来查看数据,但是这样只有一个两个数据,并不能很方便的对整个家里的环境数据有个快速了解。

Grafana 提供了丰富的面板组件,可以以各种形式来展示数据,例如文本和曲线图,而且也可以很方便地自定义阈值,对于数据的不同数值显示不同的颜色,或者不同的背景颜色,这样便于了解当前数据是否处于能接受的范围内。

借助于 Grafana 这些组件,就可以很方便的搭建一个属于自己的家庭环境数据看板了。

玩玩智能家居7:Domoticz 中的 Events

在使用 Domoticz 的过程中,为了避免让 Domoticz 只是成为一个手机上的遥控器,就需要根据生活使用场景去定制一些自动化的规则,例如在天黑回家时自动打开灯,又或者是在睡觉之后自动关闭不必要的灯,在这个时候,就需要使用 Domoticz 的 Events 系统了。

Domoticz 的 Events 支持很多种类语言的编码,其中还包括图形化的配置工具 Blockly。

当然这里并不会去介绍 Blockly 的配置方式,因为使用编码的方式可以得到更细粒度的控制,以及更自由的场景条件控制。

这里主要介绍一些处理事件时的技巧和思路。

时间差处理

在事件处理过程中,最重要的一件事就是判断事件发生的时间与当前时间的时间差,通过这个时间差,可以很方便的根据不同的时间差来达到不同的目的。

now = os.date('*t')

function timedifference (s)
  year = string.sub(s, 1, 4)
  month = string.sub(s, 6, 7)
  day = string.sub(s, 9, 10)
  hour = string.sub(s, 12, 13)
  minutes = string.sub(s, 15, 


阅读全文 »