Wifi遙控小車使用說明 本例程采用ESP8266 wifi模塊與STM32串口連接,并提供AT指令封裝庫與STM32通訊,實現如下的通訊方式:
0.png (11.09 KB, 下載次數: 107)
下載附件
2018-7-22 01:15 上傳
1、硬件部分 Wifi模塊絲印圖即引腳如下: 硬件連接如下: 2、手機APP部分 APP部分我們采用常用的APP wifi調試軟件 ITEAD WIFI,安裝完成后打開 如下界面,點擊Set up進入設置: 進入后會自動獲取到手機的IP,注意手機是連接到一個路由器下的,支持局域網內調試,先設置端口,一般是 8080 然后設置指令,我們使用到了如下紅框內的指令,指令協議可以參考工程文件interface.h有如下描述: //指令定義 #define COMM_STOP 'I'//停止 #define COMM_UP 'A'//前進 #define COMM_DOWN 'B'//后退 #define COMM_LEFT 'C'//左轉 #define COMM_RIGHT 'D'//右轉 指令設置好之后就可以啟動服務了,如下點擊開始就好了 設置完成后如下,這里記下服務端IP和端口號,我這里是 192.168.31.195,端口 8080 ,然后返回: 3、stm32軟件部分 設置完APP軟件后,再來修改我們的工程文件,打開工程“wifi遙控小車”,打開main.c文件,修改紅框內信息: HOST_NAME和HOST_PORT為手機上面的IP和端口號,SSID為您的路由器名,PSD為路由器密碼,修改好后重新編譯后下載。 下載完成復位一下,就可以運行了,程序會自動連接手機開啟的服務,實現TCP/IP通信,連接成功后,看手機端的設置會有如下提示: 本程序還是用了串口1來輸出調試信息,將串口1連接電腦后也會在串口調試助手看到如下信息: 連接成功后即可在如下界面按鍵,操作小車運行: 如有其他問題請先詳細參考wifi模塊資料以及本實驗程序。
單片機源程序如下: - /********************************* 深圳市航太電子有限公司 *******************************
- * 實 驗 名 :小車藍牙遙控實驗
- * 實驗說明 :使用手機連接藍牙模塊后,通過手機發送指令來控制小車
- * 實驗平臺 :航太ARM單片機開發板
- * 連接方式 :請參考interface.h文件
- * 注 意 :指令必須連續發送才會使小車動作,若停止發送指令,則小車會停止
- ****************************************************************************************/
- #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;//占空比計數器 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計數器,作為主函數的基本周期
- unsigned char tick_1ms = 0;//1ms計數器,作為電機的基本計數器
- unsigned char tick_200ms = 0;//刷新顯示
- unsigned int tick_3s = 0;//隔3s斷線檢測
- char ctrl_comm = COMM_STOP;//控制指令
- unsigned char continue_time=0;
- unsigned char wifi_rec_flag=0;//藍牙控制標志位
- #define HOST_NAME "192.168.31.195" //主機IP
- #define HOST_PORT 8080 //主機端口
- #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);//每次設置完波特率后需要做一點延時
- 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個字符
- {
- 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;//更新持續時間
- 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;
- //定時檢查連接是否正常,如果不正常,wifi復位重新連接
- 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)//接收到紅外信號
- {
- 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");
- }
- }
-
- }
- }
復制代碼
0.png (48.99 KB, 下載次數: 108)
下載附件
2018-7-22 01:14 上傳
所有資料51hei提供下載:
wifi遙控小車.zip
(6.88 MB, 下載次數: 222)
2018-7-21 18:07 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|