标签: pyserial

如何构建和发送十六进制命令到电视

我有一台NEC PX-42VM5HA等离子电视,我试图用连接的电脑控制.我有数据表,显示控制电视和协议信息的所有代码.我不确定如何在python中构建正确的数据结构来发送HEX控制代码.以下是电源控制代码和通信协议.

Communication Protocol:
    Interface: RS-232C
    Communication: Asynchronous
    Baud Rate: 9600
    Data Length: 8bits
    Parity: Odd
    Stop Bit: 1bit
    Communication Code: Hex

Power Control Codes
    ON          9FH 80H 60H 4EH 00H CDH
    OFF         9FH 80H 60H 4FH 00H CEH
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止的代码:

import time
import serial

ser = serial.Serial(
    port='COM1',
    baudrate=9600,
    parity=serial.PARITY_ODD,
    stopbits=serial.STOPBITS_ONE,
    bytesize=serial.EIGHTBITS
)

ser.close()
ser.open()
ser.isOpen()

ON=bytearray([0x9FH,0x80H,0x60H,0x4EH,0x00H,0xCDH])
OFF=bytearray([0x9FH,0x80H,0x60H,0x4FH,0x00H,0xCEH])

ser.write(OFF)
time.sleep(30)
ser.write(ON)
ser.close()
Run Code Online (Sandbox Code Playgroud)

python serial-port pyserial

2
推荐指数
1
解决办法
7382
查看次数

解压安装文件夹失败

我正在尝试遵循需要安装 pySerial 的 Adafruit 教程。我正在运行 mac 10.8 并在尝试解压缩安装文件夹时遇到此错误。我转到放置文件的目录并键入:

    tar -xzf pyserial-2.6.tar.gz
Run Code Online (Sandbox Code Playgroud)

然后终端打印:

    tar: Error opening archive: Failed to open 'pyserial-2.6.tar.gz'
Run Code Online (Sandbox Code Playgroud)

我似乎无法找到我可能做错了什么,所以任何建议将不胜感激。

对于那些寻找教程的人,可以在这里找到链接:http : //learn.adafruit.com/arduino-lesson-17-email-sending-movement-detector/installing-python-and-pyserial

python macos terminal pyserial

2
推荐指数
1
解决办法
1万
查看次数

从Arduino项目中读取串行数据(pySerial)

我正在用Raspberry pi和Arduino屏蔽它做一个测试项目(Alamode).我已经开始基本尝试在pySerial链接上准备好详细信息,只是为了看到我在继续下一步之前得到了正确的输出,

不幸的是,它并没有像我跳过的那样顺利.

该项目编译得恰到好处的Arduino,当看到串行监视器时,我可以看到输出正常,然后 - 一旦我启动pySerial脚本,我开始得到丢失的字符,数字和停止脚本(声称串行链接没有响应).

串行链接很好,我已经多次确认,串口监视器继续向我显示实时数据.

但由于某种原因,似乎python脚本无法与串行输出"时间"或"同步",因此它会随机剪切字母和字符.

我已经尝试过更改延迟(给它更多时间)或改变波特率,这似乎没有帮助,我离放弃并检查替代解决方案更近了一步.

这是基本的Arduino代码

// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain

#include "DHT.h"

#define DHTPIN 2     // what pin we're connected to

// Uncomment whatever type you're using!
#define DHTTYPE DHT11   // DHT 11 
//#define DHTTYPE DHT22   // DHT 22  (AM2302)
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

// Connect pin 1 (on the left) of the sensor to +5V
// NOTE: If using a board …
Run Code Online (Sandbox Code Playgroud)

python arduino pyserial

2
推荐指数
1
解决办法
1万
查看次数

如何修复TypeError:python 3.4,pyserial 2.7虚拟串口需要一个整数

EDITED

你好程序员社区,
我在Python 3.4中处理pyserial有一些问题我首先没有串口,所以我用"Eltima Software的虚拟串口驱动7.2"成对创建虚拟串口,这意味着我可以尝试从这些端口发送和接收数据,在我的情况下我只创建连接到COM2的COM1,然后我安装了HW组的Hercules SETUP实用程序来监控这些串口,

所以理论上如果我在PYTHON中发送(写入)数据我可以在HERCULES中看到它,因为这个链接显示https://www.youtube.com/watch?v=DItyttmpRtY

