范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

手把手教你编写你的第一个上位机

  一、前言
  大家好,我是ZhengN,本次来教大家编写一个基于QT的简单的上位机。
  学习一个新的东西我们都从最基础的实例开始,比如学习C语言我们会从编写一个hello程序开始、学习嵌入式我们从点灯开始。同样的,我们也从编写一个简单的基于QT的上位机来体会体会上位机开发及认识认识QT。
  我们本次实现的上位机的功能很简单: 上位机通过串口来控制开发板上的一个LED的亮灭 。界面如:
  演示视频:
  视频加载中...
  二、QT环境搭建
  在开始编写上位机之前我们先来一起搭建一下QT开发环境(不然就不是手把手了,哈哈)。QT的两种开发环境: 使用VS + QT 使用Qt Creator
  这里我们选择直接使用QT_Creator的方式。
  Qt Creator是一个用于Qt开发的轻量级跨平台集成开发环境。
  Qt Creator可带来两大关键益处: 提供首个专为支持跨平台开发而设计的集成开发环境 (IDE),并确保首次接触Qt框架的开发人员能迅速上手和操作。 即使不开发Qt应用程序,Qt Creator也是一个简单易用且功能强大的IDE。
  下面我们来一起安装Qt Creator。 1、注册qt账号
  我们需要先注册一个QT账号,后面安装Qt Creator的时候会用到。注册账号的地址为:
  https://www.qt.io/zh-cn/
  2、下载QT_Creator并安装
  我们在Windows上进行开发,安装Windows版本的Qt Creator。下载地址:
  https://download.qt.io/new_archive/qt/5.11/5.11.3/
  下载得到qt-opensource-windows-x86-5.11.3.exe。然后双击安装,第二步需要输入账号密码,把我们上面注册好的账号密码填入即可。
  接下来还需要选择安装组件,根据自己需要进行选择安装,我安装的组件如:
  安装完成之后我们桌面上并没有Qt Creator的快捷方式,需要自己创建。找到Qt Creator的安装路径,然后把Qt Creator发送到桌面快捷方式即可。如:
  3、验证QT_Creator是否安装成功
  我们创建一个简单的C++工程来验证一下Qt Creator是否安装成功。
  Qt Creator搭建好之后我们接下来开始编写我们的上位机。 三、编写一个简单的上位机
  编写这个简单的上位机我们需要经过一下几个步骤: 上位机界面设计。 上位机逻辑代码编写。 添加上位机图标。 上位机程序的打包。 上位机测试验证。 1、新建一个serial_led工程
  这里需要注意的一点是: 工程名及工程路径不要有中文字符 。
  另外,QT中有三种基类,这里我们选择 QWidget类 。QT的三个基类如:QMainWindow类:提供一个带有菜单条,工具条和一个状态条的主应用程序窗口。 QWidget类:所有用户界面对象的基类,窗口部件是用户界面的一个基本单元,它从窗口系统接收鼠标,键盘和其他消息,并在屏幕上绘制自己。 QDialog类:对话框窗口的基类,对话框窗口主要用于短期任务和用户进行短期通讯的顶级窗口,QDialog可以是模态对话框或者是非模态对话框。
  我们创建的工程如:
  其中,项目文件 .pro文件 是用来告诉qmake 关于为这个应用程序创建makefile 所需要的细节。例如,一个源文件和头文件的列表、任何应用程序特定配置。例如,一个必需链接的额外库或者一个额外的包含路径、都应该放到项目文件中。2、上位机界面设计
  Qt 一个可视化的界面设计工具:Qt 设计器(Qt Designer)。我们双击.ui文件就可以进入Qt Designer,在Qt Designer中我们可以通过拖动控件的方式来设计我们的界面,整个界面如:
  我们从左侧的控件区把我们需要的控件拖动到界面编辑区中,我们这个简单地上位机用到的控件如:
  这里需要注意的是波特率这个下拉框需要双击设置一些备选配置,如:
  大家可以在左边的控件区找到这三种控件拖动到界面编辑器进行修改、布局即可。
  其中,布局可通过如下组件调整:
  这几个组件的功能如:
  具体的用法大家可以自己去实操一下。
  另外,我们需要给我们使用的控件重新命名,在右侧的 对象管理区 进行操作。命名为有意义的名字,因为后面编写代码会用到。有意义的名字利于编写易懂的代码。比如我们修改的名字如:
  最后,控件的属性可根据需要在属性区进行调整。 3、上位机逻辑代码编写(1)添加串口库、包含串口相关头文件
  在 serial_led.pro 文件添加串口库:QT += core gui serialport
  在 widget.h 文件包含串口头文件:#include  #include 
  QSerialPort 类提供了操作串口的各种接口。 QSerialPortInfo 是一个辅助类,可以提供计算机中可用串口的各种信息。 (2)添加QSerialPort成员
  在widget.h的Widget类中添加一个QSerialPort成员:
  (3)创建串口对象、搜索所有可用串口
  在Widget构造函数中创建一个串口对象并搜索所有可用串口: // 微信公众号:嵌入式大杂烩 Widget::Widget(QWidget *parent) :     QWidget(parent),     ui(new Ui::Widget) {     QStringList serialNamePort;      ui->setupUi(this);     this->setWindowTitle("serial_led");      /* 创建一个串口对象 */     serialPort = new QSerialPort(this);      /* 搜索所有可用串口 */     foreach (const QSerialPortInfo &inf0, QSerialPortInfo::availablePorts()) {         serialNamePort<serialBox->addItems(serialNamePort); }
  (4)编写"打开串口"槽函数
  信号和槽是用于对象之间的通信,它是Qt的核心机制。
  当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(signal)。如果有对象对这个信号感兴趣,想要处理的信号和自己的一个函数(称为槽(slot))绑定来处理这个信号。也就是说,当信号发出时,被连接的槽函数会自动被回调。
  这里,我们点击 打开串口 按钮会发出clicked信号 ,此时对应槽函数on_openButton_clicked会被调用。下面我们来实现这个槽函数:// 微信公众号:嵌入式大杂烩 void Widget::on_openButton_clicked() {     /* 串口设置 */     serialPort->setPortName(ui->serialBox->currentText());     serialPort->setBaudRate(ui->baudrateBox->currentText().toInt());     serialPort->setDataBits(QSerialPort::Data8);     serialPort->setStopBits(QSerialPort::OneStop);     serialPort->setParity(QSerialPort::NoParity);      /* 打开串口提示框 */     if (true == serialPort->open(QIODevice::ReadWrite))     {         QMessageBox::information(this, "提示", "串口打开成功");     }     else     {         QMessageBox::critical(this, "提示", "串口打开失败");     } }
  这里我们写死数据位、停止位、求校验位;增加提示框。其中使用 QMessageBox 需要包含如下头文件:#include (5)编写"关闭串口"、"点灯"、"灭灯"槽函数
  按照上面 打开串口 槽函数的方法编写关闭串口 、点灯 、灭灯 槽函数:void Widget::on_closeButton_clicked() {     serialPort->close(); }  void Widget::on_onButton_clicked() {     serialPort->write("ON ");     qDebug("ON "); }  void Widget::on_offButton_clicked() {     serialPort->write("OFF ");     qDebug("OFF "); }
  以上就是上位机逻辑代码的编写。 4、添加上位机图标
  在网上找一个相关的 .ico 后缀的图标下载放到我们的工程路径下,如:
  图标下载网址如: https://www.iconfont.cn/ https://www.iconfont.cn/
  然后在我们的 serial_led.pro 文件中添加如下一行代码:RC_ICONS = led.ico
  5、上位机程序打包
  我们上面运行的上位机都是在Qt Creator中编译运行的,如果我们需要把编写好的可执行文件发送给别人使用的话还需要进行打包。
  上面我们的工程是 Debug版本 的:
  打包之前,我们先把工程修改为 Release版本 :
  然后在我们工程目录下得到:
  此时,双击release文件夹下的 serial_led.exe 文件是会报错的,报错原因是找不到一些相关的动态库:
  我们新建一个文件夹保存我们的打包文件,如:
  把build-serial_led-Desktop_Qt_5_11_1_MinGW_32bit-Releaserelease路径下的 serial_led.exe 文件拷贝至serial_led_packet文件夹中:
  打开 QT for Disktop 工具:
  执行如下命令进入打包目录: cd /d D:Qtqt_prjserial_ledserial_led_packet
  然后执行如下命令进行打包: windeployqt serial_led.exe
  此时,serial_led_packet文件夹中的 serial_led.exe 文件就可以双击运行了:
  此时就完成了程序的打包。此时我们把这一整个文件夹压缩发送给别人使用了。另外,我们也可以借助一些工具把这些文件打包成一个整体的.exe文件,这里不再介绍。 6、上位机测试验证
  上位机我们写好了,接下来编写下位机代码来测试一下。
  我们点击上位机的 点灯 、灭灯 按钮,则会通过串口分别发送ON  、OFF  ,我们编写下位机代码进行接收,然后操控LED灯即可。
  下位机是 小熊派IOT开发板 ,测试代码如:// 微信公众号:嵌入式大杂烩 int main(void) {   /* USER CODE BEGIN 1 */     /* USER CODE END 1 */    /* MCU Configuration----------------------------------------------------------*/    /* Reset of all peripherals, Initializes the Flash interface and the Systick. */   HAL_Init();    /* USER CODE BEGIN Init */    /* USER CODE END Init */    /* Configure the system clock */   SystemClock_Config();    /* USER CODE BEGIN SysInit */    /* USER CODE END SysInit */    /* Initialize all configured peripherals */   MX_GPIO_Init();   MX_DMA_Init();   MX_USART1_UART_Init();   /* USER CODE BEGIN 2 */   printf("Welcome to UART1 test!r ");    /* USER CODE END 2 */    /* Infinite loop */   /* USER CODE BEGIN WHILE */   while (1)   {    /* USER CODE END WHILE */    /* USER CODE BEGIN 3 */            if(HAL_UART_Receive(&huart1, &Rdata, 1, 0)==HAL_OK)         {       if (usart_rx_buf_index > USART1_RX_BUF_LEN - 1)       {         usart_rx_buf_index = 0;       }              if (Rdata == 0x0A)       {         if (strcmp((char*)USART1_RX_BUF, "ON") == 0)         {           HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);         }         else if (strcmp((char*)USART1_RX_BUF, "OFF") == 0)         {           HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);         }         usart_rx_buf_index = 0;         memset(USART1_RX_BUF, 0, USART1_RX_BUF_LEN);       }       else       {         USART1_RX_BUF[usart_rx_buf_index++] = Rdata;       }         }   }   /* USER CODE END 3 */  }
  演示如文章开头所见。 四、总结
  以上就是 手把手教你编写一个简单的点灯上位机 的内容,虽然实现的功能很简单,但是QT上位机开发的步骤基本就是这些步骤,通过这个基础实例把这些套路摸透我们就可以接着进行后续更多QT程序地开发学习了。
  另外,ZhengN也是QT开发新手,文章中如有错误,欢迎指出,谢谢大家!
  码字不易。原创不易。如果文章对你有帮助,麻烦帮忙转发分享,谢谢! 五、资源下载
  私信回复关键词: serial_led ,可获取本文上下位机工程(我看到的话会第一时间发给你)。

