0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于继电器、ESP8266模块的单片机软件设计方案

电子设计 来源:CSDN博主 作者:daxiniot 2021-01-16 11:04 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

一、系统方案

手机APP通过ESP8266 WIFI模块与51单片机通信控制四路继电器。下位机由单片机、ESP8266模块和继电器模块组成,上位机Android手机APP承担。我们在APP上发送继电器的开关控制指令,ESP8266将收到的数据发送给单片机,从而实现对继电器进行开关控制。

pIYBAGACVyOARW5tAAAzDtZ38mQ876.png

二、硬件设计

ESP8266模块作为一个透传模块使用,RXD、TXD分别连接51单片机的TXD和RXD,VCC和EN管脚接3.3V电压,GND接地,只需要连接这些管脚,ESP8266模块就可以正常工作了。

单片机的P2^0,P2^1,P2^2,P2^3输出高低电瓶控制四路继电器,继电器模块是从网上购买的已经焊接好的模块,其他地方为手工万用板焊接。

pIYBAGACVzqAdnDEAAJe2yGEvGE155.png

三、单片机软件设计

单片机代码主要是串口初始化、ESP8266的初始化和串口中断。

1.串口和ESP8266初始化:

/**
*发送单个字符
*/
void sendChar(uchar a)
{
	SBUF = a;
	while(TI==0);
	TI=0;
}
 
/**
*发送字符串
*/
void sendString(uchar *s)
{
	while(*s!='\0')
	{
		sendChar(*s);
		s++;
	}	
}
 
/**
*初始化ESP8266模块
*/
void initEsp()
{
	TMOD=0x20;		//定时器1工作在方式2
	TH1 = 0xfd;		//波特率9600
	TL1 = 0xfd;
	SM0=0;				//串口工作在方式1
	SM1=1;
	EA = 1;				//开总中断
	REN = 1;			//使能串口
	TR1 = 1;			//定时器1开始计时
	delayms(200);
	sendString("AT+CWMODE=2\r\n");		//AP模式
	delayms(200);	
	sendString("AT+CIPMUX=1\r\n");		//允许多连接
	delayms(200);	
	sendString("AT+CIPSERVER=1\r\n");	//建立TCP Server
	delayms(200);	
	ES = 1;				//开串口中断
}

sendString("AT+CWMODE=2\r\n") ----- 单片机发送AT指令到ESP8266模块,AT+CWMODE=2是将ESP8266设置为AP模式,\r\n是换行,因为AT指令加换行才能生效。
sendString("AT+CIPMUX=1\r\n") ---- 允许多连接
sendString("AT+CIPSERVER=1\r\n") ---- 建立TCP Server

2. 串口中断函数,负责处理App发送给单片机的指令:

/**
* 串口中断函数,负责处理App发送给单片机的指令
*/
void uart() interrupt 4
{
	if(RI == 1)   
  {
    RI = 0;     //清除串口接收标志位
		receiveTable[i]=SBUF;
		if(receiveTable[0]=='+')
		{
			i++;
		}
		else
		{
			i=0;
		}
		if(i==10)
		{
			i=0;
			switch(receiveTable[9])
			{			
				case '1':			//打开继电器
					JDQ4=0;
					break;
				case '2':			//关闭继电器
					JDQ4=1;
					break;
				case '3':
					JDQ3=0;
					break;
				case '4':
					JDQ3=1;
					break;
				case '5':
					JDQ2=0;
					break;
				case '6':
					JDQ2=1;
					break;
				case '7':
					JDQ1=0;
					break;
				case '8':
					JDQ1=1;
					break;
				
			}
		}
  }
}

esp8266在收到数据并转发给单片机时的数据格式:+IPD,,<收到的字符长度>:收到的字符,比如+IPD,0,5:hello,其中+PID是固定的;0代表的是TCP客户端编号,esp8266最多支持5个客户端同时连接,也就是说客户端编号是0到4,在本设计中由于只有一个客户端与esp8266相连,所以客户端编号是0;5代表收到的字符长度;hello是收到的字符。在本例中esp8266发送给单片机的数据是+IPD,0,1:1,我们把接收到的字符串缓存到字符数组中,所以在处理收到的数据逻辑中,首先判断是否是以'+'开始的,否则视作无效数据,然后判断数组中的第十个数据,因为第十个数据才是上位机发送过来的数据。

四、Android APP软件设计

Android APP是借助Android Studio来开发的,界面比较清新。esp8266默认的IP地址是192.168.4.1,端口号是333。四个开关控制四路继电器,其中长按开关的名字可以编辑开关名称,APP界面截图如下所示:

