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控制直流电机正反转...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华为的鸿蒙系统营销,全球第一款搭载华为鸿
- 下一篇: android 下拉窗帘,Android