准备材料:

Arduino Uno 一块

Arduino 扩展板 购买链接

DT-06模块一个 购买链接

安卓手机一个

小度音箱一个

小车一个

杜邦线若干

1.DT-06固件的烧录

1.1打开ESP模块下载工具ESPFlashDownloadTool,选择需要下载的固件,填写下载地址,推荐使用 ESP8266 Download TOOL,配置信息如下:

1.2 选择实际的串口,选择下载速度

1.3点击ERASE,先插除,再点击START,开始下载

工具下载及详细请看:http://bbs.doit.am/forum.php?mod=viewthread&tid=208

DT-06固件.bin文件下载链接

2.硬件电路的连接

DT-06安装到arduino扩展板的串口排插位置

3.DT-06通讯协议

通信方式:串口通讯

波特率:115200,无奇偶校验,8位数据位,1位停止位

每条命令以\r\n结尾。

3.1 控制命令
3.1.1 DT06->arduino

‘2’:前进,’4’:左转,’6’:右转,’8’:后退,’5’:停止,’Y’:左平移,

‘y’:右平移,’7’:加速,’9’:减速

3.1.2 Arduino->DT06

cmd=ctrl&ok;

3.2 设置小车模式
3.2.1 DT06->arduino

‘A’:手动,’B’:循迹,’C’:避障。

3.2.2 Arduino->DT06

cmd=mode&ok;

3.3 上传状态
3.3.1 Arduino->DT06

上传状态

cmd=ext_stat&status=speed|mode|soft_poweroff

例:cmd=ext_stat&status=255|65|0

speed表示小车当前车速,mode表示小车当前模式

soft_poweroff表示小车当前运动状态,1表示运动,0表示停止

3.3.2 DT06->arduino

cmd= ok

4.Arduino UNO 程序的编写

//材料:UNO+Doit电机驱动板+蓝牙模块

/IO引脚定义*/
//电机引脚
#define PWMD 3 //D电机转速
#define DIRD 2 //D电机转向

#define PWMC 5 //C电机转速
#define DIRC 4 //C电机转向

#define PWMB 6 //B电机转速
#define DIRB 7 //B电机转向

#define PWMA 9 //A电机转速
#define DIRA 8 //A电机转向

//上传状态
void uploadExtendStatus(uint8_t uSpeed,uint8_t uMode,uint8_t soft_poweroff)
{
char strExtStat[128];memset(strExtStat,0x00,sizeof(strExtStat));
sprintf(strExtStat,“cmd=ext_stat&status=%d|%d|%d\r\n”,uSpeed,uMode,soft_poweroff);
Serial.write((uint8_t*)strExtStat,strlen(strExtStat));
}

//车体前进
//
void motor_go_forward()
{
digitalWrite(DIRA,HIGH);
digitalWrite(DIRB,HIGH);
digitalWrite(DIRC,LOW);
digitalWrite(DIRD,LOW);

analogWrite(PWMA,255);
analogWrite(PWMB,255);
analogWrite(PWMC,255);
analogWrite(PWMD,255);
uploadExtendStatus(255,65,1);

}

//车体前进后退
//
void motor_go_back()
{
digitalWrite(DIRA,LOW);
digitalWrite(DIRB,LOW);
digitalWrite(DIRC,HIGH);
digitalWrite(DIRD,HIGH);

analogWrite(PWMA,255);
analogWrite(PWMB,255);
analogWrite(PWMC,255);
analogWrite(PWMD,255);
uploadExtendStatus(255,65,1);
}

//车体左转
//
void motor_go_left()
{
digitalWrite(DIRA,HIGH);
digitalWrite(DIRB,LOW);
digitalWrite(DIRC,LOW);
digitalWrite(DIRD,HIGH);

analogWrite(PWMA,255);
analogWrite(PWMB,255);
analogWrite(PWMC,255);
analogWrite(PWMD,255);
uploadExtendStatus(255,65,1);
}

