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

一、系统方案
手机app通过esp8266 wifi模块与51单片机通信控制四路继电器。下位机由单片机、esp8266模块和继电器模块组成,上位机由android手机app承担。我们在app上发送继电器的开关控制指令,esp8266将收到的数据发送给单片机,从而实现对继电器进行开关控制。
二、硬件设计
esp8266模块作为一个透传模块使用,rxd、txd分别连接51单片机的txd和rxd,vcc和en管脚接3.3v电压,gnd接地,只需要连接这些管脚,esp8266模块就可以正常工作了。
单片机的p2^0,p2^1,p2^2,p2^3输出高低电瓶控制四路继电器,继电器模块是从网上购买的已经焊接好的模块,其他地方为手工万用板焊接。
三、单片机软件设计
单片机代码主要是串口初始化、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界面截图如下所示:
负责连接esp8266的按钮点击回调方法:
/** * 连接按钮点击事件回调方法 * @param v */@overridepublic 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; } } }} 滑动开关点击回调方法,发送指令到单片机控制继电器的开关:

MAX6730-MAX6735单/双/三路uP监控电路
华为智选720全效空气净化器1i正式开售
PPTV能否推动智能电视全面屏潮流
AI能力远超人类 或成未来全球经济强力推手
双向100V/30V两相同步降压解决方案
基于继电器、ESP8266模块的单片机软件设计方案
数控精密激光切割机可用于切割哪些材料以及厚度
氮化镓GaN驱动器PCB设计必须掌握的要点
PLC:工业自动化主力军
信息社会产生的谣言,还是借用技术来解决
NI PXI-5922:业内分辨率和动态范围最高的数字化仪
为用户提供全场景便利体验,OPPO推出移动支付产品OPPO Pay
SCTF星通时频DXO差分振荡器产品介绍
印度逮捕vivo一名中国籍员工 小米vivo之后还会有谁?
为什么我们能判断声音的远近 - 初始时间延迟差的作用
沃达科致力开发新型高效的快速充电芯片和智能电源电池管理方案
Wi-Fi/WiMAX/3G 宽带无线接入通往4G之路
电瓶内部的“充电”—电动车频繁充电对电池真的好吗?3
Altium Designer解答 从ECAD至MCAD的转换导致电路板形状重构
比小米MIX还MIX,这设计水平真是服了