Соединение OBD2 с использованием Bluetooth-ClassicAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Соединение OBD2 с использованием Bluetooth-Classic

Сообщение Anonymous »

Я разрабатываю нативное приложение React, которое отображает обороты двигателя практически в режиме реального времени, подключаясь к интерфейсу Bluetooth ELM327. Я проверил ELM327, используя приложение поршня, и задержка приемлема. Однако, когда я отправляю команду ATZ из моего приложения, индикатор ELM327 становится зеленым, но я не получаю никаких данных обратно. Я также попытался отправить команду 010C, но я тоже не получил ответа. Ниже приведен код, который отправляет только команду ATZ: < /p>
import {
View,
Text,
FlatList,
TouchableOpacity,
StyleSheet,
Alert,
PermissionsAndroid,
Platform
} from 'react-native';
import RNBluetoothClassic, { BluetoothDevice } from 'react-native-bluetooth-classic';

const App = () => {
const [devices, setDevices] = useState([]);
const [selectedDevice, setSelectedDevice] = useState(null);
const [response, setResponse] = useState('');

const requestBluetoothPermissions = async () => {
if (Platform.OS === 'android') {
try {
const granted = await PermissionsAndroid.requestMultiple([
PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
PermissionsAndroid.PERMISSIONS.BLUETOOTH_CONNECT,
PermissionsAndroid.PERMISSIONS.BLUETOOTH_SCAN,
]);
const allGranted = Object.values(granted).every(
status => status === PermissionsAndroid.RESULTS.GRANTED
);
console.log('[APP] Permissions granted:', allGranted);
return allGranted;
} catch (error) {
console.error('[APP] Error requesting permissions:', error);
return false;
}
}
return true;
};

const fetchPairedDevices = async () => {
try {
const pairedDevices = await RNBluetoothClassic.getBondedDevices();
console.log('[APP] Paired devices:', pairedDevices);
setDevices(pairedDevices);
} catch (error) {
Alert.alert('Error', 'Failed to fetch paired devices.');
console.error('[APP] Error fetching devices:', error);
}
};

useEffect(() => {
const init = async () => {
const permissionsGranted = await requestBluetoothPermissions();
if (!permissionsGranted) {
Alert.alert('Error', 'Bluetooth permissions not granted.');
return;
}
const isEnabled = await RNBluetoothClassic.isBluetoothEnabled();
if (!isEnabled) {
Alert.alert('Error', 'Bluetooth is disabled.');
return;
}
await fetchPairedDevices();
};
init();
}, []);

const readResponse = async (device: BluetoothDevice, timeout = 3000) => {
let result = '';
const start = Date.now();
while (Date.now() - start < timeout && !result.includes('>')) {
try {
const chunk = await device.read();
result += chunk;
} catch (error) {
console.error('[APP] Read error:', error);
break;
}
}
return result;
};

const connectAndSendATZ = async (device: BluetoothDevice) => {
try {
console.log('[APP] Connecting to:', device.name);
const connected = await device.connect();
if (connected) {
console.log('[APP] Connected to:', device.name);
setSelectedDevice(device);
console.log('[APP -> ELM327] "ATZ"');
await device.write('ATZ\r');
setTimeout(async () => {
try {
const resp = await readResponse(device);
console.log('[ELM327 -> APP] Response:', resp);
setResponse(resp.toString());
} catch (error) {
console.error('[APP] Error reading response:', error);
}
}, 2000);
} else {
Alert.alert('Error', 'Failed to connect to the device.');
}
} catch (error) {
Alert.alert('Connection Error', 'Failed to connect to the device.');
console.error('[APP] Connection error:', error);
}
};

return (

Select a Device
{devices.length > 0 ? (
item.address}
renderItem={({ item }) => (
connectAndSendATZ(item)}
>
{item.name || 'Unknown Device'}
{item.address}

)}
/>
) : (
No paired devices
)}
Response: {response}

);
};

const styles = StyleSheet.create({
container: {
flex: 1,
padding: 20,
backgroundColor: '#fff'
},
title: {
fontSize: 24,
marginBottom: 20
},
deviceItem: {
padding: 10,
borderBottomWidth: 1,
borderBottomColor: '#ccc'
},
deviceName: {
fontSize: 18,
fontWeight: 'bold'
},
response: {
marginTop: 20,
fontSize: 16
},
});

export default App;



Подробнее здесь: https://stackoverflow.com/questions/795 ... th-classic
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Соединение OBD2 с использованием Bluetooth-Classic
    Anonymous » » в форуме Android
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Как реализовать печать через POS-терминал Bluetooth Classic с использованием SPP и Protobuf в .NET Maui?
    Anonymous » » в форуме C#
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • PySerial связь с USB-интерфейсом OBD2
    Anonymous » » в форуме Python
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Как надежно обнаружить конкретное USB -устройство (сканер Ancel obd2) в Python с помощью pyusb?
    Anonymous » » в форуме Python
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Как создать приложение, подобное Bridyfy App, например, используя Ble и Bluetooth Classic? Проблема в том, что мне нужно
    Anonymous » » в форуме Android
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Android»