//车体右转
//
void motor_go_right()
{
digitalWrite(DIRA,LOW);
digitalWrite(DIRB,HIGH);
digitalWrite(DIRC,HIGH);
digitalWrite(DIRD,LOW);

analogWrite(PWMA,255);
analogWrite(PWMB,255);
analogWrite(PWMC,255);
analogWrite(PWMD,255);
uploadExtendStatus(255,65,1);
}

//车体停止
void motor_go_stop()
{
digitalWrite(DIRA,LOW);
digitalWrite(DIRB,LOW);
digitalWrite(DIRC,LOW);
digitalWrite(DIRD,LOW);

analogWrite(PWMA,0);
analogWrite(PWMB,0);
analogWrite(PWMC,0);
analogWrite(PWMD,0);
uploadExtendStatus(0,65,0);

}

//车体左平移
//
void motor_pmove_left()
{
digitalWrite(DIRA,HIGH);
digitalWrite(DIRB,LOW);
digitalWrite(DIRC,HIGH);
digitalWrite(DIRD,LOW);

analogWrite(PWMA,200);
analogWrite(PWMB,200);
analogWrite(PWMC,200);
analogWrite(PWMD,200);
uploadExtendStatus(200,65,1);

}

//车体右平移
void motor_pmove_right()
{
digitalWrite(DIRA,LOW);
digitalWrite(DIRB,HIGH);
digitalWrite(DIRC,LOW);
digitalWrite(DIRD,HIGH);

analogWrite(PWMA,200);
analogWrite(PWMB,200);
analogWrite(PWMC,200);
analogWrite(PWMD,200);
uploadExtendStatus(200,65,1);

}

//串口接收处理
#define MAX_PACKETSIZE 32 //串口接收缓冲区
char buffUART[MAX_PACKETSIZE];
unsigned int buffUARTIndex = 0;
unsigned long preUARTTick = 0;
//小车转向
enum DN
{
GO_ADVANCE,
GO_LEFT,
GO_RIGHT,
GO_BACK,
STOP_STOP,
PMOVE_LEFT,//Parallel movement to the left
PMOVE_RIGHT,//Parallel movement to the right
DEF
} Drive_Num = DEF;

//电机控制标志量
bool flag1 = false;
bool stopFlag = false;
bool JogFlag = false;
uint16_t JogTimeCnt = 0;
uint32_t JogTime = 0;

//小车电机控制
void CAR_Control()
{
switch (Drive_Num)
{
case GO_ADVANCE:motor_go_forward(); JogFlag = true; JogTimeCnt = 1; JogTime = millis(); break;
case GO_LEFT: motor_go_left(); JogFlag = true; JogTimeCnt = 1; JogTime = millis(); break;
case GO_RIGHT: motor_go_right(); JogFlag = true; JogTimeCnt = 1; JogTime = millis(); break;
case GO_BACK: motor_go_back(); JogFlag = true; JogTimeCnt = 1; JogTime = millis(); break;
case STOP_STOP: motor_go_stop(); JogTime = 0; JogFlag = false; stopFlag = true; break;
case PMOVE_LEFT: motor_pmove_left(); JogFlag = true; JogTimeCnt = 1; JogTime = millis(); break;
case PMOVE_RIGHT: motor_pmove_right(); JogFlag = true; JogTimeCnt = 1; JogTime = millis(); break;
default: break;
}
Drive_Num = DEF;
//小车保持姿态210ms
if (millis() - JogTime >= 510)
{
JogTime = millis();
if (JogFlag == true)
{
stopFlag = false;
if (JogTimeCnt <= 0)
{
JogFlag = false; stopFlag = true;
}
JogTimeCnt–;
}
if (stopFlag == true)
{
stopFlag = false;
JogTimeCnt = 0;
motor_go_stop();
}
}
}