o4YBAGACV1WAEVQVAAGG4eud72o616.png

负责连接ESP8266的按钮点击回调方法:

/**
 * 连接按钮点击事件回调方法
 * @param v
 */
@Override
public void onClick(View v) {
    if(v.getId()==R.id.btn_connect){
        if (mSocket == null || !mSocket.isConnected()) {
            new Thread(){
                @Override
                public void run() {
                    try {
                        mSocket = new Socket("192.168.4.1", 333);
                        out = new PrintStream(mSocket.getOutputStream());
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                mBtnConnect.setText("断开");
                            }
                        });
                        new HeartBeatThread().start();
                    } catch (IOException e) {
                        e.printStackTrace();
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                Toast.makeText(MainActivity.this, "连接失败", Toast.LENGTH_SHORT).show();
                            }
                        });
                    }
                }
            }.start();
        }
        if (mSocket != null && mSocket.isConnected()) {
            try {
                mSocket.close();
                mBtnConnect.setText("连接");
                mSocket = null;
            } catch (IOException e) {
                e.printStackTrace();
                mSocket = null;
            }
        }
    }
}

滑动开关点击回调方法,发送指令到单片机控制继电器的开关:

/**
 * 滑动按钮监听事件,发送指令到单片机控制继电器开关
 * @param buttonView
 * @param isChecked
 */
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    switch (buttonView.getId()) {
        case R.id.switch1:
            if (isChecked) {
                //turn on
                Log.d(TAG, "onCheckedChanged: send1");
                sendData("1");
            } else {
                //turn off
                Log.d(TAG, "onCheckedChanged: send2");
                sendData("2");
            }
            break;
        case R.id.switch2:
            if (isChecked) {
                //turn on
                Log.d(TAG, "onCheckedChanged: send3");
                sendData("3");
            } else {
                //turn off
                Log.d(TAG, "onCheckedChanged: send4");
                sendData("4");
            }
            break;
        ....
		....
		....
           
    }
}
编辑:hfy
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 继电器
    +关注

    关注

    133

    文章

    5598

    浏览量

    155545
  • 单片机
    +关注

    关注

    6078

    文章

    45627

    浏览量

    675424
  • 开关控制
    +关注

    关注

    1

    文章

    119

    浏览量

    23974
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    ESP8266系列】WT8266-S3模组规格书

    概述ESP-07S(WT8266-S3)Wi-Fi模块是由启明云端科技开发的、低功耗高性价比的嵌入式无线网络控制模块。可满足智能电网、楼宇自动化、安防、智能家居、远程医疗等物联网应用的
    的头像 发表于 02-05 18:04 326次阅读
    【<b class='flag-5'>ESP8266</b>系列】WT<b class='flag-5'>8266</b>-S3模组规格书

    ESP8266系列】WT8266-S5模组规格书

    概述ESP-12F(WT8266-S5)WiFi模块是由启明云端科技开发的、低功耗高性价比的嵌入式无线网络控制模块。可满足智能电网、楼宇自动化、安防、智能家居、远程医疗等物联网应用的需
    的头像 发表于 02-05 18:03 532次阅读
    【<b class='flag-5'>ESP8266</b>系列】WT<b class='flag-5'>8266</b>-S5模组规格书

    ESP8266系列】WT8266-S6模组规格书

    ESP-12S(WT8266-S6)Wi-Fi模块是由启明云端科技开发的、低功耗高性价比的嵌入式无线网络控制模块。可满足智能电网、楼宇自动化、安防、智能家居、远程医疗等物联网应用的需求
    的头像 发表于 02-05 18:03 476次阅读
    【<b class='flag-5'>ESP8266</b>系列】WT<b class='flag-5'>8266</b>-S6模组规格书

    ESP8266系列】WT8266-S1模组产品介绍

    WT8266-S1WiFi模块是由启明云端科技开发的、低功耗高性价比的嵌入式无线网络控制模块。可满足智能电网、楼宇自动化、安防、智能家居、远程医疗等物联网应用的需求。该模块核心处理器
    的头像 发表于 01-29 18:22 796次阅读
    【<b class='flag-5'>ESP8266</b>系列】WT<b class='flag-5'>8266</b>-S1模组产品介绍

    ESP8266系列】WT8266-S6模组产品介绍

    ESP-12S(WT8266-S6)Wi-Fi模块是由启明云端科技开发的、低功耗高性价比的嵌入式无线网络控制模块。可满足智能电网、楼宇自动化、安防、智能家居、远程医疗等物联网应用的需求
    的头像 发表于 01-29 18:22 557次阅读
    【<b class='flag-5'>ESP8266</b>系列】WT<b class='flag-5'>8266</b>-S6模组产品介绍

    无需安装!在浏览器里就能玩转ESP32/ESP8266,这个神器绝了!

    无需安装!在浏览器里就能玩转ESP32/ESP8266,这个神器绝了!【往期精选】十年嵌入式最深的痛,不是Bug,而是抓不到日志!vivo宣布原生支持HomeAssistant生态设备接入(含
    的头像 发表于 01-10 10:01 1767次阅读
    无需安装!在浏览器里就能玩转<b class='flag-5'>ESP</b>32/<b class='flag-5'>ESP8266</b>,这个神器绝了!

    【瑞萨RA6E2地奇星开发板试用】使用`RA6E2`驱动 `ESP8266 WiFi模块`,调试AT指令。

    WiFi模块和串口输出等,为社区其他产品的快速开发、验证和应用设计提供了示例。 期望瑞萨官方论坛、立创社区精选此代码,为社区提供esp8266 WiFi模块调试方案。 7. 相
    发表于 12-25 10:08

    【瑞萨RA6E2地奇星开发板试用】使用RA6E2驱动 esp8266 WiFi模块进行串口通信【已修复】

    1. 需求描述 使用RA6E2驱动 esp8266 WiFi模块,用串口调试助手显示 esp8266WiFi模块响应数据。 具体来说: 串口调试助手发送 AT 指令到 瑞萨RA6E2
    发表于 12-17 10:13

    【瑞萨RA6E2地奇星开发板试用】使用瑞萨RA6E2开发板调试ESP8266-01S WiFi模块,串口调试AT指令、固件升级

    GND) 注意是3.3V电源。 我使用RA6E2单片机的2个3V3引脚和1个GND引脚为ESP8266-01sWiFi模块连接和供电。 2. 使用串口调试助手验证AT指令 2.1 硬件连接图
    发表于 12-16 20:10

    晶科鑫 | 国产26MHz晶振匹配Espressif(乐鑫) ESP8285/ESP8266芯片案例

    【应用】国产26MHz频率晶振应用于物联网WIFI物联网模块(串口转WiFi模块),Espressif(乐鑫)ESP8285/ESP8266芯片匹配测试OKESP8285其实是
    的头像 发表于 11-21 15:37 5097次阅读
    晶科鑫 | 国产26MHz晶振匹配Espressif(乐鑫) <b class='flag-5'>ESP</b>8285/<b class='flag-5'>ESP8266</b>芯片案例

    ESP8266ESP32开发板常见的2种下载方式

    ESP32和ESP8266是性价比很高而且使用较为广泛的的Wi-Fi模块,在物联网(IoT)领域的DIY项目中可以首先考虑这2款产品。 两款芯片都属于32位处理器。ESP32是低功耗
    的头像 发表于 11-10 20:30 1570次阅读
    <b class='flag-5'>ESP8266</b>和<b class='flag-5'>ESP</b>32开发板常见的2种下载方式

    ESP8266ESP32开发板常见的2种下载方式

    的的Wi-Fi模块,在物联网(IoT)领域的DIY项目中可以首先考虑这2款产品。 两款芯片都属于32位处理器。ESP32是低功耗双核80MHz至240MHz CPU,而ESP8266是单核处理器,主频支持
    发表于 10-24 18:04

    ESP8266】进入透传模式后,数据间隔怎么调整,

    模式,后面出现接收反馈不及时的现象,验证ESP8266模块不能及时TCP反馈 不要SPI高速ESP8266的新方案,现有的方案下怎么实现快速
    发表于 09-15 10:16

    STM32+esp8266连接机智云,上传温湿度数据并控制继电器开关(平台配置、代码生成、代码移植)

    本教程将详细介绍如何将STM32微控制器与ESP8266Wi-Fi模块连接到机智云平台,实现温湿度数据的上传与继电器的远程控制。通过此过程,您将学会如何配置机智云平台,烧录ESP8266
    的头像 发表于 07-15 18:54 1639次阅读
    STM32+<b class='flag-5'>esp8266</b>连接机智云,上传温湿度数据并控制<b class='flag-5'>继电器</b>开关(平台配置、代码生成、代码移植)

    单片机实例项目:ESP8266串口WIFI

    单片机实例项目:ESP8266串口WIFI,推荐下载!
    发表于 06-03 21:01