首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python ()在pySerial解释器中运行良好,但在Python脚本中不起作用

Python ()在pySerial解释器中运行良好,但在Python脚本中不起作用
EN

Stack Overflow用户
提问于 2015-01-28 20:24:51
回答 1查看 6.2K关注 0票数 5

最近,我正在尝试在Arduino上做一种“灯光控制”。我使用Raspberry Pi通过串口(USB线)发送控制消息,.Here是Arduino代码:

代码语言:javascript
运行
复制
int redled = 12;
int whiteled = 48;

void setup()
{
    Serial.begin(9600);
    pinMode(redled,OUTPUT);
    pinMode(whiteled,OUTPUT);
}

void loop()
{
    if(Serial.available())
    {
        char cmd = Serial.read();
        switch(cmd)
        {
            case'r':
            digitalWrite(redled,HIGH);
            delay(2000);
            digitalWrite(redled,LOW);
            break;

            case'w':
            digitalWrite(whiteled,HIGH);
            delay(2000);
            digitalWrite(whiteled,LOW);
            break;
        }
    }
    else
    {
        Serial.println("hello pi");
        delay(1000);
    }

}

在那之后,我使用Python解释器中的pySerial来控制引脚,一切都很正常。下面是一段解释器的输出:

代码语言:javascript
运行
复制
Python 2.7.3 (default, Mar 18 2014, 05:13:23)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import serial
>>> ser = serial.Serial('/dev/ttyACM0',9600)
>>> x = ser.read(10)
>>> print 'x = ',x
x =  hellhello
>>> ser.write('w') #white led turn on and off
1
>>> ser.close()
>>>

一切都很好,而且led确实有开有关,所以我决定写一个简单的Python脚本来做同样的事情:

代码语言:javascript
运行
复制
import serial
import time
ser = serial.Serial('/dev/ttyACM0',9600)
x = ser.read(10)
print 'x = ',x

time.sleep(2)
ser.write('w')

ser.close()

以下是执行命令和结果:

代码语言:javascript
运行
复制
pi@raspberrypi ~ $ python serialtest.py
x =  helello pi

它只显示了Arduino中的字符串,但根本没有led指示灯打开。看起来一切都很好,所以我不知道问题出在哪里。我已经搜索了一些文章,并在"ser.write()“之前添加了"time.sleep(2)”,但它仍然不能工作。我非常感谢任何人的帮助,非常感谢!

更新:我让控制器发送回它正在接收的数据,当我运行脚本时,它看起来没有接收到任何东西,但当我从解释器发送数据时,它却接收到了所有数据。arduino代码的代码现在如下所示:

代码语言:javascript
运行
复制
int redled = 12;
int whiteled = 48;

void setup()
{
    Serial.begin(9600);
    pinMode(redled,OUTPUT);
    pinMode(whiteled,OUTPUT);
}

void loop()
{
    if(Serial.available())
    {
        char cmd = Serial.read();
        switch(cmd)
        {
            case'r':
            digitalWrite(redled,HIGH);
            delay(2000);
            digitalWrite(redled,LOW);
            Serial.println("Cmd received");
            break;

            case'w':
            digitalWrite(whiteled,HIGH);
            delay(2000);
            digitalWrite(whiteled,LOW);
            Serial.println("Cmd received");
            break;
        }
    }   
}
EN

回答 1

Stack Overflow用户

发布于 2016-07-21 12:54:59

问题是启动端口需要一些时间。在ser = serial.Serial()之后立即添加5秒的睡眠

代码语言:javascript
运行
复制
time.sleep(5)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28192190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档