七叶笔记 » golang编程 » 物联网实战教程2.2,上位机开发serialport控件使用

物联网实战教程2.2,上位机开发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

  • 第2项:上位机开发——.Net

  • 2.2 serialport控件使用( 本期文章
  • 第3项:移动开发——Android

  • 3.1 安卓开发环境搭建( 下期更新这部分内容
  • 三连加关注,往后不迷路

    往期哪里搞,文章里翻找

    相关文章