##### 目录顺序 :(可能有点长,方便大家跳过)
#### 图片 ( 啥也憋说,上图!
#### 硬件
1. 简介(特色)
2. 原件选型
3. 设计说明
##### 软件
1. 简介
2. 程序代码说明
#### 遇到的困难
##### 演示 / 教程视频
\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-分割线\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
# 图片
![image.png](//image.lceda.cn/pullimage/YmwPwdEC134wsnACMxGwe0OvUljBDtq5ZXeShDXs.png)![image.png](//image.lceda.cn/pullimage/zih8Y8FVinqcCkB3oU0AkKbo4Ca13YudI6QWKwl2.png)![image.png](//image.lceda.cn/pullimage/h6po4mjvyCE8KHqCXIqw28cpIQCm4DMPnP7gIeDc.png)
# 硬件
## 简介
### 本工程的基于ESP-07的智能物联网功率计,带小夜灯,特色有:
| 特色 | 说明 |
| --- | --- |
| oled显示 | 可将电流电压,功率,用电量,温度和湿度打印在oled屏幕上 |
| 隔离式电流电压采集 | 比较起非隔离采样更加安全 |
| 触摸控制 | 用手按按键很累,所以加了触摸 ( 雾 |
| 语音控制 | 可接入小爱同学(可手机),小度,天猫等智能音箱 |
| PCB大小 | 控制在约61x64mm内,可以轻松塞入86暗盒内 |
| 集成插座 | 不需要再另外接输出线,直接通过板载插座输出 |
| ESP07侧焊 | 很好的解决了ESP模块的面积占用问题,并且也解决了信号被覆铜挡住的问题 |
| WS2812小夜灯 | 可以设置多种光效,例如冷光白,暖光白, 最重要的是RGB增加100%性能 ( 雾 |
| TypeC接口 | 与现在大部分手机数据线通用,不必另外寻找线材 |
| WS2812指示灯 | 可在固件内设置不同功率显示的不同颜色,小夜灯开启时指示灯自动关闭 |
| 屏幕自动关闭 | 通过触摸开关来唤醒屏幕(可在固件内设置oled存活时间) |
| 温湿度传感器 | 可采集家中的温湿度数据并传送到伺服器,在app中观看图表 |
## 原件选型
| 种类 | 名称 | 说明 |
| --- | --- | --- |
| WIFI模块 | ESP-07 | 占用面积小,io够用,自带陶瓷天线,信号比PCB天线更强 |
| 电压电流采样芯片 | HLW8032 | 只需要一个引脚就可以跟单片机通讯,电路简单 |
| 继电器 | HK4100F-DC5V-SHG | 虽然只有3a电流但600w已经足够使用,重点是小! |
| 温湿度传感器 | SHTC3 | 采用i2c通讯方式,可与oled并联,减少io使用
并且芯片超小 ! 电路超简单 ! |
| 指示灯/小夜灯 | WS2812B-3535 | 可以设置多种颜色,并且只需要单个io即可设置多颗led的光效 |
| 触摸芯片 | SD8223LC | 具有自校准功能并且可以通过电阻设置不同工作模式 |
| 串口芯片 | ch340c | 无需外接晶振,体积小,为什么不适用其他更小的e或者n?
因为ESP的自动下崽需要同时使用dtr与rts引脚 |
## 设计说明
![image.png](//image.lceda.cn/pullimage/WB9CDH3wpxsX3lHpencN7PrZM9r6UwMr1U2Xe4Jv.png)
### ↑ 电流走向以及电路总览
### 电路分为2部分:强电和弱电
#### 强电部分主要有 : 电源输入,acdc模块,电流电压采集电路,继电器以及电源输出插座
#### 弱电部分主要有 :ESP最小系统电路,自动下崽电路,复位电路,以及5个外设的电路
![](//image.lceda.cn/pullimage/4LmW58CS7aG7tzzSWORmhoJCQ6QGLaSDuVP2gEZ3.png)
### 从上图可见整个PCB很清楚的分成了强弱电2部分(除了led,因为要4角都有)
#### 图里面最小的电路莫过于SHTC3温湿度传感器的电路,真的是比led电路还小!
### 这是ESP07的焊接图
![image.png](//image.lceda.cn/pullimage/W08wS86mfSJeMdkgND4i9hlu59sfPC8PduyHwLZR.png)
### 这样很好的解决了ESP模块占用大面积的问题,并且也解决了信号被覆铜/走线挡住的问题
![image.png](//image.lceda.cn/pullimage/n7MSPKmoqnbbYCq4VEVb5pW3ZKmBg82LdaqzJIYi.png)
![image.png](//image.lceda.cn/pullimage/HRbPteym9ZJpUNOua4AobU9xDTESxOT9olueyiDt.png)
### 温度传感器附近没有元器件,以减少其他元器件的发热对测量造成误差
![image.png](//image.lceda.cn/pullimage/qDvqtA2Rz1eIIFTJSiaiPznocU0OaFpPTmxrUWDu.png)
### 每一颗WS2812旁边都有一颗0.1uf的电龙,进行滤波,保护灯珠
![image.png](//image.lceda.cn/pullimage/g73Z6iEEEYtPsNXLW4sB6LACA1WnnSWfFjxOSey5.png)
### 采用的电源模块只有2x3x3cm,体积超小,并且带3,3v输出,不用在pcb上再搭5v到3,3v的降压电路
![image.png](//image.lceda.cn/pullimage/I6JQN8Izb0TkQDGIOByG2yiDzVZjXKPoN7XV1iJd.png)
### 触摸电路采用的是SD8223LC, 具有自校准功能并且可以通过电阻设置不同工作模式,通过焊盘接线到覆铜小板来延伸操作距离
### 覆铜小板 ↓ ( 5个孔是因为方便焊接
![image.png](//image.lceda.cn/pullimage/DFudqjOfgPWKgAK7mwuEjGkpabdybzYO4vcjTCMP.png)
# 软件
## 简介
### 程序采用了Arduino进行编程,主要使用的库有:
| 库 | 说明 |
| --- | --- |
| Blinker | 程序核心库,Blinker 是一套跨硬件,跨平台的物联网解决方案
使用非常简单,支持多种设备 |
| Fastled | 用于控制WS2812的库 |
| HLW8032 | HLW8032电量计芯片的库 |
| SparkFun_SHTC3 | SparkFun SHTC3温湿度传感器的库 |
| OneButton | 一个简单的按键库,通过绑定回调函数来实现多种操作:单击双击长按等,
非常方便,不用自己写判断式 |
| Adafruit_SSD1306 | Adafruit的OLED库 |
| Adafruit_GFX | Adafruit的图形库,类似于u8g/u8g2 |
| 字库 | 使用 [http://oleddisplay.squix.ch/#/home](http://oleddisplay.squix.ch/#/home) 创建的10px和14px的字库
用于oled显示,因为Adafruit GFX库自带的字库太少了 |
### 程序总览
| 行数 | 说明 |
| --- | --- |
| 5-15 | 库定义 |
| 17-19 | 定义WIFI SSID 密码 以及Blinker秘钥 |
| 20-68 | 各种参数定义 |
| 70-92 | 绑定oled屏幕,HLW8032,SHTC3,blinker组件,OneButton组件 |
| 94-107 | 各种常量定义 |
| 109-150 | 自定义图标(oled显示) |
| 153-361 | blinker的各种定义,详见程序 |
| 363-386 | onebutton的回传函数 |
| 394-443 | setup函数 |
| 445-454 | loop函数 |
| 456-480 | 更新app图标以及更新传感器数据 |
| 497-501 | 蜂鸣器 |
| 503-512 | 指示灯 |
| 514-526 | 小夜灯定时器 |
| 528-530 | 将bool转换成string |
| 532-542 | 屏幕自动休眠 |
| 544-608 | 屏幕显示 |
### 其他更多详细的请看程序注释(注释打字打到我手酸)
# 遇到的困难
### 1, 二个人在香港,另外一个人在青岛,跨越整整半个中国,在调试以及完成作品都有极大的困难
### 2, 在第一次打板的时候,不知道因为什么而导致打出来的板子没有覆铜.最后打样第二块板子,幸亏课程延时了
### 3, 电脑上开不了CAD软件来绘制外壳的dxf文件,只能将LCEDA当成CAD来用
### 4,选错蜂鸣器,选了无源的,最后通过更改digitalWrite() → tone() 函数解决,并且选的只有65db,声音较小,另外蜂鸣器在第一代板子上是接在gpio2的,忘记了gpio2上带有板载led,所以蜂鸣器会一直响,虽然可以通过拉高引脚来阻止蜂鸣器响但led的功能就失去了,第二代板子将蜂鸣器接到了gpio13解决
### 5,调试时继电器一直保持高电平,点选开关并没有任何反应,最后通过在setup函数内加入pinMode定义继电器引脚为输出解决(pinMode我几乎没用过)
### 6, SHTC3 温湿度传感器读不出数据,然后发现是忘了加Wire.begin()函数
### 7, HLW8032 读不出数据,初步怀疑是跟板载的ch340冲突而不能从串口读出数据,测试员未起床,暂待解决(距离交作业还剩-1小时)
### 8 ,WS2812 不亮,程序是没问题的,最后发现是焊接问题,第一颗灯珠损坏了,但是这时候发现灯珠要用4颗,但只买了5颗,而板子上的灯珠拆下来已经坏了,剩下只有一颗灯珠可用.................这个故事教训我们买零件要买多点备件
![Cjpg](//image.lceda.cn/pullimage/9jQw6hUU5DwWe7yqt2KXNMafF7bZGLv5exgmc68h.jpeg)
![image.png](//image.lceda.cn/pullimage/yBnSc1kykBb0739qvBcoH8W890Sd2taYcPxEq4hq.png)
# 方方不起床,没照片没视频 ,md