大金空气传感器BRY88AB151K改装

前言

在浏览B站时看了参考1中大佬的视频,很感兴趣。收集了一些信息后,发现资料不少且价格便宜,很适合改造,最终有了此项目。

硬件部分

配件

  1. 大金空气传感器BRY88AB151K;
  2. ZE08-CH2O模块,USB Type-A公头;
  3. 1.3寸IIC单色OLED模块(我的是SH1106芯片的),2.54杜邦线插头,带4P的GH1.25mm公头的单头端子线,4P的GH1.25mm卧贴母座;
  4. 其它:撬棒、串口转USB模块、电烙铁等辅助工具。

拆解

  1. 参考视频中的方法用撬棒拆开前面板模块,拔下排线,取出主板;
  2. 用刀片慢慢嵌入前面板,划开,小心取下面板;
  3. 参考OLED模块尺寸在前面板模块的底板部分开孔。

组装

  1. 将ZE08-CH2O模块附赠的排线与USB Type-A公头焊接在一起,接线顺序参考大金空气传感器USB小板上的标识,很容易确认;
  2. 取一条带4P的GH1.25mm公头的单头端子线,将头取下只用其排线,将排线按序焊接到4P的GH1.25mm卧贴母座上(吐槽一下,器件太小,焊的我眼快瞎了),将另外一条单头端子线与焊好的排线并线接入2.54杜邦线插头中并压紧即可,接线顺序可以通过万用表电阻档测量ESP32模块GPIO22 、GPIO23、GND等确定,也可以参考PM2005 Datasheet确定;
  3. 将下文中打印的面板与OLED模块贴合(提示:先点亮屏幕再贴合比较好确定位置),然后穿过提前开的孔后与前面板模块用双面胶贴合。

IO口参考

  1. 参考GitHub大佬所示,确定下载串口接线,确定GPIO0;
  2. LED:wifi-GPIO25、pm25-GPIO33、 co2-GPIO4、 tvoc-GPIO32、 内部-GPIO26;
  3. HDC1080、SGP30的IIC接口:SDA-GPIO19、SCL-GPIO21;
  4. PM2005、OLED屏幕的IIC接口:SDA-GPIO23、SCL-GPIO22;
  5. CM1106的UART接口:RX-GPIO16、TX-GPIO17;
  6. ZE08-CH2O的UART接口:RX-GPIO5、TX-GPIO18;
  7. 背面按钮:GPIO34。

前面板

参照我在立创开源硬件平台上的工程,在嘉立创打印即可。

软件部分

按格式读取各传感器数据并显示在屏幕上,同时将数据发送到局域网内的Influxdb上保存。详细过程参见代码,并不复杂,部分有待改进,仅供参考使用。

注:

  1. 代码基于PlatformIO上的IDF版创建,需要在VS Code上添加相应的插件后编译使用;
  2. 代码中写死了部分个人的配置,如WIFI、Influxdb的相关信息,需要修改。但都提到了相对应的配置类中,很好改的;
  3. 初次使用请在初始化后wifi连接前添加休眠代码,以便有时间连按三下按钮,重置存储中的配置。

最终效果

插曲

  1. 在使用u8g2测试OLED屏幕的时候,字体库中包含特殊字符(\u2082),但是在Arduino环境下始终无法显示,后更换到我的IDF工程中却可以正常显示。经过一番折腾,查明Arduino环境下载的u8g2库最新版是2022年发布的v2.33.15版,而我的IDF工程中引入的是github上的最新版,在作者的ChangeLog中有说明对这个区的字符支持。之后将最新版替换Arduino的库版本后,却在默认配置下报编译错误。经过源码查看,发现问题,最终以创建PR并被作者接受结束此事。
  2. 在使用嘉立创EDA专业版设计新面板的时候更新至v2.0.26版本,结果2D及3D预览无法打开。在晚上提交反馈后,嘉立创的工作人员第二天一早就电话回访及提供上一个版本供临时使用,并最终在18号的v2.0.28版中修复BUG。

参考

  1. B站大佬视频
  2. GitHub大佬项目
  3. ESP-IDF 编程指南
  4. CM1106 Datasheet
  5. HDC1080 Datasheet
  6. PM2005 Datasheet
  7. SGP30 Datasheet
  8. ZE08-CH2O Datasheet