keil5,stc89c52rc,esp8266-01s,串口
用keil5写串口,以便发送AT指令,飞燕平台接收解析到温度值,实现用云智能远程查看温度值,当然,这只是串口的代码,
#include <reg52.h>
#include <stdio.h>
#include <string.h>
#include "DS18B20.h"
#define uchar unsigned char //0-255
void UartInit(void)
{
SCON = 0x50; //串口工作模式1
TMOD &= 0x0F; //清空定时器1模式位
TMOD |= 0x20; //设置定时器1为模式2(8位自动重装载)
TL1 = 0xFD; //设置定时初始值
TH1 = 0xFD; //设置定时重载值
TR1 = 1; //启动定时器1
}
//串口延时
void delay_uart(short ms)
{
short i, j;
for (i = 0; i < ms; i++)
{
for (j = 0; j < 1141; j++);
}
}
// 串口发送单个字符
void uartSendChar(unsigned char c)
{
SBUF = c;
while (!TI); // 等待发送完成
TI = 0; // 清除发送完成标志
}
// 串口发送字符串
void uartSendString(const char* str)
{
while (*str)
{
uartSendChar(*str++);
}
}
void Send_AT_Cmd()
{
uartSendString("AT+CIPSNTPCFG=1,8,\"ntp1.aliyun.com\"\r\n");
delay_uart(300);
uartSendString("AT+MQTTUSERCFG=0,1,\"NULL\",\"vyjNlubh0QeZW06dprJi&a1EekF90GyL\",\"c199f60d4f0b08a7ca7e2ccbcb193b1e93ff8e10d677eebbb991fea908dd92c9\",0,0,\"\"\r\n");
delay_uart(300);
uartSendString("AT+MQTTCLIENTID=0,\"a1EekF90GyL.vyjNlubh0QeZW06dprJi|securemode=2\\,signmethod=hmacsha256\\,timestamp=1681564451348|\"\r\n");
delay_uart(300);
uartSendString("AT+MQTTCONN=0,\"a1EekF90GyL.iot-as-mqtt.cn-shanghai.aliyuncs.com\",1883,1\r\n");
delay_uart(300);
uartSendString("AT+MQTTSUB=0,\"/sys/a1EekF90GyL/vyjNlubh0QeZW06dprJi/thing/service/property/set\",1\r\n");
delay_uart(300);
}
void printTemp(float temp)
{
char String_temp_at[128] = "AT+MQTTPUB=0,\"/sys/a1EekF90GyL/vyjNlubh0QeZW06dprJi/thing/event/property/post\",\"{params:{temperature:%.1f}}\",1,0\r\n";//字符串格式
char buffer[256]; // 缓冲区,用于存储转换后的字符串
sprintf(buffer, String_temp_at, temp); // 将温度值转换为字符串格式
uartSendString(buffer); // 发送字符串到串口
}
void main()
{
UartInit(); // 初始化串口
Send_AT_Cmd();
while (1)
{
float temp = ReadTemp()/10.0;
printTemp(temp);// 将温度值打印到串口
delay_uart(600); // 延时一段时间
}
}