Wifi遙控小車(chē)使用說(shuō)明 本例程采用ESP8266 wifi模塊與STM32串口連接,并提供AT指令封裝庫(kù)與STM32通訊,實(shí)現(xiàn)如下的通訊方式:
0.png (10.85 KB, 下載次數(shù): 120)
下載附件
2018-1-23 18:10 上傳
1、硬件部分 Wifi模塊絲印圖即引腳如下: 硬件連接如下:
2、手機(jī)APP部分 APP部分我們采用常用的APP wifi調(diào)試軟件 ITEAD WIFI,安裝完成后打開(kāi)  如下界面,點(diǎn)擊Set up進(jìn)入設(shè)置: 進(jìn)入后會(huì)自動(dòng)獲取到手機(jī)的IP,注意手機(jī)是連接到一個(gè)路由器下的,支持局域網(wǎng)內(nèi)調(diào)試,先設(shè)置端口,一般是 8080 然后設(shè)置指令,我們使用到了如下紅框內(nèi)的指令,指令協(xié)議可以參考工程文件interface.h有如下描述: //指令定義 #define COMM_STOP 'I'//停止 #define COMM_UP 'A'//前進(jìn) #define COMM_DOWN 'B'//后退 #define COMM_LEFT 'C'//左轉(zhuǎn) #define COMM_RIGHT 'D'//右轉(zhuǎn) 指令設(shè)置好之后就可以啟動(dòng)服務(wù)了,如下點(diǎn)擊開(kāi)始就好了 設(shè)置完成后如下,這里記下服務(wù)端IP和端口號(hào),我這里是 192.168.31.195,端口 8080 ,然后返回: 3、stm32軟件部分 設(shè)置完APP軟件后,再來(lái)修改我們的工程文件,打開(kāi)工程“wifi遙控小車(chē)”,打開(kāi)main.c文件,修改紅框內(nèi)信息: HOST_NAME和HOST_PORT為手機(jī)上面的IP和端口號(hào),SSID為您的路由器名,PSD為路由器密碼,修改好后重新編譯后下載。 下載完成復(fù)位一下,就可以運(yùn)行了,程序會(huì)自動(dòng)連接手機(jī)開(kāi)啟的服務(wù),實(shí)現(xiàn)TCP/IP通信,連接成功后,看手機(jī)端的設(shè)置會(huì)有如下提示: 本程序還是用了串口1來(lái)輸出調(diào)試信息,將串口1連接電腦后也會(huì)在串口調(diào)試助手看到如下信息: 連接成功后即可在如下界面按鍵,操作小車(chē)運(yùn)行: 
如有其他問(wèn)題請(qǐng)先詳細(xì)參考wifi模塊資料以及本實(shí)驗(yàn)程序。
stm32單片機(jī)源程序:
- /********************************* 深圳市航太電子 *******************************
- * 實(shí) 驗(yàn) 名 :小車(chē)藍(lán)牙遙控實(shí)驗(yàn)
- * 實(shí)驗(yàn)說(shuō)明 :使用手機(jī)連接藍(lán)牙模塊后,通過(guò)手機(jī)發(fā)送指令來(lái)控制小車(chē)
- * 實(shí)驗(yàn)平臺(tái) :航太ARM單片機(jī)開(kāi)發(fā)板
- * 連接方式 :請(qǐng)參考interface.h文件
- * 注 意 :指令必須連續(xù)發(fā)送才會(huì)使小車(chē)動(dòng)作,若停止發(fā)送指令,則小車(chē)會(huì)停止
- ****************************************************************************************/
- #include "stm32f10x.h"
- #include "interface.h"
- #include "LCD1602.h"
- #include "IRCtrol.h"
- #include "motor.h"
- #include "uart.h"
- #include "ESP8266.h"
- #include "serialportAPI.h"
- #include <stdlib.h>
- #include <stdio.h>
- //全局變量定義
- unsigned int speed_count=0;//占空比計(jì)數(shù)器 50次一周期
- char front_left_speed_duty=SPEED_DUTY;
- char front_right_speed_duty=SPEED_DUTY;
- char behind_left_speed_duty=SPEED_DUTY;
- char behind_right_speed_duty=SPEED_DUTY;
- unsigned char tick_5ms = 0;//5ms計(jì)數(shù)器,作為主函數(shù)的基本周期
- unsigned char tick_1ms = 0;//1ms計(jì)數(shù)器,作為電機(jī)的基本計(jì)數(shù)器
- unsigned char tick_200ms = 0;//刷新顯示
- unsigned int tick_3s = 0;//隔3s斷線(xiàn)檢測(cè)
- char ctrl_comm = COMM_STOP;//控制指令
- unsigned char continue_time=0;
- unsigned char wifi_rec_flag=0;//藍(lán)牙控制標(biāo)志位
- #define HOST_NAME "192.168.31.195" //主機(jī)IP
- #define HOST_PORT 8080 //主機(jī)端口
- #define SSID "Hantech" //路由器名
- #define PSD "hantechinternet" //密碼
- #define RECVBUF_SIZE 16
- unsigned char buffer[RECVBUF_SIZE] = {0};
- int main(void)
- {
- USART1Conf(9600);
- DBG("system begin");
- delay_init();
- GPIOCLKInit();
- UserLEDInit();
- LCD1602Init();
- TIM2_Init();
- MotorInit();
- ServoInit();
- // USART3Conf(9600);
- while(1)
- {
- DBG("chang baud");
-
- UartBegin(115200,&USART3Conf,&PutChar);//每次設(shè)置完波特率后需要做一點(diǎn)延時(shí)
- delay(500);
- SetBaud(19200);
- UartBegin(19200,&USART3Conf,&PutChar);//更改波特率到19200
- delay(500);
- if(0 != SetBaud(19200))//在新波特率下檢查是否成功
- {
- break;//成功就退出
- }
- }
- while(0 == WifiInit(SSID,PSD,HOST_NAME,HOST_PORT));
-
- while(1)
- {
- if(SerialAvailable() > 5)//接收到至少5個(gè)字符
- {
- int len;
- len = recv(buffer, RECVBUF_SIZE, 100);
- if (len > 0)
- {
- char inChar;
- inChar = buffer[0];
- // send(buffer, len);
- if (ctrl_comm != inChar || continue_time == 1)
- {
- wifi_rec_flag = 1;
- ctrl_comm = inChar;
- }
- continue_time = 60;//更新持續(xù)時(shí)間
- tick_3s = 0;//心跳包周期
- }
- }
-
- if(tick_5ms >= 5)
- {
- tick_5ms = 0;
- tick_200ms++;
- if(tick_200ms >= 40)
- {
- tick_200ms = 0;
- tick_3s++;
- LEDToggle(LED_PIN);
- if(tick_3s >= 15)//15*200=3000
- {
- tick_3s = 0;
- //定時(shí)檢查連接是否正常,如果不正常,wifi復(fù)位重新連接
- if (getSystemStatus() != STATUS_GETLINK)
- {
- DBG("TCP unlink");
- while(!WifiInit(SSID,PSD,HOST_NAME,HOST_PORT));
- }else
- {
- DBG("TCP link tick");
- }
- }
- }
- //continue_time--;//200ms 無(wú)接收指令就停車(chē)
- if(continue_time == 0)
- {
- continue_time = 1;
- CarStop();
- }
- //do something
- if(wifi_rec_flag == 1)//接收到紅外信號(hào)
- {
- wifi_rec_flag = 0;
- switch(ctrl_comm)
- {
- case COMM_UP: CarGo();break;
- case COMM_DOWN: CarBack();break;
- case COMM_LEFT: CarLeft();break;
- case COMM_RIGHT: CarRight();break;
- case COMM_STOP: CarStop();break;
- default : break;
- }
- LCD1602WriteCommand(ctrl_comm);
- DBG("recv COMM");
- }
- }
-
- }
- }
復(fù)制代碼
0.png (59.61 KB, 下載次數(shù): 120)
下載附件
2018-1-23 18:14 上傳
0.png (55.87 KB, 下載次數(shù): 122)
下載附件
2018-1-23 18:11 上傳
全部資料下載(stm32源碼+app+資料):
11.wifi遙控小車(chē)實(shí)驗(yàn).7z
(1.65 MB, 下載次數(shù): 801)
2019-1-23 14:55 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|