小弟想采集数据上传yeelink云端,先用CH340发送AT指令到模块,之后可以实现上传没问题,之后用STC89C52单片机串口发送同样的数据前几步没问题,但是到了最后的POST部分就始终没反应了,求教大神帮忙看下到底是哪里的问题。这是用串口助手从单片机TX监测到的数据
这是直接用CH340直接给8266发送AT指令的截图
用CH340接上一图完成最后一步上传数据,也没有问题,已经成功上传在yeelink后台能看到数据了
这是直接用串口助手的TX和RX相连,然后发送最后一步post的内容,和单片机发送的也是一样的
这是用单片机的TX连8266的RX,然后串口助手监测8266的TX得到的数据,可以看到前几步得AT指令都已经接收并正常运行
但是再往后的POST操作就始终没有见到返回数据,按照刚才直接用CH340监测单片机和直接控制8266模块来看是单片机应该是已经发送了POST内容的,而8266如果接收到POST的内容按说应该会返回图3的内容。单片机是根据延时无脑发送的,所以不存在返回内容有误无法运行下一步的情况,所以还望有懂的大神指点一下问题出在哪里,感谢!
即便发送数据格式有误一样会返回内容提示数据格式错误,所以很奇怪的就是明明发送了数据出去却什么返回内容都没有
#include<reg51.h>
#include<intrins.h>
#include<string.h>
#include<stdio.h>
#define uchar unsigned char
#define uint unsigned int
void delay_1ms(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void uart_init(void)
{
TMOD=0x20; //定时计数器1,工作方式2
TH1=0xFD; //设置波特率9600
TL1=0xFD;
TR1=1;
SCON=0x50;
PCON=0x00;
EA=1;
ES=1;
TI=1; //若利用printf函数则TI初始值必须置1
}
void main()
{
uart_init();
delay_1ms(10000);
printf("AT+CIPMODE=1\r\n");
delay_1ms(5000);
printf("AT+CIPMUX=0\r\n");
delay_1ms(5000);
printf("AT+CWMODE=1\r\n");
delay_1ms(5000);
printf("AT+CIPSTART=\"TCP\",\"api.yeelink.net\",80\r\n");
delay_1ms(10000);
printf("AT+CIPSEND\r\n");
delay_1ms(1000);
while(1)
{
printf("POST /v1.0/device/359712/sensor/409957/datapoints HTTP/1.1\r\nHost: api.yeelink.net\r\nAccept: */*\r\nU-ApiKey: 2bfe6b2c563051e00edb1a227005916c\r\nContent-Length: 12\r\nContent-Type: application/json;charset=utf-8\r\nConnection: close\r\n\r\n{\"value\":25}\r\n");
delay_1ms(20000);
}
}
这是我单片机部分的代码
|