0 卖盘信息
BOM询价
您现在的位置: 首页 > 技术方案 >工业控制 > 基于继电器、ESP8266 WIFI模块的单片机软件设计方案

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

来源: elecfans
2021-01-20
类别:工业控制
eye 11
文章创建人 拍明

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

  一、系统方案

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

  

image.png


  二、硬件设计

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

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

  

1.jpg


  三、单片机软件设计

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

  1.串口和ESP8266初始化:

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

  sendString("AT+CWMODE=2 ")-----单片机发送AT指令到ESP8266模块,AT+CWMODE=2是将ESP8266设置为AP模式, 是换行,因为AT指令加换行才能生效。

  sendString("AT+CIPMUX=1 ")----允许多连接

  sendString("AT+CIPSERVER=1 ")----建立TCPServer

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

  /***串口中断函数,负责处理App发送给单片机的指令*/voiduart()interrupt4{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,我们把接收到的字符串缓存到字符数组中,所以在处理收到的数据逻辑中,首先判断是否是以'+'开始的,否则视作无效数据,然后判断数组中的第十个数据,因为第十个数据才是上位机发送过来的数据。

  四、AndroidAPP软件设计

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

  

image.png


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

  /***连接按钮点击事件回调方法*@paramv*/@OverridepublicvoidonClick(Viewv){if(v.getId()==R.id.btn_connect){if(mSocket==null||!mSocket.isConnected()){newThread(){@Overridepublicvoidrun(){try{mSocket=newSocket("192.168.4.1",333);out=newPrintStream(mSocket.getOutputStream());runOnUiThread(newRunnable(){@Overridepublicvoidrun(){mBtnConnect.setText("断开");}});newHeartBeatThread().start();}catch(IOExceptione){e.printStackTrace();runOnUiThread(newRunnable(){@Overridepublicvoidrun(){Toast.makeText(MainActivity.this,"连接失败",Toast.LENGTH_SHORT).show();}});}}}.start();}if(mSocket!=null&&mSocket.isConnected()){try{mSocket.close();mBtnConnect.setText("连接");mSocket=null;}catch(IOExceptione){e.printStackTrace();mSocket=null;}}}}

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

  /***滑动按钮监听事件,发送指令到单片机控制继电器开关*@parambuttonView*@paramisChecked*/@OverridepublicvoidonCheckedChanged(CompoundButtonbuttonView,booleanisChecked){switch(buttonView.getId()){caseR.id.switch1:if(isChecked){//turnonLog.d(TAG,"onCheckedChanged:send1");sendData("1");}else{//turnoffLog.d(TAG,"onCheckedChanged:send2");sendData("2");}break;caseR.id.switch2:if(isChecked){//turnonLog.d(TAG,"onCheckedChanged:send3");sendData("3");}else{//turnoffLog.d(TAG,"onCheckedChanged:send4");sendData("4");}break;............}}


责任编辑:David

【免责声明】

1、本文内容、数据、图表等来源于网络引用或其他公开资料,版权归属原作者、原发表出处。若版权所有方对本文的引用持有异议,请联系拍明芯城(marketing@iczoom.com),本方将及时处理。

2、本文的引用仅供读者交流学习使用,不涉及商业目的。

3、本文内容仅代表作者观点,拍明芯城不对内容的准确性、可靠性或完整性提供明示或暗示的保证。读者阅读本文后做出的决定或行为,是基于自主意愿和独立判断做出的,请读者明确相关结果。

4、如需转载本方拥有版权的文章,请联系拍明芯城(marketing@iczoom.com)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。

拍明芯城拥有对此声明的最终解释权。

相关资讯

方案推荐
基于MC33771主控芯片的新能源锂电池管理系统解决方案

基于MC33771主控芯片的新能源锂电池管理系统解决方案

AMIC110 32位Sitara ARM MCU开发方案

AMIC110 32位Sitara ARM MCU开发方案

基于AMIC110多协议可编程工业通信处理器的32位Sitara ARM MCU开发方案

基于AMIC110多协议可编程工业通信处理器的32位Sitara ARM MCU开发方案

基于展讯SC9820超低成本LTE芯片平台的儿童智能手表解决方案

基于展讯SC9820超低成本LTE芯片平台的儿童智能手表解决方案

基于TI公司的AM437x双照相机参考设计

基于TI公司的AM437x双照相机参考设计

基于MTK6580芯片的W2智能手表解决方案

基于MTK6580芯片的W2智能手表解决方案