51单片机通过esp8266和温度传感器将温度显示到手机上

发布者:荒火最新更新时间:2019-12-18 来源: 51hei关键字:51单片机  esp8266  温度传感器 手机看文章 扫描二维码
随时随地手机看文章

需要的硬件:51单片机,ESP8266(wifi模块),DS18b20(温度传感器)
需要的软件:


手机要下载一个网络调试助手,浏览器就有。
         

部分代码:
#include
#include
#define uint unsigned int
#define uchar unsigned char
sbit DQ=P2^4;
sbit k1=P1^0;
sbit fmq=P1^4;
char receiveTable[20]=""; 
char aa[1]=""; 
uint temp,shi,ge,a,i,flag;
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!='')
        {
                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(100);//延时
        sendString("AT+CWMODE=2rn");            //设置ESP8266工作在station模式
        delay1(100);        
//        sendString("AT+CIOBAUD=9600rn");        //设置9600波特率,因为esp8266波特率默认是115200
//        delay1(10);        
        sendString("AT+CIPMUX=1rn");                  //允许多连接
        delay1(100);
        sendString("AT+CIPSERVER=1,8080rn"); //设置端口号
        delay1(100);
        ES=1;                                          //开串口中断
}

void DS()        //初始化
{
        uchar x=0;
        DQ=1;                  //首先先拉高电平,为复位做准备
        delay(10);          //延迟一下
        DQ=0;                  //将电平拉低,延迟至少480us
        delay(120);          //一次为5us,此处延迟600us,足以等待存在脉冲
        DQ=1;                  //复位信号给出后,将电平拉高,等待获取存在脉冲
        delay(16);          //延迟15~60us,此处延迟90us,足以给存在脉冲时间
        x=DQ;                  //读取存在脉冲
        delay(80);          //读取存在脉冲,存在脉冲至少为60us到240us的低电平信号,这里给出400us
        DQ=1;                 
}
uchar Read1b()    //读取1个字节
{
        uchar i=0;
        uchar dat=0;
        for(i=0;i<8;i++)
        {
                DQ=0;                 //数据线拉成低电平,表示读数据的开始
                delay(1);                 //读数据时,需要低电平保持至少1us
                DQ=1;                         //释放数据总线
                dat>>=1;                 //一位一位的保存读取到的数据,所以需要移位处理
                if(DQ)                         //读取数据的高电平
                dat|=0x80;                 //与操作一下,得到我们需要的数据,读取数据需要在15us内读取,这样才能保证读取的数据是正确的
                delay(11);
        }
        return(dat);
}
void Write1b(uchar dat)
{
        uchar i=0;
        for(i=0;i<8;i++)
        {
                DQ=0;
                _nop_();
                DQ=dat&0x01;
                delay(12);
                DQ=1;
                dat>>=1;
                delay(5);        
        }                                                  
}                                   
uint Get()
{
        uchar templ,temph,tt;
        uint t;
        DS();                                   //初始化
        Write1b(0XCC);           //因为我们是一个单片机和一个DS18B20连接,故在对ROM指令操作时,选择0xCC跳过ROM指令,不对ROM编码作出反应
        Write1b(0x44);           //RAM操作中的温度转换指令,将转换的温度存入RAM的1,2地址
        DS();                                   //初始化
        Write1b(0xcc);           //同上
        Write1b(0xbe);           //从RAM中读取数据,从0地址读到9地址
        templ=Read1b();           //从DS18B20中读取温度数据中低八位
        temph=Read1b();           //从DS18B20中读取温度数据中的高八位,温度数据由16位数据组成
        t=temph;
        t<<=8;
        t=t|templ;
        tt=t*0.0625;                   /*真实温度的转换*/
        return(tt);                
}
void show(uint wd)
{
        aa[0]=wd/10+'0';          
        aa[1]=wd%10+'0';
}
void main()
{        

        init();
        while(1)
        {
                show(Get())        ;
        }
}

[1] [1]
关键字:51单片机  esp8266  温度传感器 引用地址:51单片机通过esp8266和温度传感器将温度显示到手机上

上一篇:51单片机红外线接收系统设计文档
下一篇:基于51单片机的nrf24l01无线的接受和发射程序

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved