質問編集履歴

1

プログラムに間違いがありました。

2021/11/16 04:55

投稿

raspypy
raspypy

スコア247

test CHANGED
File without changes
test CHANGED
@@ -2,180 +2,8 @@
2
2
 
3
3
 
4
4
 
5
- ①Sensorデータ取得スクリプト(SPI_Class.py)
6
-
7
- ②①のモジュールを読み込むスクリプト(test.py)
5
+ classモジュールを作成して、他のスクリプトから読み込む方法について
8
-
9
-
10
-
11
- このように、test.pyにおいて、SPI_Classをインポートするプログラムを作成していますが、
12
-
13
- センサーの値を取得することができずに困っています。
14
-
15
-
16
-
17
- 次のプログラムを実行すると、このように変数dataが未定義とでてしまいます。
18
-
19
- SPI_Class.py単独では問題なく動作するのですが、何が原因か分からず困っております。
20
-
21
- ```text
22
-
23
- Traceback (most recent call last):
24
-
25
- File "./Influx.py", line 38, in <module>
26
-
27
- ambient.convertVolts()
28
-
29
- File "/home/pi/dev/SPI_Class.py", line 31, in convertVolts
30
-
31
- volts = (data * 3.3) / float(1024)
32
-
33
- NameError: name 'data' is not defined
34
-
35
- ```
36
6
 
37
7
 
38
8
 
39
9
  ##プログラム
40
-
41
- **SPI_Class**
42
-
43
- ```Python
44
-
45
- import time
46
-
47
- import sys
48
-
49
- import spidev
50
-
51
-
52
-
53
- class MCP3002:
54
-
55
- # コンストラクタ
56
-
57
- #spidevのインスタンスを渡す
58
-
59
- def __init__(self,spi):
60
-
61
- self.spi = spi
62
-
63
- self.spi.max_speed_hz = 100000 # MAX clock 1MHz
64
-
65
- self.spi.mode = 0b00 # Mode 00
66
-
67
-
68
-
69
- #A/D変換後のデジタル値(data)取得
70
-
71
- def readAdc(self):
72
-
73
- adc = self.spi.xfer2([0x68,0x00])
74
-
75
- data = (adc[0] * 256 + adc[1]) & 0x3ff
76
-
77
- return data
78
-
79
-
80
-
81
- def convertVolts(self):
82
-
83
- volts = (data * 3.3) / float(1024)
84
-
85
- volts = round(volts, 6)
86
-
87
- return volts
88
-
89
-
90
-
91
- def convertTemp(self):
92
-
93
- temp = (25 * volts)
94
-
95
- temp = round(temp,4)
96
-
97
- return temp
98
-
99
-
100
-
101
-
102
-
103
- if __name__ == '__main__':
104
-
105
- spi = spidev.SpiDev()
106
-
107
- spi.open(0,0)
108
-
109
- Sens = MCP3002(spi)
110
-
111
- try:
112
-
113
- data = Sens.readAdc()
114
-
115
- print("adc : {:8} ".format(data))
116
-
117
- volts = Sens.convertVolts()
118
-
119
- temp = Sens.convertTemp()
120
-
121
- print("volts: {:8.6f}".format(volts))
122
-
123
- print("temp : {:8.4f}".format(temp))
124
-
125
- except KeyboardInterrupt:
126
-
127
- spi.close()
128
-
129
- sys.exit(0)
130
-
131
- ```
132
-
133
- **test**
134
-
135
- **BME280_Classからのデータは読み込むことができます**
136
-
137
- ```python
138
-
139
- if __name__ == '__main__':
140
-
141
- spi = spidev.SpiDev()
142
-
143
- spi.open(0,0)
144
-
145
- bme = BME280_Class.BME280()
146
-
147
- bme.readData()
148
-
149
-
150
-
151
- ambient = SPI_Class.MCP3002(spi)
152
-
153
- ambient.readAdc()
154
-
155
- ambient.convertVolts()
156
-
157
- ambient.convertTemp()
158
-
159
- try:
160
-
161
- sdata = {
162
-
163
- "Temp": round(bme.getTemperature(), 2),
164
-
165
- "Hum": round(bme.getHumidity(), 2),
166
-
167
- "Press": round(bme.getPressure(), 2),
168
-
169
- "Ambient": round(ambient.convertTemp(), 2),
170
-
171
- }
172
-
173
- print(sdata)
174
-
175
- except KeyboardInterrupt:
176
-
177
- spi.close()
178
-
179
- sys.exit(0)
180
-
181
- ```