Android studio开发APP通过esp8266WiFi控制51单片机LED灯亮灭

本章介绍基于Android studio设计的APP通过esp8266WiFi控制51单片机LED灯的亮灭实现过程。

对ESP8266WiFi模块进行设置

1、ESP8266WiFi特点:
①支持 STA/AP/STA+AP 工作模式;
②支持安卓、IOS 的 Smart Config(APP)/AirKiss(微信)一键配网;
③支持串口本地升级固件;
④通用 AT 指令可快速上手;
⑤支持二次开发,集成了 Windows、Linux 开发环境;

2、对ESP8266WiFi模块进行设置
①AT+CWMODE=2(将ESP8266设置为AP模式)
②AT+RST(重启ESP8266)
③AT+CWSAP=“xxx”,“xxxxxxxx”,1,4(设置WiFi账号和密码,密码不得少于8位)
④AT+CIPMUX=1(设置连接类型,“1”为多连接模式)
⑤AT+CIPSERVER=1,8080(建立TCP服务器)
选用,非必需AT+UART=115200,8,1,0,0(设置波特率)
AT指令

编写Android studio代码

1、UI界面设计流程
界面布局采用线性布局,即LinearLayout。控件分布使用垂直分布,即android:orientation=“vertical”。
界面最上方使用TextView控件设计系统名称并将其居中显示。在其下方设计两个TextView和两个EditText,TextView分别显示“IP号:”和“端口号:”,EditText用于使用者输入IP号和端口号。接下来设计三个Button,分别用于连接、开灯和关灯。界面设计如图所示。
UI界面设计
2、Java关键代码设计
JAVA控制需监听三个Button事件,点击连接按钮后,系统检查IP号与端口号是否已填,若有一项为空,则Socket连接失败。连接按钮的事件监听程序如下所示

case R.id.btn_lj:
                url = et_1.getText().toString().trim();
                String text = et_2.getText().toString().trim();
                if (TextUtils.isEmpty(url))
                {
                    Toast.makeText(context, "ip地址不能为空",
                            Toast.LENGTH_SHORT).show();
                    return;
                }
                if (TextUtils.isEmpty(text))
                {
                    Toast.makeText(context, "端口不能为空",
                            Toast.LENGTH_SHORT).show();
                    return;
                }
                dk = Integer.parseInt(text);
                str = "";
                new ServerThreadTCP().start();
                break;

当Socket连接成功后方可点击开灯与关灯按钮,若Socket未连接,则提示“请先建立Socket连接”。若连接成功,点击开灯按钮,则发送“K”字符,点击关灯按钮,则发送“G”字符。开关灯按钮关键代码如下所示。

case R.id.btn_kai:
                if (socket != null)
                {
                    str = "K";
                    new ServerThreadTCP().start();
                }else
                {
                    Toast.makeText(context, "请先建立socket连接",
                            Toast.LENGTH_SHORT).show();
                }
                break;
            case R.id.btn_guan:
                if (socket != null)
                {
                    str = "G";
                    new ServerThreadTCP().start();
                }else
                {
                    Toast.makeText(context, "请先建立socket连接",
                            Toast.LENGTH_SHORT).show();
                }
                break;

重中之重 重要 重要 重要 TCP线程如下所示

class ServerThreadTCP extends Thread
    {public void run()
        {OutputStream outputStream = null;
            InputStream inputStream = null;
            try {
                if (socket == null){
                    socket =  new Socket(url, dk);
                }
                outputStream = socket.getOutputStream();
                inputStream = socket.getInputStream();
                byte data[] = str.getBytes();
                outputStream.write(data, 0, data.length);
                outputStream.flush();
                byte buffer[] = new byte[1024 * 4];
                int temp = 0;
                while ((temp = inputStream.read(buffer)) != -1)
                {System.out.println(new String(buffer, 0, temp));}
            } catch (Exception e)
            {System.out.println(e);} finally
            {
                try {
                    inputStream.close();
                    outputStream.close();
                    socket.close();
                } catch (IOException e)
                {
                    e.printStackTrace();
                }
            }
        }
    }

编写89C51单片机代码

相比起Android studio,本部分单片机代码最为简单,只需将以下代码新建一个工程烧写进单片机即可使用。注:不同型号单片机LED的引脚不同,所以要改为对应引脚。

