智能插座示例代码讲义
智能插座示例代码讲义1.2
[TOC]
# 讲解思路
# 原理图讲解(略)
# 示例代码讲解
- 功能点
- 硬件连接
- 接口定义
- 关键代码
- 工程代码解读
- 编译,下载
- 效果演示(略)
# 原理图简要讲解(略)
# lesson01-led
# 功能点
led初始化
led开,关,翻转
# 硬件连接
IO2<------>LIGHT(LED)
# 接口定义
//led.h
/**
* @brief led_init初始化
* @retval 无
* @note 无
*/
void led_init(void);
/**
* @brief led_set设置
* @param(in) value led开和关值:1开;0关
* @retval 无
* @note 无
*/
void led_set(unsigned char value);
/**
* @brief led_toggle状态反转
* @retval 无
* @note 无
*/
void led_toggle(void);
/**
* @brief led状态值获取
* @retval led状态值
* @note 无
*/
unsigned char led_status_get();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 关键代码
1)模式配置
// LED:配置gpio2为output mode
pinMode(LED, OUTPUT);
2)控制led开关
digitalWrite(LED, value);
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 工程代码解读
vscode打开工程代码
# 编译,下载
# 效果演示(略)
# lesson02-relay
# 功能点
relay初始化
relay开,关,翻转
# 硬件连接
IO13<------>RELAY
# 接口定义
//relay.h
/**
* @brief 继电器初始化
* @retval 无
* @note 无
*/
void relay_init(void);
/**
* @brief 继电器状态反转
* @retval 无
* @note 无
*/
void relay_toggle();
/**
* @brief 继电器设置
* @param(in) value 继电器状态值,1:开;0关
* @retval 无
* @note 无
*/
void relay_set(unsigned char value);
/**
* @brief 继电器状态获取
* @retval 继电器状态值,1:开;0关
* @note 无
*/
unsigned char relay_status_get();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 关键代码
1)模式配置
// RELAY:配置gpio13为output mode
pinMode(RELAY, OUTPUT);
2)控制relay开关
digitalWrite(RELAY, value);
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 工程代码解读
vscode打开工程代码
# 编译,下载
# 效果演示(略)
# lesson03-key
# 功能点
key初始化
key输入检测
# 硬件连接
IO0<------>KEY
# 接口定义
//key.h
/**
* @brief key_init
* @retval 无
* @note 无
*/
void key_init(void);
/**
* @brief key_press_wait
* @retval 无
* @note 无
*/
unsigned char key_status_get();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 关键代码
1)模式配置
// KEY:配置gpio0为intput mode
pinMode(KEY, INPUT);
2)读取key输入信号是高还是低
digitalRead(KEY);
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 工程代码解读
vscode打开工程代码
# 编译,下载
# 效果演示(略)
# lesson04-hlw8012
# 功能点
hlw8012初始化
电压,电流,功耗读取
# 硬件连接(略)
# 接口定义
//hlw8012.h
double getCurrent();
unsigned int getVoltage();
unsigned int getActivePower();
1
2
3
4
2
3
4
# 关键代码
1)HLW8012初始化
// Initialize HLW8012
hlw8012.begin(CF_PIN, CF1_PIN, SEL_PIN, CURRENT_MODE, true,2000000);
hlw8012.setResistors(CURRENT_RESISTOR, VOLTAGE_RESISTOR_UPSTREAM, VOLTAGE_RESISTOR_DOWNSTREAM);
2)电压,电流,功耗获取
hlw8012.getVoltage();
hlw8012.getCurrent();
hlw8012.getActivePower();
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 工程代码解读
vscode打开工程代码
# 编译,下载
# 效果演示(略)
# lesson05-wifi
# 功能点
wifi初始化,连接
# 硬件连接
# 接口定义
# 关键代码
// 连接WiFi
WiFi.begin(wifiSsid, wifiPassword);
// 打印wifi信息
Serial.printf("SSID:%s\r\n", WiFi.SSID().c_str());
Serial.println(WiFi.localIP());
Serial.println(WiFi.subnetMask());
Serial.println(WiFi.gatewayIP());
Serial.println(WiFi.dnsIP());
Serial.println(String("\"mac\":") + WiFi.macAddress());
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 工程代码解读
vscode打开工程代码
# 编译,下载
# 效果演示(略)
# lesson06-tcpClient
# 功能点
tcpClient连接,数据发送和接收
# 硬件连接
# 接口定义
# 关键代码
// 连接WiFi
WiFi.begin(wifiSsid, wifiPassword);
// 连接tcp服务器
client.connect(tcpServerAddress, tcpServerPort)
//发送数据
client.print(sendData);
//接收数据
recvData = client.readStringUntil('\n');
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 工程代码解读
vscode打开工程代码
# 编译,下载
# 效果演示(略)
# lesson07-tcpServer
# 功能点
tcpServer连接,数据发送和接收
# 硬件连接
# 接口定义
# 关键代码
// 连接WiFi
WiFi.begin(wifiSsid, wifiPassword);
// 启动tcp服务器
server.begin();
//判断是否有客户端连接
client = server.available();
//接收数据
String revcData = client.readStringUntil('\n');
//发送数据
client.print(sendData);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 工程代码解读
vscode打开工程代码
# 编译,下载
# 效果演示(略)
# lesson08-httpClient
# 功能点
httpClient连接,数据发送和接收
# 硬件连接
# 接口定义
# 关键代码
// 连接WiFi
WiFi.begin(wifiSsid, wifiPassword);
// 连接http服务器
client.connect(httpServerAddress, httpServerPort)
//接收数据
String revcData = client.readStringUntil('\n');
//组装http格式消息,发送数据
sprintf(message, "GET %s%s HTTP/1.1\r\nHost:%s\r\nConnection: keep-alive\r\n\r\n",
url, fileName, httpServerAddress);
client.print(message);
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 工程代码解读
vscode打开工程代码
# 编译,下载
# 效果演示(略)
# lesson09-httpServer
# 功能点
httpServer启动,数据发送和处理来自客户端的请求
# 硬件连接
# 接口定义
# 关键代码
// 连接WiFi
WiFi.begin(wifiSsid, wifiPassword);
1
2
3
2
3
//适用于esp8266
// 启动http服务器
server.on("/", handleIndex);
server.begin();
//返回发送数据
server.send(200, "text/html", "hi,qianyetech");
//处理来自客户端的请求
server.handleClient();
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
//适用于esp32
// 启动http服务器
server.begin();
//监听是否有客户端可获取
WiFiClient client = server.available();
//读取数据和回复get请求
String request = client.readStringUntil('\r');
client.readStringUntil('\n');
if (request.startsWith("GET"))
{
if (request.indexOf("/") != -1)
{
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
client.println("<h1>hi,qianyetech</h1>");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 工程代码解读
vscode打开工程代码
# 编译,下载
# 效果演示(略)
# lesson10-mqtt发布与订阅
# 功能点
mqtt服务连接,话题订阅和发布
# 硬件连接
# 接口定义
# 关键代码
// 连接WiFi
WiFi.begin(wifiSsid, wifiPassword);
// mqtt连接
mqttClient.connect(clientId.c_str(), NULL, 0, true,NULL)
//订阅和发布
mqttClient.subscribe(topic, 0);
mqttClient.publish(topic, payload, retain);
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 工程代码解读
vscode打开工程代码
# 编译,下载
# 效果演示(略)
上次更新: 2024/12/22, 16:46:08