又一国产巨头加入鸿蒙!市值超5000亿,被董明珠视为最强对手作为鸿蒙OS的创立者,华为在今年的开发者大会上就公开宣称将会与美的老板九阳等家电国企进行合作,其中美的应该是实力最强知名度最高的一家。近日,美的集团官方正式官宣了与华为的合作,联手老头乐转正!新款雷丁芒果上市,2。98万起售,挂绿牌可上高速一直以来,雷丁一直深耕低速电动车领域,甚至被誉为中国老年代步车领导者,不过在2019年年初,雷丁收购了野马汽车100股权,从而也获得了汽车生产资质,也相当于老头乐转正了!近日,新款21。99万起售,2022款别克昂科威S上市,标配可变缸2。0T发动机9AT日前,上汽通用别克2022款昂科威S上市,新车推出了包括普通版GS版艾维亚版三种版本共5款车型,价格区间为21。9927。99万。2022款昂科威属于例行的年代改款,外观设计与上一观致5S八月份卖出1台新车!近日,我们从相关渠道获取到了2021年8月份国内新车交强险的数据,其中哈弗H6以25613台排在第一位,而观致5S的交强险数据只有1台,这也基本上代表了观致5S在8月份只卖出一台新跌到20万内,福特的旗舰级轿车,标配2。0T8AT,舒适性超宝马5系在国内汽车市场,BBA三个品牌的号召力很强,其实不是它们的产品有多优秀,而是品牌很优秀,并且依靠品牌能得到更高的溢价,其实如果回归到汽车的本质,开着舒服坐着舒服才是根本,在BBA之大厂需要怎样的技术型人才?腾讯字节跳动万兴科技这么说当听到程序员三个字时,相信很多人除了格子衫的印象,就是高薪职业生命周期长,从业越久越吃香。程序员,也叫IT工程师,是从事程序开发程序维护的工作人员,因互联网崛起而一举成为IT职场的适合遇见,还是久伴有些风景只能喜欢,却不能收藏。有些人只适合遇见,却不适合久伴。让自己忙一点,忙到没有时间去思考无关紧要的事,很多事情就这样悄悄地淡忘了。人的欲望很奇怪,很多时候渴望得到一些东西,得忍让,不等于亏欠忍让,不是因为亏欠,而是在乎一个人的表现。包容,不是因为懦弱,而是珍惜一份情的见证。不管是谁,不要把别人的忍让看成理所当然,不要把他人的包容当成懦弱没用。这个世上谁都不傻,选择让步成熟四部曲1。平视异性理性地考虑并选择婚姻对象,并开始准备成家过独立的家庭生活在行为上能够扮演适当的性别角色。实际点来说,就是用从容和自然的态度,在面对异性时既不太在意对方对自己的看法,也不你有什么缺点?你知道吗每个人都有缺点,如果你害怕它回避它,它就永远是你的硬伤只有正视它克服它,它才不会成为你前行的障碍。有进取心的人,都敢直面自己的缺点。因为他们知道,只有攻克一个又一个的障碍,人生才能最深沉的爱总是无声,最长久的情总是平淡爱到深处,是无言情到浓时,是眷恋。时间会告诉我们,简单的喜欢,最长远平凡中的陪伴,最心安懂你的人,最温暖。徐志摩说我懂你,像懂自己一样深刻。简短的话语,却包含了万千。因为深有体会,
汽车早报蔚来宣布整车生产已暂停退出俄罗斯豪华汽车品牌将被中国车企取代蔚来宣布整车生产已暂停,部分车辆将推迟交付4月9日,蔚来官方App发布关于近期生产与交付情况的说明。内容显示,自3月份以来,因为疫情原因,公司位于吉林上海江苏等多地的供应链合作伙伴手机质量越好性能越强,钉子户就会越多,困局怎么破?其实不只是手机领域,在任何领域几乎都是这样的,质量越好的商品,消费者更换的频率就越低。纵观手机的发展史,从大哥大到后来的第一代手机,再到初代的智能手机(诺基亚塞班系统等),直到现在安兔兔最新性能榜出炉!Snapdragon8霸榜天玑9000奋起直追步入四月,市场主流旗舰机型基本已完成换代过程。反映在手机性能排行的Antutu三月份Android旗舰手机榜上,一如预期前十名大都由高通Snapdragon8平台所占据。不过赶在二联通推出UMAGIC品牌首款优畅享205G优畅享205G前面板采用非常成熟的水滴屏设计,想必大家已经熟悉了这样的前面板设计,既不会显得过时,作为首款产品也能让更多消费者接受,一眼望去全是屏幕。无论是电视剧看电影还是看小说玩标题P7首个突破十万量产纯电新势力车型标题P7首个突破十万量产纯电新势力车型3月23日,超长续航智能轿跑小鹏P7迎来了第十万台的下线,成为首个突破十万量产的纯电新势力车型。同时,我们正式发布黑色特别版车型小鹏P756210年前美国芯片从业者19万,我国20万,如今美国28万,我国呢正所谓,科技是社会发展的第一生产力。如今,随着互联网的发展,科学技术研究已经成为一个国家综合国力的重要组成部分之一。然而,由于我国科技发展相对较晚,在高新技术领域与许多发达国家相比拜登全美4800万户家庭可享高速互联网补贴福利侨报特约记者严添5月9日华盛顿报道周一下午,拜登总统与贺锦丽副总统在白宫召开发布会,正式宣布本届政府已经与20家互联网运营商就可负担高速互联网计划(ACP)达成合作协议。这意味着将BOSE推出全新Bose家庭娱乐扬声器850品玩5月10日讯,今天,Bose宣布推出全新Bose家庭娱乐扬声器850,不仅外型精巧,更支持杜比全景声内容(DolbyAtmos),为用户带来沉浸动人的聆听与观影体验。通过特有的宝塔面板不同环境安装步骤详解Linux面板环境安装,主要支持LNMP和LAMPTomcatnode。js。不过对于大部分站长来说,主要是LNMP和LAMP两个环境的安装。LNMP和LAMP两个环境的最大区别是三星折叠屏手机最新款2022三星ZFold3评测就我个人而言,在过去的一个月内有机会使用和体验了三星ZFold3。这款三星2022年最新款折叠屏手机确实给我带来了太多有趣的感受。想必很多人都会有这样的疑问,比如三星ZFold3的中科院二氧化碳人工合成淀粉离产业化应用还较远中新财经5月10日电10日,国家发改委举行新闻发布会,介绍十四五生物经济发展规划有关情况。针对二氧化碳合成淀粉人工合成蛋白质等生物领域的新技术成果,中国科学院科技促进发展局副局长许