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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/XiaoCaiDaYong/article/details/82355579

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

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

单片机硬件程序:

#include <reg52.h>
#include <string.h>
#include <stdio.h>

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();
                    }
                });
            }
        }
    }
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.open_open_wifi_motor.myapplication.MainActivity">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/linearLayout">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="服务器IP:"
            android:textSize="25dp"/>
        <EditText
            android:id="@+id/mEtIP"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="192.168.4.1"
            android:textSize="25dp"/>
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/linearLayout"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginTop="16dp">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="服务器端口:"
            android:textSize="25dp"/>
        <EditText
            android:id="@+id/mEtPort"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="8080"
            android:textSize="25dp"/>

    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/linearLayout"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginTop="100dp"
        android:weightSum="1">

        <Button
            android:id="@+id/mBt1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="连接"
            android:textSize="26dp" />
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/linearLayout"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginTop="250dp">

        <Button
            android:id="@+id/mBt2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:text="电机正转" />
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/linearLayout"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginTop="350dp">
        <Button
            android:id="@+id/mBt3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="电机反转"
            android:textColor="@color/colorAccent"/>
    </LinearLayout>

</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.open_open_wifi_motor.myapplication">
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.INTERNET"/>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

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

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

猜你喜欢

转载自blog.csdn.net/XiaoCaiDaYong/article/details/82355579