我有一台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) 我正在尝试遵循需要安装 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
我正在用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) 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) 我已经在 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 程序,它可以使用 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 文档,并认为这应该没有问题。请让我知道我在这方面做错了什么。
蒂亚!
我正在为网络设备编写客户端,使用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)
当使用 …
我有一个客户显示器,它连接到串行端口。为此,我正在使用 Windows 机器。
我想发送Ctrl+L来清除客户显示的显示,但我找不到对我有帮助的解决方案。基本上我希望Ctrl将来发送+'任何命令'。
在命令提示符中,我可以使用“ Ctrl+ L”清除现有显示并显示文本。以下是在提示符中显示的命令
echo ^LDisplay me > COMX // ^L is actually CTRL + L
Run Code Online (Sandbox Code Playgroud)
以上将输出为,
清除显示。
显示“显示我”
现在我正在尝试使用 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'
我将不胜感激任何建议、改进和帮助解决这个问题。谢谢。
我通过 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新手,我正在使用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 时,我只想读取传入的十六进制值
pyserial ×10
python ×9
serial-port ×4
python-2.7 ×2
python-3.x ×2
terminal ×2
ansi-escape ×1
arduino ×1
eol ×1
hex ×1
macos ×1
pip ×1
ubuntu ×1
usb ×1
windows ×1