在使用GUI创建微控制器接口程序时,我从哪里开始?

时间:2013-09-18 20:32:38

标签: user-interface microcontroller

我正在参加我大学计算机工程专业的高级设计课程。我对嵌入式系统不太满意。我需要创建一个可以向微控制器发送指令的程序,它应该有一个GUI。其他人正在编程微控制器,所以我只是回应他们将输出给我的东西。我真的不知道从哪里开始,我在最后一个学期有点淹没/不堪重负。有人会介意我指出正确的方向吗?

附加信息:我们正在为设备使用TI-msp430f2274,它实际上只输出3个陀螺仪的读数。我正在考虑使用GTK创建GUI,但我希望看看是否有更好的东西。

编辑:我的项目是一个滚轮对齐工具,使用陀螺仪比较两个滚轮。程序会发送一条指令,将工具“归零”到一个滚轮,并接收一条数据流,说明下一个滚轮的偏移差异。

我们正在使用带有UART接口的TTL-232R电缆,该程序应该适用于Windows。我不知道你怎么跟它说话。大学压垮了我。

3 个答案:

答案 0 :(得分:0)

如果您使用的是Windows计算机,那么Visual Studio和Windows窗体应用程序就可以解决问题。我之前使用它通过USB和其他涉及USB人机接口设备读取的项目与温度传感器和其他控制设备连接。因此,在不了解项目细节的情况下,作为IDE Visual Studio,我认为是最好,最直观的,使用Windows API,您可以通过代码实现很多目标。

Visual Studio 2012

HTH。

P.S。我使用VS在VB中编写了大部分代码,但它也支持其他语言......

编辑:从com端口读取的一些示例代码:

Sub ReceiveSerialData()
    ' Receive strings from a com port 
    Dim comport as string = "COM 6" 'or whatever com you want...
    Dim baud as integer = 9600 'or whatever baud you want...

    Try
        com = My.Computer.Ports.OpenSerialPort(comport)
        com.ReadTimeout = 10000
        com.BaudRate = baud

        While (com.IsOpen)
            Dim Incoming As String = com.ReadLine()
            If Incoming Is Nothing Then
                Exit While
            Else
                'do something here with your com data
                'i.e. display it in a rich text box, or whatever...
            End If
        End While

    Catch ex As Exception
        ' display your errors here if you wish....
    End Try
End Sub

我认为其他答案虽然,从嵌入式系统的角度来看,使用tcl的esp可能更有意义。我根本没有任何经验,因此我的VB'ness。 : - )

答案 1 :(得分:0)

既然你之前提到过你曾经使用过tcl,我就会在tcl中给出答案,因为恕我直言,这是最简单的方法,也是正确工作的正确工具。

tcl的核心优势(实际上是其粉丝喜爱的原因之一)是它非常非常跨平台。在其他语言中,跨平台只是意味着“可以在多个平台上运行”,但仍然需要您根据平台使用不同的API,tcl可以平滑平台差异,从而跨平台提供统一的API。

Tcl将串行端口视为文件,因此您只需open即可与之通信。当然,不同的平台提供了不同的端口命名方式。因此,在Windows上,只需与串口通信即可:

set rs232 [open COM1 w+]

在unixen(Linux,MacOSX等)上你会做:

set rs232 [open /dev/ttyS0 w+]

要设置波特率和奇偶校验位,您现在可以

fconfigure $rs232 -mode "9600,n,8,1"

请务必将串口配置为二进制模式,否则tcl将根据您的操作系统重新解释“\ n”:

fconfigure $rs232 -mode "9600,n,8,1" -translation binary -blocking 0

“阻塞”位是将其设置为非阻塞模式,这样我们就可以编写面向事件的代码,这对UI应用程序至关重要,因为我们不希望IO阻止我们的UI。

现在是一个从串口读取数据的简单程序:

package require Tk ;# in case we're running in tclsh

if {[catch {set rs232 [open COM1 w+] err}]} {
    tk_dialog .error Error "Could not open COM1: $err" error 0 OK
}
fconfigure $rs232 -mode "9600,n,8,1" -translation binary -blocking 0

# Draw a simple UI do dump data to:
pack [label .l -text "Gyroscope outputs:"]
pack [label .g1 -textvariable gyro1]
pack [label .g2 -textvariable gyro2]
pack [label .g3 -textvariable gyro3]

# Now the fun part, read from the serial continuously with fileevent:
set buffer ""
fileevent $rs232 readable {
    append buffer [read $rs232]

    # Here, you need to parse the data returned.
    # Due to the byte-wise nature of serial ports the data read may not be
    # complete so we need to check if it's complete. "Completeness" depends
    # on you. For example the data packet may end with a newline. Or it may
    # simply be a timeout between data packets.

    if {[message_is_complete $buffer]} {
        set gyros [parse_message $buffer]
        set buffer ""

        # Update the UI:
        foreach x $gyros y {gyro1 gyro2 gyro2} {
            set $y $x
        }
    }
}

减去注释和空行只有16行代码。你当然可以更进一步,实现一个更花哨的UI,而不仅仅是文本标签。

如果您需要将数据发送到微控制器,只需puts即可。请记住覆盖tcl的自动换行终止:

puts -nonewline $rs232 $somedata

如果需要格式化为二进制格式,请使用tcl的binary命令。

答案 2 :(得分:0)

我个人仍然更喜欢tcl,因为你可以在5分钟内启动并运行原型来读取硬件的输出。但是你也提到了对node.js解决方案的兴趣。所以这是node.js的另一个起点

首先你需要安装node.js.根据您的操作系统,这可能是也可能不是微不足道的。您需要在系统上安装Python 2.x(而不是3.0)才能编译在C中编写的node.js模块(甚至是node.js本身)。即使您正在安装节点的二进制分发版,您仍然需要编译串行端口库,因为它不包含在核心中。

接下来,您需要安装serialport模块。说明因操作系统而异。请参阅模块的npm页面:https://npmjs.org/package/serialport

一旦完成并运行,您只需使用serialport模块与串口通信即可:

var SerialPort = require("serialport").SerialPort
var rs232 = new SerialPort("COM1", {
    baudrate: 57600
}, false);

同样,与tcl一样,串口的名称取决于您的操作系统。以上是Windows的一个示例。对于unixen,你会这样做:

var rs232 = new SerialPort("/dev/ttyS0", {
    baudrate: 57600
}, false);

对于UI,节点没有像tcl这样的核心工具包。 npm上有许多库,允许您使用QT或GTK或其他一些小部件集。但是在节点上执行UI的最常见方式是将其作为Web服务器运行并使用Web浏览器连接到它。这样做的缺点是需要额外的复杂性和混乱HTML的需要。好处是HTML& CSS!这意味着您可以利用CSS3效果和jQuery等工具轻松创建一个非常流畅的UI。

不幸的是,编写一个交互式webapp(甚至是一个简单的webapp)是相当复杂的,因此我不会提供一个“简单”的示例实现。我建议您阅读更受欢迎的框架,例如express.js和模板库,例如dusthandlebars。您可能还需要查看socket.io以简化服务器与Web浏览器之间实时通信的实现。