# WT331_4Android **Repository Path**: ttkl377/wt331_4-android ## Basic Information - **Project Name**: WT331_4Android - **Description**: WT331_4Android是由韦普泰克公司研发的一款WT331单通道称重仪表针对Android平台的开发包。 WT331_4Android is a development kit for the Android platform, developed by WPTEC for the WT331 single channel weighing instrument. - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-09-29 - **Last Updated**: 2024-11-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ##### [📖 English Documentation](README_EN.md) | 📖 中文文档 # WT331_4Android [![Java support](https://img.shields.io/badge/Java-8+-green?logo=java&logoColor=white)](https://openjdk.java.net/) [![Android](https://img.shields.io/badge/Android-6.0.1%2B-brightgreen.svg?style=flat)](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels) [![Gradle Version](https://img.shields.io/badge/gradle-8.7%2B-green.svg)](https://docs.gradle.org/current/release-notes) [![License](https://img.shields.io/badge/license-MIT-4EB1BA.svg)](https://mitsloan.mit.edu/licensing) `WT331_4Android`是由[韦普泰克公司](https://www.wptec.com.cn/index.php/index/index/g/e.html)研发的一款WT331单通道称重仪表针对Android平台的开发包。开发包封装了对WT331仪表硬件层的通讯交互,并绘制了仪表的展示、基本设置、称台标定UI组件。这样用户无需关心仪表硬件层的开发,可以很方便的将UI组件集成到Android项目中使用。 - 支持Android 6+,Android SDK 版本最低支持23,最高支持34 - JDK 8 - Gradle 版本建议8.7或更高 - 开源协议MIT # 1. 使用准备 ## 1.1 添加第三方依赖 `Gradle`: ```groovy dependencies { implementation group: 'com.licheedev', name: 'android-serialport', version: '2.1.4' } ``` ## 1.2 添加WT331_4Android[aar包] - 1 在Android工程中添加`libs`目录 ```groovy [Android工程]/app/libs ``` - 2 拷贝 `wt331_basicview.aar` 包到 `libs` 目录下 - 3 引用 `wt331_basicview.aar` 包 ```groovy implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar']) ``` # 2. 页面集成UI组件 - 注 页面是按照1024*600的像素宽高来设计的 - 1 上述步骤完成后Android Studio会提示Sync(或手动Sync) - 2 Sync成功后打开需要集成UI组件的页面,本例中将在`MainActiity`中集成,在Android Studio中打开`activity_main.xml` ```groovy [Android工程]/app/src/main/res/layout/activity_main.xml ``` - 3 在`activity_main.xml`中添加节点,并设置UI组件的id为`GaugeView` ```xml ``` # 3. 编写运行代码 - 1 实现仪表数据回调接口`Callback.java` ```java import com.wipotec.wt331_4android.common.BasicInfo; import com.wipotec.wt331_4android.common.ErrorInfo; import com.wipotec.wt331_4android.common.ICallback; import com.wipotec.wt331_4android.common.WeightInfo; public class Callback implements ICallback { // 仪表异常的处理对象 private final CallbackErrorHandler errorHandler; public Callback(CallbackErrorHandler callbackErrorHandler) { this.errorHandler = callbackErrorHandler; } // 物理清零按键按下后的回调 @Override public void pressZero() { } // 物理去皮按键按下后的回调 @Override public void pressSerTare() { } // 物理清皮按键按下后的回调 @Override public void pressClearTare() { } // 物理打印按键按下后的回调 @Override public void pressPrint() { } // 仪表基本信息更新后的回调 // basicInfo-基本信息 @Override public void onListenBasicInfo(BasicInfo basicInfo) { } // 仪表重量实时数据的回调 // weightInfo-重量等信息 @Override public void onListenData(WeightInfo weightInfo) { } // 仪表异常的回调 // errorInfo-异常信息 @Override public void onListenError(ErrorInfo errorInfo) { errorHandler.onListenError(errorInfo); } } ``` - 2 注意到`Callback.java`仪表的异常处理接口`CallbackErrorHandler` ```java import com.wipotec.wt331_4android.common.ErrorInfo; public interface CallbackErrorHandler { void onListenError(ErrorInfo errorInfo); } ``` - 3 找到`activity_main.xml`页面对应的java代码`MainActivity.java` ```java public class MainActivity extends AppCompatActivity implements CallbackErrorHandler, GaugeDataCallback{ private WT331 wt331; private GaugeView gaugeView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); EdgeToEdge.enable(this); setContentView(R.layout.activity_main); ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> { Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()); v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); return insets; }); } @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); // 获取UI组件对象 gaugeView = findViewById(R.id.GaugeView); // 运行仪表 initWt331(); } private void initWt331() { Callback callback = new Callback(this); // codeFirst必须在最前面调用一次 WT331.codeFirst("dev/ttyS2", callback); try { wt331 = WT331.getInstance(); } catch (Exception e) { Log.e("初始化仪表", "异常", e); ToastUtils("初始化仪表异常"); return; } // 仪表通讯时耗时操作,放在单独线程中运行,运行成功后给仪表UI组件gaugeView传递仪表对象 Thread thread = new Thread(() -> { try { wt331.run(); runOnUiThread(()->{ try { gaugeView.runWt331(wt331, this); } catch (Exception e) { Log.e("仪表设置", "异常", e); } }); } catch (Exception e) { Log.e("仪表通信", "异常", e); runOnUiThread(() -> { if (e instanceof TimeoutException) { // 仪表通讯超时的处理 // 通常可弹框提示,然后进行重试,继续调用wt331.run()方法 } else { ToastUtils("仪表通信失败"); } }); } }); thread.start(); } @Override public void onReturn() { // UI组件中的返回按钮,可返回到主菜单 } private void ToastUtils(String msg) { Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); } } ``` - 4 其中`dev/ttyS2`是Android中对应串口的名称 - 5 WT331功能接口 ```java /** * 最开始调用的代码,设置串口通讯参数 * * @param portName 串口名称 * @param baudRate 波特率 * @param dataBits 数据位 * @param stopBits 停止位 * @param parity 校验位 * @param callback 回调函数对象 */ public static void codeFirst(String portName, int baudRate, int dataBits, int stopBits, int parity, ICallback callback) /** * 最开始调用的代码,设置串口通讯参数(默认参数:波特率:115200,数据位:8,停止位:1,校验位:0) * * @param portName 串口名称 * @param callback 回调函数对象 */ public static void codeFirst(String portName, ICallback callback) /** * 调用此方法之前,必须先掉用codeFirst函数设置串口参数 * * @return 仪表对象 * @throws Exception 异常信息 */ public static WT331 getInstance() throws Exception /** * 自定义UI组件显示仪表数据回调 * * @param uiCallback UI回调函数 */ public void setUICallback(IUICallback uiCallback) /** * 仪表运行的方法 */ public void run() throws Exception /** * 去皮 */ public void setTare() throws Exception /** * 清皮 */ public void clearTare() throws Exception /** * 清零 */ public void setZero() throws Exception /** * 恢复出厂设置 */ public void restoreBasicSetting() throws Exception // 关闭仪表 public void close() /** * 仪表是否正在运行 * * @return true-正在运行,false-停止 */ public boolean isRunning() ```