[英]Serial communication with Raspberry pi
我們如何使用帶有python腳本的raspberry pi進行串行通信,以便將數據發送/接收到我的筆記本電腦? 如果是,我們可以使用RS232電纜直接連接到樹莓派上的TX / RX端口嗎? 如果是,必須從RS232電纜使用哪些引腳? 如果有人可以發布示例python腳本,那將是完全有用的嗎?
由於我的第一個目標是向/從樹莓派發送/接收數據到筆記本電腦,我在兩端使用RS232到USB線連接到筆記本電腦以及樹莓派。
適用於RS-232
1)下載Putty 。
2)購買串行端口RS232到TTL轉換器模塊和用於PC的RS-232串行電纜。
3)按照此鏈接上與微控制器或其他外設連接的步驟進行操作。 實際上閱讀整個事情是為了更好地理解。
4)用3.3V(引腳1)或5.0V(引腳2)為轉換器模塊供電,將模塊的Rxd引腳連接到Rpi上的Rxd(引腳8),將Txd引腳連接到Rpi上的Txd(引腳10)。
5)將RS-232(從PC)電纜連接到轉換器模塊
現在您已准備好在Python中進行一些編碼。 但在此之前,請確保您擁有名為serial for python的庫來創建通信。 您可以通過鍵入sudo apt-get install python-serial輕松地通過終端獲取它。 此外,您將看到代碼中的波特率為7200.根據同步情況,它可能會更少或更多。 還要確保putty和COM1中的波特率相同,這是RS-232連接到PC的端口。 您可以在Windows中從設備管理器進行檢查和設置。 順便說一下, 超時是您收到的每條消息之間的時間間隔。
如果您無法從空閑運行代碼(某些庫發生這種情況),請在終端中執行。 為此,轉到保存python代碼並鍵入python name.py的文件夾。
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 = readlıneCR(port)
port.write("I typed: " + repr(rcv))
print(rcv)
適用於USB串口轉PC
你有兩個選擇
首先,您可以購買用於RS-232 / RS-485的USB加密狗,這樣就不會使用GPIO引腳。 但最好是為所有鼠標,鍵盤和加密狗安裝一個USB集線器。
第二個也更容易,您可以購買FTDI USB轉TTL轉換器並使用GPIO與Rpi進行串行通信。 這個代碼與上面的代碼完全相同。 連接這很容易。
模塊 - Rpi
Txd - > Txd
Rxd - > Rxd
Gnd ---> Gnd
Raspberry Pi的串口使用3.3v邏輯; RS232使用12v,因此使用這些引腳需要電平轉換器,因此您無法直接使用RS232。
使用PySerial模塊( http://pyserial.sourceforge.net )在Python中進行串行接口,發送和接收數據非常簡單。 文檔中有一些示例,但主要是發送數據:
import serial
port = serial.Serial(portname, baudrate, timeout)
port.write("message to send")
port.close()
這取決於您對數據的處理方式以及您收到的用於確定接收數據的最佳方式的數據類型,但這是一個非常簡單的示例:
import serial
port = serial.Serial(portname, baudrate, timeout)
data = port.read(numberofbytes)
print data
這只是等待,直到檢索到指定的字節數或達到超時值。
您可以使用port.inWaiting()返回緩沖區中當前的字節數。
您是否嘗試向Raspberry Pi發出命令? (就像一個控制台?)我建議使用簡單的3.3V FTDI電纜。 你可以從Digikey或Sparkfun獲得它們。 注意:Raspberry Pi運行在3.3V,因此您必須確保連接到它的任何東西都運行3.3V或具有電平轉換器。 在此處查看有關電平移位器的更多信息。 (進入邏輯電壓電平部分)
首先,您需要確保Raspbian已經發布了串行控制台。 您可以使用此處的腳本執行此操作 。
如果您對與其他設備通信更感興趣,那么以下內容可能適合您:
你有Arduino嗎? 您可以通過將此草圖放在Arduino上來運行簡單的測試:
#define SERIAL_BAUD 115200
void setup() {
//Init serial connection
Serial.begin(SERIAL_BAUD);
Serial.setTimeout(1);
}
void loop() {
if ( Serial.available() ) {
byte type = Serial.read();
Serial.write(type);
}
}
並使用下圖連接它:
注意 :確保不要將USB電纜連接到Arduino。 它將由Raspberry Pi提供動力。
然后,您可以安裝並運行screen
。 屏幕是連接到串行端口的簡單方法。
apt-get install screen
然后運行以下命令:
screen /dev/ttyAMA0 115200
屏幕將顯示空白。 但是,當你開始輸入時,你會注意到你正在寫的字符被循環回到你的終端。
注意 :如果屏幕仍然是空白,則應仔細檢查連接(Arduino上的電源檢查是一件好事)。
如果有疑問,你可以在這里看到我的整個例子。
你應該為串行驅動程序安裝python庫。 你不能直接使用rs232,而是可以在rx(gpio15)tx(gpio 14)引腳和你的usb到串行轉換器之間使用max232芯片。 或者您可以使用usb來連接adafruit的串行電纜。 以下是設置鏈接: http : //learn.adafruit.com/adafruits-raspberry-pi-lesson-5-using-a-console-cable/overview
Raspberry pi中的串行通信。
串行通信有很多選擇
並循環回txd和rxd引腳並檢查是否收到發送消息。
如果你熟悉java安裝pi4j並在示例文件夾中有一個示例程序,使用終端編譯和運行。 並檢查輸出。
如果您使用RS232和Max232進行連接,請注意使用3.3伏而不是5或12伏。 ,它可能會燃燒你的電路板。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.