准备材料:
Arduino Uno 一块
Arduino 扩展板 购买链接
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文件下载链接
DT-06安装到arduino扩展板的串口排插位置
通信方式:串口通讯
波特率:115200,无奇偶校验,8位数据位,1位停止位
每条命令以\r\n结尾。
3.1.1 DT06->arduino
‘2’:前进,’4’:左转,’6’:右转,’8’:后退,’5’:停止,’Y’:左平移,
‘y’:右平移,’7’:加速,’9’:减速
3.1.2 Arduino->DT06
cmd=ctrl&ok;
3.2.1 DT06->arduino
‘A’:手动,’B’:循迹,’C’:避障。
3.2.2 Arduino->DT06
cmd=mode&ok;
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
1 //材料:UNO+Doit电机驱动板+蓝牙模块 2 3 /****************************IO引脚定义*****************************/ 4 //电机引脚 5 #define PWMD 3 //D电机转速 6 #define DIRD 2 //D电机转向 7 8 #define PWMC 5 //C电机转速 9 #define DIRC 4 //C电机转向 10 11 #define PWMB 6 //B电机转速 12 #define DIRB 7 //B电机转向 13 14 #define PWMA 9 //A电机转速 15 #define DIRA 8 //A电机转向 16 17 18 //上传状态 19 void uploadExtendStatus(uint8_t uSpeed,uint8_t uMode,uint8_t soft_poweroff) 20 { 21 char strExtStat[128];memset(strExtStat,0x00,sizeof(strExtStat)); 22 sprintf(strExtStat,"cmd=ext_stat&status=%d|%d|%d\r\n",uSpeed,uMode,soft_poweroff); 23 Serial.write((uint8_t*)strExtStat,strlen(strExtStat)); 24 } 25 26 27 //车体前进 28 // 29 void motor_go_forward() 30 { 31 digitalWrite(DIRA,HIGH); 32 digitalWrite(DIRB,HIGH); 33 digitalWrite(DIRC,LOW); 34 digitalWrite(DIRD,LOW); 35 36 analogWrite(PWMA,255); 37 analogWrite(PWMB,255); 38 analogWrite(PWMC,255); 39 analogWrite(PWMD,255); 40 uploadExtendStatus(255,65,1); 41 42 } 43 44 //车体前进后退 45 // 46 void motor_go_back() 47 { 48 digitalWrite(DIRA,LOW); 49 digitalWrite(DIRB,LOW); 50 digitalWrite(DIRC,HIGH); 51 digitalWrite(DIRD,HIGH); 52 53 analogWrite(PWMA,255); 54 analogWrite(PWMB,255); 55 analogWrite(PWMC,255); 56 analogWrite(PWMD,255); 57 uploadExtendStatus(255,65,1); 58 } 59 60 //车体左转 61 // 62 void motor_go_left() 63 { 64 digitalWrite(DIRA,HIGH); 65 digitalWrite(DIRB,LOW); 66 digitalWrite(DIRC,LOW); 67 digitalWrite(DIRD,HIGH); 68 69 analogWrite(PWMA,255); 70 analogWrite(PWMB,255); 71 analogWrite(PWMC,255); 72 analogWrite(PWMD,255); 73 uploadExtendStatus(255,65,1); 74 } 75 76 //车体右转 77 // 78 void motor_go_right() 79 { 80 digitalWrite(DIRA,LOW); 81 digitalWrite(DIRB,HIGH); 82 digitalWrite(DIRC,HIGH); 83 digitalWrite(DIRD,LOW); 84 85 analogWrite(PWMA,255); 86 analogWrite(PWMB,255); 87 analogWrite(PWMC,255); 88 analogWrite(PWMD,255); 89 uploadExtendStatus(255,65,1); 90 } 91 92 //车体停止 93 void motor_go_stop() 94 { 95 digitalWrite(DIRA,LOW); 96 digitalWrite(DIRB,LOW); 97 digitalWrite(DIRC,LOW); 98 digitalWrite(DIRD,LOW); 99 100 analogWrite(PWMA,0); 101 analogWrite(PWMB,0); 102 analogWrite(PWMC,0); 103 analogWrite(PWMD,0); 104 uploadExtendStatus(0,65,0); 105 106 } 107 108 //车体左平移 109 // 110 void motor_pmove_left() 111 { 112 digitalWrite(DIRA,HIGH); 113 digitalWrite(DIRB,LOW); 114 digitalWrite(DIRC,HIGH); 115 digitalWrite(DIRD,LOW); 116 117 analogWrite(PWMA,200); 118 analogWrite(PWMB,200); 119 analogWrite(PWMC,200); 120 analogWrite(PWMD,200); 121 uploadExtendStatus(200,65,1); 122 123 } 124 125 //车体右平移 126 void motor_pmove_right() 127 { 128 digitalWrite(DIRA,LOW); 129 digitalWrite(DIRB,HIGH); 130 digitalWrite(DIRC,LOW); 131 digitalWrite(DIRD,HIGH); 132 133 analogWrite(PWMA,200); 134 analogWrite(PWMB,200); 135 analogWrite(PWMC,200); 136 analogWrite(PWMD,200); 137 uploadExtendStatus(200,65,1); 138 139 } 140 141 //串口接收处理 142 #define MAX_PACKETSIZE 32 //串口接收缓冲区 143 char buffUART[MAX_PACKETSIZE]; 144 unsigned int buffUARTIndex = 0; 145 unsigned long preUARTTick = 0; 146 //小车转向 147 enum DN 148 { 149 GO_ADVANCE, 150 GO_LEFT, 151 GO_RIGHT, 152 GO_BACK, 153 STOP_STOP, 154 PMOVE_LEFT,//Parallel movement to the left 155 PMOVE_RIGHT,//Parallel movement to the right 156 DEF 157 } Drive_Num = DEF; 158 159 //电机控制标志量 160 bool flag1 = false; 161 bool stopFlag = false; 162 bool JogFlag = false; 163 uint16_t JogTimeCnt = 0; 164 uint32_t JogTime = 0; 165 166 167 //小车电机控制 168 void CAR_Control() 169 { 170 switch (Drive_Num) 171 { 172 case GO_ADVANCE:motor_go_forward(); JogFlag = true; JogTimeCnt = 1; JogTime = millis(); break; 173 case GO_LEFT: motor_go_left(); JogFlag = true; JogTimeCnt = 1; JogTime = millis(); break; 174 case GO_RIGHT: motor_go_right(); JogFlag = true; JogTimeCnt = 1; JogTime = millis(); break; 175 case GO_BACK: motor_go_back(); JogFlag = true; JogTimeCnt = 1; JogTime = millis(); break; 176 case STOP_STOP: motor_go_stop(); JogTime = 0; JogFlag = false; stopFlag = true; break; 177 case PMOVE_LEFT: motor_pmove_left(); JogFlag = true; JogTimeCnt = 1; JogTime = millis(); break; 178 case PMOVE_RIGHT: motor_pmove_right(); JogFlag = true; JogTimeCnt = 1; JogTime = millis(); break; 179 default: break; 180 } 181 Drive_Num = DEF; 182 //小车保持姿态210ms 183 if (millis() - JogTime >= 510) 184 { 185 JogTime = millis(); 186 if (JogFlag == true) 187 { 188 stopFlag = false; 189 if (JogTimeCnt <= 0) 190 { 191 JogFlag = false; stopFlag = true; 192 } 193 JogTimeCnt--; 194 } 195 if (stopFlag == true) 196 { 197 stopFlag = false; 198 JogTimeCnt = 0; 199 motor_go_stop(); 200 } 201 } 202 } 203 204 205 206 //串口数据接收处理 207 void UART_Control() 208 { 209 char Uart_Date = 0; 210 if (Serial.available()) //串口收到数据 211 { 212 Uart_Date = Serial.read(); 213 } 214 215 if (buffUARTIndex > 0 && (millis() - preUARTTick >= 100)) //超过100ms没接到数据,则认为已经接收到完整指令 216 { //data ready 217 buffUART[buffUARTIndex] = 0x00; 218 if ((buffUART[0] == ‘C‘) && (buffUART[1] == ‘M‘) && (buffUART[2] == ‘D‘)) //若发送指令非法,则忽略 219 { 220 ; 221 } 222 else Uart_Date = buffUART[0]; 223 buffUARTIndex = 0; 224 } 225 //Serial.println("Uart_Date:"); 226 //Serial.println(Uart_Date); 227 switch (Uart_Date) //串口控制指令 228 { 229 case ‘2‘: Drive_Num = GO_ADVANCE; break; 230 case ‘4‘: Drive_Num = GO_LEFT; break; 231 case ‘6‘: Drive_Num = GO_RIGHT; break; 232 case ‘8‘: Drive_Num = GO_BACK; break; 233 case ‘5‘: Drive_Num = STOP_STOP; break; 234 case ‘Y‘: Drive_Num = PMOVE_LEFT; break; 235 case ‘y‘: Drive_Num = PMOVE_RIGHT;break; 236 case ‘A‘: break; 237 case ‘B‘: break; 238 case ‘C‘: break; 239 default: break; 240 } 241 242 } 243 //IO初始化 244 void IO_init() 245 { 246 pinMode(DIRA, OUTPUT); 247 pinMode(PWMA, OUTPUT); 248 pinMode(DIRB, OUTPUT); 249 pinMode(PWMB, OUTPUT); 250 pinMode(DIRC, OUTPUT); 251 pinMode(PWMC, OUTPUT); 252 pinMode(DIRD, OUTPUT); 253 pinMode(PWMD, OUTPUT); 254 motor_go_stop(); 255 } 256 257 ///////////////////////////////////////////////////////////////////////////// 258 void setup() 259 { 260 Serial.begin(115200); 261 delay(1000); 262 IO_init(); 263 } 264 265 void loop() 266 { 267 UART_Control();//串口接收处理 268 CAR_Control();//小车控制 269 }
注意:
(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.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%。
APP的控制界面如下图,点击前进按钮,小车前进一段时间,长按APP界面前进按钮,小车一直保持前进,左转右转后退类似。
在手机应用市场搜索小度音箱app并安装完成打开小度音箱APP
打开手机蓝牙,打开小度音箱APP,点击添加新设备,长按音箱上的三角键,听到音箱提示音后点击下一步
6.2.1打开小度音箱APP,点击“智能家居”,然后添加设备,接着在弹出的品牌列表中找到DoHome。
6.2.2选择绑定账号,输入DoHome APP的绑定账号信息(注意是在第5节关于创建和注册的DoHome账号)。返回智能家居主页面,刷新可以得到该账号下的设备列表。
6.2.3现在您已经可以使用小度音响控制您的设备了。同时,小度音箱在“设备详情”菜单下支持分组功能。
小度支持的部分指令如下(以插座为例):
对小度说打开门口插座,继电器 的红色开关指示灯亮起
对小度说关闭门口插座,继电器 的红色开关指示灯熄灭
7.1.1 在各大应用市场搜索天猫精灵app并安装以华为为例
7.1.2 打开天猫精灵APP,点击“我的”,然后添加智能设备,接着在左侧列表中选择您的音响设备类型-》选择路由器-》长按音响上的静音键点击开始连接
第一步:打开天猫精灵APP,点击“我的”,然后添加智能设备,接着在左侧列表中选择您的设备类型。
第二步:右上角搜索“DoHome”,并在链接的页面中输入您的DoHome 账号信息,完成天猫精灵与DoHome之间的链接。
第三步:此时,天猫精灵APP中,已经出现该账号下的所有设备。您可以选取特定设备,进行重新命名,例如“客厅的台灯”等等。现在您可以使用天猫精灵控制设备了。
天猫精灵支持的部分指令(以插座为例):
对天猫精灵说打开门口插座,继电器 的红色开关指示灯亮起
对天猫精灵说关闭门口插座,继电器 的红色开关指示灯熄灭
8.1.1在各大应用市场搜索米家app并安装以华为为例
8.1.2 打开小爱音箱,长按音箱上三角形按键听到语音提示:已进入配对模式。手机打开蓝牙,打开米家APP点击添加设备-->附近设备,搜索到设备连接,接着选择路由器下一步即可
第一步:打开米家APP,点击“我的”,然后选择“其他平台设备”。
第二步:点击添加,在弹出的列表中,找到“四博智联”。选择绑定账号,输入DoHome APP的绑定账号信息。
第三步:现在您已经可以使用小爱同学控制您的设备了。
小爱支持的部分指令如下(以插座为例):
对天猫精灵说打开门口插座,继电器 的红色开关指示灯亮起
对天猫精灵说关闭门口插座,继电器 的红色开关指示灯熄灭