//串口数据接收处理
void UART_Control()
{
char Uart_Date = 0;
if (Serial.available()) //串口收到数据
{
Uart_Date = Serial.read();
}

if (buffUARTIndex > 0 && (millis() - preUARTTick >= 100)) //超过100ms没接到数据,则认为已经接收到完整指令
{ //data ready
buffUART[buffUARTIndex] = 0x00;
if ((buffUART[0] == ‘C’) && (buffUART[1] == ‘M’) && (buffUART[2] == ‘D’)) //若发送指令非法,则忽略
{
;
}
else Uart_Date = buffUART[0];
buffUARTIndex = 0;
}
//Serial.println(“Uart_Date:”);
//Serial.println(Uart_Date);
switch (Uart_Date) //串口控制指令
{
case ‘2’: Drive_Num = GO_ADVANCE; break;
case ‘4’: Drive_Num = GO_LEFT; break;
case ‘6’: Drive_Num = GO_RIGHT; break;
case ‘8’: Drive_Num = GO_BACK; break;
case ‘5’: Drive_Num = STOP_STOP; break;
case ‘Y’: Drive_Num = PMOVE_LEFT; break;
case ‘y’: Drive_Num = PMOVE_RIGHT;break;
case ‘A’: break;
case ‘B’: break;
case ‘C’: break;
default: break;
}

}
//IO初始化
void IO_init()
{
pinMode(DIRA, OUTPUT);
pinMode(PWMA, OUTPUT);
pinMode(DIRB, OUTPUT);
pinMode(PWMB, OUTPUT);
pinMode(DIRC, OUTPUT);
pinMode(PWMC, OUTPUT);
pinMode(DIRD, OUTPUT);
pinMode(PWMD, OUTPUT);
motor_go_stop();
}

/
void setup()
{
Serial.begin(115200);
delay(1000);
IO_init();
}

void loop()
{
UART_Control();//串口接收处理
CAR_Control();//小车控制
}

注意:

(1)上传arduino程序需先断开DT-06模块的连接,程序上传完成后再插上DT-06模块

(2)DT-06和arduino UNO的通信协议中

当APP控制界面点击前进状态DT-06向arduino UNO发送字符‘2’,

当APP控制界面点击后退状态DT-06向arduino UNO发送字符‘4’,

当APP控制界面点击左转状态DT-06向arduino UNO发送字符‘6’,

当APP控制界面点击右转状态DT-06向arduino UNO发送字符‘8’,

arduino UNO控制程序代码:下载地址

5.功能测试

5.1 DT-06与手机DoHome App 的连接
5.1.1扫描下面二维码(注意用浏览器扫描,不要用微信)或直接访问
http://dohome.doit.am/upgrade/downLoad/downLoad.php 下载

5.1.2 App安装完成后打开应用,打开左上角配置栏,在“点击登录”处创建和登陆帐户。


5.1.3 点右上角加号添加设备,点击机器人,添加新的设备



5.1.4连接附近可用的WIFI,选择设备要连接的网络路由器,并输入正确的网络密码。点击下一步

5.1.5按照页面说明,返回手机的WLAN设置,连接“DoHome_XXXX”的热点,其密码为“12345678”。注:若有多台设备,请注意区分不同的热点名字。等待设备连接完成100%。


6.小度音响的连接和远程控制

在手机应用市场搜索小度音箱app并安装完成打开小度音箱APP

6.1小度音箱APP添加小度音响设备
打开手机蓝牙,打开小度音箱APP,点击添加新设备,长按音箱上的三角键,听到音箱提示音后点击下一步

6.2小度音箱APP添加其他平台设备
6.2.1打开小度音箱APP,点击“智能家居”,然后添加设备,接着在弹出的品牌列表中找到DoHome。


6.2.2选择绑定账号,输入DoHome APP的绑定账号信息(注意是在第5节关于创建和注册的DoHome账号)。返回智能家居主页面,刷新可以得到该账号下的设备列表。


