硬件列表:

小车:

智能小车底盘 机器人小车底盘 寻迹小车 带码盘/测速/电池盒-淘宝网 (taobao.com)

开发板

ESP8266 开发板 V3 (ESP-12N F NodeMcu Lua)( 需要CP2102驱动)

wifi物联网 ESP8266开发板 V3 ESP-12N F NodeMcu Lua CP2102-淘宝网 (taobao.com)

引脚图(资料):

 

电机驱动板

L293D ESP12E Lua电机驱动板):该驱动板默认占用控制板 D1D2D3D4 四个端口,分别作为 PWMA(电机 A 转速)、 PWMB(电机 B 转速)、 DA(电机 A 方向)、 DB(电机 B 方向) 功能。
模块同时引出 VIN3.3VDIOAIOSDIOUARTSPIRSTEN 等多个引脚,可以方便地接入各种传感器(温湿度、蜂鸣器、 照明、继电器等)。

ESP8266 WiFi 电机驱动扩展板 L293D ESP12E Lua 物联网 智能小车-淘宝网 (taobao.com)

 

 

接线:

如果接步进电机只能接一个,本文不需要,下图只是参考。

成品:

测试视频:

软件与代码:

Arduino中的代码

注意替换到auth[] ssid[] pswd[]的内容

#define BLINKER_WIFI
#define BLINKER_HTTP
#include <Blinker.h>
//#include <ESP8266WiFi.h> 

#define L_PWM_PIN       D1
#define R_PWM_PIN       D2
#define L_DIR_PIN       D3
#define R_DIR_PIN       D4

char auth[] = "XXXXXXXXXXXX";
char ssid[] = "XXXXXXXXXXXX";
char pswd[] = "XXXXXXXXXXXX";

/* 新建组件对象*/
BlinkerButton Button_front("btn-front");
BlinkerButton Button_left("btn-turn-left");
BlinkerButton Button_back("btn-back");
BlinkerButton Button_right("btn-turn-right");
BlinkerButton Button_stop("btn-stop");
BlinkerButton Button_left_front("btn-left-front");
BlinkerButton Button_right_front("btn-right-front");
BlinkerButton Button_left_back("btn-left-back");
BlinkerButton Button_right_back("btn-right-back");
BlinkerNumber Number1("num-abc");

int counter = 0;

/* 前进*/
void Button_front_callback(const String & state)  /*理解成这是一个中断调用函数 state 是调用中断后手机app发来的值*/
{
    BLINKER_LOG("get button state: ", state); /*在blinker和Monitor(监视器的意思)上显示这一项*/
    analogWrite(L_PWM_PIN, 200);
    digitalWrite(L_DIR_PIN, HIGH); 
    analogWrite(R_PWM_PIN, 200);
    digitalWrite(R_DIR_PIN, HIGH);
}

/* 后退*/
void Button_back_callback(const String & state)  /*理解成这是一个中断调用函数 state 是调用中断后手机app发来的值*/
{
    BLINKER_LOG("get button state: ", state); /*在blinker和Monitor(监视器的意思)上显示这一项*/
    analogWrite(L_PWM_PIN, 200);
    digitalWrite(L_DIR_PIN, LOW); 
    analogWrite(R_PWM_PIN, 200);
    digitalWrite(R_DIR_PIN, LOW);
}

/* 左转*/
void Button_left_callback(const String & state)  /*理解成这是一个中断调用函数 state 是调用中断后手机app发来的值*/
{
    BLINKER_LOG("get button state: ", state); /*在blinker和Monitor(监视器的意思)上显示这一项*/
    analogWrite(L_PWM_PIN, 0);
    digitalWrite(L_DIR_PIN, HIGH); 
    analogWrite(R_PWM_PIN, 200);
    digitalWrite(R_DIR_PIN, HIGH);
}

/* 右转*/
void Button_right_callback(const String & state)  /*理解成这是一个中断调用函数 state 是调用中断后手机app发来的值*/
{
    BLINKER_LOG("get button state: ", state); /*在blinker和Monitor(监视器的意思)上显示这一项*/
    analogWrite(L_PWM_PIN, 200);
    digitalWrite(L_DIR_PIN, HIGH); 
    analogWrite(R_PWM_PIN, 0);
    digitalWrite(R_DIR_PIN, HIGH);
}

/* 停止*/
void Button_stop_callback(const String & state)  /*理解成这是一个中断调用函数 state 是调用中断后手机app发来的值*/
{
    BLINKER_LOG("get button state: ", state); /*在blinker和Monitor(监视器的意思)上显示这一项*/
    digitalWrite(L_PWM_PIN, 0);
    //digitalWrite(L_DIR_PIN, HIGH); 
    digitalWrite(R_PWM_PIN, 0);
    //digitalWrite(R_DIR_PIN, HIGH);
}


/* 左前进*/
void Button_left_front_callback(const String & state)  /*理解成这是一个中断调用函数 state 是调用中断后手机app发来的值*/
{
    BLINKER_LOG("get button state: ", state); /*在blinker和Monitor(监视器的意思)上显示这一项*/
    analogWrite(L_PWM_PIN, 100);
    digitalWrite(L_DIR_PIN, HIGH); 
    analogWrite(R_PWM_PIN, 200);
    digitalWrite(R_DIR_PIN, HIGH);
}


/* 右前进*/
void Button_right_front_callback(const String & state)  /*理解成这是一个中断调用函数 state 是调用中断后手机app发来的值*/
{
    BLINKER_LOG("get button state: ", state); /*在blinker和Monitor(监视器的意思)上显示这一项*/
    analogWrite(L_PWM_PIN, 200);
    digitalWrite(L_DIR_PIN, HIGH); 
    analogWrite(R_PWM_PIN, 100);
    digitalWrite(R_DIR_PIN, HIGH);
}


/* 左后退*/
void Button_left_back_callback(const String & state)  /*理解成这是一个中断调用函数 state 是调用中断后手机app发来的值*/
{
    BLINKER_LOG("get button state: ", state); /*在blinker和Monitor(监视器的意思)上显示这一项*/
    analogWrite(L_PWM_PIN, 100);
    digitalWrite(L_DIR_PIN, LOW); 
    analogWrite(R_PWM_PIN, 200);
    digitalWrite(R_DIR_PIN, LOW);
}


/* 右后退*/
void Button_right_back_callback(const String & state)  /*理解成这是一个中断调用函数 state 是调用中断后手机app发来的值*/
{
    BLINKER_LOG("get button state: ", state); /*在blinker和Monitor(监视器的意思)上显示这一项*/
    analogWrite(L_PWM_PIN, 200);
    digitalWrite(L_DIR_PIN, LOW); 
    analogWrite(R_PWM_PIN, 100);
    digitalWrite(R_DIR_PIN, LOW);
}


/* 如果未绑定的组件被触发,则会执行其中内容*/
void dataRead(const String & data)
{
    BLINKER_LOG("Blinker readString: ", data);
    counter++;
    Number1.print(counter);
}


void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  BLINKER_DEBUG.stream(Serial);
  BLINKER_DEBUG.debugAll();
  
  pinMode(L_PWM_PIN, OUTPUT);
  pinMode(L_DIR_PIN, OUTPUT);
  pinMode(R_PWM_PIN, OUTPUT);
  pinMode(R_DIR_PIN, OUTPUT);
  analogWrite(L_PWM_PIN, 0);
  digitalWrite(L_DIR_PIN, HIGH); 
  analogWrite(R_PWM_PIN, 0);
  digitalWrite(R_DIR_PIN, HIGH);
  

  Blinker.begin(auth, ssid, pswd);
  Blinker.attachData(dataRead);
  Button_front.attach(Button_front_callback);
  Button_left.attach(Button_left_callback);
  Button_back.attach(Button_back_callback);
  Button_right.attach(Button_right_callback);
  Button_stop.attach(Button_stop_callback);
  Button_left_front.attach(Button_left_front_callback);
  Button_right_front.attach(Button_right_front_callback);
  Button_left_back.attach(Button_left_back_callback);
  Button_right_back.attach(Button_right_back_callback);
}

void loop() {
  // put your main code here, to run repeatedly:
  Blinker.run();
}

App的界面与按钮:

 

 

 

 

 


附录:

一个案例: NodeMCU Motor Shield L293D for ESP12E + Blynk – YouTube (基于Blynk)

官方案例资料(找了很久,但没帮上什么忙):1代智能小车 – 四博智联产品售后 – Powered by Discuz! (doit.am)

ESP12E Motor Shield (L293D ESP12E Lua电机驱动板)产品说明书 – ESP8266(NodeMCU)扩展板 – 四博智联产品售后 – Powered by Discuz! (doit.am)

ESP12E Motor Shield (L293D ESP12E Lua电机驱动板)产品说明书(让我一顿好找啊,找了几个小时,资料太少了):

装载机 载入中…
EAD徽标 花费太长时间?

刷新 重新载入文件
| 打开 在新选项卡中打开

下载文件

 

 

 

源代码:

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注