51单片机+ESP8266+Android APP实现局域网内控制LED灯

一、硬件设计

1.硬件选型

        主控芯片:选用STC15W104。这款MCU比较小巧,控制3个LED灯的亮灭只需要3个IO即可,不足之处是没有串口,与ESP8266通信只能使用模拟串口,买了挺多的,先将就用着先吧。

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

2.原理图设计

        原理图比较简单,注意ESP8266模块的TX和RX引脚需要连接到STC15W104的P3.0和P3.1引脚上以及EN引脚连接到3.3V即可。原理图如下:

51单片机+ESP8266+Android APP实现局域网内控制LED灯_第1张图片

 3.PCB设计

        PCB设计的话,我设计成板上焊接一个8P的母座,然后将ESP8266模块插上去就可以正常使用。PCB图和效果如下:

51单片机+ESP8266+Android APP实现局域网内控制LED灯_第2张图片

51单片机+ESP8266+Android APP实现局域网内控制LED灯_第3张图片

二|、软件设计

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

51单片机+ESP8266+Android APP实现局域网内控制LED灯_第4张图片

         1.2 模拟串口这部分程序参考官方文档,程序中为收到字符A,开启LED2,收到字符B,关闭LED2,要控制多个LED灯的亮灭,根据收到的不同指令来区分即可。部分程序如下:

//发送一个字节
void sendChar(uchar a)
{
	if(!TING)		//发送空闲
	{
		TBUF = a;
		TING = 1; 
	}

	 Delay10ms();
}
 
//发送字符串
void sendString(uchar *s)
{
	while(*s!='\0')
	{
		sendChar(*s);
		s++;
	}		
}

void esp8266_init()
{
	Delay3000ms();

	sendString("AT+CIPMUX=1\r\n");        //允许多连接
	Delay3000ms();

	sendString("AT+CIPSERVER=1,8080\r\n");     //建立服务器
	Delay3000ms();
}


//-----------------------------------------
//UART模块的初始变量	initial UART module variable
void UART_INIT()
{
      TING = 0;
      RING = 0;
      REND = 0;
      TCNT = 0;
      RCNT = 0;
}

void main()
{
	InternalRAM_enable();

	Timer0_1T();
	Timer0_AsTimer();
	Timer0_16bitAutoReload();
	Timer0_Load(Timer0_Reload);
	Timer0_InterruptEnable();
	Timer0_Run();
	EA = 1;						//打开总中断					open global interrupt switch

	UART_INIT();				//UART模块的初始变量

	esp8266_init();
	LED3 = 1;	   

	while (1)
	{
		if (REND)				//如果接收完,把接收到的值存入接收buff
		{
			REND = 0;

		 	temp = RBUF;				//取出接收到的数据

			if(temp=='A'){				
				LED2 = 0;
			} 
			if (temp == 'B') {
				LED2 = 1;
			}
		}
	}
}

2. Android APP程序设计

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

51单片机+ESP8266+Android APP实现局域网内控制LED灯_第5张图片

         代码部分的话,需要注意的地方是连接esp8266需要有网络权限,在AndroidManifest.xml文件中添加

 

        MainActivity代码如下:

package com.lili.esp8266;

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 {

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

    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);
    }

    // 连接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();
        }
    }

}

        最后,有需要的小伙伴们可以使用“单片机项目设计”小程序获取下载链接。

51单片机+ESP8266+Android APP实现局域网内控制LED灯_第6张图片

 

你可能感兴趣的:(单片机,51单片机,android)