android 8 esp8266,ESP8266 WIFI模块学习之路(8)——自写Android手机APP控制直流电机正反转...
本次向通過Android遠(yuǎn)程控制直流電機(jī)正反轉(zhuǎn),在這之前可以看一下我寫的“STC單片機(jī)簡單控制直流電機(jī)正反轉(zhuǎn)”有助剛學(xué)的同學(xué)理解。
可以看一下我的硬件連接電路,如圖:
單片機(jī)硬件程序:
#include #include #include sbit EN = P1^0; // 電機(jī)輸入輸出1,2
sbit IN1 = P1^1; // 輸入1
sbit IN2 = P1^2; // 輸入2
char Recive_table[20]=""; //接收緩沖,最大20個(gè)字節(jié)
char Recive_state = 0; //接收完成標(biāo)志
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初始化
/****************************************************/
/**********************主循環(huán)************************/
while(1)
{
ms_delay(10) ;
if(Recive_state == 1)
{
ES=0; //清空接收標(biāo)志位
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; //打開接收標(biāo)志位
}
}
/****************************************************/
}
/******************************************************************
函 數(shù): void Uart_Interrupt() interrupt 4
功 能: 串口中斷函數(shù),將收到的字符存到Recive_table[]數(shù)組中
參 數(shù): 無
返回值: 無
*******************************************************************/
void Uart_Interrupt() interrupt 4
{
static char i=0; //因?yàn)槭且晃灰晃唤邮?#xff0c;所以用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;
}
/******************************************************************
函 數(shù): void Uart_Init(void)
功 能: 串口初始化,波特率為9600(這個(gè)不會(huì),上網(wǎng)百度)
參 數(shù): 無
返回值: 無
*******************************************************************/
void Uart_Init(void)
{
TMOD=0x20;
TH1=0xfD;
TL1=0xfD;
TR1=1;
REN=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
}
/******************************************************************
函 數(shù): void ms_delay(int t)
功 能: 毫秒級(jí)延時(shí)
參 數(shù): 無
返回值: 無
*******************************************************************/
void ms_delay(int t)
{
int i,j;
for(i=t;i>0;i--)
for(j=110;j>0;j--);
}
/******************************************************************
函 數(shù): void LED(void)
功 能: 發(fā)送完命令后顯示用的函數(shù)
參 數(shù): 無
返回值: 無
*******************************************************************/
void LED(void)
{
P2 = 0;
ms_delay(100);
P2 = 0xff;
ms_delay(100);
}
/******************************************************************
函 數(shù): void WIFI_Init(void)
功 能: wifi初始化(名字:esp8266;密碼:1234567890)
參 數(shù): 無
返回值: 無
*******************************************************************/
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"); // 設(shè)置與單片機(jī)一致的波特率
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; // 端口號(hào)
private String mStrIp; // 字符串類型ip
private int miPort; // 字符類型端口
private Button mBtnConnect; // 連接
private Button mMotorZ; // 按鈕LED燈開
private Button mMoyorF; // 按鈕LED燈關(guān)
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,"連接已關(guān)閉",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();
}
});
}
}
}
}
所有代碼大家可以下載參考,效果如圖:
堅(jiān)持每天學(xué)習(xí)一點(diǎn)點(diǎn),收獲就多一點(diǎn)!!!!
總結(jié)
以上是生活随笔為你收集整理的android 8 esp8266,ESP8266 WIFI模块学习之路(8)——自写Android手机APP控制直流电机正反转...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华为的鸿蒙系统营销,全球第一款搭载华为鸿
- 下一篇: android 下拉窗帘,Android