python - 与 arduino 代码交互的 Pyserial 无法正常工作

标签 python python-2.7 arduino pyserial

我开发了两个版本的代码来与 arduino 交互。版本 1:-

import urllib
import sys
from time import sleep
import serial
import time
ser = serial.Serial('COM4', 9600)
#ser.open()
while True:
    sock = urllib.urlopen('http://pro*******.com')
    htmlSource = sock.read()
    z = str(htmlSource)
    l = z[0] + z[1]
    sock.close()
    print l
    if l == 'On':
        counter = '1'
    else:
        counter = '0'
    ser.write(counter)

    time.sleep(4)
ser.close()
print "safe to close"

这个问题是当我关闭程序时,它一直在运行串行端口,所以如果我想再次使用它,请重新启动我的电脑。所以我开发了另一个版本来使用 keybordinterupt 但对于这个串行写入功能不起作用。我不知道我的代码有什么问题。有人可以帮我吗? 版本 2:

import urllib
import sys
from time import sleep
import serial
import time
ser = serial.Serial('COM4', 9600)
try:
    while True:
        sock = urllib.urlopen('http://pro*******.com')
        htmlSource = sock.read()
        z = str(htmlSource)
        l = z[0] + z[1]
        sock.close()
        print l
        print "Please enter CTL+C to stop"
        if l == 'On':
            ser.write('1')

        else:
            ser.write('0')

        time.sleep(4)

except KeyboardInterrupt:
    pass
ser.close()
print "safe to close"

最佳答案

使用类内部的代码并实例化该类并调用方法。

import urllib
import sys
from time import sleep
import serial
import time

class ArduinoSerial:

    def __init__(self, port, baudRate):
        self.ser = serial.Serial(port, baudRate)
        self.stop = False
        #self.ser.open()

    def run(self):
        while not self.stop:    
            sock = urllib.urlopen('http://pro*******.com')
            htmlSource = sock.read()
            z = str(htmlSource)
            l = z[0] + z[1]
            sock.close()
            print l
            if l == 'On':
                counter = '1'
            else:
                counter = '0'
            self.ser.write(counter)

            time.sleep(4)

    def stop(self):
        self.stop = True
        ser.close()
        print "safe to close"

arduinoSerial = ArduinoSerial('COM4', 9600)
try:
    arduinoSerial.run();
except KeyboardInterrupt:
    arduinoSerial.stop();
    print "Recieved Kill Command. Quitting"
    sys.exit(0)

# Just to be safe   
arduinoSerial.stop();

关于python - 与 arduino 代码交互的 Pyserial 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31778075/

相关文章:

android - 我可以使用模拟的 Android 环境测试 Arduino Mega ADK 吗?

python - 如何使用Ajax实现Progressbar以完成长的 celery 任务

python - 使用并行处理从多维数组中集成维度

python - openCv captureFromCam内存泄漏?

python - 如何在kivy中基于复选框隐藏TextBox

c++ - 我将如何在 C++ 中将函数作为参数传递

bluetooth - 用ESP32测量蓝牙连接力

python - AttributeError 'Nonetype' 对象没有属性。但我检查 Nonetype

python - python包的子包

python - jupyter notebook 中的进度条发疯了