文章目录
- 前言
- 1.MSP432P401R数据的串口传输
- 2.ESP8266读取串口数据并发送
- 3.QT上位机的编写
- 总结
前言
在进行电子设计的过程中,常常会有需要进行WIFI传输的要求,我们使用ESP8266接收MSP432的串口数据,通过TCP/IP协议进行数据传输,利用QT编写上位机在手机端进行数据的显示可以完成项目的要求。
1.MSP432P401R数据的串口传输
MSP432P401R具有四个串口,我们使用串口3进行与ESP8266的数据传输,我们在主程序中编写串口的发送,注意MSP432串口的RX应与ESP8266的TX相连,MSP432串口的TX应与ESP8266的RX相连,同时两个模块需要共地连接,同时收发两端的波特率需要相同。
串口发送代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24USARTA3_SendString(SEND_APP); for(i=0; i<flag_period; i++) { if(i == 0) { sprintf((char *)SEND_APP, "s%d ", ADC_INT_Value[i]*2); USARTA3_SendString(SEND_APP); } else if(i < flag_period - 1) { sprintf((char *)SEND_APP, "%d ", ADC_INT_Value[i]*2); USARTA3_SendString(SEND_APP); } else { sprintf((char *)SEND_APP, "%de", ADC_INT_Value[i]*2); USARTA3_SendString(SEND_APP); } }
2.ESP8266读取串口数据并发送
在这一步中我们需要用ESP8266读取串口数据并存储在数组中,连接WIFI网络和WIFI服务器通过TCP/IP协议进行数据传输,其中我们的手机将充当服务器端,ESP8266作为客户端,对于ESP8266的控制,我们不使用AT指令集,而是通过ARDUINO IDE单独为其烧录代码以增强程序的初始化速度。当然通过MCU向ESP8266发送AT指令集也是一种很好的控制方法。ARDUINO中的代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68#include <ESP8266WiFi.h> #define led 2 const char *ssid = "";//这里写入网络的ssid const char *password = "";//wifi密码 const char *host = "";//修改为Server服务端的IP,即你电脑的IP,确保在同一网络之下。 WiFiClient client;//声明一个客户端对象,用于与服务器进行连接 const int tcpPort = ;//修改为你建立的Server服务端的端口号,此端口号是创建服务器时指定的。 static String comdata = ""; static String val = ""; void setup() { Serial.begin(115200); pinMode(led,OUTPUT); delay(10); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password);//启动 //在这里检测是否成功连接到目标网络,未连接则阻塞。 while (WiFi.status() != WL_CONNECTED) { delay(500); } //几句提示 Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); } void loop() { /******************串口接受数据************************/ while (Serial.available() > 0) // 串口收到字符数大于零。 { comdata += char(Serial.read()); } /******************串口打印数据************************/ if(comdata!="")//如果接受到数据 { client.print(comdata);//向服务器发送数据 } comdata="";//清空数据 if (client.connected()) //尝试访问目标地址,如果没连接上LED灯灭 digitalWrite(led, LOW); else digitalWrite(led, HIGH); while (!client.connected()) { if (!client.connect(host, tcpPort)) { Serial.println("连接中...."); delay(500); } } while (client.available())//available()表示是否可以获取到数据 { // char val = client.read();//read()表示从网络中读取数据。 while (client.available() > 0) // 串口收到字符数大于零。 { val += char(client.read()); } client.print("text:"+val); val="";//清空数据 } delay(1); }
3.QT上位机的编写
Qt 是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。
是用QT for andoroid 可将windows程序通过OTG模式下载到安卓手机上,从而实现跨平台的应用程序开发。在QT中我们主要进行UI框架的定义和服务器接收数据的解析和显示,主要的程序代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137#include "widget.h" #include <QtCharts> // 导入QtCharts所有的头文件,也可以单独导入某一个 // 引入qchart命名空间(注意:如果是在ui中提升为QChartView, // 则QT_CHARTS_USE_NAMESPACE一定要放在#include "ui_widget.h"前面,否则编译会失败) QT_CHARTS_USE_NAMESPACE #include "ui_widget.h" QString front=""; int p1=0,p2=0,i=0; QSplineSeries* series = new QSplineSeries(); // 创建一个样条曲线对象 Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); tcpServer = new QTcpServer(this); tcpSocket = new QTcpSocket(this); connect(tcpServer,SIGNAL(newConnection()),this,SLOT(newConnection_Slot())) } Widget::~Widget() { delete ui; } void Widget::newConnection_Slot() { tcpSocket = tcpServer->nextPendingConnection(); connect(tcpSocket,SIGNAL(readyRead()),this,SLOT(readyRead_Slot())); } void Widget:: readyRead_Slot() { QString buf; buf = tcpSocket->readAll(); front+=buf; int t,a,b,c,d,s,e; t=front.indexOf("t"); a=front.indexOf("a"); b=front.indexOf("b"); c=front.indexOf("c"); d=front.indexOf("d"); s=front.indexOf("s"); e=front.indexOf("e"); if(t!=-1&&a!=-1&&t<=a)//THD { ui->label_15->setText(front.mid(t+1,a-t-1)); //qDebug()<<"THD"<<front.mid(t+1,a-t-1)<<'n'; } if(a!=-1&&b!=-1&&a<=b)//二次 { ui->label_6->setText(front.mid(a+1,b-a-1)); } if(b!=-1&&c!=-1&&b<=c)//三次 { ui->label_19->setText(front.mid(b+1,c-b-1)); } if(c!=-1&&d!=-1&&c<=d)//4次 { ui->label_4->setText(front.mid(c+1,d-c-1)); } if(d!=-1&&s!=-1&&d<=s)//5次 { ui->label_5->setText(front.mid(d+1,s-d-1)); } if(s!=-1) { front.remove(0,s); if(front.size()!=1) { while(1) { if(p1+1<front.size()&&front.at(++p1)==' ') { series->append( i++,front.mid(++p2,p1-p2).toInt()); p2=p1; } if(p1+1>=front.size())break; } } if(e!=-1&&p1==e) { series->setName("曲线"); QChart* chart = ui->chartview->chart(); // 获取一个chart用于管理不同类型的series和其他图表相关对象 chart->legend()->hide(); // 隐藏图例 chart->addSeries(series); // 添加创建好的曲线图对象 chart->setTitle("信号波形显示"); // 设置标题 chart->createDefaultAxes(); // 基于已添加到图表中的 ui->chartview->setRenderHint(QPainter::Antialiasing); // 设置抗锯齿 p1=p2=0;i=0; front.remove(0,p1+1); //series->clear(); } } } void Widget::on_pushButton_clicked() { quint16 a=8266; tcpServer->listen(QHostAddress::Any,a); ui->pushButton_2->setDisabled(false); QString j="1"; ui->label_18->setText(j); } void Widget::on_pushButton_2_clicked() { tcpServer->close(); tcpServer->disconnect( SIGNAL(newConnection())) ; //tcpSocket->deleteLater();///>不立即销毁对象,向主消息循环发送了一个event,下一次主消息循环收到这个event之后才会销毁对象 ui->pushButton_2->setDisabled(true); QString jj="0"; ui->label_18->setText(jj); ui->label_15->setText(jj); ui->label_6->setText(jj); ui->label_19->setText(jj); ui->label_4->setText(jj); ui->label_5->setText(jj); series->clear(); }
显示效果如下
总结
在WIFI上位机实现的过程中遇到了很多的BUG,例如AT指令集无法识别,服务器连接不稳定,数据解析,供电不足,QT上位机无法正常工作等等问题,最终大部分都找到了可行的解决办法。
最后
以上就是笨笨发带最近收集整理的关于使用MSP432+ESP8266+QT制作上位机进行WIFI通信前言1.MSP432P401R数据的串口传输2.ESP8266读取串口数据并发送3.QT上位机的编写总结的全部内容,更多相关使用MSP432+ESP8266+QT制作上位机进行WIFI通信前言1.MSP432P401R数据内容请搜索靠谱客的其他文章。
发表评论 取消回复