本帖内容为82C52单片机通过wifi模块(ESP8266)将温度传感器(DS18B20)的温度数据通过HTTP协议上传到OneNET云平台。
所需的硬件设备:
单片机一块;
ESP8266模块一个;
DS18B20一个。
软件:
需要在OneNET平台注册一个账号,并建立相关产品设备。
如图所示:
部分代码如下:
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit DQ=P2^4;
sbit k1=P1^0;
uchar aa[1]="";
uint i,temp;
void delay(uint i) //延时5us
{
do
{
_nop_();
_nop_();
_nop_();
i--;
}
while(i);
}
void delay1(uint z) //延时1ms
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void sendChar(uchar a) //单片机发送一个字节
{
SBUF = a;
while(TI==0);
TI=0;
}
void sendString(uchar *s) //发送一个字符串
{
while(*s!='\0')
{
sendChar(*s);
s++;
}
}
void init()
{
/*串口中断定时器初始化*/
TMOD=0x20; //定时器1工作在方式2
TH1=0xfd; //波特率为9600,精振为11.0592MHz
TL1=0xfd;
REN=1; //启动串行口接收数据
SM0=0; //串口工作在方式1
SM1=1; //串行口工作方式选择
EA=1; //打开总中断
TR1=1; //打开定时器中断
/*esp8266初始化*/
delay1(1000);
sendString("AT+CWMODE=3\r\n"); //设置WIFI应用模式
delay1(1000); //设置WIFI应用模式
sendString("AT+RST\r\n"); //重置WIFI模块
delay1(1000);
sendString("AT+CIFSR\r\n"); //查询本地IP
delay1(1000);
sendString("AT+CWJAP=\"123456\",\"wds123456\"\r\n");//连接无线路由器 //需要修改成你的热点名称和密码
delay1(5000);
}
void chuansu() //单片机通过8266给OneNET传送数据
{
sendString("AT+CIPSTART=\"TCP\",\"183.230.40.33\",80\r\n");//和服务器建立TCP连接
delay1(1000);
sendString("AT+CIPMODE=1\r\n"); //进入透明传输模式
delay1(1000);
sendString("AT+CIPSEND\r\n"); //开始传输
delay1(1000);
sendString("POST /devices/527602572/datapoints?type=3 HTTP/1.1\r\n"); //需要修改成你自己的id
delay1(1000);
sendString("api-key:sggrqbMr4YanhJ2YyjP6E=EwWd4=\r\n"); //需要修改成你的api-key
delay1(1000);
sendString("Host:api.heclouds.com\r\n");
delay1(1000);
sendString("Content-Length:11\r\n");
delay1(1000);
sendString("\r\n");
delay1(5000);
sendString("{\"temp\":");
delay1(1000);
sendString(aa); //aa为温度数据
delay1(1000);
sendString("}");
delay1(1000);
sendString("\r\n");
delay1(1000);
ES=1; //开串口中断
}
将温度上传到OneNET.zip
(29.01 KB, 下载次数: 743)
(有不懂或者不完善的地方欢迎大家评论)
|