pySerial + Arduino +热敏打印机:从python发送/打印字符串时出现问题

时间:2019-03-09 12:17:36

标签: python-3.x arduino serial-port pyserial thermal-printer

我正在做一个项目,打算从python3发送一些格式化的字符串(如下所示):

Helen|8|You are influenced by Saturn.|9|You are a successful business man.;

特殊字符是Arduino的分隔符,用于解析字符串并根据我的要求以不同的方式打印它们。

这是Arduino Side上的解析器:

解析器[arduino]

void printFormattedData(String data) {
  int firstDelimatorIndex = data.indexOf('|');
  int secondDelimatorIndex = data.indexOf('|', firstDelimatorIndex + 1);
  int thirdDelimatorIndex = data.indexOf('|', secondDelimatorIndex + 1);
  int fourthDelimatorIndex = data.indexOf('|', thirdDelimatorIndex + 1);
  int firstColonIndex = data.indexOf(';');

  String firstName = data.substring(0, firstDelimatorIndex);
  //  Soul Urge / Heart Desire
  String soulUrgeNumber = data.substring(firstDelimatorIndex + 1, secondDelimatorIndex);
  String heartDesire = data.substring(secondDelimatorIndex + 1, thirdDelimatorIndex);
  // personality / inner dream
  String personalityNumber = data.substring(thirdDelimatorIndex + 1, fourthDelimatorIndex);
  String innerDreams = data.substring(fourthDelimatorIndex + 1, firstColonIndex);

  printer.setSize('L');
  printer.boldOn();
  printer.inverseOn();
  printer.println(firstName);
  printer.inverseOff();
  printer.boldOff();

  delay(1000);

  printer.setSize('M');
  printer.print("SOUL URGE NO.:");
  printer.print(soulUrgeNumber);
  printer.println(" ");
  printer.println("HEART DESIRE:");
  delay(1000);
  printer.setSize('S');
  printer.println(heartDesire);

  printer.feed(1);

  printer.setSize('M');
  printer.print("PERSONALITY NO.:");
  printer.print(personalityNumber);
  printer.println(" ");
  printer.println("INNER DREAMS:");
  delay(1000);
  printer.setSize('S');
  printer.println(innerDreams);
  printer.println("--------------------------------");
  //
  printer.feed(4);
  printer.setDefault();

  delay(1000);
  // Serial.write("next");
}

在Arduino循环中,我已经:

循环[arduino]

String content = "";
String oldContent = "";
char character;

void loop() {
  while (Serial.available()) {
    character =  Serial.read();
    content.concat(character);
  }
  // -------------------------------

  if (content != oldContent) {
    if (content.length() > 0 && content.charAt(content.length() - 1) == ';') {
      // Serial.println(content);
      printFormattedData(content); // this is the parser 
      content = "";
    }
    oldContent = content;
  }
}

如果我只是打开串行端口并粘贴行:

Helen|8|You are influenced by Saturn.|9|You are a successful business man.;

打印正确

但是,如果我是从python发送的,它将丢失数据并打印不完整且怪异,有时甚至无法打印。

这是python代码:

串行发件人[python]

import serial
import time
try:
    ser = serial.Serial(
        port='/dev/tty.usbserial-AI05HDSG',
        baudrate=9600,
        parity=serial.PARITY_NONE,
        stopbits=serial.STOPBITS_ONE,
        bytesize=serial.EIGHTBITS,
        timeout=10
    )
    # print ("Serial opened")
    ser.write('Helen|8|You are influenced by Saturn.|9|You are a successful business man.;'.encode('utf-8'))
    time.sleep(6)
    # print(">>data sent")
except e:
    print(e)
    pass
finally:
    ser.close()
    pass

# print("Serial closed")

有人可以建议这里发生了什么,并阐明了如何正确进行操作吗? 任何帮助表示赞赏。

最佳 达塔:)

0 个答案:

没有答案