注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题

Zoro_的个人空间 http://home.eeworld.com.cn/space-uid-722063.html [收藏] [复制] [分享] [RSS]

日志

【Tiva C LaunchPad学习笔记】一步一步学会ESP8266(2)

已有 321 次阅读2017-3-18 16:55 |个人分类:Tiva C launchPad




此内容由EEWORLD论坛网友Zoro_原创,如需转载或用于商业用途需征得作者同意并注明出处



在上一篇文章中,我们详细的介绍了如何通过串口工具控制ESP8266,实现了以模块作为客户端向局域网中的服务器发送信息的功能。这篇文章中我会分享如何通过Tiva C LaunchPad控制模块实现以上功能。

1.调试思路


通过串口工具控制模块的实质就是:以115200的波特率发送末尾有‘0x0a’‘0x0d’的AT指令,明白这一点后调试步骤就很明确了,首先通过单片机向串口助手发送相关指令,确认无误后,改为向模块发送即可。


2.通过单片机向串口助手发字符串


通过Tiva C LaunchPad向串口工具发字符串还是比较简单的,到处都是例程,但是大多都是通过UART0,由于Tiva C LaunchPad的UART0的接收和发送引脚(PA0和PA1)没有引出,所以我们必须使用其他串口,通过查阅Tiva C LaunchPad的引脚图(如图),我们看到,UART1的引脚引脚是PB0和PB1。

这俩个管脚引出了,所以我们可以使用UART1作为串口输出引脚。通过串口输出字符串有俩种方式,第一种是通过对函数UARTCharPut()进行“加工”处理,因为UARTCharPut()是不能直接发送字符串的,这点通过该函数的声明得出(如图)。

另一种方法比较简单,直接使用UARTprintf()函数即可,下面我们直接看这俩种方法的代码:
首先是使用UARTCharput()函数的:
[AppleScript] 纯文本查看 复制代码

#include <stdbool.h>
#include <stdint.h>
#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "driverlib/gpio.h"
#include "driverlib/interrupt.h"
#include "driverlib/pin_map.h"
#include "driverlib/pwm.h"
#include "driverlib/sysctl.h"
#include "driverlib/uart.h"
#include "utils/uartstdio.h"
#define DelayTime 30000000                    //宏定义延时时间
void SendString(char *PString);               //发送字符串的函数,即AT指令
void SendData(char *PData);                   //发送数据的指令
int main(void)
{
SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ);      //系统时钟配置
    SysCtlPeripheralEnable(SYSCTL_PERIPH_UART1);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
    GPIOPinConfigure(GPIO_PB0_U1RX);
    GPIOPinConfigure(GPIO_PB1_U1TX);
    GPIOPinTypeUART(GPIO_PORTB_BASE, GPIO_PIN_0 | GPIO_PIN_1);
    UARTConfigSetExpClk(UART1_BASE, SysCtlClockGet(), 115200,
        (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE));        //配置串口

    UARTIntEnable(UART1_BASE, UART_INT_RX);

    SendString("AT+RST");                                                            //发送指令
    SysCtlDelay(2*DelayTime);                                                        //延时,保证模块有足够时间响应
    SendString("AT+CIPMUX=1");                                                   //发送指令
    SysCtlDelay(2*DelayTime);
    SendString("AT+CIPSTART=2,\"TCP\",\"192.168.4.2\",8800");        //注意如何发送引号
    SysCtlDelay(2*DelayTime);
    while (1)
   {
     SendData("123");          //循环发送数据123
   }
}




void SendString(char *PString)                                        //发送指令函数
{
        while(*PString)                                                                //没发送完就一直循环
        {
UARTCharPut(UART1_BASE,*PString);
PString++;
        }
        UARTCharPut(UART1_BASE,0x0d);
        UARTCharPut(UART1_BASE,0x0a);                                //字符串发送完后,发送0x0d 0x0a,相当于发送新行
}




void SendData(char *PData)
{
    SendString("AT+CIPSEND=2,5");         //发送指令,这个指令的意思是要发送5个字节
    SysCtlDelay(DelayTime);
        while(*PData)                                    //没发送完就一直发送
        {
                UARTCharPut(UART1_BASE,*PData);
                PData++;
        }
        UARTCharPut(UART1_BASE,0x0d);
        UARTCharPut(UART1_BASE,0x0a);    //发送0x0a,0x0d
    SysCtlDelay(DelayTime);
}




将这段代码下载到开发板里,通过USB-ttl接到电脑上,可以通过串口工具检查字符串是否正确(图):

然后接上之前配置的模块,即可向电脑的服务器发送数据(如图):



接下来介绍另一种方法,即使用UARTprintf()函数,这个函数和C语言中的printf函数用法一样,发送指令“AT+CIPMUX=1”只需要UARTprintf(“AT+CIPMUX=1”);即可,可以参考上面的代码进行修改,需要注意的是使用这个函数需要头文件"utils/uartstdio.h",使用这个头文件还需要添加一个utils文件夹下的uartstdio.h文件(如图)



3.总结


通过这次分享,我们已经可以使用单片机向局域网中的服务器发送信息了,如果再接一个ADC采集数据,也算是实现了一个简单的物联网系统了吧,啊哈哈,是不是很开心的。下次分享如何用ESP8266连接正真的服务器。

本文来自论坛,点击查看完整帖子内容。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2017-9-26 02:52 , Processed in 0.202916 second(s), 11 queries , Redis On.

Powered by EEWORLD电子工程世界

© 2017 http://bbs.eeworld.com.cn/

返回顶部