找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5847|回复: 5
打印 上一主题 下一主题
收起左侧

单片机+WiFi模块做的温度计

[复制链接]
跳转到指定楼层
楼主
         用USR-WIFI232-T串口联网模块和51单片机能做成一个可以无线上网的数字温度计,图1是该温度计的实物照片。温度计采用3.3V电池供电,可置于任何一个需要测量温度的地方,通过网络或手机即可读取测得的温度数据,十分方便。

1.1 WiFi温度计的硬件电路
图2 WiFi温度计电路原理图
              图2是WiFi温度计的电路原理图,图中温度传感器采用TMP102低功耗温度传感器,单片机是AT89C2051。
1.2 WiFi温度计的编程
              从图2可以看出,单片机的串口和USR-WIFI232-T模块的串口连在一起,来自网络的命令可以通过USR-WIFI232-T模块串口传送给单片机;单片机的数据也可以通过串口经USR-WIFI232-T模块传送到网络,USR-WIFI232-T模块是WiFi温度计无线上网的信道。WiFi温度计通过单片机串口接收来自网络的命令,然后根据命令把TMP102温度传感器测得的数据通过单片机串口发送给USR-WIFI232-T模块,USR-WIFI232-T模块把数据传到网络上。单片机收到网络命令即通过串口发送温度数据,这是WiFi温度计编程的关键,实际就是单片机串口编程,下面列出部分程序。
WiFi温度计编程
// WiFi温度计TMP102
  1. #include <reg51.H>
  2. #include <INTRINS.H>//_nop_()
  3. #include <IIC.H>              // IIC总线函数包

  4. #define AddWr 0x90              //tmp102 WRITE ADD
  5. #define AddRd 0x91              //tmp102 READ ADD

  6. uchar dis_buf[4]={1,2,3,4};              //显示数据缓存数组
  7. uchar RS232_BUF[7];                                 //RS2232发送缓存
  8. //-------------------------------------
  9. //串口初始化
  10.               void Init_UART(void)
  11. {
  12.               SCON=0x50;              //串口工作方式1
  13.               //PCON=0x80;//SMOD=1波特率=19200
  14.               TMOD=0x20;              //定时器1设置为定时器方式1
  15.               TH1=0xFD;               //波特率=9600                                         
  16.               TL1=0xFD;
  17.               TR1=1;            
  18. }
  19. //串口与上位机通信
  20. //-----------------------------------------------
  21. void TX_Byte(uchar message)//串口发送字节
  22. {
  23.               SBUF=message;
  24.               while(TI==0);
  25.               TI=0;
  26. }
  27. //-----------------------------------------------
  28. uchar Recive(void) //串口接收
  29. {
  30.               uchar x;
  31.                 while(RI==0);
  32.               RI=0;
  33.                 x=SBUF;
  34.                 return x;
  35. }
  36. //--------------------------------------
  37. void del_ms(uint x) //延时
  38. {
  39.               uchar j;
  40.               while(x--)
  41.               {for(j=0;j<125;j++);}
  42. }

  43. //------------------------------------------------------------------------
  44. void TX_Temp(void)//返回温度数据
  45. {
  46.     union
  47.   {
  48.     uchar c[2];
  49.     uint x;
  50.   }temp2;   

  51.     del_ms(10);                       
  52.     temp2.x=tmp102_rd();             //读两字节温度数据

  53.         if(temp2.c[0]&0x80)                                 //若为负数
  54.           {
  55.             temp2.x=~(temp2.x)+1;                             //取反加1           
  56.             RS232_BUF[2]='-';                     //负号           
  57.           }

  58.           dis_buf[3]=temp2.c[0]/100;     //百位  
  59.           dis_buf[2]=(temp2.c[0]%100)/10;//十位
  60.           dis_buf[1]=temp2.c[0]%10;      //个位
  61.           temp2.c[1]>>=4;
  62.           dis_buf[0]=xiaoshu(temp2.c[1]);//小数
  63.                                          

  64.           RS232_BUF[2]=dis_buf[3]+0x30;                          
  65.           RS232_BUF[3]=dis_buf[2]+0x30;
  66.           RS232_BUF[4]=dis_buf[1]+0x30;
  67.           RS232_BUF[5]=dis_buf[0]+0x30;

  68.         //发送4位温度数据,温度为十进制格式
  69.                             TX_Byte(RS232_BUF[2]);                     //温度整数部分百位
  70.                             TX_Byte(RS232_BUF[3]);                     //十位
  71.         TX_Byte(RS232_BUF[4]);                     //个位
  72.         TX_Byte('.');                                                 //小数点
  73.         TX_Byte(RS232_BUF[5]);                     //小数
  74.         TX_Byte(' ');                                                 //空格
  75.                                           

  76. }
  77. //-------------------------------------------------------------------
  78. void TX_Strings(char *string)//发送字符串
  79. {
  80.     while (*string) {
  81.          TX_Byte(*string++);
  82.     }
  83. }
  84. //++++++++++++++++++++++++++++++++++++++++++++++++++
  85. void main()
  86. {
  87.               uchar cmd;
  88.               Init_UART();//串口初始化
  89.               del_ms(100);              

  90.               while(1)
  91.               {
  92.                 cmd=Recive();
  93.                 del_ms(20);
  94.                 //TX_Byte(cmd);

  95.                             switch (cmd)
  96.                             {                                                                 //根据收到的命令返回
  97.         case '1':                                   
  98.           TX_Strings("Wifi Thermometer\r\n");//返回标题
  99.           TX_Strings("tanggong\r\n");
  100.             break;
  101.         case '2':   
  102.           TX_Temp();                        //返回温度数据
  103.           TX_Strings("\r\n");                                      //换行
  104.             break;
  105.         case '3':                                   
  106.           TX_Byte(cmd);                                //返回收到的命令
  107.           TX_Strings("\r\n");                                      //换行
  108.             break;
  109.         default:break;
  110.                             }
  111.               }

  112. }
