背景
之前一直在用kotlin写安卓串口相关的项目,最近公司需要,需要再支持windows和linux,因为犯懒,不想去回忆qt相关的东西,采用多平台提供的expert/actual可以,但是如果很多人这样做,那就浪费了大量时间,而且特别麻烦,于是封装了这个多平台串口库——kmp-serialport。
本文主要介绍使用方法。
一、使用说明
-
从
kmp.jetbrains.com创建一个支持Android、桌面的多平台项目 -
使用AS打开这个项目
-
在
libs.versions.toml文件中定义依赖库
[libraries]
kmp-serialport = { module = "io.github.jeadyx:kmp-serialport", version="1.0.0"}
- 在
composeApp/build.gradle.kts文件中使用该依赖
kotlin {
sourceSets {
commonMain.dependencies {
implementation(libs.kmp.serialport)
}
}
}
- 搞定后,别忘记同步一下
- 同步完成后开始使用这个库
改文件
composeApp/src/commonMain/kotlin/com\jeady\hexdownloader/App.kt - 到此就完成了通过串口发送
Hello字符串 - 你就可以到各个平台去尝试互相运行Hello程序了
简单的参考程序
package com.jeady.hexdownloader
// 导入串口用到的类
import io.github.jeadyx.jserialport.SerialPort
import io.github.jeadyx.jserialport.SerialPortFactory
// 导入界面需要的类
import androidx.compose.material.Button
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.rememberCoroutineScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import org.jetbrains.compose.ui.tooling.preview.Preview
@Composable
@Preview
fun App() {
val coroutine = rememberCoroutineScope()
Button(onClick = {
coroutine.launch{
val serialPort = SerialPortFactory.create()
try {
serialPort.open(
// portName = "/dev/ttyUSB0", // Linux
portName = "COM4", // Windows
// portName = "/dev/ttyS7", // Android
baudRate = 9600,
dataBits = 8,
stopBits = 1,
parity = SerialPort.PARITY_NONE
)
serialPort.write("Hello".toByteArray())
serialPort.read().collect { data ->
println("Received: ${String(data)}")
}
delay(1000)
serialPort.close()
} catch (e: Exception) {
e.printStackTrace()
}
}
}) {
Text("Send")
}
} parity = SerialPort.PARITY_NONE
)
serialPort.write("Hello".toByteArray())
serialPort.read().collect { data ->
println("Received: ${String(data)}")
}
delay(1000)
serialPort.close()
} catch (e: Exception) {
e.printStackTrace()
}
}
}) {
Text("Send")
}
}
示例程序源码
如果想学习怎么发布自定义的kmp包,请参考博文: mp.weixin.qq.com/s/Ru3jxaP_X…