找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 12462|回复: 11
收起左侧

Wifi遥控小车使用说明与APP及单片机控制源码下载

  [复制链接]
ID:376787 发表于 2018-7-21 18:07 | 显示全部楼层 |阅读模式
Wifi遥控小车使用说明
本例程采用ESP8266 wifi模块与STM32串口连接,并提供AT指令封装库与STM32通讯,实现如下的通讯方式:
0.png
1、硬件部分
Wifi模块丝印图即引脚如下:
硬件连接如下:
Wifi模块
Stm32核心板
说明
GND
GND

UTXD
PB11(RXD)
串口发送IO
CH_PD
VCC
3.3V,wifi使能位
URXD
PB10(TXD)
串口接收IO
VCC
3.3V
3.3V
其他

悬空
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模块资料以及本实验程序。

单片机源程序如下:
  1. /********************************* 深圳市航太电子有限公司 *******************************
  2. * 实 验 名 :小车蓝牙遥控实验
  3. * 实验说明 :使用手机连接蓝牙模块后,通过手机发送指令来控制小车
  4. * 实验平台 :航太ARM单片机开发板
  5. * 连接方式 :请参考interface.h文件
  6. * 注    意 :指令必须连续发送才会使小车动作,若停止发送指令,则小车会停止
  7. ****************************************************************************************/

  8. #include "stm32f10x.h"
  9. #include "interface.h"
  10. #include "LCD1602.h"
  11. #include "IRCtrol.h"
  12. #include "motor.h"
  13. #include "uart.h"
  14. #include "ESP8266.h"
  15. #include "serialportAPI.h"
  16. #include <stdlib.h>
  17. #include <stdio.h>

  18. //全局变量定义
  19. unsigned int speed_count=0;//占空比计数器 50次一周期
  20. char front_left_speed_duty=SPEED_DUTY;
  21. char front_right_speed_duty=SPEED_DUTY;
  22. char behind_left_speed_duty=SPEED_DUTY;
  23. char behind_right_speed_duty=SPEED_DUTY;

  24. unsigned char tick_5ms = 0;//5ms计数器,作为主函数的基本周期
  25. unsigned char tick_1ms = 0;//1ms计数器,作为电机的基本计数器
  26. unsigned char tick_200ms = 0;//刷新显示
  27. unsigned int tick_3s = 0;//隔3s断线检测

  28. char ctrl_comm = COMM_STOP;//控制指令
  29. unsigned char continue_time=0;
  30. unsigned char wifi_rec_flag=0;//蓝牙控制标志位

  31. #define HOST_NAME   "192.168.31.195" //主机IP
  32. #define HOST_PORT   8080  //主机端口

  33. #define SSID "Hantech"  //路由器名
  34. #define PSD  "hantechinternet" //密码

  35. #define RECVBUF_SIZE 16
  36. unsigned char buffer[RECVBUF_SIZE] = {0};

  37. int main(void)
  38. {
  39.         USART1Conf(9600);
  40.         DBG("system begin");
  41.         delay_init();
  42.         GPIOCLKInit();
  43.         UserLEDInit();
  44.         LCD1602Init();
  45.         TIM2_Init();
  46.         MotorInit();
  47.         ServoInit();
  48. //        USART3Conf(9600);

  49.                 while(1)
  50.         {
  51.                 DBG("chang baud");
  52.                
  53.                 UartBegin(115200,&USART3Conf,&PutChar);//每次设置完波特率后需要做一点延时
  54.                 delay(500);
  55.                 SetBaud(19200);
  56.                 UartBegin(19200,&USART3Conf,&PutChar);//更改波特率到19200
  57.                 delay(500);
  58.                 if(0 != SetBaud(19200))//在新波特率下检查是否成功
  59.                 {
  60.                         break;//成功就退出
  61.                 }        
  62.         }

  63.         while(0 == WifiInit(SSID,PSD,HOST_NAME,HOST_PORT));
  64.         
  65. while(1)
  66. {        
  67.                 if(SerialAvailable() > 5)//接收到至少5个字符
  68.                 {
  69.                         int len;
  70.                         len = recv(buffer, RECVBUF_SIZE, 100);
  71.                         if (len > 0)
  72.                         {
  73.                                         char inChar;
  74.                                         inChar = buffer[0];
  75.         //                          send(buffer, len);
  76.                                         if (ctrl_comm != inChar || continue_time == 1)
  77.                                         {
  78.                                                 wifi_rec_flag = 1;
  79.                                                 ctrl_comm = inChar;
  80.                                         }
  81.                                         continue_time = 60;//更新持续时间
  82.                                   tick_3s = 0;//心跳包周期
  83.                         }
  84.                 }
  85.                
  86.                          if(tick_5ms >= 5)
  87.                 {
  88.                         tick_5ms = 0;
  89.                         tick_200ms++;
  90.                         if(tick_200ms >= 40)
  91.                         {
  92.                                 tick_200ms = 0;
  93.                                 tick_3s++;
  94.                                 LEDToggle(LED_PIN);
  95.                                 if(tick_3s >= 15)//15*200=3000
  96.                                 {
  97.                                         tick_3s = 0;
  98.                                         //定时检查连接是否正常,如果不正常,wifi复位重新连接
  99.                                         if (getSystemStatus() != STATUS_GETLINK)
  100.                                         {
  101.                                                 DBG("TCP unlink");
  102.                                                 while(!WifiInit(SSID,PSD,HOST_NAME,HOST_PORT));
  103.                                         }else
  104.                                         {
  105.                                                 DBG("TCP link tick");
  106.                                         }                                       
  107.                                 }
  108.                         }
  109.                         //continue_time--;//200ms 无接收指令就停车
  110.                         if(continue_time == 0)
  111.                         {
  112.                                 continue_time = 1;
  113.                                 CarStop();
  114.                         }
  115.                         //do something
  116.                         if(wifi_rec_flag == 1)//接收到红外信号
  117.                         {
  118.                                 wifi_rec_flag = 0;
  119.                                 switch(ctrl_comm)
  120.                                 {
  121.                                         case COMM_UP:    CarGo();break;
  122.                                         case COMM_DOWN:  CarBack();break;
  123.                                         case COMM_LEFT:  CarLeft();break;
  124.                                         case COMM_RIGHT: CarRight();break;
  125.                                         case COMM_STOP:  CarStop();break;
  126.                                         default : break;
  127.                                 }
  128.                                 LCD1602WriteCommand(ctrl_comm);
  129.                                 DBG("recv COMM");
  130.                         }
  131.                 }
  132.                
  133. }
  134. }

