 蓝牙电子秤
蓝牙电子秤
  # PinToo之蓝牙电子秤
# 1. 说明
范例采用蓝牙通讯协议,读取电子秤并控制电子秤的去皮清零操作。手机端发送读取指令,电子秤返回称重重量的信息;手机端发送去皮与置零的指令,电子秤端执行相应的操作。在使用该功能前需要将设备与电子秤进行蓝牙配对连接。对应的PIN以及蓝牙的MAC地址可以在电子秤的产品说明中查看。
范例使用到的电子秤为耀华XK3190-A12+E,其秤头的外观如下图所示。该型号的电子秤可提供蓝牙连接的支持。在使用范例前,请先确认是否已与电子秤进行过蓝牙配对,否则会导致范例运行失败。

通过范例学习,可以掌握fxBlueTooth相关控件的使用,并读取写入蓝牙电子秤的数据。
# 2. 设计明细
  开启PinToo设计器,分别加入下插图之控件。或者点击左上角的[打开模板Lib文件]选择模板文件来打开对应模板。

  ①:TfxImage组件,控件名称为fxImageSearch。
  ②:TfxText组件,控件名称为fxTextPilled。
  ③:TfxText组件,控件名称为fxTextStatus。
  ④:TfxText组件,控件名称为fxTextWeight。
  ⑤:TfxSwitchButton组件,控件名称为fxSwitchButtonWeight。
  ⑥:TfxImage组件,控件名称为fxImageConnect。
  ⑦:TfxBluetooth组件,控件名称为fxBluetooth1。
  ⑧:TfxText组件,控件名称为fxTextZero。
- fxRunFrame属性设置 - Height:设置页面高度=- 800。
- Width:设置页面宽度=- 400。
 
- fxComboBox属性设置 - Visible:设置控件是否可见=- True。
- Name:设置控件名称=- fxComboBox。
 
- fxComboBoxService属性设置 - Visible:设置控件是否可见=- True。
- Name:设置控件名称=- fxComboBoxService。
 
- fxTimer属性设置 - Enabled:是否启用计数功能,此处设置为- False。
 
- ①fxImageSearch属性设置 - Height:设置控件高度=- 40。
- Width:设置控件宽度=- 40。
- Name:设置控件名称=- fxImageSearch。
- WarpMode:设置图像在控件中显示的模式,设置为- Fit,即图像适应于控件大小。
- Bitmap:设置显示的图片,双击该属性或者点击属性右侧的- [...]打开图像编辑器。点击- [Load...]打开资源管理器,选择所需的图片后点击- [打开],选择的图像会显示在预览框中。可在该页面下进行裁切或者缩放像素以使图像与控件的宽度高度相适应,修改完成后点击- [OK]按钮完成图像修改。
  
- ②fxTextPilled属性设置 - Text:设置显示文字=- 去皮。
- Height:设置控件高度=- 80。
- Width:设置控件宽度=- 80。
- Name:设置控件名称=- fxTextPilled。
- TextSettings:设置文字字体的相关信息。设置- Font.Size=- 24。- FontColor=- White。
- HorzAlign:设置文字在控件中的水平位置=- Center。
- VertAlign:设置文字在控件中的垂直位置=- Center。
 
- ③fxTextStatus属性设置 - Text:设置显示文字=- 等待连接。
- Height:设置控件高度=- 40。
- Width:设置控件宽度=- 280。
- Name:设置控件名称=- fxTextStatus。
- TextSettings:设置文字字体的相关信息。设置- Font.Size=- 18。- FontColor=- White。
- HorzAlign:设置文字在控件中的水平位置=- Center。
- VertAlign:设置文字在控件中的垂直位置=- Center。
 
- ④fxTextWeight属性设置 - Text:设置显示文字=- 35.200。
- Height:设置控件高度=- 70。
- Width:设置控件宽度=- 220。
- Name:设置控件名称=- fxTextWeight。
- TextSettings:设置文字字体的相关信息。设置- Font.Size=- 64。- FontColor=- White。
- HorzAlign:设置文字在控件中的水平位置=- Center。
- VertAlign:设置文字在控件中的垂直位置=- Center。
 
- ⑤fxSwitchButtonWeight属性设置 - Height:设置控件高度=- 200。
- Width:设置控件宽度=- 200。
- Name:设置控件名称=- fxSwitchButtonWeight。
- SwitchOffBmp:设置开关状态为关时显示的图像,双击该属性或者点击属性右侧的- [...]打开图像编辑器。点击- [Load...]打开资源管理器,选择所需的图片后点击- [打开],选择的图像会显示在预览框中。可在该页面下进行裁切或者缩放像素以使图像与控件的宽度高度相适应,修改完成后点击- [OK]按钮完成图像修改。
  - SwitchOnBmp:设置开关状态为开时显示的图像,双击该属性或者点击属性右侧的- [...]打开图像编辑器。点击- [Load...]打开资源管理器,选择所需的图片后点击- [打开],选择的图像会显示在预览框中。可在该页面下进行裁切或者缩放像素以使图像与控件的宽度高度相适应,修改完成后点击- [OK]按钮完成图像修改。
  
- ⑥fxImageConnect属性设置 - Height:设置控件高度=- 40。
- Width:设置控件宽度=- 40。
- Name:设置控件名称=- fxImageConnect。
- WarpMode:设置图像在控件中显示的模式,设置为- Fit,即图像适应于控件大小。
- Bitmap:设置显示的图片,双击该属性或者点击属性右侧的- [...]打开图像编辑器。点击- [Load...]打开资源管理器,选择所需的图片后点击- [打开],选择的图像会显示在预览框中。可在该页面下进行裁切或者缩放像素以使图像与控件的宽度高度相适应,修改完成后点击- [OK]按钮完成图像修改。
  
