Wifi遙控小車使用說明 本例程采用ESP8266 wifi模塊與STM32串口連接,并提供AT指令封裝庫(kù)與STM32通訊,實(shí)現(xiàn)如下的通訊方式:
1、硬件部分 Wifi模塊絲印圖即引腳如下: 硬件連接如下: 2、手機(jī)APP部分 APP部分我們采用常用的APP wifi調(diào)試軟件 ITEAD WIFI,安裝完成后打開 如下界面,點(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)擊開始就好了 設(shè)置完成后如下,這里記下服務(wù)端IP和端口號(hào),我這里是 192.168.31.195,端口 8080 ,然后返回: 3、stm32軟件部分 設(shè)置完APP軟件后,再來修改我們的工程文件,打開工程“wifi遙控小車”,打開main.c文件,修改紅框內(nèi)信息: HOST_NAME和HOST_PORT為手機(jī)上面的IP和端口號(hào),SSID為您的路由器名,PSD為路由器密碼,修改好后重新編譯后下載。 下載完成復(fù)位一下,就可以運(yùn)行了,程序會(huì)自動(dòng)連接手機(jī)開啟的服務(wù),實(shí)現(xiàn)TCP/IP通信,連接成功后,看手機(jī)端的設(shè)置會(huì)有如下提示: 本程序還是用了串口1來輸出調(diào)試信息,將串口1連接電腦后也會(huì)在串口調(diào)試助手看到如下信息: 連接成功后即可在如下界面按鍵,操作小車運(yùn)行: 如有其他問題請(qǐng)先詳細(xì)參考wifi模塊資料以及本實(shí)驗(yàn)程序。
單片機(jī)源程序如下: - /********************************* 深圳市航太電子有限公司 *******************************
- * 實(shí) 驗(yàn) 名 :小車藍(lán)牙遙控實(shí)驗(yàn)
- * 實(shí)驗(yàn)說明 :使用手機(jī)連接藍(lán)牙模塊后,通過手機(jī)發(fā)送指令來控制小車
- * 實(shí)驗(yàn)平臺(tái) :航太ARM單片機(jī)開發(fā)板
- * 連接方式 :請(qǐng)參考interface.h文件
- * 注 意 :指令必須連續(xù)發(fā)送才會(huì)使小車動(dòng)作,若停止發(fā)送指令,則小車會(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斷線檢測(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 無接收指令就停車
- 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ù)制代碼
所有資料51hei提供下載:
wifi遙控小車.zip
(6.88 MB, 下載次數(shù): 222)
2018-7-21 18:07 上傳
點(diǎn)擊文件名下載附件
|