Categorygithub.com/sergw3x/mertech_qr
repositorypackage
0.0.9
Repository: https://github.com/sergw3x/mertech_qr.git
Documentation: pkg.go.dev

# README

GoLang package for working with Mertech QR-Pay via serial port

Supported commands:

methods
Connect
Disconnect
ScreenClear
CheckFirmware
ShowPicOk
ShowPicFalse
EnableBluetooth
DisableBluetooth
ScreenOn
ScreenOff
ShowQr

usage

var err error

mertech := NewMertechQr(&serial.Config{
    Name:        "COM3",
    Baud:        SpeedBaud,         // 115200
    ReadTimeout: time.Second,
    Size:        DataBits,          // 8 byte
})

err = mertech.Connect()

bytes, err := mertech.ShowQr()

err = mertech.Disconnect()

Example use

package main

import (
	"fmt"
	"github.com/olekukonko/tablewriter"
	qr "github.com/sergw3x/mertech_qr"
	"go.bug.st/serial"
	"log"
	"os"
	"strconv"
	"time"
)

func main() {
	var err error

	ports, err := serial.GetPortsList() // show serial list 
	if err != nil {
		log.Fatal(err)
	}
	if len(ports) == 0 {
		log.Fatal("No serial ports found!")
	}

	table := tablewriter.NewWriter(os.Stdout)
	table.SetHeader([]string{"#", "Port"})
	for i, port := range ports {
		table.Append([]string{strconv.Itoa(i + 1), port})
	}
	table.Render() // show table

	portNum := 0

	fmt.Println("for exit enter 0")
	fmt.Print("Select serial port to connect: ")
	_, _ = fmt.Scan(&portNum)

	if portNum == 0 {
		fmt.Println("\rExit. Bye")
		os.Exit(0)
	}

	if portNum > len(ports) || portNum < 0 {
		fmt.Println("\rWrong port num. Bye")
		os.Exit(1)
	}

	serialName := ports[portNum-1]
	fmt.Printf("Selected: %s\n", serialName)

    // make new object
	m := qr.NewMertechQr(&qr.Config{
		Name:        ports[portNum-1],
		Baud:        qr.SpeedBaud, // 115200
		ReadTimeout: time.Second,
		Size:        qr.DataBits, // 8 byte
	})

    // try to connect
	if err = m.Connect(); err != nil {
		log.Fatal(err)
	}
	defer func(m *qr.MertechQr) { _ = m.Disconnect() }(m)

    // send text to device
	bytes, err := m.ShowQr("hello world")
	fmt.Printf("%s writed: %d", serialName, bytes)
}
  • you can build it for any platform (like arm raspberry pi) CGO_ENABLED=0 GOOS=linux GOARCH=arm go build -a -o ./tmp/serial_test tmp/serial.go

  • use serial.GetPortsList() for detect right serial

  • for linux like /dev/ttyACM0 or use /dev/serial/[by-id , by-path]/[id or path]

  • for win use names COM + num (COM3, COM4 etc.)