欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > Android >内容正文

Android

android 8 esp8266,ESP8266 WIFI模块学习之路(8)——自写Android手机APP控制直流电机正反转...

发布时间:2025/4/5 Android 61 豆豆
生活随笔 收集整理的这篇文章主要介绍了 android 8 esp8266,ESP8266 WIFI模块学习之路(8)——自写Android手机APP控制直流电机正反转... 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

本次向通过Android远程控制直流电机正反转,在这之前可以看一下我写的“STC单片机简单控制直流电机正反转”有助刚学的同学理解。

可以看一下我的硬件连接电路,如图:

单片机硬件程序:

#include #include #include sbit EN = P1^0; // 电机输入输出1,2

sbit IN1 = P1^1; // 输入1

sbit IN2 = P1^2; // 输入2

char Recive_table[20]=""; //接收缓冲,最大20个字节

char Recive_state = 0; //接收完成标志

void WIFI_Init(void);

void Uart_Init(void);

void ms_delay(int t);

void LED(void);

int main (void)

{

/********************功能初始化***********************/

Uart_Init();//串口初始化,波特率为9600

ms_delay(1000) ;

WIFI_Init(); //wifi初始化

/****************************************************/

/**********************主循环************************/

while(1)

{

ms_delay(10) ;

if(Recive_state == 1)

{

ES=0; //清空接收标志位

if((Recive_table[0]=='+')&&(Recive_table[1]=='I')&&(Recive_table[2]=='P'))//接收到的字符串形式为+IPD,x,x:y

{

if((Recive_table[3]=='D')&&(Recive_table[6]==','))

{

if(Recive_table[9]=='0')

{

IN1=1;

IN2=0;

}

if(Recive_table[9]=='1')

{

IN1=0;

IN2=1;

}

}

}

memset(Recive_table,'\0',20);

Recive_state = 0;

ES=1; //打开接收标志位

}

}

/****************************************************/

}

/******************************************************************

函 数: void Uart_Interrupt() interrupt 4

功 能: 串口中断函数,将收到的字符存到Recive_table[]数组中

参 数: 无

返回值: 无

*******************************************************************/

void Uart_Interrupt() interrupt 4

{

static char i=0; //因为是一位一位接收,所以用static

if(RI==1)

{

ES = 0;

RI=0;

Recive_table[i]=SBUF;

i++;

if((Recive_table[i-1] == '\n'))

{

Recive_table[i]='\0';

i=0;

Recive_state = 1;

}

ES = 1;

}

else

TI = 0;

}

/******************************************************************

函 数: void Uart_Init(void)

功 能: 串口初始化,波特率为9600(这个不会,上网百度)

参 数: 无

返回值: 无

*******************************************************************/

void Uart_Init(void)

{

TMOD=0x20;

TH1=0xfD;

TL1=0xfD;

TR1=1;

REN=1;

SM0=0;

SM1=1;

EA=1;

ES=1;

}

/******************************************************************

函 数: void ms_delay(int t)

功 能: 毫秒级延时

参 数: 无

返回值: 无

*******************************************************************/

void ms_delay(int t)

{

int i,j;

for(i=t;i>0;i--)

for(j=110;j>0;j--);

}

/******************************************************************

函 数: void LED(void)

功 能: 发送完命令后显示用的函数

参 数: 无

返回值: 无

*******************************************************************/

void LED(void)

{

P2 = 0;

ms_delay(100);

P2 = 0xff;

ms_delay(100);

}

/******************************************************************

函 数: void WIFI_Init(void)

功 能: wifi初始化(名字:esp8266;密码:1234567890)

参 数: 无

返回值: 无

*******************************************************************/

void WIFI_Init(void)

{

ES = 0;

TI = 1;

printf("AT+RST\r\n");

LED();

ms_delay(1000) ;

printf("AT+CWMODE=3\r\n");

LED();

ms_delay(1000) ;

printf("AT+CIPMUX=1\r\n");

LED();

ms_delay(1000) ;

printf("AT+CIPSERVER=1,8080\r\n");

LED();

ms_delay(1000) ;

printf("AT+CIOBAUD=9600\r\n"); // 设置与单片机一致的波特率

LED();

ms_delay(1000) ;

while(!TI);

TI = 0;

ES = 1;

}

Android程序:

package com.open_open_wifi_motor.myapplication;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.view.View;

import android.widget.Button;

import android.widget.EditText;

import android.widget.Toast;

import java.io.IOException;

import java.io.PrintStream;

import java.net.Socket;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

private EditText mIp; // IP

private EditText mPort; // 端口号

private String mStrIp; // 字符串类型ip

private int miPort; // 字符类型端口

private Button mBtnConnect; // 连接

private Button mMotorZ; // 按钮LED灯开

private Button mMoyorF; // 按钮LED灯关

private Socket mSocket; // 套接字

private PrintStream out; // 打印输出流

private ConnectThread mConnectThread; // TCP连接线程

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mBtnConnect=(Button)findViewById(R.id.mBt1);

mMotorZ=(Button)findViewById(R.id.mBt2);

mMoyorF=(Button)findViewById(R.id.mBt3);

mIp=(EditText)findViewById(R.id.mEtIP);

mPort=(EditText)findViewById(R.id.mEtPort);

mBtnConnect.setOnClickListener(this);

mMotorZ.setOnClickListener(this);

mMoyorF.setOnClickListener(this);

}

@Override

public void onClick(View view) {

switch (view.getId()){

case R.id.mBt1:

// 连接

if(mSocket == null || !mSocket.isConnected()){

mStrIp=mIp.getText().toString();

miPort=Integer.valueOf(mPort.getText().toString());

mConnectThread = new ConnectThread(mStrIp,miPort);

mConnectThread.start();

}

if(mSocket != null && mSocket.isConnected()){

try{

mSocket.close();

mSocket=null; // 清空mSocket

mBtnConnect.setText("连接");

Toast.makeText(MainActivity.this,"连接已关闭",Toast.LENGTH_LONG).show();

}catch (IOException e){

e.printStackTrace();

}

}

break;

case R.id.mBt2:

if(out!=null){

out.print("0");

out.flush();

}

break;

case R.id.mBt3:

if (out!=null){

out.print("1");

out.flush();

}

break;

}

}

private class ConnectThread extends Thread{

private String ip;

private int port;

public ConnectThread(String ip,int port){

this.ip=ip;

this.port=port;

}

@Override

public void run(){

try {

mSocket=new Socket(ip,port);

out = new PrintStream(mSocket.getOutputStream());

runOnUiThread(new Runnable() {

@Override

public void run() {

mBtnConnect.setText("断开");

Toast.makeText(MainActivity.this,"连接成功",Toast.LENGTH_LONG).show();

}

});

}catch (IOException e){

e.printStackTrace();

runOnUiThread(new Runnable() {

@Override

public void run() {

Toast.makeText(MainActivity.this,"连接失败",Toast.LENGTH_LONG).show();

}

});

}

}

}

}

所有代码大家可以下载参考,效果如图:

坚持每天学习一点点,收获就多一点!!!!

总结

以上是生活随笔为你收集整理的android 8 esp8266,ESP8266 WIFI模块学习之路(8)——自写Android手机APP控制直流电机正反转...的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。