Skip to content

Epson TM-m30III connection issue #230

@LodeSmetss

Description

@LodeSmetss

Description

My application is unable to connect to my Epson TM-m30III printer.

The application fails on pritnerInstance.connect() and logs error [PrinterError: Failed to recover the printer.]
I have tried restarting the printer as described in the documentation, but the issue persists.

I am using the following code

import { memo } from 'react';
import { View, StyleSheet, Text, Pressable, PermissionsAndroid, Platform } from 'react-native';
import { DeviceInfo, Printer, usePrintersDiscovery } from 'react-native-esc-pos-printer';

import { FlatList } from 'react-native-gesture-handler';

export const PrinterNew = memo(() => {
const { start, printerError, isDiscovering, printers } =
usePrintersDiscovery();

async function requestPermissions() {
    if (Platform.OS === 'android') {
        await PermissionsAndroid.requestMultiple([
            PermissionsAndroid.PERMISSIONS.BLUETOOTH_CONNECT,
            PermissionsAndroid.PERMISSIONS.BLUETOOTH_SCAN,
            PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION, // Some devices require this
        ]);
    }
}

async function printTestSheet(printer: DeviceInfo) {
    console.log("Print test sheet")
    try {
        await requestPermissions();
        console.log("permissions granted");
        const printerInstance = new Printer({
            target: printer.target,
            deviceName: printer.deviceName,
        });

        await printerInstance.connect();
        console.log("printer connected");

        const res = await printerInstance.addQueueTask(async () => {
            await printerInstance.addText(`This is a test sheet`);
            await printerInstance.addFeedLine();

            await printerInstance.addCut();
            console.log("data added");

            await printerInstance.sendData();
            console.log("data sent");

            await printerInstance.disconnect();
            console.log("printer disconnected");

            return;
        })
        console.log("result: ", res);
    } catch (error: any) {
        console.error(error);
    }
}

return (
    <View style={styles.container}>
        <View style={styles.contentCotainer}>
            <Text>Discovery</Text>
        </View>
        <FlatList
            renderItem={({ item: printer }) =>
                <Pressable
                    onPress={() => printTestSheet(printer)}
                ><Text>{printer.deviceName} - {printer.deviceType}</Text></Pressable>}
            data={printers}
        />
        <Text>{isDiscovering ? "loading" : "done"}</Text>
        <View style={styles.contentCotainer}>
            <Pressable
                onPress={() => start()}
            >
                <Text>Start discovery</Text>
            </Pressable>

            {printerError ? (
                <Text style={styles.errorText}>{printerError.message}</Text>
            ) : null }
        </View>
    </View>
);

});

const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#fcf9f9',
alignItems: 'center',
justifyContent: 'center',
},

contentCotainer: {
    flex: 1,
    alignItems: 'center',
    justifyContent: 'center',
},

errorText: {
    color: 'red',
    fontSize: 16,
    marginTop: 20,
},

});

Steps to reproduce

  1. Startup Epson TM-m30III
  2. Put printer in pairing mode
  3. Press "Start discovery"
  4. Press the printer instance in the list to try and print a test sheet

react-native-esc-pos-printer version

4.4.3

React Native version

0.76.9

Platforms

Android, iOS

Workflow

Expo Dev Client

Architecture

Paper (Old Architecture)

Build type

Debug app & dev bundle

Device

Real device

Device model

Samsung galaxy a54 and Iphone 8

Acknowledgements

Yes

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions