利用DoHome APP和音箱控制小車的實驗參考步驟


准備材料:

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 程序的編寫

  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.功能測試

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%。

 

5.2功能調試

APP的控制界面如下圖,點擊前進按鈕,小車前進一段時間,長按APP界面前進按鈕,小車一直保持前進,左轉右轉后退類似。

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 小米音箱語音遠程控制繼電器

對天貓精靈說打開門口插座,繼電器 的紅色開關指示燈亮起

對天貓精靈說關閉門口插座,繼電器 的紅色開關指示燈熄滅

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM