【问题标题】:Delphi XE5 Serial Port on AndroidAndroid上的Delphi XE5串口
【发布时间】:2013-12-13 21:28:11
【问题描述】:

有人知道如何使用delphi XE5 访问android 中的串口吗?我正在使用带有 android 4.1 的 Cubieboard

【问题讨论】:

  • 为此有一个第三方组件:Comport for Android。有关蓝牙串行通信的信息,另请参阅Broadcast Receivers in Delphi XE5 Android。据我了解,这需要一些工作才能实现,因为所需的 api 还没有完全翻译成 Delphi。
  • 请说明什么是串口?它可以是 USB、COM 或 BT ...
  • Everson,通常 Android 通过 USB 使用串口,​​使用那些适配器。在您的情况下,您使用的是开发板,您需要在其中查看是否有板载串行以及如何访问它。我不知道直接串行的api。我已经制作了只能通过 USB 访问串行的软件。使用此应用进行测试并查看链接:play.google.com/store/apps/…

标签: android delphi serial-port delphi-xe5


【解决方案1】:

我已成功使用 Winsoft ComPort for Android 进行串行 USB 通信。

http://www.winsoft.sk/acomport.htm

查看代码。

unit Main;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
  FMX.Layouts, FMX.Memo, Winsoft.Android.ComPort;

type
  TFormMain = class(TForm)
    Memo: TMemo;
    StatusBar: TStatusBar;
    ToolBar: TToolBar;
    ButtonOpenClose: TButton;
    ButtonSettings: TButton;
    LabelStatus: TLabel;
    AComPort: TAComPort;
    Timer: TTimer;
    procedure ButtonOpenCloseClick(Sender: TObject);
    procedure AComPortAfterWrite(Sender: TObject; Buffer: Pointer;
      Length: Integer);
    procedure TimerTimer(Sender: TObject);
    procedure AComPortAfterRead(Sender: TObject; Buffer: Pointer;
      Length: Integer);
    procedure MemoKeyDown(Sender: TObject; var Key: Word; var KeyChar: Char;
      Shift: TShiftState);
    procedure AComPortError(ComPort: TAComPort; E: EComError;
      var Action: TComAction);
    procedure ButtonSettingsClick(Sender: TObject);
  private
    { Private declarations }
    FReadCount: Integer;
    FWriteCount: Integer;
    procedure UpdateStatus;
  public
    { Public declarations }
  end;

var
  FormMain: TFormMain;

implementation

uses Settings;

{$R *.fmx}

procedure TFormMain.UpdateStatus;
begin
  LabelStatus.Text := 'Read bytes: ' + IntToStr(FReadCount) + '     Write bytes: ' + IntToStr(FWriteCount);
end;

procedure TFormMain.AComPortAfterRead(Sender: TObject; Buffer: Pointer; Length: Integer);
begin
  FReadCount := FReadCount + Length;
  UpdateStatus;
end;

procedure TFormMain.AComPortAfterWrite(Sender: TObject; Buffer: Pointer; Length: Integer);
begin
  FWriteCount := FWriteCount + Length;
  UpdateStatus;
end;

procedure TFormMain.AComPortError(ComPort: TAComPort; E: EComError; var Action: TComAction);
begin
  ShowMessage('Error ' + IntToStr(E.ErrorCode) + ': ' + E.Message);
  Action := caAbort;
end;

procedure TFormMain.ButtonOpenCloseClick(Sender: TObject);
begin
  AComPort.Active := not AComPort.Active;
  Timer.Enabled := AComPort.Active;
  Memo.Enabled := AComPort.Active;
  ButtonSettings.Enabled := not AComPort.Active;
  if AComPort.Active then
    ButtonOpenClose.Text := 'Close'
  else
    ButtonOpenClose.Text := 'Open';
end;

procedure TFormMain.ButtonSettingsClick(Sender: TObject);
begin
  FormSettings.Show;
end;

procedure TFormMain.MemoKeyDown(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState);
begin
  AComPort.WriteByte(Ord(KeyChar));
end;

procedure TFormMain.TimerTimer(Sender: TObject);
var Text: string;
begin
  Text := AComPort.ReadUtf8;
  if Text <> '' then
    Memo.Text := Memo.Text + Text;
end;

end.

在组件属性中,您必须包含创建串行端口通信的基本特征

如:设备名称、数据位、波特率、奇偶校验和停止位等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-26
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多