6.2.3现在您已经可以使用小度音响控制您的设备了。同时,小度音箱在“设备详情”菜单下支持分组功能。

小度支持的部分指令如下(以插座为例):
打开 [设备名字]
关闭 [设备名字]

6.3 小度音箱语音远程控制继电器
对小度说打开门口插座,继电器 的红色开关指示灯亮起
对小度说关闭门口插座,继电器 的红色开关指示灯熄灭


7.天猫精灵的连接和远程控制

7.1天猫精灵APP添加音响设备
7.1.1 在各大应用市场搜索天猫精灵app并安装以华为为例

7.1.2 打开天猫精灵APP,点击“我的”,然后添加智能设备,接着在左侧列表中选择您的音响设备类型-》选择路由器-》长按音响上的静音键点击开始连接



7.2天猫精灵APP添加其他平台设备
第一步:打开天猫精灵APP,点击“我的”,然后添加智能设备,接着在左侧列表中选择您的设备类型。



第二步:右上角搜索“DoHome”,并在链接的页面中输入您的DoHome 账号信息,完成天猫精灵与DoHome之间的链接。



第三步:此时,天猫精灵APP中,已经出现该账号下的所有设备。您可以选取特定设备,进行重新命名,例如“客厅的台灯”等等。现在您可以使用天猫精灵控制设备了。


天猫精灵支持的部分指令(以插座为例):
打开 [设备名字]
关闭 [设备名字]
7.3 天猫精灵语音远程控制继电器
对天猫精灵说打开门口插座,继电器 的红色开关指示灯亮起
对天猫精灵说关闭门口插座,继电器 的红色开关指示灯熄灭

8.小米音箱的连接和远程控制

8.1米家APP添加小爱音响设备
8.1.1在各大应用市场搜索米家app并安装以华为为例

8.1.2 打开小爱音箱,长按音箱上三角形按键听到语音提示:已进入配对模式。手机打开蓝牙,打开米家APP点击添加设备–>附近设备,搜索到设备连接,接着选择路由器下一步即可


8.2米家APP添加其他平台设备
第一步:打开米家APP,点击“我的”,然后选择“其他平台设备”。


第二步:点击添加,在弹出的列表中,找到“四博智联”。选择绑定账号,输入DoHome APP的绑定账号信息。


第三步:现在您已经可以使用小爱同学控制您的设备了。

小爱支持的部分指令如下(以插座为例):
打开 [设备名字]
关闭 [设备名字]

8.3 小米音箱语音远程控制继电器
对天猫精灵说打开门口插座,继电器 的红色开关指示灯亮起
对天猫精灵说关闭门口插座,继电器 的红色开关指示灯熄灭


利用DoHome APP和音箱控制小车的实验参考步骤相关推荐

  1. 利用DoHome APP和音箱控制LED灯实验参考步骤

    准备材料: Arduino Uno 一块 Arduino 扩展板 购买链接 DT-06模块一个 购买链接 安卓手机一个 小度音箱一个 小灯珠一个 杜邦线若干 1.DT-06固件的烧录 1.1打开ESP ...

  2. 怎样用计算机演示声音的波形,利用音频APP演示声音特性的创新实验——智能手机上的中学物理实验创新之一...

    赵兴华何其荣 (拱北中学 广东 珠海 519020) [发表在<课程教学研究>2017年第4期] [摘要]利用智能手机安装的音频示波器Oscilloscope APP,测定不同声音的波形, ...

  3. 语音控制小车运动APP(基于百度语音识别)

    语音控制小车运动APP(基于百度语音识别) 项目背景 由于暑期优秀本科生项目需求,开发了一款控制机器人行走的APP,具体要求如下: 在第一个界面(连接界面)实现Socket连接,连接成功则跳转到下一个 ...

  4. ESP8266从点灯到遥控小车(三)——组装小车,0代码开发APP控制小车

    ESP8266从点灯到APP遥控小车(三)--组装小车,0代码开发APP控制小车 文章目录 ESP8266从点灯到APP遥控小车(三)--组装小车,0代码开发APP控制小车 所需组件 一.小车所需组件 ...

  5. arduino控制小车转向_利用XECU和激光雷达快速搭建入门级的自动驾驶小车

    利用XECU和激光雷达快速搭建入门级的自动驾驶小车 1 简介 如果关注过我们之前的推文和视频演示,相信大家对我们的XECU应该已经很熟悉了.那么今天就向大家介绍一下,如何利用我们的XECU和激光雷达快 ...

  6. 实例9、stc8a蓝牙模块HC05或者HC06模块,控制小车。利用定时器1产生通信的波特率9600

    一.目的 二.设备模块 三.背景任务和原理接线 四.步骤 五.效果 六.心得 ** 一.目的 ** 掌握串口通信的基本知识,先照葫芦画瓢,跟着大概了解做一遍,慢慢了解: 掌握蓝牙模块的知识: 掌握定时 ...

  7. [转]基于ROS平台的移动机器人-4-通过ROS利用键盘控制小车移动

    原文出处: https://blog.csdn.net/Forrest_Z/article/details/55002484 准备工作 1.下载串口通信的ROS包 (1)cd ~/catkin_ws/ ...

  8. 斐讯音箱控制扫地机器人_斐讯扫地机器人app

    斐讯大能X3扫地机器人APP下载是一款家庭智能扫地机器人软件.用户可下载大能扫地机器人APP用手机控制,配对过程也是非常简单,按提示基本一两分钟就可以搞定!请根据APP提示配对连接扫地机器人:可通过A ...

  9. Qt on android 蓝牙开发(控制小车)

    因为要做一个用蓝牙控制小车的app,就用着QT搞了下,网上关于QT蓝牙开发的资料比较少,我在这里记录下过程希望对看到了人有所帮助 首先在项目文件里添加 QT += bluetooth 这样就可以用QT ...

最新文章

  1. 大咖 | 斯坦福教授骆利群:为何人脑比计算机慢1000万倍,却如此高效?
  2. 二十二、面试必备:final、finally、finalize有什么不同?
  3. 图解JavaScript原型链继承
  4. 动态链接库 仅有.dll文件时候的使用方法
  5. C++ struct结构体 实现搜索二叉树(BST)
  6. 康乐php一键脚本,kangle一键脚本
  7. python语言中的注释符_各种语言中的注释符总结
  8. xlsx xlsx-style 设置导出的exce表格样式
  9. 【Android智能硬件开发】【004】通过PackageInstaller静默安装apk
  10. 腾讯云实验室 Gitea 互动教程上线啦
  11. python实现B站自动发弹幕_python代码
  12. Windows10C盘文件简单介绍
  13. Vlan是什么?定义,特点超详细解析
  14. Harbor开源项目有奖征文活动开启
  15. Ffmpeg音频转码 卡顿(MP2转AAC)
  16. wald检验_Stata: 面板 Granger 因果检验
  17. 递归算法(二分查找)
  18. JS指定打印机进行打印
  19. 深度学习模型部署浅析
  20. 详解RAM、ROM、FLASH的区别

热门文章

  1. MATLAB传递函数分析总结,Matlab实验分析报告.doc
  2. python下载m3u8视频_使用python 下载m3u8格式视频,并使用ffmpeg 合成视频
  3. 简单三步!教你用前端表格控件SpreadJS做购物车
  4. 计算机组成原理(一):计算机系统体系结构
  5. J2ME结构与相关规范介绍(转)
  6. 利用ubuntu对SD卡分区,生成EXT3、EXT4分区
  7. 如何从 Red Hat Enterprise Linux 6 升级到 Red Hat Enterprise Linux 7?
  8. 下载的文件需要右键属性解除锁定的一次性解决方法
  9. Ubuntu配置GoldenDict词典翻译-划线翻译
  10. [ITIL]-ITIL4服务管理的四个维度