手机APP通过ESP8266 WIFI模块与51基于单片机的通信控制LED灯的开关下位机由基于单片机的、ESP8266模块和LED灯组成,上位机由Android手机APP承担我们在APP上发送LED灯的开关控制指令,ESP8266将收到的数据发送给基於单片机的从而实现对LED灯进行开关控制。
设计好的实物是这个样子:
ESP8266模块作为一个透传模块使用RXD、TXD分别连接51基于单片机的的TXD和RXD,VCC和CH_PD管腳接3.3V电压GND接地,只需要连接这些管脚ESP8266模块就可以正常工作了。在基于单片机的P2口上连接了三个5mm的LED灯分别是红黄蓝三种颜色,我们的目的是通过手机APP上的开关控制着三个LED灯的亮灭
硬件的连接不复杂,接下来主要是基于单片机的和手机APP代码的编写
基于单片机的代码主偠是串口初始化、串口中断和ESP8266的初始化。首先是串口初始化:
贴上51基于单片机的负责串口发送的两个函数:
在串口中断中处理接收到的数據:
esp8266在收到数据并转发给基于单片机的时的数据格式:+IPD,<client号>,<收到的字符长度>:收到的字符比如+IPD,0,5:hello,其中+PID是固定的;0代表的是TCP客户端编号esp8266最多支持5个客户端同时连接,也就是说客户端编号是0到4在本设计中由于只有一个客户端与esp8266相连,所以客户端编号是0;5代表收到的字符长度;hello昰收到的字符在本例中esp8266发送给基于单片机的的数据是+IPD,0,1:1,我们把接收到的字符串缓存到字符数组中所以在处理收到的数据逻辑中,首先判断是否是以'+'开始的否则视作无效数据,然后判断数组中的第十个数据因为第十个数据才是上位机发送过来的数据。
Android APP是借助Android Studio来开发的界面比较简单,通过编辑框输入esp8266的IP地址和端口号esp8266默认的IP地址是192.168.4.1,端口号是333这些都可以通过AT指令进行修改。布局页面的xml代码我们就不貼了熟悉Android开发的读者很快就能根据截图编写出来,放上一个APP界面的截图:
我们主要看一下逻辑代码部分:
首先是控件的初始化和按钮点擊事件回调的绑定
负责连接esp8266的线程:
系统的整个设计过程如上所述我已经把该设计的实物挂在了淘宝上,如果想买来玩一玩欢迎大家點击以下链接:
物联网开发技术讨论群: