硬件列表:
小车:
智能小车底盘 机器人小车底盘 寻迹小车 带码盘/测速/电池盒-淘宝网 (taobao.com)
开发板:
ESP8266 开发板 V3 (ESP-12N F NodeMcu Lua)( 需要CP2102驱动)
wifi物联网 ESP8266开发板 V3 ESP-12N F NodeMcu Lua CP2102-淘宝网 (taobao.com)
引脚图(资料):
电机驱动板:
(L293D ESP12E Lua电机驱动板):该驱动板默认占用控制板 D1、 D2、 D3、 D4 四个端口,分别作为 PWMA(电机 A 转速)、 PWMB(电机 B 转速)、 DA(电机 A 方向)、 DB(电机 B 方向) 功能。
模块同时引出 VIN、 3.3V、 DIO、 AIO、 SDIO、 UART、 SPI、 RST、 EN 等多个引脚,可以方便地接入各种传感器(温湿度、蜂鸣器、 照明、继电器等)。
ESP8266 WiFi 电机驱动扩展板 L293D ESP12E Lua 物联网 智能小车-淘宝网 (taobao.com)
接线:
如果接步进电机只能接一个,本文不需要,下图只是参考。
成品:
测试视频:
软件与代码:
Arduino中的代码
注意替换到auth[] ssid[] pswd[]的内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 |
#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电机驱动板)产品说明书(让我一顿好找啊,找了几个小时,资料太少了):
源代码: