### 项目简介
* ESP-NOW 是一种由乐鑫公司定义的无连接 Wi-Fi 通信协议。在 ESP-NOW 中,应用程序数据被封装在各个供应商的动作帧中,然后在无连接的情况下,从一个 Wi-Fi 设备传输到另一个 Wi-Fi 设备。 CTR 与 CBC-MAC 协议 (CCMP) 可用来保护动作帧的安全。ESP-NOW 广泛应用于智能照明、远程控制、传感器等领域
* 开源的项目大多数都是关于ESP8266的WiFi功能的,基本没有ESP_NOW协议的,我觉得这个ESP_NOW其实很好,无论功耗,响应速度以及信号覆盖范围都要比315M/433M的模块要强,同时自带校验,实测下来很少出现丢包和错误的情况
* ESP_NOW网关的制作也相对315M/433M的模块要简单,使用另一块ESP8266或者ESP32就可以
- - -
### 项目功能介绍
* 硬件方面使用了ESP8266作为ESP_NOW开关的发送端,当开关没有按下的时候,ESP8266处于永久休眠状态,当开关按下的时候会对芯片reset同时锁存住按下的开关,芯片启动完成后读取端口状态就能判断是哪个按钮被按下,同时通过ESP_NOW协议发出数据,数据发完后再次进入休眠状态。
* 功耗方面,发射的时候大约20mA 休眠的时候不到5uA,如果不是很频繁的开关,一颗200mAH的锂电池估计能用一年
- - -
### 项目属性
目前该项目已经测试完毕,功能正常,已经投入使用
[![oaHa5R.jpg](https://z3.ax1x.com/2021/12/03/oaHa5R.jpg)](https://imgtu.com/i/oaHa5R)
* [x] 原理图设计
* [x] PCB图设计
* [x] PCB打样
* [x] 焊接测试
* [x] 功能测试
* [x] 程序测试
- - -
### 电路讲解
[![oabZz6.jpg](https://z3.ax1x.com/2021/12/03/oabZz6.jpg)](https://imgtu.com/i/oabZz6)
**电路中比较创新的部分在于这个复位同时锁存IO状态的电路,当开关按下去的时候,可以对RST进行复位,同时相应的端口拉高,待ESP8266检测完端口后再将端口电平拉低,解除锁存状态。**
- - -
### 软件
``` C
#include
extern "C" {
#include
}
#define espNowSwitchID 0x01
#define WIFI_CHANNEL 1
#define SEND_TIMEOUT 10000
#define SW1 14
#define SW2 12
#define SW3 13
#define K4 4
uint8_t remoteMac[] = {0x1A, 0xFE, 0x34, 0xCB, 0x68, 0x45};
/*发送数据定义
D0: espNow ID[0-255]
D1: keyValue[0-3]
D2: AD使能 0-未采集 1-已采集
D3-D4: AD数据[电池电压]
*/
uint8_t transferData[8] = {espNowSwitchID};//
volatile boolean readingSent;
uint8_t keyValue = 0;
void setup() {
if (digitalRead(SW1))keyValue = 1;
if (digitalRead(SW2))keyValue = 2;
if (digitalRead(SW3))keyValue = 3;
pinMode(SW1, OUTPUT);
pinMode(SW2, OUTPUT);
pinMode(SW3, OUTPUT);
digitalWrite(SW1, LOW);
digitalWrite(SW2, LOW);
digitalWrite(SW3, LOW);
WiFi.mode(WIFI_STA);
WiFi.begin();
if (esp_now_init() != 0) {
ESP.restart();
}
delay(1); // This delay seems to make it work more reliably???
esp_now_set_self_role(ESP_NOW_ROLE_CONTROLLER);
esp_now_add_peer(remoteMac, ESP_NOW_ROLE_SLAVE, WIFI_CHANNEL, NULL, 0);
esp_now_register_send_cb([](uint8_t* mac, uint8_t status) {
readingSent = true;
});
sendReading();
}
void loop() {
if (readingSent || (millis() > SEND_TIMEOUT)) {
ESP.deepSleep(0);
}
}
void sendReading() {
readingSent = false;
transferData[1] = keyValue;
esp_now_send(NULL, transferData, 8);
}
```
- - -
### 图片
[![oaH08x.jpg](https://z3.ax1x.com/2021/12/03/oaH08x.jpg)](https://imgtu.com/i/oaH08x)
[![oaHDxK.jpg](https://z3.ax1x.com/2021/12/03/oaHDxK.jpg)](https://imgtu.com/i/oaHDxK)
- - -
### 注意事项
* PCB里面HT7333的封装有问题!!!记得调过来
- - -
ID |
Name |
Designator |
Footprint |
Quantity |
1 |
100nf |
C1,C2,C3,C4,C5,C6 |
C0603 |
6 |
2 |
1u |
C7 |
C0603 |
1 |
3 |
220uF |
C8 |
CASE-B_3528 |
1 |
4 |
10uF |
C9,C10 |
C1206 |
2 |
5 |
PH2.0-2P |
CN1 |
CONN-SMD_PH2.0-1X2PW |
1 |
6 |
X1002WRS-06E-LPSWHF |
CN2 |
CONN-SMD_6P-P1.00_X1002WRS-06E-LPSWHF |
1 |
7 |
1N4007W |
D1,D2,D3 |
SOD-123FL_L2.7-W1.8-LS3.8-RD |
3 |
8 |
ESP-12F(ESP8266MOD) |
MK1 |
ESP-12F |
1 |
9 |
SS8550 |
Q1,Q2,Q5 |
SOT-23-3_L2.9-W1.3-P1.90-LS2.4-BR |
3 |
10 |
SS8050 |
Q3,Q4,Q6 |
SOT-23-3_L2.9-W1.3-P1.90-LS2.4-BR |
3 |
11 |
S8050 |
Q7 |
SOT-23(SOT-23-3) |
1 |
12 |
SI2305 |
Q8 |
SOT-23-3_L2.9-W1.3-P1.90-LS2.4-BR |
1 |
13 |
120 |
R1,R3,R6,R9,R10,R11,R23,R24,R25 |
R0603 |
9 |
14 |
10K |
R2,R4,R5,R7,R8,R12,R26,R27,R28 |
R0603 |
9 |
15 |
1K |
R13 |
R0603 |
1 |
16 |
10k |
R14,R15,R16,R17,R18 |
R0603 |
5 |
17 |
1k |
R19,R21 |
R0603 |
2 |
18 |
100k |
R20 |
R0603 |
1 |
19 |
4.7k |
R22 |
R0603 |
1 |
20 |
DTSM-62K-V-T/R |
SW1,SW2,SW3 |
KEY-SMD_4P-L6.2-W6.2-P4.50-LS9.0 |
3 |
21 |
HT7333-A |
U2 |
SOT-89-3_L4.5-W2.5-P1.50-LS4.2-BR |
1 |
展开
30
70
收藏到专辑