温湿度android studio 代码
时间: 2023-09-04 07:16:41 浏览: 50
以下是一个简单的温湿度测量应用程序的代码,使用 DHT11 温湿度传感器,需要在项目中导入 DHT11 库:
```
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import java.io.IOException;
import java.util.List;
import android.hardware.usb.UsbDevice;
import android.hardware.usb.UsbManager;
import com.felhr.usbserial.UsbSerialDevice;
import com.felhr.usbserial.UsbSerialInterface;
import com.felhr.usbserial.UsbSerialManager;
import com.felhr.usbserial.UsbSerialPort;
import com.felhr.usbserial.UsbSerialProber;
import com.felhr.usbserial.UsbSerialRuntimeException;
public class MainActivity extends AppCompatActivity {
private TextView mTemperatureTextView;
private TextView mHumidityTextView;
private UsbSerialPort mSerialPort;
private UsbSerialDevice mSerialDevice;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTemperatureTextView = findViewById(R.id.temperature_text_view);
mHumidityTextView = findViewById(R.id.humidity_text_view);
UsbManager usbManager = (UsbManager) getSystemService(USB_SERVICE);
List<UsbSerialDriver> drivers = UsbSerialProber.getDefaultProber().findAllDrivers(usbManager);
if (drivers.size() > 0) {
UsbSerialDriver driver = drivers.get(0);
UsbDevice device = driver.getDevice();
UsbSerialPort port = driver.getPorts().get(0);
mSerialPort = port;
try {
port.open(usbManager.openDevice(device));
port.setParameters(9600, 8, UsbSerialPort.STOPBITS_1, UsbSerialPort.PARITY_NONE);
mSerialDevice = UsbSerialDevice.createUsbSerialDevice(device, port);
if (mSerialDevice != null) {
mSerialDevice.open();
mSerialDevice.setBaudRate(9600);
mSerialDevice.setDataBits(UsbSerialInterface.DATA_BITS_8);
mSerialDevice.setStopBits(UsbSerialInterface.STOP_BITS_1);
mSerialDevice.setParity(UsbSerialInterface.PARITY_NONE);
mSerialDevice.setFlowControl(UsbSerialInterface.FLOW_CONTROL_OFF);
mSerialDevice.read(mCallback);
}
} catch (IOException e) {
e.printStackTrace();
} catch (UsbSerialRuntimeException e) {
e.printStackTrace();
}
}
}
private UsbSerialInterface.UsbReadCallback mCallback = new UsbSerialInterface.UsbReadCallback() {
@Override
public void onReceivedData(byte[] data) {
String str = new String(data);
String[] parts = str.split(",");
final String temperature = parts[0] + "℃";
final String humidity = parts[1] + "%";
runOnUiThread(new Runnable() {
@Override
public void run() {
mTemperatureTextView.setText(temperature);
mHumidityTextView.setText(humidity);
}
});
if (mSerialDevice != null) {
mSerialDevice.read(mCallback);
}
}
};
@Override
protected void onDestroy() {
super.onDestroy();
if (mSerialDevice != null) {
mSerialDevice.close();
}
if (mSerialPort != null) {
try {
mSerialPort.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
```
以上代码中,我们首先通过 UsbSerialProber.getDefaultProber().findAllDrivers(usbManager) 方法获取系统中所有可用的 USB 串口设备,然后选择第一个设备(前提是系统中有 USB 串口设备)并打开串口,设置波特率、数据位、停止位、校验位和流控等参数,最后通过 UsbSerialDevice.read(callback) 方法来读取串口数据,并在回调中将读取到的温湿度数据分别显示在 TextView 控件中。注意,在应用程序关闭时需要及时关闭 UsbSerialDevice 和 UsbSerialPort 对象,释放资源。