- ⑧fxTextZero属性设置 - Text:设置显示文字=- 置零。
- Height:设置控件高度=- 80。
- Width:设置控件宽度=- 80。
- Name:设置控件名称=- fxTextZero。
- TextSettings:设置文字字体的相关信息。设置- Font.Size=- 24。- FontColor=- White。
- HorzAlign:设置文字在控件中的水平位置=- Center。
- VertAlign:设置文字在控件中的垂直位置=- Center。
 
# 3. 程序设计
  点击程序设计界面右下角的按钮,切换至单元选择界面,勾选需要使用的单元。该程序需要引用 BlueTooth,BlueToothComponents,ufxBlueTooth单元。
# 3.1. 程序初始设置
窗体关闭前关闭蓝牙连接。
Procedure fxRunFrameBeforeClose(Sender: TObject);
//关闭窗体前关闭蓝牙以及电子秤的连接
Begin
  fxBluetooth.CloseServerSocket;
  fxBluetooth.FreeClientSocket;
End;
2
3
4
5
6
# 3.2. 事件设置
- ①fxImageSearch-OnClick事件
点击以加载蓝牙设备列表。
Procedure fxImageSearchOnClick(Sender: TObject);
//点击搜索按钮寻找蓝牙设备
Begin
  fxBluetooth.PairedDevices;
  if fxBlueTooth.BTPaireds.Text = '' Then
  begin
      fxTextStatus.Text := '请检查蓝牙是否已配对';
      Exit;
  End;
  fxComboBox.Items := fxBlueTooth.BTPaireds;
  fxComboBox.DropDown;
End;
2
3
4
5
6
7
8
9
10
11
12
- fxComboBox-OnChange事件
点击切换蓝牙设备。
Procedure fxComboBoxOnChange(Sender: TObject);
Begin
  fxBlueTooth.PairedDevice := fxComboBox.Items[fxComboBox.ItemIndex];
  fxTextStatus.Text := '已选择电子秤 ' + fxComboBox.Items[fxComboBox.ItemIndex];
End;
2
3
4
5
- ⑥fxImageConnect-OnClick事件
点击打开对应设备的蓝牙服务列表。
Procedure fxImageConnectOnClick(Sender: TObject);
//选择服务连接
Begin
  fxBluetooth.Services;
  fxComboBoxService.Items := fxBluetooth.BTServices;
  fxComboBoxService.DropDown;
End;
2
3
4
5
6
7
- fxComboBoxService-OnChange事件
点击切换蓝牙设备服务。
Procedure fxComboBoxServiceOnChange(Sender: TObject);
//更改服务
Begin
  fxBluetooth.ServiceUUID := fxComboBoxService.Items[fxComboBoxService.ItemIndex];
  fxBluetooth.CreateServerSocket;
  fxTextStatus.Text := '电子秤连接,已连接蓝牙服务';
End;
2
3
4
5
6
7
- ⑤fxSwitchButtonWeight-OnSwitch事件
点击切换计时器开关。
Procedure fxSwitchButtonWeightOnSwitch(Sender: TObject);
//切换读取与非读取状态
Begin
  fxTimer1.Enabled := fxSwitchButtonWeight.IsChecked;
End;
2
3
4
5
- fxTimer1-OnTimer事件
计时器定时发送读取命令并读取。
Procedure fxTimer1OnTimer(Sender: TObject);
//连续读取
Begin
  fxBluetooth.SendData('R');
  fxBluetooth.ReadData;
End;
2
3
4
5
6
- ②fxTextPilled-OnClick事件
点击发送去皮指令操作。
Procedure fxTextPilledOnClick(Sender: TObject);
//去皮
Begin
  fxBluetooth.SendData('T');
End;
2
3
4
5
- ⑧fxTextZero-OnClick事件
点击发送置零操作。
Procedure fxTextZeroOnClick(Sender: TObject);
//置零
Begin
  fxBluetooth.SendData('Z');
End;
2
3
4
5
- ⑦fxBluetooth-OnReceiveData
当蓝牙获取到数据时,解析数据并显示。
Procedure fxBluetoothOnReceiveData(Sender: TObject; ServiceName: string; ServiceUUID: string; ReceiveData: string);
//获取接收信息,并进行处理以显示为正确的结果
var
 ASymbol,AValue,AStr,FData:string;
Begin
  if ReceiveData <> '' Then
  begin
   FData :=Trim(ReceiveData);
   if Copy(FData,1,2) = 'AD' Then
   begin
    ASymbol:=Copy(FData,3,1);
    AStr:=Copy(FData,4,6);
    if ASymbol='+' Then
      AValue:=StrToFloat(AStr)*0.001
    else
      AValue:=StrToFloat(AStr)*0.001*-1;   
      fxTextWeight.Text := FloatToStr(AValue);
    end; 
  end
  else
      fxTextWeight.Text := '000.0';        
End;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 4. 运行结果
  使用鼠标在 PinToo 菜单,点击[保存至数据库]按钮,将其保存至数据库,点击[调试运行]确认能够正常打开。

通过同步中心,将程序上传至手机PinToo运行;同步时,请确保手机已经运行PinToo,并且已经登陆。

  点击蓝牙设备按钮,在弹出的列表中选择电子秤的蓝牙名称(此处为YaoHuaC66),点击服务按钮,等待一段时间后显示可用的连接服务列表,选择其中一个发起蓝牙连接,待连接建立后点击下方的电子秤图标按钮开启读取。可点击[去皮]、[置零]按钮进行去皮和置零的操作。
