C++ Builder 2010 怎么进行通讯

1.C++ Builder 2010 怎么编写通讯温湿度计的代码,通讯接口用USB/WiFi形式
2.怎么采集数据

哈喽你好呀! 这里给出包括了USB和WiFi两种通讯接口的实现的两种示例代码,这里用到了TComPort组件实现串口通讯、Indy组件实现网络通讯等。
1.USB通讯接口示例代码:

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include <stdio.h>

#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

HANDLE hComm;
DCB dcb;
COMMTIMEOUTS timeouts;

void OpenSerialPort()
{
    AnsiString portName = "COM1"; // 指定串口号
    hComm = CreateFile(portName.c_str(), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
    if (hComm == INVALID_HANDLE_VALUE) {
        ShowMessage("无法打开串口!");
        return;
    }

    if (!GetCommState(hComm, &dcb)) {
        ShowMessage("获取串口状态失败!");
        CloseHandle(hComm);
        return;
    }

    dcb.BaudRate = CBR_9600; // 波特率
    dcb.ByteSize = 8;        // 数据位
    dcb.Parity   = NOPARITY; // 校验位
    dcb.StopBits = ONESTOPBIT; // 停止位

    if (!SetCommState(hComm, &dcb)) {
        ShowMessage("设置串口状态失败!");
        CloseHandle(hComm);
        return;
    }

    timeouts.ReadIntervalTimeout         = MAXDWORD;
    timeouts.ReadTotalTimeoutMultiplier  = 0;
    timeouts.ReadTotalTimeoutConstant    = 0;
    timeouts.WriteTotalTimeoutMultiplier = 1000;
    timeouts.WriteTotalTimeoutConstant   = 1000;

    if (!SetCommTimeouts(hComm, &timeouts)) {
        ShowMessage("设置串口超时时间失败!");
        CloseHandle(hComm);
        return;
    }

    ShowMessage("串口打开成功!");
}

void CloseSerialPort()
{
    CloseHandle(hComm);
    ShowMessage("串口已关闭!");
}

void ReadSerialData(char *buf, int len)
{
    DWORD dwBytesRead;
    if (!ReadFile(hComm, buf, len, &dwBytesRead, NULL)) {
        ShowMessage("读取串口数据失败!");
        return;
    }
}

#pragma argsused
void __fastcall TForm1::btnOpenSerialClick(TObject *Sender)
{
    OpenSerialPort();
}

#pragma argsused
void __fastcall TForm1::btnCloseSerialClick(TObject *Sender)
{
    CloseSerialPort();
}

#pragma argsused
void __fastcall TForm1::btnReadDataClick(TObject *Sender)
{
    char buf[128];
    ReadSerialData(buf, sizeof(buf));
    Memo1->Lines->Add(AnsiString(buf));
}

在示例代码中,OpenSerialPort函数用于打开COM1端口,并设置波特率、数据位、校验位和停止位等参数;CloseSerialPort函数用于关闭串口;ReadSerialData函数用于从串口读取数据。具体使用时可以在按钮的单击事件中调用相应的函数。

2.WiFi通讯接口示例代码:

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include <stdio.h>
#include <IdTCPClient.hpp>
#include <IdTCPConnection.hpp>

#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

AnsiString serverIP = "192.168.1.100"; // 指定服务器IP
int portNumber = 1234;                 // 指定端口号

void ConnectToServer()
{
    TIdTCPClient *tcpClient = new TIdTCPClient(Form1);
    tcpClient->Host = serverIP;
    tcpClient->Port = portNumber;
    try {
        tcpClient->Connect();
    }
    catch (...) {
        ShowMessage("连接服务器失败!");
        return;
    }

    ShowMessage("连接服务器成功!");

    tcpClient->Disconnect();
    delete tcpClient;
}

#pragma argsused
void __fastcall TForm1::btnConnectClick(TObject *Sender)
{
    ConnectToServer();
}

在示例代码中,ConnectToServer函数用于建立TCP连接并连接到指定的服务器;同时,在按钮单击事件中调用该函数即可进行测试。需要注意的是,通讯温湿度计的实现方式因设备接口和协议不同而异。对于USB接口的设备,可以使用Windows API函数进行串口通讯;而对于WiFi接口的设备,则需要使用网络通讯协议。