对普中科技资料内的esp8266的温感项目进行复刻而写的学习记录
一介绍
ESP8266是一种常用的Wi-Fi模块,而DS18B20则是一种数字式温度传感器。这两者结合起来可以实现通过ESP8266模块获取DS18B20传感器采集到的温度数据,并通过Wi-Fi将数据传输到云端或其他设备进行进一步处理。
二硬件连接
1首先测试esp8266是否正常
esp8266-->串口/单片机USB转TTL模块
VCC(3.3v)-->3.3V
CH_PD(EN)-->3.3V
TXD-->RXD
RXD-->TXD
GND-->GND
打开串口调试窗口,输入AT回复OK说明模块可以正常使用
2输入 AT+UART_DEF=9600,8,1,0,0//修改波特率
修改波特率的原因是一般esp8266模块的出厂设置的波特率为115200,而51单片机的波特率为9600,若不修改会接收不到单片机传送来的数据
三程序
特别注意要先烧录程序再将esp8266与单片机引脚相连,若先连接esp8266会导致程序烧录不进去
之前有写过一篇esp8266手机电脑通信的文章,有感兴趣的可以去看看
esp8266配置代码
//ESP8266 WIFI发送AT指令
//pbuf: AT指令,字符串格式,如:"AT"
void ESP8266_SendCmd(u8 *pbuf)
{
while(*pbuf!='\0') //遇到空格跳出循环
{
UART_SendData(*pbuf);
delay_10us(5);
pbuf++;
}
delay_10us(5);
UART_SendData('\r'); //回车
delay_10us(5);
UART_SendData('\n'); //换行
delay_ms(10);
}
//ESP8266 WIFI发送数据到APP
void ESP8266_SendData(u8 *pbuf)
{
ESP8266_SendCmd("AT+CIPSEND=0,7"); // 发送AT指令,准备发送数据,连接ID为0,数据长度为7字节
while(*pbuf!='\0') // 遇到空格跳出循环
{
UART_SendData(*pbuf); // 通过UART发送当前字符
delay_10us(5); // 延时10微秒,确保数据稳定传输
pbuf++; // 移动到下一个字符
}
UART_SendData('\n'); // 发送换行符,表示数据结束
//delay_ms(10); //
}
//ESP8266-WIFI模块工作命令
void ESP8266_ModeInit(void)
{
ESP8266_SendCmd("AT+CWMODE=2");//设置模式
delay_ms(2000);
ESP8266_SendCmd("AT+CWSAP=\"ESP8266\",\"12345678\",11"); //设置WIFI名和密码
delay_ms(2000);
ESP8266_SendCmd("AT+CIPAP=\"192.168.4.1\"");//设置静态IP地址为192.168.4.1,此地址为esp8266内设,所给手册上会有
// ESP8266_SendCmd("AT+RST");//进行复位
// delay_ms(2000);
ESP8266_SendCmd("AT+CIPMUX=1"); //设置多连接模式,允许多个客户端连接
delay_ms(2000);
ESP8266_SendCmd("AT+CIPSERVER=1,8080"); //开启TCP服务器,端口号为8080,允许客户端连接
delay_ms(2000);
}
温感部分可以去b站江协科技或普中科技进行学习,本文章仅为复刻项目不多做讲述
四app接收
使用普中资料中所给的tcp连接软件测试
注意!!!资料所给的软件必须开发板晶振为11.15926MHZ晶振的开发板,12MHZ的是不行的,原理为什么还没弄清楚,同时此时模块波特率为9600,且提前确认手机是否与模块连接,我当初在这卡了很久。
再次注意!!!记得把USB转TTL模块的黄色盖帽给盖回去
esp8266-->单片机
VCC(3.3v)-->3.3V
CH_PD(EN)-->3.3V//出厂时默认已上拉,可不连
RXD-->P31(TXD)
TXD-->P30(RXD)
GND-->GND
若有人连接后不成功,可能是因为你用的单片机接收数据时内部自转了,可以P30与P31交换连接试试
开启后网络调试处会开始接收温度数据
开机会出现停顿是因为在进行配置,一开始几条温度可能不准确,一两秒后会精确
手机端显示如下
还可自行开发如点灯等其他功能