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

Zoro_   2017-3-18 16:55 楼主
此内容由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。 QQ截图20170318155847.png 这俩个管脚引出了,所以我们可以使用UART1作为串口输出引脚。通过串口输出字符串有俩种方式,第一种是通过对函数UARTCharPut()进行“加工”处理,因为UARTCharPut()是不能直接发送字符串的,这点通过该函数的声明得出(如图)。 QQ截图20170318160700.png 另一种方法比较简单,直接使用UARTprintf()函数即可,下面我们直接看这俩种方法的代码: 首先是使用UARTCharput()函数的:
  1. [/font]
  2. [font=Arial]#include <stdbool.h>
  3. #include <stdint.h>
  4. #include "inc/hw_ints.h"
  5. #include "inc/hw_memmap.h"
  6. #include "driverlib/gpio.h"
  7. #include "driverlib/interrupt.h"
  8. #include "driverlib/pin_map.h"
  9. #include "driverlib/pwm.h"
  10. #include "driverlib/sysctl.h"
  11. #include "driverlib/uart.h"
  12. #include "utils/uartstdio.h"
  13. #define DelayTime 30000000 //宏定义延时时间
  14. void SendString(char *PString); //发送字符串的函数,即AT指令
  15. void SendData(char *PData); //发送数据的指令
  16. int main(void)
  17. {
  18. SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ); //系统时钟配置
  19. SysCtlPeripheralEnable(SYSCTL_PERIPH_UART1);
  20. SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
  21. GPIOPinConfigure(GPIO_PB0_U1RX);
  22. GPIOPinConfigure(GPIO_PB1_U1TX);
  23. GPIOPinTypeUART(GPIO_PORTB_BASE, GPIO_PIN_0 | GPIO_PIN_1);
  24. UARTConfigSetExpClk(UART1_BASE, SysCtlClockGet(), 115200,
  25. (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE)); //配置串口
  26. UARTIntEnable(UART1_BASE, UART_INT_RX);
  27. SendString("AT+RST"); //发送指令
  28. SysCtlDelay(2*DelayTime); //延时,保证模块有足够时间响应
  29. SendString("AT+CIPMUX=1"); //发送指令
  30. SysCtlDelay(2*DelayTime);
  31. SendString("AT+CIPSTART=2,"TCP","192.168.4.2",8800"); //注意如何发送引号
  32. SysCtlDelay(2*DelayTime);
  33. while (1)
  34. {
  35. SendData("123"); //循环发送数据123
  36. }
  37. }
  38. void SendString(char *PString) //发送指令函数
  39. {
  40. while(*PString) //没发送完就一直循环
  41. {
  42. UARTCharPut(UART1_BASE,*PString);
  43. PString++;
  44. }
  45. UARTCharPut(UART1_BASE,0x0d);
  46. UARTCharPut(UART1_BASE,0x0a); //字符串发送完后,发送0x0d 0x0a,相当于发送新行
  47. }
  48. void SendData(char *PData)
  49. {
  50. SendString("AT+CIPSEND=2,5"); //发送指令,这个指令的意思是要发送5个字节
  51. SysCtlDelay(DelayTime);
  52. while(*PData) //没发送完就一直发送
  53. {
  54. UARTCharPut(UART1_BASE,*PData);
  55. PData++;
  56. }
  57. UARTCharPut(UART1_BASE,0x0d);
  58. UARTCharPut(UART1_BASE,0x0a); //发送0x0a,0x0d
  59. SysCtlDelay(DelayTime);
  60. }[/font]
  61. [font=微软雅黑]
将这段代码下载到开发板里,通过USB-ttl接到电脑上,可以通过串口工具检查字符串是否正确(图): QQ截图20170318163255.png 然后接上之前配置的模块,即可向电脑的服务器发送数据(如图): QQ截图20170318164236.png 接下来介绍另一种方法,即使用UARTprintf()函数,这个函数和C语言中的printf函数用法一样,发送指令“AT+CIPMUX=1”只需要UARTprintf(“AT+CIPMUX=1”);即可,可以参考上面的代码进行修改,需要注意的是使用这个函数需要头文件"utils/uartstdio.h",使用这个头文件还需要添加一个utils文件夹下的uartstdio.h文件(如图) QQ截图20170318165019.png QQ截图20170318164835.png 3.总结 通过这次分享,我们已经可以使用单片机向局域网中的服务器发送信息了,如果再接一个ADC采集数据,也算是实现了一个简单的物联网系统了吧,啊哈哈,是不是很开心的。下次分享如何用ESP8266连接正真的服务器。 本帖最后由 Zoro_ 于 2017-3-18 16:59 编辑

回复评论 (2)

代码部分不太会弄格式,大家凑合着看……
点赞  2017-3-18 17:01
ADC好用吗?
小店 https://shop226970498.taobao.com/ 主营 Esp8266初级教程、源码等,适用于菜鸟
点赞  2017-5-6 15:58
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复