复制代码

1.3 WiFi温度计的使用
              用电脑或手机上网都可以控制WiFi温度计,读者可以自己编写电脑或手机使用的软件控制WiFi温度计,也可以使用网上现成的软件。限于篇幅这里只介绍如何用现成的手机软件来控制WiFi温度计,使用的手机软件是“网络调试助手”,可在网上下载。
              由于USR-WIFI232-T模块设置在AP+STA模式,故此两种模式都可以工作,在这两种模式时USR-WIFI232-T模块的端口号是相同的,都是8899,但两种模式的IP地址是不同的,在AP模式USR-WIFI232-T模块的IP地址是固定的“10.10.100.254”;在STA模式USR-WIFI232-T模块的IP地址是由网络随机分配的一个不固定地址,需要用搜索软件搜索模块,获得这个IP地址,按照这个IP地址才能和模块建立连接。因此两种模式的使用方法不同,下面分述在两种工作模式时的使用方法。
16.4.1 WiFi模块在AP模式
              给WiFi温度计通电,待模块启动状态指示灯D2亮了以后,打开手机在WLAN无线网络连接列表中看是否有USR-WIFI232-T模块,无线信号强度是否正常,若正常则按以下步骤进行:
  • 接USR-WIFI232-T模块。如图3所示。
图3 手机连接模块
②显示“已连接”之后,打开手机中安装的“网络调试助手”应用软件,在“tcp client ”选项卡下面点“增加”,设置IP地址为模块的默认IP地址10.10.100.254,端口为8899,如图4所示,在左边会显示连接的IP地址和端口号,说明已连接到WiFi温度计。
③在下面的发送文本框中输入发送命令,命令1是返回标题,命令2是返回温度值。单击发送按钮,就会收到返回的数据,显示在手机屏幕中间,如图4所示。“031.1”是返回的温度数据。
图4 手机发命令接收温度计数据
完整的Word格式文档51黑下载地址:
WiFi模块做的温度计.docx (230.65 KB, 下载次数: 39)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:464966 发表于 2019-1-8 22:33 | 只看该作者
谢谢
回复

使用道具 举报

板凳
ID:104846 发表于 2019-5-4 19:37 | 只看该作者
不错,要是有本地显示就完美了
回复

使用道具 举报

地板
ID:1053064 发表于 2022-11-23 15:27 | 只看该作者
很不错,只是刚开始有问题
回复

使用道具 举报

5#
ID:1053064 发表于 2022-11-23 15:28 | 只看该作者
很不错,但是代码是要改过
回复

使用道具 举报

6#
ID:433219 发表于 2022-11-23 21:12 | 只看该作者
  本地局域网显示?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表