本文将使用MSP430F5529单片机和 ESP8266 WIFI模块进行单片机和TCP服务器之间的通信。
目录
1. 步骤和技术简述(上)
2. 网络环境搭建(上)
3. 利用串口初始化WiFi模块接入网络(上)
4. 实现发送数据(下)
前言
上文我们使用了串口调试,实现了wifi 的初始化,并且完成了数据的传输,但要注意的是这个是通过串口进行WiFi模块操作,但是在实际情况,我们要实现的往往是通过单片机的内部程序向外发送信息,那要怎么写呢?
4.实现发送数据
4.1 向单片机烧录如下代码
代码的注释比较多,大体上就是初始化一下数据传输端口,设置波特率为115200,然后设置一个开关事件(中断),当按下开关以后,向手机(tcp服务器)发送信息。
#include <msp430f5529.h>
#define uchar unsigned char
uchar buffer[] = {"hello world\n"};
// 启用通信接口, 波特率设置为115200,与wifi模块的要求相同
void setUart(){
P4SEL = BIT4 +BIT5; // 设置 4.4 和 4.5 为输出位
UCA1CTL1 |= UCSWRST; // **Put state machine in reset**
UCA1CTL1 |= UCSSEL_2; // CLK = SMCLK MCLK = SMCLK = default DCO = 32 x ACLK = 1048576Hz
UCA1BR0 = 0x09; // 1048576/115200 = ~9.10 (see User's Guide)
UCA1BR1 = 0x00;
UCA1MCTL = UCBRS_1+UCBRF_0; // Modulation UCBRSx=3, UCBRFx=0
UCA1CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
}
// 输出字符串
void uartPrint(uchar code[], int len){
unsigned int i;
for(i=0; i<len; i++){
UCA1TXBUF = code[i];
while (!(UCA1IFG&UCTXIFG));
}
}
// 主程序
void main(void)
{
// 停止看门狗
WDTCTL=WDTPW+WDTHOLD;
// 对于2.1的设置是为了使用按钮
// 设置2.1为输入位, 接上拉电阻, 设置初始值为高电平
P2DIR &=~ BIT1; P2REN |= BIT1; P2OUT |= BIT1;
// 允许2.1触发中断, 中断标志位复位,设置中断
P2IES &=~ BIT1; P2IFG &=~ BIT1; P2IE |= BIT1;
// 初始化输出设置
setUart();
// CPU休息,GIE:打开全局中断使能
__bis_SR_register(LPM0_bits +GIE);
// 停止操作指令
__no_operation();
}
// 进入中断
#pragma vector = PORT2_VECTOR
__interrupt void Port_2(void)
{
// 发一条数据
uartPrint(buffer, sizeof(buffer));
// 清除标志位
P2IFG &=~ BIT1;
}
其他常用的波特率设置
注意事项
在烧录代码时,注意上面的两个跳线帽一定要有,这个用于连接USB和单片机芯片的通信。在烧录代码时是不需要连接wifi模块的。
4.2 使用串口调试,初始化网络
在这一步中,和上篇的测试相同,目的是完成wifi模块和TCP服务的连接。
4.2.1连线
4.2.2 输出初始化命令
依次输入以下命令(点击上篇了解更多),加深的地方是你要更改的。
1) 设置 WIFI 模式:
AT+CWMODE=1
2) 重启生效
AT+RST
3) 连接路由器
AT+CWJAP=“ALIENTEK” “15902020353”
4) 查询模块 IP
AT+CIFSR
5) 模块连接到 server
AT+CIPSTART=“TCP”,“192.168.1.115”,8080
6) 开启透传模式
AT+CIPMODE=1
7) 开始透传
AT+CIPSEND
看到下面的ok > 就证明连接正常
现在发送数据就可以互相接收到了。
ps: 进入数据传输模式以后,输入“+++”, (这句话不要带“发送新行”,其他的命令要带),就可以停止数据传输了。
4.2.3 使用单片机发送信息。
连线
将左侧开发版上的连接的黄线端和蓝线端位置跟换,单片机的输出和wifi模块的输入连接,单片机的输入和wifi模块的输出连接,目的是断开USB和wifi模块的连接,转为单片机和WiFi模块直接连接。
注意: 其他的线都不用动,保证WiFi模块一直供电。
做到这一步,MSP430使用wifi模块发送数据就完成了,点击一下黄色按钮,数据就来了!
效果
ps1: 中文要使用GBK编码才能正常显示
ps2: 点击一次发送多条数据是因为抖动,不是你的代码出了问题。
如果能帮助到你,不妨点个赞吧,谢谢。