【Tiva C LaunchPad学习笔记】一步一步学会ESP8266(2)
[复制链接]
本帖最后由 Zoro_ 于 2017-3-18 16:59 编辑
此内容由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()函数的:
[/font]
[font=Arial]#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);
}[/font]
[font=微软雅黑] 复制代码
将这段代码下载到开发板里,通过USB-ttl接到电脑上,可以通过串口工具检查字符串是否正确(图):
然后接上之前配置的模块,即可向电脑的服务器发送数据(如图):
接下来介绍另一种方法,即使用UARTprintf() 函数,这个函数和C语言中的printf函数用法一样,发送指令“AT+CIPMUX=1”只需要UARTprintf(“AT+CIPMUX=1”);即可,可以参考上面的代码进行修改,需要注意的是使用这个函数需要头文件"utils/uartstdio.h",使用这个头文件还需要添加一个utils文件夹下的uartstdio.h文件(如图)
3.总结
通过这次分享,我们已经可以使用单片机向局域网中的服务器发送信息了,如果再接一个ADC采集数据,也算是实现了一个简单的物联网系统了吧,啊哈哈,是不是很开心的。下次分享如何用ESP8266连接正真的服务器。