51单片机+esp8266+点灯+温湿度数据上传

前言

本设计使用ESP8266WIFI模块实现51单片机DHT11温湿度数据向手机无线传输,让手机是显示测量结果,并可通过手机控制单片机上的led灯。

流程

单片机与ESP8266通信方式采用AT命令方式,首先由单片机对esp8266进行初始化,再将手机连上esp8266的WiFi,然后再通过手机端发送指令,esp8266接收到命令传入单片机,单片机再进行相应的操作。

注意事项

1、模块的VCC,GND,TXD,RXD与单片机VCC,GND,RXD,TXD接好,ESP8266模块是3.3V供电! 切记请勿接5V !(如果没有3.3V的话,可以在淘宝上买个电平转换模块)。
2、 模块想要从FLASH启动进入AT系统,只需CH-PD(有的是EN)引脚接VCC或接上拉(不接上拉的情况下,串口可能无数据),其余三个引脚可选择悬空。(GPIO0为高电平代表从FLASH启动,GPIO0为低电平代表进入系统升级状态,此时可以经过串口升级内部固件 RST(GPIO16)可做外部硬件复位使用)。测试系统不同,接线方法也选择多多,请各位根据自己的情况进行选择,推荐接法:只需CH-PD引脚接VCC后,将UTXD,GND,VCC,URXD连上USB-TTL(两者的TXD和RXD交叉接)即可进行测试。
3、在本设计中,单片机的串口中断的波特率设为9600,记得在将ESP8266模块与单片机硬件连接之前,先用USB-TTL模块连接好ESP8266模块,将ESP8266模块用AT命令改为9600的波特率(出厂的波特率是115200,如果不能改波特率,那就去刷一下固件)。

ESP8266工作模式的选择及AT指令的刷入

ESP8266配置成服务器(PC或单片机发指令):
(1) 测试AT指令:AT
(2) 更改模块波特率: AT+CIOBAUD=9600 (波特率设置成功后要更改后再进行设置其它波特率)
(3) 复位重启模块:AT+RST
(4) 设置为AP+Station模式:AT+CWMODE=3
(5) 设置name password,加密方式:AT+CWSAP=“esp8266”,“0123456789”,11,4
(6) 查看主机端的ip地址:AT+CIFSR(此处的IP地址是模块本身的IP,不是ST模式中加入路由器后分配的IP,一般都是(192.168.4.1)
(7) 设置模块传输模式为TCP模式:AT+CIPMODE=0
(8) 设置为多连接模式,启动模块:AT+CIPMUX=1
(9) 服务器的设置端口:AT+CIPSERVER=1,8080 (TCP client连接server时端口号要保持一致)

注:把以上AT指令刷入ESP8266模块的时候,都要敲一个换行,,刷入成功会返回ok,第(8)和第(9)条指令掉电后会被自动抹去,每次重启模块都要进行配置一遍,故在ESP初始化函数中都要加上这两条指令。

下面烧录代码



/*******************************************************
接线方式:
IN1 ---- P00
IN2 ---- P01
IN3 ---- P02
IN4 ---- P03
+   ---- +5V
-   ---- GND
*********************/
#include <reg52.h>
#include <string.h>
#include <intrins.h>
#include <stdio.h>

typedef unsigned int u16;	  //对数据类型进行声明定义
typedef unsigned char u8;


#define MotorData P0 
sbit P20_LED=P2^0;//led灯
sbit LED1=P2^1;//led1
sbit LED2=P2^2;//led2
sbit LED3=P2^3;//led3

sbit Temp_data=P3^6;//dht11
sbit relay=P1^4;//继电器
sbit turang=P1^5;//土壤
sbit yanwu=P1^6;//烟雾
sbit renti=P1^7;//人体红外

u8 m=0;
u8 phasecw[4] ={
   0x08,0x04,0x02,0x01};//正转 电机导通相序 D-C-B-A
u8 phaseccw[4]={
   0x01,0x02,0x04,0x08};//反转 电机导通相序 A-B-C-D
unsigned int rec_dat[4];         //存放温湿度数据
void DHT11_delay_us(unsigned char n);//DTH11延时us
void DHT11_delay_ms(unsigned int z);//DHT11延时ms
void DHT11_start();                  //DHT11起始信号
unsigned char DHT11_rec_byte();       //接收一个字节
void DHT11_receive();              //接收温湿度数据

char Recive_table[20]="";  //接收缓冲,最大20个字节
char Recive_state = 0;   //接收完成标志
void WIFI_Init(void);    //wifi初始化
void wenshidu(void);   //向手机发送温湿度数据
void Uart_Init(void);    //串口初始化
void ms_delay(int t);    //延时
void LED(void);
void MotorCW(void);//正转
void MotorCCW(void);//反转
void MotorStop(void);//停止

//顺时针转动
void MotorCW(void)
{
   
 u8 i,j;
	for(j=0;j<100;j++)
 for(i=0;i<4;i++)
  {
   
   MotorData=phasecw[i];
   ms_delay(4);//转速调节
  }
}

//逆时针转动
void MotorCCW(void)
{
   
 u8 i,j;
	for(j
  • 20
    点赞
  • 205
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值