WIFI小车无线远程控制,智能小车之ESP8266例程


第一、原理讲解

原理简述:利用发布订阅模式,即:利用ESP8266 订阅了一个主题,再利用app inventor 编写的app 往这个主题发布消息,由于ESP8266 订阅了这个消息,所以就可以收到app发布得消息,从而执行相应得动作,比如前进\后退\左转\右转。

第二、小车改装

如果有小车的话可以进行改装,改装成WIFI小车,如果没有小车的话,可以现行组装。

STM32改装方案: 建议采用串口通信的方式,ESP8266可以收到手机app发来的控制指令,如果ESP8266收到指令,可通过串口给stm32发送信息,stm32收到指令后,对小车执行相关动作即可。

arduino uno 改装方案方案一,这个可以采用和stm32一样的原理,利用串口通信,esp8266收到云端指令,通过串口给arduino 发信息,arduino收到串口信息,对小车执行相关动作即可。方案二,更换NodeMCU开发板,把arduino uno 更换为NodeMCU开发板,直接用NodeMCU当作小车的动作控制器,这种方式比较推荐,较为简单,nodeMCU收到云端指令,直接执行小车动作函数即可。NodeMCU编程完全兼容arduino开发,更换的时候,把控制引脚对应好就行。

树莓派小车改装方案: 写个python脚本,脚本为TCP客户端,通过TCP客户端连接到服务器,当app通过云端发送控制指令时,树莓派就会收到命令,就可以执行相关小车动作即可。

其他开发板: 参考arduino uno 改装方案即可。

第三、 ESP8266 例程代码

建议先使用不联网版本,调试好小车的前进、后退、左转、右转等操作后,再使用联网版本。

单机不配网版本:​​程序下载​

联网版本一:微信配网版本 ​​代码下载​​。

联网版本二: 不需要配网 ​​程序下载​

代码修改:

//用户私钥,可在控制台获取,修改为自己的UID
#define UID "4d9ec352e0376f2110a0c601a2857225"
//主题名字,可在控制台新建
#define TOPIC "mycar"

在​巴法创客云控制台​​ 新建一个主题,主题名字随意,例如mycar,本实例用用mycar,使用示例代码时应修改为自己的主题名字,字母或数字或字母加数字组合。UID为用户私钥,在 ​巴法创客云控制台​ 注册登陆后可获得。

小车控制引脚:

本例程中是四驱小车

//**************************************************//
#define DIRA D0
#define PWMA D1
#define DIRB D2
#define PWMB D3
#define DIRC D5
#define PWMC D4
#define DIRD D6
#define PWMD D7

//**************************************************//

控制函数:

void forward();
void back();
void turnLeft();
void turnRight();
void Stop();

void forward(){//小车前进
Serial.println("forward");
digitalWrite(DIRA,HIGH);
digitalWrite(DIRB,HIGH);
digitalWrite(DIRC,LOW);
digitalWrite(DIRD,LOW);

analogWrite(PWMA,500);
analogWrite(PWMB,500);
analogWrite(PWMC,500);
analogWrite(PWMD,500);
}

void back(){//小车后退
Serial.println("back");
digitalWrite(DIRA,LOW);
digitalWrite(DIRB,LOW);
digitalWrite(DIRC,HIGH);
digitalWrite(DIRD,HIGH);

analogWrite(PWMA,500);
analogWrite(PWMB,500);
analogWrite(PWMC,500);
analogWrite(PWMD,500);
}

ESP8266消息检测:

if((TcpClient_Buff.indexOf("&msg=1") > 0)) {
forward();
oldtime = millis();
t_flag = true;
}else if((TcpClient_Buff.indexOf("&msg=2") > 0)) {
back();
oldtime = millis();
t_flag = true;
}else if((TcpClient_Buff.indexOf("&msg=3") > 0)) {
turnLeft();
oldtime = millis();
t_flag = true;
}else if((TcpClient_Buff.indexOf("&msg=4") > 0)) {
turnRight();
oldtime = millis();
t_flag = true;
}else if((TcpClient_Buff.indexOf("&msg=0") > 0)) {
Stop();
}else if((TcpClient_Buff.indexOf("&msg=on") > 0)) {
up_flag = true;
}else if((TcpClient_Buff.indexOf("&msg=off") > 0)) {
up_flag = false;
}

程序说明: 如上所示,通过字符串匹配,

检测到字符串 &msg=1 执行前进动作,

检测到字符串 &msg=2 执行后退动作,

检测到字符串 &msg=3 执行左转动作,

检测到字符串 &msg=4 执行右转动作,

检测到字符串 &msg=0 执行停止动作,

检测到字符串 &msg=on 打开一直运动开关,

检测到字符串 &msg=off 关闭一直运动开关。

(默认情况下,如果收到前进等指令,小车只会前进1.5s,如果发送on指令后,再收到前进等指令,就会一直前进。off指令是关闭)。

如果是采用串口通信的同学,当收到相关指令,通过发送串口发送相关指令控制小车即可。

第四、WIFI配网

如果第三步中使用了一键配网的程序,需要进行微信配网操作,如果第三步使用不需要配网的程序,可跳过此步骤。

开发板配网,首先关注公众号“巴法云”,或扫码

WIFI小车APP远程控制,无线智能小车之ESP8266例程_4wd

手机需要先连接到路由器,在“配网”中点击“一键配网”即可,配网成功后设备会重启,稍等几秒即可,只需配网一次即可,如需再次重新配网,需要连续重启5次开发板,每次间隔2s内,开发者也可接串口开输出的调试信息。

程序测试

在​​巴法创客云控制台​​ 此主题处(本例程demo中为mycar) 推送消息 1 ,开小车是否正常前进。

指令定义 前进是推送1,后退是推送2,左转是3,右转是4,停止是0,如需更多动作,可在单片机中自定义即可,简单说就是检测到某个字符串就执行相关动作,这个应该还是很好理解的。例如检测到msg=1,单片机就会认为是前进指令,会执行前进。在本例程中小车不会一直前进,如果收到前进指令,只会前进1.5s,如需一直前进,推送on,即可,关闭一直前进,推送off。

如果测试程序都正常运行,可以通过生成自己的安卓手机app进行控制。

第五、安卓app制作

安卓app 采用App Inventor开发。拖拽编程,大家不用担心不会玩。

Google App Inventor是一个完全在线开发的Android编程环境,抛弃复杂的程式代码而使用积木式的堆叠法来完成您的Android程序。而且这款编程软件不一定非要是专业的研发人员,甚至根本不需要掌握任何的程序编制知识。因为这款软件已经事先将软件的代码全部编写完毕,用户只需要根据自己的需求向其中添加服务选项即可。也就是我们所要做的只是写简单的代码拼装程序。

安装appInventor ​​点击安装​

demo程序: ​程序下载

需要修改为自己的UID和topic主题,需要和单片机里的保持一致,不然单片机会接收不到消息。

WIFI小车APP远程控制,无线智能小车之ESP8266例程_ESP8266_02

具体可参考上篇帖子的第三节(app inventor 开发):​​帖子​​ javascript:void(0)