51单片机 ESP-01传输温度的程序
时间: 2023-07-14 22:13:57 浏览: 112
51单片机温度采集程序,在Windows平台用MFC开发的程序,通过串口通信与单片机相连,单片机通过ADC采集温度数据
以下是一个使用51单片机和ESP-01模块传输温度的简单程序:
```
#include <reg51.h>
#include <stdio.h>
#include <string.h>
// 定义ESP-01模块的串口通信端口
sbit ESP_TX = P3^1; // ESP-01模块的TX端口
sbit ESP_RX = P3^0; // ESP-01模块的RX端口
// 定义温度传感器的端口
sbit DQ = P1^0; // DS18B20温度传感器的DQ端口
// 定义全局变量
float temperature = 0; // 存储温度值
// 函数声明
void delay(int time);
void init_serial();
void send_string(char *str);
unsigned char read_byte();
void write_byte(unsigned char byte);
float read_temperature();
void main() {
char buffer[50]; // 存储发送给ESP-01模块的字符串
init_serial(); // 初始化串口通信
while(1) {
temperature = read_temperature(); // 读取温度值
sprintf(buffer, "温度值: %.2f\r\n", temperature); // 格式化字符串
send_string(buffer); // 发送字符串到ESP-01模块
delay(1000); // 延时1秒
}
}
// 延时函数
void delay(int time) {
int i, j;
for(i = 0; i < time; i++) {
for(j = 0; j < 120; j++);
}
}
// 初始化串口通信
void init_serial() {
TMOD = 0x20;
TH1 = 0xFD;
TL1 = TH1;
TR1 = 1;
SM0 = 0;
SM1 = 1;
REN = 1;
}
// 发送字符串到ESP-01模块
void send_string(char *str) {
while(*str) {
write_byte(*str++);
}
}
// 读取一个字节
unsigned char read_byte() {
while(!RI);
RI = 0;
return SBUF;
}
// 发送一个字节
void write_byte(unsigned char byte) {
SBUF = byte;
while(!TI);
TI = 0;
}
// 读取温度值
float read_temperature() {
unsigned char tempL, tempH;
float temp;
write_byte(0xcc); // 跳过ROM指令
write_byte(0x44); // 温度转换指令
delay(1000); // 等待温度转换完成
write_byte(0xcc); // 跳过ROM指令
write_byte(0xbe); // 读取温度指令
tempL = read_byte(); // 读取低字节
tempH = read_byte(); // 读取高字节
temp = (tempH << 8) + tempL; // 合并温度值
temp = temp * 0.0625; // 计算实际温度值
return temp;
}
```
此程序通过DS18B20温度传感器读取温度值,并将其发送到ESP-01模块。需要注意的是,ESP-01模块的TX端口需要连接到单片机的RX端口,RX端口需要连接到单片机的TX端口。此外,还需要在ESP-01模块中配置正确的WiFi连接信息,以便将温度值发送到云端或其他设备。
阅读全文