我试图创建自己的代码

def mInitizalise():
 set_ser = serial.Serial(port="COM1", baudrate=9600, 
                         parity = serial.PARITY_NONE,
                         stopbits=serial.STOPBITS_ONE,
                         bytesize = serial.EIGHTBITS,
                         timeout=1)
 set_ser.close()
 set_ser.open()
 if set_ser.isOpen():
     print ('Open: ' + set_ser.portstr)
     temp = input('Type what you want to send, hit enter:\r\n')
     set_ser.write(temp)
 set_ser.close()
Run Code Online (Sandbox Code Playgroud)

买有错误

>>> 
>>> Open: COM1
Type what you want to send, hit enter:
hello
Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python34\lib\idlelib\run.py", line 121, in main
    seq, request = rpc.request_queue.get(block=True, timeout=0.05)
  File "C:\Python34\lib\queue.py", …
Run Code Online (Sandbox Code Playgroud)

python usb serial-port pyserial python-2.7

2
推荐指数
1
解决办法
5225
查看次数

Python导入错误:没有名为serial的模块

我已经在 DELL LATITUDE E4300 64 位的 Ubuntu 12.4 上安装了 Python 2.7.5 并运行:

sudo pip install pyserial
Run Code Online (Sandbox Code Playgroud)

尽管如此,运行时:

sudo python main.py 
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息:

Traceback (most recent call last):
  File "main.py", line 4, in <module>
    from mySerial import *
  File "/home/oscar/ath10k/tools/sanity_test/src/mySerial.py", line 6, in <module>
    import serial
ImportError: No module named serial
Run Code Online (Sandbox Code Playgroud)

我查看了其他帖子,但没有一个可以帮助我解决这个问题。我不知道还能做什么我也跑了:

sudo -H pip install pyserial
Run Code Online (Sandbox Code Playgroud)

sudo pip install pyserial --upgrade
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激。

亲切的问候。

奥斯卡.

python ubuntu serial-port pip pyserial

2
推荐指数
1
解决办法
2万
查看次数

PySerial 客户端无法写入数据

我正在尝试编写一个 python 程序,它可以使用 PySerial 模块通过串行接口进行通信,如下所示:

import serial
if __name__ == '__main__':
    port = "/dev/tnt0"
    ser = serial.Serial(port, 38400)
    print ser.name
    print ser.isOpen()
    x = ser.write('hello')
    ser.close()
    print "Done!"
Run Code Online (Sandbox Code Playgroud)

但是,如果我执行上述操作,则会出现以下错误:

/dev/tnt0
True
Traceback (most recent call last):
File "/home/root/nested/test.py", line 15, in <module>
x = ser.write('hello')
File "/usr/local/lib/python2.7/dist-packages/serial/serialposix.py", line 518, in write
raise SerialException('write failed: %s' % (v,))
serial.serialutil.SerialException: write failed: [Errno 22] Invalid argument
Run Code Online (Sandbox Code Playgroud)

我参考了 pyserial 文档,并认为这应该没有问题。请让我知道我在这方面做错了什么。
蒂亚!

python pyserial python-2.7

2
推荐指数
1
解决办法
2030
查看次数

转义序列中断pyserial客户端

我正在为网络设备编写客户端,使用pyserial该客户端在登录设备后并在设备上收到提示之前会挂起几秒钟。在行上跟踪字节,我看到以下转义序列是造成延迟的原因:

