原理讲解
原理简述:利用发布订阅模式,即:利用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板配网,首先关注公众号“巴法云”,或扫码
手机需要先连接到WIFI,在“云设备”中点击“WIFI配网”即可,配网成功后设备会重启,稍等几秒即可,只需配网一次即可,如需再次重新配网,需要连续重启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程序。而且这款编程软件不一定非要是专业的研发人员,甚至根本不需要掌握任何的程序编制知识。因为这款软件已经事先将软件的代码全部编写完毕,用户只需要根据自己的需求向其中添加服务选项即可。也就是我们所要做的只是写简单的代码拼装程序。
需要修改为自己的UID和topic主题,需要和单片机里的保持一致,不然单片机会接收不到消息。
具体可参考上篇帖子的第三节(app inventor 开发):帖子 https://blog.csdn.net/bemfa/article/details/98478379
来源:oschina
链接:https://my.oschina.net/u/4270180/blog/3425348