serialport控件如何使用(上位机开发serialport控件使用)
物联网系列教程
一个很好的物联网(IoT)开发实战入门教程,图、文详细。供计算机、电子工程相关专业的在校生以及相关领域初学者、爱好者参考学习。涉及单片机、上位机、移动应用、服务器后台开发的知识,以及蓝牙4.0、以太网模块的使用实例。
目录
第一部分:基础入门
第1项:单片机开发——Arduino
1.1 Arduino开发环境搭建(往期文章)
1.2 点亮一个Led(往期文章)
1.3 PWM操作(往期文章)
1.4 UART的使用(往期文章)
第2项:上位机开发——.Net
2.1 winform快速入门(上期文章)
2.2 serialport控件使用(本期文章)
第3项:移动开发——Android
3.1 安卓开发环境搭建(下期文章更新,两天更新一期)
3.2 HelloActivity分析
3.3 LinearLayout与基本控件
3.4 Intent与Activity的生命周期
3.5 ListView与BaseAdapter
3.6 Service学习
3.7 Android权限机制
3.8 BroadCastReciever学习
第4项:后端开发——Golang
4.1 go语言开发环境搭建
4.2 go语言基础快速入门
4.3 用go语言显示一个网页
4.4 go语言web框架——gin
4.5 部署go语言项目
第二部分:案例学习
第5项:蓝牙4.0案例——手机控制RGB灯颜色
5.1 用串口控制RGB灯颜色
5.2 用上位机控制RGB灯颜色
5.3 蓝牙4.0简单介绍
5.4 蓝牙4.0安卓例程源码阅读
5.5 用安卓手机控制RGB灯颜色
第6项:网络模块案例——温度采集系统开发
6.1 Arduino温度传感器的使用
6.2 ENC28J60模块的使用
6.3 在网页上显示温度
2.2 serialport控件使用
这一节,我们将完成一个简易的串口调试助手。并用Nano开发板来测试我们的串口助手。
界面布局
首先创建一个工程,我这里起名叫做“SerialPortTool”。我们先完成以下界面的布局。
接下来为各个控件修改一下名字:
端口号 --> portComboBox
波特率 --> baudRateComboBox
打开串口 --> openBtn
关闭串口 --> closeBtn
接收区 --> receivedTBox
发送区 --> sendTBox
发送 --> sendBtn
在Form_Load中初始化各个控件:
private?void?Form1_Load(object?sender,?EventArgs?e){ ????closeBtn.Enabled?=?false;?//没有打开串口时,无法点击关闭串口 ????//初始化端口号 ????for?(int?i?=?1;?i?<=?20;?i++) ????{ ????????portComboBox.Items.Add("COM"?+?i); ????} ????portComboBox.SelectedText?=?"COM1";????//初始化波特率 ????string[]?baudRates?=?{"300","600","1200","2400",?????????????????????????????"4800","9600","19200",?????????????????????????????"38400","43000","56000",?????????????????????????????"57600","115200"?};????foreach?(string?baudRate?in?baudRates) ????{ ????????baudRateComboBox.Items.Add(baudRate); ????} ????baudRateComboBox.SelectedText?=?"9600"; }
添加SerialPort控件
我们搜索SerialPort控件后,直接双击它就可以添加到窗体中,不过这个控件和其他的不太一样,它没有显示在界面中,不过自己想想的话,它也不需要在界面中有什么显示,只需要后台跑,监听串口就好了。
选中SerialPort控件,然后选中它的事件,我们可以看到这里有一个DataReceive的事件,也就是接收到数据,就会调用这个方法。
在DataReceive中,我们需要把接收到的数据追加到接收区的后面。输入serialPort1之后再输入一个点,然后输入read,我们这是可以看到和read相关的方法。这里有一个叫ReadExisting的方法,就是把所有的数据都读出来。用这个就好了。
private?void?serialPort1_DataReceived(object?sender,?System.IO.Ports.SerialDataReceivedEventArgs?e){????try ????{????????string?receivedText?=?serialPort1.ReadExisting(); ????????receivedTBox.Text?+=?receivedText; ????}????catch?(Exception?ex) ????{ ????????MessageBox.Show(ex.Message); ????} }
接下来我们要处理串口打开和关闭以及发送的相关的操作了,serialPort下面很容易就找到相关操作的代码了。我这里直接把后面的部分完成了。
//打开串口private?void?openBtn_Click(object?sender,?EventArgs?e){????try ????{ ????????serialPort1.PortName?=?portComboBox.Text; ????????serialPort1.BaudRate?=?int.Parse(baudRateComboBox.Text); ????????serialPort1.Open(); ????????openBtn.Enabled?=?false; ????????closeBtn.Enabled?=?true;????????//打开串口之后波特率和端口号就不能改了 ????????baudRateComboBox.Enabled?=?false; ????????portComboBox.Enabled?=?false; ????}????catch?(Exception?ex) ????{ ????????MessageBox.Show(ex.Message); ????} }//关闭串口private?void?closeBtn_Click(object?sender,?EventArgs?e){????try ????{ ????????serialPort1.Close(); ????????openBtn.Enabled?=?true; ????????closeBtn.Enabled?=?false; ????????baudRateComboBox.Enabled?=?true; ????????portComboBox.Enabled?=?true; ????}????catch?(Exception?ex) ????{ ????????MessageBox.Show(ex.Message); ????} }//发送数据private?void?sendBtn_Click(object?sender,?EventArgs?e){????try ????{ ????????serialPort1.WriteLine(sendTBox.Text); ????}????catch?(Exception?ex) ????{ ????????MessageBox.Show(ex.Message); ????} }
用Arduino测试
Okay,程序写好了,我们先为开发板烧写1.4节的程序,然后通过自己写的串口助手连接上Arduino开发板,选择打开串口。
打开成功,然后在发送区输入“Hello, Arduino!”。
不过好像很不幸,程序失败了。这个情况我之前也没有遇到过,于是我百度了一下,有人说在窗体的构造函数处添加一行代码就可以。修改后的构造函数如下:
public?Form1(){ ????InitializeComponent();????//取消跨线程检查 ????Control.CheckForIllegalCrossThreadCalls?=?false; }
这样就测试成功了。成功输出了:“H e l l o , A r d u i n o ! ”。
不过这个程序还是有很多小问题的,比如说接受很多数据,但是接收区无法自动滑动到底端,还有窗口的大小可以任意调整。我稍微修改了些代码,放在了本节源码文件下的SerialPortTool2目录中。有兴趣可以看看。
下期更新预告:
第1部分:单片机开发——Arduino
1.1 Arduino开发环境搭建(往期文章,点击前往查看)
1.2 点亮一个Led(往期文章,点击前往查看)
1.3 PWM操作(往期文章,点击前往查看)
1.4 UART的使用(往期文章,点击前往查看)
第2项:上位机开发——.Net
2.1 winform快速入门(上期文章,点击前往查看)
2.2 serialport控件使用(本期文章)
第3项:移动开发——Android
3.1 安卓开发环境搭建(下期更新这部分内容)
热门安卓游戏下载-海量安卓软件-迷你狗下载站版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 869483289@qq.com 举报,一经查实,本站将立刻删除。