前言: 最近在指导朋友毕设时发现的一个比较简单实用的功能
实现功能: 将温度数据上传到手机APP
所需材料: 1、51单片机 2、WIFI模块:ESP8266-01S 3、温度传感器:DS18B20 4、手机APP:TCP连接
接线说明: ESP826601S: TX–P30 RX–P31 VCC–3.3V GND–GND DS18B20: IO–P37
注意事项: 1、由于51单片机的波特率是9600,而WiFi模块的默认波特率是115200,故需要修改WIFI模块的波特率。 使用USB转TTL的模块发送AT指令修改:AT+UART=9600,8,1,0,0 2、ESP8266 作为server 有超时机制,如果连接建立后,一段时间内无数据来往,server 会将client 踢掉。请在 PC 工具连上 ESP8266 后建立一个2s 的循环数据发送,用于保持连接。 3、下载程序时先断开WIFI模块的接线,因为51单片机是通过串口下载程序的,而WIFI模块接在串口上会导致下载失败。 4、下载好程序后,先等个几秒再连接热点,因为代码中发AT指令需要花五六秒。
演示图:
TCP连接APP操作: APP的图标 点击连接 第一次使用点其他主机 输入WIFI模块的IP地址和端口号 IP地址可以在手机连上热点后查看得知,端口号在代码中设置好的。 代码实现: main.c文件
#include "reg52.h"
#include "usart.h"
#include "delay.h"
#include "stdio.h"
#include "18b20.h"
sbit led=P2^0;
unsigned char xdata dataBuf[16]= {0};
void main()
{
int temp1;
float temperature;
Init_DS18B20();
UART_init();
DelayMs(1000);
UART_SendStr("AT\r\n",4);
DelayMs(1000);
DelayMs(1000);
UART_SendStr("AT+CWMODE=2\r\n",13);
DelayMs(1000);
UART_SendStr("AT+CWSAP=\"X_CHUN\",\"12345678\",6,4\r\n",34);
DelayMs(1000);
UART_SendStr("AT+CIPMUX=1\r\n",13);
DelayMs(1000);
UART_SendStr("AT+CIPSERVER=1,8080\r\n",21);
while(1)
{
temp1=ReadTemperature();
temperature=(float)temp1*0.0625;
UART_SendStr("AT+CIPSEND=0,16\r\n",17);
sprintf(dataBuf,"Temp: %4.1fC",temperature);
UART_SendStr(dataBuf,16);
DelayMs(1000);
}
}
至于DS18B20、串口发送字符串、延时函数的程序,我觉得网上应该都会有。
|