Arduinoを使用して温度を出力しています&センサーからのHumデータ。pySerialを使用してPythonを実行しているPCが読み取ります。データは正しく読み込まれていますが、CR/LFと予期しない文字を削除したいと思います。このサイトで見つけた1つのアイデアは、lstripまたはlreplaceを使うことでしたが、正しく動作していないようです。文字の1つのインスタンスを削除しますが、行を繰り返したり、小さなループを作っても効果はありません。Python(pySerial):文字列からCR、LF、または予期しない文字を削除/削除できません。
これは、どのようなプログラムプリント(私は不要な文字をカットしようとした後にボトムラインが文字列である)である:
[B '\ n' は、B '\ rを\ n' は、B '読み取りセンサー:OK \ r \ n'、b'Hum40.00 \ r \ n '、b'TempC18.00 \ r \ n']
["b'Hum40.00 \ r \ n '" 、 "b'TempC18.00 \ rを\ n 'は]"]
それは読むこと私が目指しています:
[Hum40.00、TempC18.00]
Iメッセージ後できれば微調整することができます。
これはコードです:
import serial as ser
import time
count = 0
msgArray = []
saveMsg = []
ser = ser.Serial('COM16', 9600, timeout=1, parity='N', stopbits=1, bytesize=8, xonxoff=0) # Setting up and opening COM port
ser.close()
ser.open()
def readSerial(): #reads a whole line from COM port
serLine = ser.readline()
return serLine
def sveMsgCut(): #saves the buffer as a message then cuts message
cutMsg = saveMsg
words = cutMsg.split(',')
return words
while True: #main program
dataSerial = readSerial()
if count < 5: #reads COM port 5 times and passes along to buffer msgArray
msgArray.append(dataSerial)
count = count+1
else:
print(msgArray) #~display msgArray
saveMsg = str(msgArray) #convert to string
splitMsg = saveMsg.split(',') #splits string (csv)
phrase = splitMsg[3:5] #cuts out excess either side of Temp & Hum/
phraseString = str(phrase)
phraseNew = phraseString.lstrip("/n") #an attempts ot remove CR
print(phraseNew) #~print adjusted string
saveMsg = msgArray
count = 0 #resets msgArray and counter
msgArray = []
time.sleep(5)
それは私が見逃しているが、いくつかのさまざまなアイデアを試してみましたし、余分な文字を削除することができないというシンプルなものかもしれので、私はプログラミング、特にPythonのにかなり新しいです。
クイックフィードバックをいただきありがとうございます。私はあなたの最初の例をCMDで試してみましたが、それは動作することがわかりましたが、プログラムにはまだ効果がありません。私は今、物事を簡素化するために、リストから1つの要素を扱い、湿度の読みをクリアしてみようとしています。 – BackScatter
どのような環境を使用していますか?これはIDEの問題かもしれません。 – lps
私はWindowsでPyCharmを使用しています。 Anacondaもインストールされています。私はCMDプロンプトでもプログラムを実行しようとしましたが、チェックする必要はありますが、同じ応答があったと思います。 – BackScatter