基于51单片机与ESP8266的智能台灯设计

发布于:2022-08-06 ⋅ 阅读:(262) ⋅ 点赞:(0)

一、硬件设计

1. 硬件选型

        主控芯片:选用STC89C52RC,单片机通过串口与EPS866模块通信。

        LDO: 选用AMS1117-3.3V,ESP8266模块需要使用3.3V电源,使用1117-3.3V将常用的5V转成3.3V。

        WIFI模块:使用ESP8266-01模块,为了可以正常和51单片机通信,使用串口助手将ESP8266的波特率改为9600。

2. 原理图设计

 3. PCB设计

 4. 实物

 二、软件设计

1. 51单片机程序设计

        1.1 单片机要和ESP8266正常通信,需要设置通信波特率相同。如:51单片机使用的波特率为9600,ESP8266也需要设置为9600,否则无法正常通信,而ESP8266模块默认波特率为115200。修改ESP8266波特率的方法:ESP8266和USB-TTL连接好线后,使用串口助手发送AT+UART=9600,8,1,0,0指令即可。

ESP8266和USB-TTL模块连接方式
ESP8266 USB-TTL
3V3 3V3
EN 3V3
RX TX
TX RX
GND GND

        1.2  部分程序如下:

// 初始化定时器0
void Timer0Init()
{
	TMOD |= 0x01;
	TH0 = (65536-50) / 256; // 
	TL0 = (65536-50) % 256;
	TR0 = 1; // 启动定时器
	ET0 = 1; // 打开定时器中断
	EA = 1;	// 打开总中断
}

void delayms(uint xms)  //延时
{
	uint i,j;
	for(i=xms;i>0;i--)
		for(j=110;j>0;j--);
}

uchar i,j,temp;
bit flag;
uchar receive[4];

void int_init(){			//开启定时器1,产生9600波特率
	TMOD = 0x20;			//定时器1工作在方式2八位自动重装模式
	TH1 = 0xfd;
	TL1 = 0xfd;
	TR1 = 1;				//开启定时器1
	
	PCON = 0x00;			//波特率不加倍
	SM0 = 0;				//串口工作方式
	SM1 = 1;	
	REN = 1;				//串口接收允许
}

void send_char(uchar a)
{
	SBUF = a;
	while (TI == 0);
	TI = 0;
}

void send_string(uchar * s)
{
	while (*s != '\0')
	{
		send_char(*s);
		s++;
	}
}

void init_esp8266()
{
	send_string("AT+CIPMUX=1\r\n");
	delayms(3000);
	send_string("AT+CIPSERVER=1,8080\r\n");
	delayms(3000);
}

2. Android APP程序设计

        Android APP我是使用Android Studio来编写的,首先设计好界面,页面布局如下:

需要连接esp8266需要有网络权限,在AndroidManifest.xml文件中添加 

 <uses-permission android:name="android.permission.INTERNET" />

MainActivity代码如下:

package com.lili.controlled;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends Activity implements MoveListener {

    public ImageView ledImageView;
    public Button connectButton; // 连接esp8266
    public Button openOrCloseLEDButton; // 打开或者关闭LED按钮

    private IosColumnBrightnessView mIosColumnBrightnessView;

    private ConnectThread connectThread;
    public boolean isConnected;

    public boolean isOpenLED;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initView();

        connectThread = new ConnectThread(this, "192.168.4.1", 8080);
        // 开启连接线程
        connectThread.start();
    }

    private void initView() {
        // LED灯图标
        ledImageView = (ImageView) findViewById(R.id.image);
        connectButton = findViewById(R.id.button_connect);
        openOrCloseLEDButton = findViewById(R.id.openOrCloseLED);

        // 调节亮度view
        mIosColumnBrightnessView = findViewById(R.id.ios_brightness);
        mIosColumnBrightnessView.setMoveListener(this);
    }

    // 连接esp8266
    public void connect(View view)
    {
        // 如果没有连接
        if (!isConnected)
        {
            connectThread.startConnect = true;
        } else {
            try {
                connectThread.closeConnect();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    // 打开或者关闭LED
    public void openOrCloseLED(View view)
    {
        // 如果已经连接到esp8266
        if (isConnected)
        {
            // 如果已经打开LED
            if (isOpenLED)
            {
                // 关闭LED
                connectThread.closeLED();
            } else {
                // 开启LED
                connectThread.openLED();
            }

        } else {
            Toast.makeText(this, "未连接到服务器!", Toast.LENGTH_SHORT).show();
        }
    }

    @Override
    public void move_light(int value) {


        // 如果已经连接到esp8266
        if (isConnected)
        {
           // 发送数据
            

        }
    }
}

















最后,原理图、PCB图、51单片机源码和Android APP源码放在我网站上,有需要的小伙伴们可以点击下载【基于51单片机与ESP8266的智能台灯设计

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到