本次向通过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控制直流电机正反转...相关推荐

  1. ESP8266 WIFI模块学习之路(2)——模块与单片机连接进行远程操作

    上一个博客:ESP8266 WIFI模块学习之路(1)是关于对串口连接的,简单验证ESP8266是怎么样连接及其功能验证,下面将通过单片机连接,和手机进行远程操作. ESP8266和单片机的连接,我这 ...

  2. ESP8266 WIFI模块学习之路(10)——手机远程关闭电脑

    在博文ESP8266 WIFI模块学习之路(9)中已经实现了电脑读出USB串口的数据,如图 在博文C语言实现电脑关机程序中学习了如何实现电脑关机及其它的一些功能. 因此,通过这两个博文完全可以实现手机 ...

  3. 最简单DIY基于ESP8266的智能彩灯③(在网页用按钮+滑动条+手机APP控制RGB灯)

    ESP8266和ESP32智能彩灯开发系列文章目录 第一篇:最简单DIY基于ESP8266的智能彩灯①(在网页用按钮点亮普通RGB灯) 第二篇:最简单DIY基于ESP8266的智能彩灯②(在网页用按键 ...

  4. K_A08_004 基于 STM32等单片机驱动MX1919模块按键控制直流电机正反转加减速启停

    目录 一.资源说明 二.基本参数 1.参数 2.引脚说明 三.驱动说明 1.MX1919模块驱动时序 2.对应程序: 3.PWM信号 四.部分代码说明 接线说明 1.STC89C52RC+MX1919 ...

  5. K_A08_003 基于 STM32等单片机驱动L9110模块按键控制直流电机正反转加减速启停

    目录 一.资源说明 二.基本参数 1.参数 2.引脚说明 三.驱动说明 L9110模块驱动时序 对应程序: PWM信号 四.部分代码说明 接线说明 1.STC89C52RC+L9110模块 2.STM ...

  6. K_A08_002 基于 STM32等单片机驱动MAX1508模块按键控制直流电机正反转加减速启停

    目录 一.资源说明 二.基本参数 1.参数 2.引脚说明 3.驱动说明 MAX1508模块驱动时序 对应程序: PWM信号 四.部分代码说明 接线说明 1.STC89C52RC+MAX1508模块 2 ...

  7. K_A08_012 基于 STM32等单片机驱动 DRV8833 模块按键控制直流电机正反转

    目录 一.资源说明 二.基本参数 参数 引脚说明 三.驱动说明 驱动时序 对应程序: 四.部分代码说明 接线说明 STC89C52RC+DRV8833模块 STM32F103C8T6+DRV8833模 ...

  8. ESP8266 WIFI模块学习之路(7)——自写Android手机APP接受单片机数据

    上一篇是写关于自写Android手机APP给单片机下发数据的,这次我将写一下APP如何接受单片机数据. 其实使用调试助手,或者别人开的的APP同样能够实现接受单片机数据,但想学习的,我还是建议能够自己 ...

  9. K_A08_009 基于 STM32等单片机驱动TB6612模块按键控制直流电机正反转加减速启停

    目录 一.资源说明 二.基本参数 1.参数 2.引脚说明 三.驱动说明 TB6612模块驱动说明 对应程序: ENA ENB输出PWM 四.部分代码说明 接线说明 1.STC89C52RC+TB661 ...

最新文章

  1. 【DBMS 数据库管理系统】OLAP 核心技术 : 数据方体 ( 数据方体 | 数据方体格结构 | 数据单元 )
  2. Spring MVC 学习总结(九)——Spring MVC实现RESTful与JSON(Spring MVC为前端提供服务)...
  3. Python函数的递归调用
  4. C++ inline内联函数
  5. 电脑f2还原系统步骤_使用冰点还原电脑每次重启都会还原,打造一个百毒不侵的系统...
  6. leetcode141 环形链表
  7. OpenCV resize 图像缩放
  8. 手机变慢怎么办?复位、重置可解决
  9. 金山词霸-身边的实用工具
  10. 苹果手机投影到墙上_隔空触控的投影仪,仅有巴掌大小
  11. 【计算机基础】防火墙
  12. Assets文件操作
  13. 夜深人静写算法(二)- 动态规划
  14. python机器人库(robotics-toolbox-python)的运用
  15. 2022考研数学学习资源分享203G视频之汤家凤数学网盘
  16. C++的STL中accumulate的用法
  17. 计算机之父 匈牙利“唯一的天才” 冯·诺依曼
  18. Python学习:print函数的用法
  19. DDR3布线设计要点总结
  20. 中国证券市场的发展历程

热门文章

  1. Spring框架简介
  2. 图解Nosql(hbase)与传统数据库的区别
  3. JAVA笔记18-容器之二增强的for循环(不重要)
  4. UA PHYS515A 电磁理论V 电磁波与辐射6 波导
  5. UA PHYS515 电磁理论II 静电场问题4 用Green函数法求解Dirichlet问题
  6. UA MATH567 高维统计IV Lipschitz组合10 随机矩阵的Bernstein不等式
  7. UA MATH566 统计理论 证明UMVUE的方法
  8. Dockerfile命令详解
  9. Django-分页扩展
  10. mySql 注入攻击