复制代码
0.png

所有资料51hei提供下载:
wifi遥控小车.zip (6.88 MB, 下载次数: 222)
回复

使用道具 举报

ID:327035 发表于 2018-11-4 19:28 | 显示全部楼层
厉害了
回复

使用道具 举报

ID:244589 发表于 2018-11-6 11:59 | 显示全部楼层
楼主,可以分享一下原理图吗
回复

使用道具 举报

ID:184813 发表于 2019-12-30 23:00 | 显示全部楼层
楼主,可以分享一下原理图吗
回复

使用道具 举报

ID:184813 发表于 2020-2-4 20:58 | 显示全部楼层
#在这里快速回复#楼主,可以分享一下原理图吗
回复

使用道具 举报

ID:80231 发表于 2020-2-25 23:52 | 显示全部楼层
多谢!!!!!!!!
回复

使用道具 举报

ID:770561 发表于 2020-6-5 17:33 | 显示全部楼层
太棒了。。终于找到了!!
回复

使用道具 举报

ID:826597 发表于 2020-10-7 16:43 | 显示全部楼层
感谢分享,非常详细
回复

使用道具 举报

ID:862190 发表于 2020-12-17 15:33 | 显示全部楼层
太棒了。。终于找到了!!
回复

使用道具 举报

ID:800143 发表于 2020-12-31 16:31 | 显示全部楼层
用ESP-8266模块怎么写C语言客服端和终端实时互传?
回复

使用道具 举报

ID:800143 发表于 2020-12-31 16:33 | 显示全部楼层
用ESP-8266模块怎么写客服端与终端的无线互传?
回复

使用道具 举报

ID:120677 发表于 2021-1-7 08:37 | 显示全部楼层
这个界面做得好
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表