##分からないこと
次のサイトに掲載されているソースコードを使おうとしていますが,
https://github.com/AmbientDataInc/LoRa-rssi-measure/blob/master/RPi3/lora.py
あらかじめソースコードの意味を理解しようとしています.
どうしても分からない部分があり,教えていただけると助かります.
##プログラム
python
1# ソフトシリアル経由でLoRaモジュールを読む 2 3import serial 4import RPi.GPIO as GPIO 5import struct 6import time 7 8ResetPin = 12 9 10class LoRa(): 11 def __init__(self): 12 GPIO.setmode(GPIO.BOARD) 13 GPIO.setwarnings(False) 14 GPIO.setup(ResetPin, GPIO.OUT) 15 GPIO.output(ResetPin, 1) 16 17 self.s = serial.Serial('/dev/serial0', 115200) # シリアルポートを115200kbps, 8bit, Non parity, 1 stop-bitでオープン 18 19 def reset(self): 20 GPIO.output(ResetPin, 0) 21 time.sleep(0.1) 22 GPIO.output(ResetPin, 1) 23 24 def open(self): 25 self.s.open() 26 27 def close(self): 28 self.s.close() 29 30 def readline(self, timeout = None): 31 if timeout != None: 32 self.s.close() 33 self.s.timeout = timeout 34 self.s.open() 35 line = self.s.readline() 36 if timeout != None: 37 self.s.close() 38 self.s.timeout = None 39 self.s.open() 40 return line 41 42 def write(self, msg): 43 self.s.write(msg.encode('utf-8')) 44 45 def parse(self, line): 46 fmt = '4s4s4s' + str(len(line) - 14) + 'sxx' 47 data = struct.unpack(fmt, line) 48 hex2i = lambda x: int(x, 16) if int(x, 16) <= 0x7fff else ~ (0xffff - int(x, 16)) + 1 49 rssi = hex2i(data[0]) 50 panid = hex2i(data[1]) 51 srcid = hex2i(data[2]) 52 msg = data[3].decode('utf-8') 53 return (rssi, panid, srcid, msg) 54 55def main(): 56 lr = LoRa() 57 while True: 58 data = lr.parse(lr.readline()) 59 print(data) 60 61if __name__ == "__main__": 62 main()
46行目
47行目において,フォーマット文字列 fmt に従い値 lineをパックして、文字列で返しているので,
そのフォーマットを指定しているのが46行目なのですが,'4s4s4s'と'sxx'の意味が分かりません.
48行目
変数xについてlambda式を定義していると思うのですが,lambda式の意味が理解できていません.
教えていただけると助かります.
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/26 14:45
2021/06/26 15:04 編集
2021/06/26 15:18
2021/06/26 15:24
2021/06/26 15:32
2021/06/26 15:40