【连载】基于AVR XMEGA-A3BU Xplained控制器的Wifi小车制作(6)

作者: 张小艺
上传时间为: 2014-08-23 01:07 AM
2014-08-23
阅读:

本文将介绍在智能车制作过程中A3BU Xplained板子与wifi模块RMO4进行串口通信功能。

今天想进行A3BU Xplained板子与wifi模块RMO4进行串口通信(该模块是将wifi信号转换成串口信号)。

先查看下RMO4模块是否配置完好,把RMO4 串口(USB转串口)链接我的本本,然后通电,打开笔记本的wifi 能搜索到

 HI_LINK.jpg

本本上运行一个串口&TCP_UDP调试工具.exe    设置参数后

test1.jpg

说明一下,这个是用于测试串口是否转换成wifi成功。  用笔记本上的串口发送数据给RMO4模块,该模块可以把数据转化成wifi信号发送出,本本的wifi接收器接收到信号后,显示出,就可以与发送的进行比较,看看效果。

!上面的发送与接收过程是可逆的!

相应参数配置好后,上面的图片看出   传送的效果是相当的完美。

接着来测试安卓手机发送wifi信号 与  RMO4间的通信

首先是在安卓手机上安装一个  网络调试助手(安卓手机版),先打开wifi 搜索到刚才的 HI-LINK_04D5  ,连接上,然后手机上打开刚才的网络调试软件。这个软件在360手机助手上面下载的。  在以前的帖中我有提到。 点击TCP CLINT---增加 ,就可以自动连上了。当然本本上得打开一个 串口调试工具.exe test2.jpg test3.jpg

小试了下发送效果,如图。发现   从RMO4发送的信号,手机接收的正确率为100%,可是 手机发送出的信号,串口接收的正确率很低。原因不明!

截止,说明方案是行得通的,手机可以发出wifi 信号给RMO4的串口 ,再把RMO4的串口接到  A3BU Xplained板子的串口上,就可以实现手机和 A3BU Xplained板子的通信了。

上面关于那个 手机发送出的信号,串口接收的正确率很低的原因大概是找到了,因为设置的是  数据位只有8-bit.

test3.jpg

当用手机只发送一位时,比如‘a’,  串口接收的正确率也是100%,迫不及待的将RMO4 上的RXD TXD 接到A3BU Xplained板子的PE2、PE3端口 即USATRE0

修改上次的串口测试代码:

#include <asf.h> // &USARTE0接收
#define USART_SERIAL_BAUDRATE            115200
#define USART_SERIAL_CHAR_LENGTH         USART_CHSIZE_8BIT_gc
#define USART_SERIAL_PARITY                     USART_PMODE_DISABLED_gc
#define USART_SERIAL_STOP_BIT                 true
int main (void)
{
board_init();
sysclk_init();//调用ASF框架函数初始化时钟
delay_init(sysclk_get_cpu_hz());//调用ASF框架函数初始化delay服务
//Create USART options struct
static usart_rs232_options_t USART_SERIAL_OPTIONS = {
.baudrate = USART_SERIAL_BAUDRATE,
.charlength = USART_SERIAL_CHAR_LENGTH,
.paritytype = USART_SERIAL_PARITY,
.stopbits = USART_SERIAL_STOP_BIT
};
sysclk_enable_module(SYSCLK_PORT_E, PR_USART0_bm);//Enable the clock for the USART module
usart_init_rs232(&USARTE0, &USART_SERIAL_OPTIONS);//Initialize in RS232 mode:
uint8_t received_byte;//A variable for the received byte must be added:
while(1)
{
received_byte = usart_getchar(&USARTE0);//Wait for reception of a character:
usart_putchar(&USARTE0, received_byte);//Echo the character back:
if (    received_byte=='a'   )
{
gpio_set_pin_low(LED0);
delay_ms(2000); //调用ASF框架函数延时500Ms
gpio_set_pin_high(LED0);
received_byte=0;
delay_ms(2000);
}
}
}

编译后,  下载进板子

 test4.jpg

然后用手机发送一个'a'   并没有出现预期的效果。

在wifi模块与A3BU板子串口通讯的问题,也就是两块单片机上的串口通讯,RMO4上面用的是什么型号的单片机看不到商家做了保密。但是告诉了 RXD TXD,本想直接用 RM04上的 RXD TXD与A3BU板子的RXD TXD相连,但是纠结的是RM04底板上没有引出来,自己动手引出也不好弄,就作罢,但是RM04底板上给的资源有一个9孔的母串口,实在激了个动,就尝试去给A3BU也外接个RS232就找来一个RS232模块,然后自己制了一个两头都是公头的D9串口线 ,这样就让RM04与A3BU串口通讯硬件链接了。         自制串口线1.jpg 2.jpg

当然 RS232模块得另外供电,自制的串口线,需要用3根,TXD RXD GND .赶紧修改了下之前的代码,让A3BU的  &USARTE0接收到字符a,就令LED灯闪亮。当然现在的A3BU的串口已经是能够接收WIFI信 号的。可以用安卓手机打开网络调试助手软件,搜索连上wifi客户端,然后发送a,就可以看到效果小灯会闪亮,关闭后,小灯熄灭。

#include <asf.h>
#define USART_SERIAL                     &USARTD0    //&USARTD0发送     &USARTE0接收
#define USART_SERIAL_BAUDRATE            115200
#define USART_SERIAL_CHAR_LENGTH         USART_CHSIZE_8BIT_gc
#define USART_SERIAL_PARITY              USART_PMODE_DISABLED_gc
#define USART_SERIAL_STOP_BIT            true
int main (void)
{
board_init();
sysclk_init();//调用ASF框架函数初始化时钟
delay_init(sysclk_get_cpu_hz());//调用ASF框架函数初始化delay服务
//Create USART options struct
static usart_rs232_options_t USART_SERIAL_OPTIONS = {
.baudrate = USART_SERIAL_BAUDRATE,
.charlength = USART_SERIAL_CHAR_LENGTH,
.paritytype = USART_SERIAL_PARITY,
.stopbits = USART_SERIAL_STOP_BIT          };
//sysclk_enable_module(SYSCLK_PORT_D, PR_USART0_bm);//Enable the clock for the USART module
//usart_init_rs232(&USARTD0, &USART_SERIAL_OPTIONS);//Initialize in RS232 mode:
sysclk_enable_module(SYSCLK_PORT_E, PR_USART0_bm);//Enable the clock for the USART module
usart_init_rs232(&USARTE0, &USART_SERIAL_OPTIONS);//Initialize in RS232 mode:
uint8_t received_byte;//A variable for the received byte must be added:
while(1)
{
//usart_putchar(&USARTD0, 'a');//Send an 'a' character via USART
received_byte = usart_getchar(&USARTE0);//Wait for reception of a character:
//usart_putchar(&USARTE0, received_byte);//Echo the character back:
if (    received_byte=='a'   )
{
gpio_set_pin_low(LED0);
delay_ms(2000); //调用ASF框架函数延时500Ms
gpio_set_pin_high(LED0);
received_byte=0;
delay_ms(2000);
}
}
}

这个是实验效果视频


全部评论 ()
条评论
写评论

创建讨论帖子

登录 后参与评论
系统提示