一、前言

在MSP430F149与ESP8266串口通信(上)这个帖子中,我们介绍了ESP8266基本的使用,包括用AT指令控制模块和三种基本的模式,相当于为本文做了铺垫。那么在这一篇帖子,将向大家正式介绍MSP430F149与ESP8266对接的过程,文中我将贴出需要的代码,一步一步带领大家进行对接,代码工程文件大家可以根据需要去下载学习。

二、资源

1.MSP430F149最小系统板一个;

2.ESP8266-01 WiFi模块一个;

3.PC端串口调试助手(软件部分);

4.手机端网络调试助手(软件部分);

5.编译MSP430程序的CCS5.5开发环境,当然IAR也是可以的(软件部分);

6.杜邦线若干

三、系统硬件设计

我们先来看一下MSP430F149的硬件资源,这里我们只讲对接需要用到的串口和时钟资源。至于像GPIO、ADC、TIMER等其他资源,建议大家可以下载官方用户手册对照着网上例程学习,不再赘述。

言归正传,因为本次实验,ESP8266与MSP430通信的方式是串口UART,当然要想MSP430工作必然要设置MSP430的时钟系统,让其起振。翻阅MSP430F149 DataSheet可以发现,F149有多组UART端口,其中我们用到了UART0(P3.4和P3.5) 和UART1(P3.6和P3.7),可以见下面截图

大家可能会有疑问,你这里为什么要用两组UART,难道用两组串口和ESP8266进行通信吗?当然不是!是这样的,我用的UART0与电脑进行通信,UART1才是与ESP8266进行连接。也就是说,同样的一条指令我会发两遍,一条打印到了电脑端的串口调试终端上,另一条指令才真正传给ESP8266,这样做的目的只有一个,便于调试。当然,直接用UART1给ESP8266发指令也是可以的,不过在调试过程中出现问题不容易发现,不知道哪一步骤出现了问题。

下面贴出MSP430与ESP8266对接的硬件连接图。要注意的是,找到你最小系统板的设计原理图,理清你的MSP430和电脑相连的是哪个串口,这样才不会出错。

四、系统软件设计

在电路连接完成检查无误后,即可进入这一部分的学习。在"上"部分帖子中,我们介绍了两个例子,其中第一个例程是ESP8266模块自己发出热点,供手机或电脑连接数据传输;另一个例程则是在手机放出热点的时候,等待ESP8266加入。在实际开发时,需要根据用户需求进行选择,其实选择哪个模式实现的功能都是一样的,正所谓条条大路通罗马。当然,考虑到我们项目中需要在用户打开“热点”时,ESP8266接入进来进行通信,所以我们选择了例程2方式(上一篇帖子有详细介绍)


AT+CWMODE=3   //设置AP和STA共存模式
AT+CWLAP      //查看当前存在的热点
AT+CWJAP="MX5","13141516"  //加入我开的热点
AT+CIFSR                   //因为这个IP地址不固定,所以需要查看//上面这几条指令可以利用串口工具,直接在电脑上进行设置,重启后仍然有效AT+CIPMUX=1                //多连接
AT+CIPSERVER=1,8899        //设置端口号
AT+CIPSEND=0,10

整个项目工程包含了以下几个文件:

  • 主程序文件 main.c
  • 时钟配置文件clock.c 和clock.h
  • 串口配置文件uart.c 和uart.h
  • ESP8266配置文件 esp8266.c和esp8266.h

    下面是MSP430程序讲解。

我们通过下图可以看到,在main函数里依次进行了关闭看门狗操作,系统时钟初始化(初始化为8MHz),对系统的两个串口进行了初始化,最重要的是对ESP8266进行配置(只有配置了才能进行数据收发),之后在while(1)循环中中进行数据的发送。

那么应该如何对ESP8266进何配置呢?我采用了简单的方法。在下图中我们看到,首先进行了模块重启,之后用了个程序循环3次,也就是对ESP8266配置了三次,原因是有可能首次配置不成功,多次配置确保模块可以正常工作。依次是发送AT,设置CIPMUX(多连接)和设置Server Port(端口号:8899)。

具体细节是怎么进行设置的呢?我们拿for循环中ESP8266_Set_CIPMUX();这个函数举例子,请看下图。我们首先用串口UART0打印了向PC一个字符串,之后用UART1真正向ESP8266发送了"AT+CIPMUX=1\r\n"指令,注意这里的回车换行。延时500ms是为了等待ESP8266相应的时间,比如向ESP8266发送AT指令,ESP8266便会返回OK,一定要留出足够时间

继续深究,串口又是如何发送的字符串的呢?请看下面图片,涉及到单片机串口发送一个字符串的的知识,不再讲解。

这里是完整的项目工程文件的下载地址,需要的小伙伴可以下载学习。

https://download.csdn.net/download/weixin_38329109/10760811

提示:项目文件能够在CCS7下直接运行,若选择其他版本CCS(如CCS5.5)或者其他编译软件(如IAR),只需要在相应编译软件新建一个项目,把.c和.h文件复制一份过去就可以直接编译了。

五、实验现象

把线接好,将程序下载至MSP430。打开电脑端串口工具,可以发现屏幕上进行了三次配置,此时打开手机热点,打开手机网络助手,设置IP地址和端口号进行连接,注意观察实验现象,会发现手机端不断的接收到单片机发来的Hello World字符串。

在下一部分,我将与大家一起进行ESP8266下发数据给MSP430,手机APP控制单片机进行相应的操作。

MSP430F149与ESP8266串口通信(中)相关推荐

  1. STM32串口通信中使用printf发送数据配置方法 开发环境 Keil

    STM32串口通信中使用printf发送数据配置方法(开发环境 Keil RVMDK) 已有 12456 次阅读2011-6-29 23:29 | 在STM32串口通信程序中使用printf发送数据, ...

  2. 串口通信中ReadFile和WriteFile的超时详解!

    源:串口通信中ReadFile和WriteFile的超时详解! 在用ReadFile和WriteFile读写串行口时,需要考虑超时问题.如果在指定的时间内没有读出或写入指定数量的字符,那么ReadFi ...

  3. Arduino中Serial.print()与Serial.write()函数的区别,以及串口通信中十六进制与字符串的收发格式问题和转换过程详解

    1.串口通信中十六进制和字符数据的区别 串口收发数据时字符.十六进制.二进制格式详细区分 ASCII码查询表格 在使用串口发送数据时可以选择字符串(ASCII)发送或者十六进制(Hex)发送,通常情况 ...

  4. xmodem java_Xmodem XMODEM协议是一种串口通信中广泛用到的异步文件传输协议 联合开发网 - pudn.com...

    Xmodem 所属分类:串口编程 开发工具:Java 文件大小:3KB 下载次数:6 上传日期:2017-11-02 21:50:52 上 传 者:雄霸天下19 说明:  XMODEM协议是一种串口通 ...

  5. SPCOMM控件在Delphi7.0串口通信中的应用

    ====================================================== 注:本文源代码点此下载 ================================= ...

  6. C#解决串口通信中接收数据时延迟处理与缓存处理的方法

    转载连接: http://blog.csdn.net/yaoliang11/article/details/6885768 C#解决串口通信中接收数据时延迟处理与缓存处理的方法 时间:2011-1-2 ...

  7. php crc16校验算法,PHP串口通信中计算crc16校验码

    最近使用PHP开发串口通信业务,在发送485Modbus命令时,基本都要计算CRC16校验码.网上搜索了很多文章,很多都计算的不对.本文记录搜索到的正确的计算方法. 代码如下:/** * crc16计 ...

  8. STM8学习笔记---串口通信中如何自己定义通信协议

    在单片机刚开始学习的时候,串口通信是经常要用到的,但是实际产品中串口通信是需要通信协议的.好多人不明白为什么要用通信协议,如何定义通信协议,带通信协议的程序要怎么写.今天就来说一下如何串口通信协议是如 ...

  9. 串口通信中一些常用的小工具

    文章目录 1.逻辑分析仪下的串口数据 2.数字转字符串函数 3.字符串转整数 4.字符串转浮点数 5.测试转换方法 6.空闲中断DMA接收不定长数据 7.高频数据收发测试 本文总结下串口通信的一些小技 ...

  10. 串口通信中DB9和DB25的接法

    这个串口线把一个25 针的串行口接到9 针的串行口上,PC 一端为9针的母插头: 连接到串行设备为25 针的公插头: 25针转9针串口线信号定义 9-Pin 25-Pin Carrier Detect ...

最新文章

  1. abb变频器acs800单传动系列_ABB变频器ACS380系列功能及型号介绍
  2. IIS7.5中神秘的ApplicationPoolIdentity
  3. 常用基础参数PrintGCDetails回收前后对比讲解
  4. mac iterm2快捷键
  5. jvm_堆栈永久区详细讲解
  6. MySQL学习-MySQL条件查询
  7. HDU2547 无剑无我【水题】
  8. jsp中java实现弹窗_jsp用java弹窗
  9. Excel自定义格式详解
  10. 鸿蒙系统会碎片化吗,华为鸿蒙系统,解决安卓碎片化问题,4G流畅度媲美12G!...
  11. Integer[] cannot be converted to int[]
  12. 【随笔记】linux usb gadget ncm wrong ndp sign 问题修复
  13. 百度BD09加密经纬度转国测局GCJ02经纬度
  14. 【苹果家庭推送iMessage】软件安装应用程序访问HealthKit HomeKit
  15. React.js简单轮播图组件封装
  16. Redis记录日志设计
  17. cannot lock ref问题的解决
  18. 一些不错的开源代码网站
  19. 知乎点赞过万留学生自述:我们为什么需要代写???
  20. C#简单调用FMU ,进行仿真计算

热门文章

  1. 如何采用SQL Server身份验证登录
  2. windows系统文件名太长导致无法打开删除移动
  3. 简单控件学习——Lable/HyperLink
  4. 摩尔庄园服务器显示不出,摩尔庄园电脑为什么玩不了 摩尔庄园电脑玩不了解决方案...
  5. 【渝粤教育】电大中专计算机网络基础作业 题库
  6. 可恢复保险丝特性测试
  7. 兄弟组件之间的传值vue
  8. Tackling the Qubit Mapping Problem for NISQ-Era Quantum Devices
  9. Hulu斩获两枚艾美奖提名!(附第68届艾美奖重要奖项提名名单)
  10. 斯坦福大学终身教授张首晟:区块链最核心的理念,必然是「 In Math We Trust 」