簡體   English   中英

從Raspberry Pi發送串行通信

[英]Sending serial communication from Raspberry pi

我正在使用Python程序將Raspberry Pi的串行數據發送到Arduino。 我正在運行Python 2.7.3。 該程序是:

import serial

ser = serial.Serial('/dev/ttyACM0', 115200)

ser.write(b'\x4c\xff\x46')

問題在於,如果這三行在程序中運行,似乎什么也不會發送。 但是,如果我在Python Shell中逐行運行它們,它們會正常工作。

另外,如果我打開了Arduino Serial Monitor,該程序也可以正常運行,而無需在外殼中逐行運行。

編輯添加:

似乎發送到Arduino會有一些延遲。 因此,當我在解釋性模式下運行代碼時,它可以工作,但是如果作為程序,則不能。 我認為是因為我在Windows計算機上嘗試了相同的程序。

import serial

ser = serial.Serial('COM8', 115200)

ser.write(b'\x4c\x20\x46')

如果我以解釋性模式運行程序,甚至在ser.write命令上帶有斷點的調試模式下運行程序,它都可以工作。 但是,如果不是作為程序運行,則不會。

編輯以添加更多:

事實證明,Arduino具有必須禁用的串行通信自動重置功能:

http://playground.arduino.cc/Main/DisablingAutoResetOnSerialConnection#.UwP_wfldV8E

http://forum.arduino.cc/index.php/topic,28723.0.html

我在RESET引腳和地面之間使用了一個220 uF電容器。 這樣可行。

很難被這樣的錯誤咬住! 它仍然很聰明。

嘗試這個。 如果您不能在空閑或其他狀態下運行它,請嘗試通過鍵入python name.py來嘗試終端。 我還建議您使用膩子檢查來自Rpi或從Rpi寫入的數據。

import serial
import time


def readlineCR(port):
    rv = ""
    while True:
    ch = port.read()
    rv += ch
    if ch == '\r' or ch == '':
         return rv


port = serial.Serial("/dev/ttyAMA0", baudrate = 7200, timeout = 2)

while True: 
     rcv = readlineCR(port)
     port.write("I typed: " + repr(rcv))
     print(rcv)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM