IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> Android studio开发APP通过esp8266WiFi控制51单片机LED灯亮灭 -> 正文阅读

[嵌入式]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 口置高电平驱动灯亮
}
}
}

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

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-09-14 13:30:52  更:2021-09-14 13:32:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 2:25:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码