#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit led1=P2^0;
void SerialInti() //初始化程序(必须使用,否则无法收发)
{
TMOD=0x20; //定时器 1 操作模式 2;8 位自动重载定时器
TH1=0xfd; //装入初值
TL1=0xfd;
TR1=1; //打开定时器
SM0=0; //设置串行通讯工作模式
SM1=1;
REN=1; //串行接收允许位(要先设置 sm0sm1 再开串行允许)
EA=1; //开总中断
ES=1; //开串行口中断
}
void Uart1Sends(uchar *str) //串行口连续发送 char 型数组
{
while(*str!='\0')
{
SBUF=*str;
while(!TI);//等待发送完成信号(TI=1)出现
TI=0;
str++;
}
}
void delay(uint ttt) //延时函数
{
while(ttt--);
}
void esp8266_init() //ESP8266 上电初始化,必须初始化否则 WiFi 不工作
{ delay(50000);
Uart1Sends("AT+CWMODE=2\n");
delay(50000);
Uart1Sends("AT+RST\n");
delay(50000);
Uart1Sends("AT+CIPMUX=1\r\n");
delay(50000);
Uart1Sends("AT+CIPSERVER=1,8080\r\n");
delay(50000);
}
void main()
{
 SerialInti();
esp8266_init();
led1=1;
while(1){}
}
void Serial_interrupt() interrupt 4 /*串行通讯中断,收发完成将进入该中断*/
{
if(RI)
{
RI=0; //接收中断信号清零,表示将继续接收
if(SBUF=='K')
{
P2=0x00; //P2口置低电平驱动灯亮
}
if(SBUF=='G')
{
P2=0XFF; //P2 口置高电平驱动灯亮
}
}
}

获取源码,请点击👉本项目源码

  • 10
    点赞
  • 227
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
1.物联网开发难度越来越低当小王被老板要求开发一个物联网项目时,他面临这许多种解决方案,从硬件到软件一应俱全。有的提供了模块化的硬件,有的提供了高度集成的软件开发环境,有的支持python开发,有的支持图形化开发,有的提供硬件SDK,有的提供从云端到移动端成套的解决方案。小王该如何选择?的确,物联网开发难度越来越低,只要你想,就可以拖拖拽拽做出来一个简单的设备。移动端APP呢?也是如此,你甚至可以登陆某平台的网站在线生成一个安装包直接安装到手机上。但是这些便利化的前提是失去对核心技术的掌握,以及跳转界面、使用习惯等无法把控。2.移动端APP技能是必备当学习物联网技术的小赵到某公司应聘时,公司技术主管对他的知识结构基本满意。然后让他开发一个物联网项目,要软硬件结合,移动端APP是必备的。小赵可以很快做出来一台基于ESP8266的硬件设备,连接到某物联网平台,做出来一个手机端的APP。但是主管对这个APP不太满意,问小赵自己会不会制作手机APP?小赵有些尴尬。为什么移动端APP技能是必备?因为物联网技术涉及到的知识领域有很多个,能够自己做出APP才算是将这些领域的知识完全掌握。就像是一个侠客的武功,最厉害的那个还没有练成,还不能算是真正的高手。3.定制APP价格很贵市场上有不少的物联网软件公司开展物联网应用APP的定制业务,当然价格不菲。如果是公司采购,你将花费较大的价格采购到一个未来并不可控的APP。反过来说,如果是学生应聘,你学到移动端应用知识,将大大提升你的竞争力,你的技能将成为核心竞争力。4.没有类似的教程原因就不多说了。即使有一些片段代码给了大家,大家也做不出来一个能用的APP。5.本课程要讲什么基于阿里云物联网平台(其他物联网平台类似),带您使用Android Studio编写一个安卓APP,实现连接阿里云物联网平台,控制一台智能灯。通过一个软硬件结合项目,结合源代码,一点一点为大家讲解怎么样连接阿里云物联网平台,每一个步骤是怎么回事,源代码怎么实现。为了照顾一些零基础的朋友,课程中还会用一些通俗的语言介绍这些知识,让大家掌握书上和网络上一些不太注意的技术细节。  

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Run

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值