查看完整版本: (以解決)Raspberry pi Python serial(RS232傳送無回應)
頁: [1]

a7813195 發表於 2017-8-31 11:49 PM

(以解決)Raspberry pi Python serial(RS232傳送無回應)

本帖最後由 a7813195 於 2017-9-4 05:02 PM 編輯

各位大大好,最近要使用Raspberry pi使用serial去控制周邊設備,但由於Raspberry pi本身RX TX已有使用,但我也根據網路上的教學關閉了(如圖一)

圖(一)
接線是Raspberry pi2上的3.3V、GND、RXD、TXD接上PSU-ONECOM模組(TTL To RS232)的5V、GND、RXD、TXD,之後從模組上的9 Pin接腳將RXD、TXD、GND拉出與PC上的USB To RS232的RXD、TXD、GND相連接(RXD與TXD連,TXD與RXD連,GND與GND連)

圖二、PSU-ONECOM模組(RS232紅色為RXD,藍色為TXD,黑色為GND)


圖三、Raspberry pi2接線





之後在PC部分使用測試軟體去做測試


圖四、RS232測試軟體

在Raspberry pi2上使用Python語言撰寫,程式如下
import serial
import time
ser = serial.Serial('dev/ttyAMA0',9600,timeout=1)
print(ser.name)


while True:
  str = ser.readlines()
  print(str)
  time.sleep(1)
不過之後得到的結果是如此

圖五、RS232測試軟體(僅看到傳輸過去但無回應)


圖六、Raspberry pi接收數據(可看到接收的數據都是空的)


如果程式部分有錯請各位指導,今天才學python語言不懂的地方用罵的也沒關係。原先是要使用Pi4J函式庫去控制RXTX但是由於函示庫不了解所以先使用python去測試看看,想說先測試確定可以傳送數據之後在回去使用Pi4J函示庫。但目前怎麼樣都無法相互通訊,所以想問各位先進大大,我這些步驟上是有哪些錯誤部分嗎?找了好幾天了都沒什麼解決。



...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><div></div>

a7813195 發表於 2017-9-1 03:14 AM

終於找到原因了,根據"Raspberry Pi:透過序列埠登入系統"內提到Raspberry pi的TXD要連接到模組的RXD,而Raspberry pi的RXD要連接到模組的TXD,我想應該這應該是模組跟Raspberry pi相互的通訊關係吧!!!

a7813195 發表於 2017-9-1 04:03 PM

不過我要接收的資料是0x02,0x30,0x30但是實際上傳出的資料(HEX)為ASCII To HEX,我有試著將網路上所說的ASCII轉HEX但是傳出來還是一樣的結果。


longbest 發表於 2017-9-4 12:09 AM

一般來說 str = ser.readlines() 應該改用 str = ser.readline()

不過這兩個方法都需要接收到 \n 換行字元才會正常執行,因為都沒接收到而你有用到 timeout 參數所以就 timeout 時間到而放棄讀取。

你用的串口測試工具我沒用過,但直接看 HEX 與 ASCII 顯示的內容也剛好沒有換行字元。基本上工具軟體應該可以調整設定或手動輸入讓送出資料加上換行字元

a7813195 發表於 2017-9-4 04:57 PM

本帖最後由 a7813195 於 2017-9-4 05:01 PM 編輯

大大您好,這是我後來調整測試的程式碼,已經解決我要的問題了!#!/usr/bin/env python
import serial
import time
import struct
ser = serial.Serial(
  port='/dev/ttyAMA0',
  baudrate=2400 ,
  parity=serial.PARITY_NONE,
  stopbits=serial.STOPBITS_ONE,
  bytesize=serial.EIGHTBITS,
  timeout=1
)
print(ser.name)


num = int(0)
a = num/1000
b = num%1000/100
c = num%1000%100/10
d = num%1000%100%10
while True:
        if d >...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><br><br><br><br><br><div></div>
頁: [1]