0003a0  73 65 20 6c 65 76 65 6c  0d 0a 0d 1b 5b 39 39 39       |se level....[999|
0003b0  39 42 0d 1b 5b 39 39 39  39 42 1b 5a 20 20 1b 5b       |9B..[9999B.Z  .[|
0003c0  36 6e 0d 0d 0d 0d 5b 61  64 6d 69 6e 40 73 77 69       |6n....[admin@swi|
0003d0  74 63 68 5d 20 3e 20 20  20 20 20 20 20 20 20 20       |tch] >          |
Run Code Online (Sandbox Code Playgroud)

当使用 …

python terminal serial-port ansi-escape pyserial

2
推荐指数
1
解决办法
367
查看次数

发送 CTRL+ L 的 Python 串行命令

我有一个客户显示器,它连接到串行端口。为此,我正在使用 Windows 机器。

图片

我想发送Ctrl+L来清除客户显示的显示,但我找不到对我有帮助的解决方案。基本上我希望Ctrl将来发送+'任何命令'。

在命令提示符中,我可以使用“ Ctrl+ L”清除现有显示并显示文本。以下是在提示符中显示的命令

echo ^LDisplay me > COMX // ^L is actually CTRL + L 
Run Code Online (Sandbox Code Playgroud)

以上将输出为,

  1. 清除显示。

  2. 显示“显示我”

现在我正在尝试使用 Python 串行连接器来实​​现相同的目的。

import serial
ser = Serial ('COM5',timeout=2)
ser.write("\x0C") # equivalent to ctrl+L
Run Code Online (Sandbox Code Playgroud)

这根本行不通。我收到错误为`

串行连接异常:不支持unicode字符串,请编码为字节:'\x03'

但是,如果我对普通文本尝试以下操作,则效果很好,

ser.write("Display me".encode()
Run Code Online (Sandbox Code Playgroud)

这会在客户显示屏中显示“显示我”。

我尝试使用,ser.write("\x0C".encode())但没有输出。

我得到错误

串行连接异常:不支持unicode字符串,请编码为字节:'\x1fc\x00'

我将不胜感激任何建议、改进和帮助解决这个问题。谢谢。

python windows pyserial python-3.x

2
推荐指数
1
解决办法
2137
查看次数

Python 串行 (pySerial) 使用 EOL \r 而不是 \n 读取行

我通过 RS232 电缆与 SR830 锁定放大器进行通信。读取数据时如下代码:

import serial

def main():
    ser = serial.Serial(
        port='COM6',
        baudrate=19200,
        parity=serial.PARITY_NONE,
        stopbits=serial.STOPBITS_ONE,
        bytesize=serial.EIGHTBITS)
    ser.timeout=1
    ser.write("OUTP? 1 \r\n".encode()) #Asks the Lock-in for x-value
    ser.write("++read\r\n".encode())
    x=ser.readline()
    print (x)
if __name__ == '__main__': main()
Run Code Online (Sandbox Code Playgroud)

我得到一个字节字符串,如b'-3.7486e-008\r'. 但是该ser.readline()函数无法将 \r 识别为 EOL。所以我每次读取数据都要等待超时,这样会很麻烦,因为我想尽快取很多点。而且数字的长度变化很大,所以我不能只使用ser.read(12)example。我尝试过使用 io.TextIOWrapper 但我不清楚如何实现它。这是我的尝试:

import serial
import io
def main():
    ser = serial.Serial(
        port='COM6',
        baudrate=19200,
        parity=serial.PARITY_NONE,
        stopbits=serial.STOPBITS_ONE,
        bytesize=serial.EIGHTBITS)
    ser.timeout=1
    sio = io.TextIOWrapper(io.BufferedRWPair(ser, ser))
    sio.write("OUTP? 1 \r\n") #Asks the Lock-in for x-value
    sio.write("++read\r\n")
    x=sio.readline()
    print (x)
if …
Run Code Online (Sandbox Code Playgroud)

python eol carriage-return pyserial python-3.x

2
推荐指数
2
解决办法
2万
查看次数

pySerial从MCU读取十六进制值

我是Python新手,我正在使用2.7和spyder

我有一个 anduino 风格的板运行这个:

void setup() {
  Serial1.begin(115200);
}

void loop() {
  Serial1.write(0x80);
}
Run Code Online (Sandbox Code Playgroud)

在我的笔记本电脑上,我无法读取传入的数据,也无法将其分配给变量:

# -*- coding: utf-8 -*-
import serial
print (serial.__version__)
#3.4
ser = serial.Serial(
    port='/dev/ttyUSB1',
    baudrate=115200,
    parity=serial.PARITY_NONE,
    stopbits=serial.STOPBITS_ONE,
    bytesize=serial.EIGHTBITS,
    timeout = None
    #timeout = 1
)

while 1:
    print ser.read()
    a = ser.read()
    print a
Run Code Online (Sandbox Code Playgroud)

我真的不明白我做错了什么,当我尝试将 ser.read() 分配给“a”spyder crash 时,我只想读取传入的十六进制值

hex pyserial

2
推荐指数
1
解决办法
2万
查看次数