質問編集履歴

1

公開できる内容に変更しました

2022/06/29 06:37

投稿

raspypy
raspypy

スコア247

test CHANGED
File without changes
test CHANGED
@@ -1,23 +1,10 @@
1
1
  ## やろうとしていること
2
2
  通信のプログラムをテストしています。
3
-
4
- 受信するデータは、
5
-  (-31, 9236, 8772, 'data=(4,26.99,54.80,988.1,0,1,0, 0.00)')
6
- (電波強度、ID、ID、データ)となっています。
7
3
 
8
4
  ↓のプログラムを使用してデータの受信テストを繰り返し行っていますが、
9
5
  問題なく受信できるときと、エラー(下記)が発生してしまう時があります。
10
6
  エラーが発生しているときと、問題なく受信できているときとの違いは、電波強度及びデータの中身の違いです。
11
7
 
12
- ↓のエラーの原因が分からず困っております。
13
- ```text
14
- data = lr.parse(line) # 'rssi(4bytes),pan id(4bytes),src id(4bytes),laglng=(12バイト,12バイト)\r\n', ペイロード34バイト
15
- File "/home/pi/dev/lora.py", line 50, in parse
16
- rssi = hex2i(data[0])
17
- File "/home/pi/dev/lora.py", line 49, in <lambda>
18
- hex2i = lambda x: int(x, 16) if int(x, 16) <= 0x7fff else ~ (0xffff - int(x, 16)) + 1
19
- ValueError: invalid literal for int() with base 16: b'\xc9\xc7\xa9Q'
20
- ```
21
8
 
22
9
 
23
10
  ## プログラム
@@ -27,61 +14,6 @@
27
14
 
28
15
  import serial
29
16
  import RPi.GPIO as GPIO
30
- import struct
31
- import time
32
-
33
- ResetPin = 5
34
-
35
- class LoRa():
36
- def __init__(self):
37
- GPIO.setmode(GPIO.BCM)
38
- GPIO.setwarnings(False)
39
- GPIO.setup(ResetPin, GPIO.OUT)
40
- GPIO.output(ResetPin,GPIO.HIGH)
41
-
42
- self.s = serial.Serial('/dev/serial0', 115200) # シリアルポートを115200kbps, 8bit, Non parity, 1 stop-bitでオープン
43
-
44
- def reset(self):
45
- GPIO.output(ResetPin,GPIO.LOW)
46
- time.sleep(0.1)
47
- GPIO.output(ResetPin,GPIO.HIGH)
48
-
49
- def open(self):
50
- self.s.open()
51
-
52
- def close(self):
53
- self.s.close()
54
-
55
- def readline(self, timeout = None):
56
- if timeout != None:
57
- self.s.close()
58
- self.s.timeout = timeout
59
- self.s.open()
60
- line = self.s.readline()
61
- if timeout != None:
62
- self.s.close()
63
- self.s.timeout = None
64
- self.s.open()
65
- return line
66
-
67
- def write(self, msg):
68
- self.s.write(msg.encode('utf-8'))
69
-
70
- def parse(self, line):
71
- fmt = '4s4s4s' + str(len(line) - 14) + 'sxx'
72
- data = struct.unpack(fmt, line)
73
- hex2i = lambda x: int(x, 16) if int(x, 16) <= 0x7fff else ~ (0xffff - int(x, 16)) + 1
74
- rssi = hex2i(data[0])
75
- panid = hex2i(data[1])
76
- srcid = hex2i(data[2])
77
- msg = data[3].decode('utf-8')
78
- return (rssi, panid, srcid, msg)
79
-
80
- def main():
81
- lr = LoRa()
82
- while True:
83
- data = lr.parse(lr.readline())
84
- print(data)
85
17
 
86
18
  if __name__ == "__main__":
87
19
  main()