環境
Raspberry Pi 3 B
python 3.7.2
Raspbian stretch
初めに
使っていたラズパイのデータが破損してしまったので最初から環境構築をしなくてはならなくなってしまいました。
質問内容
先ほどPyQt5をインストールし、動作確認テストを行いました。
↓動作確認用【GUI_test_1.py】
python
1 2import sys 3 4from PyQt5.QtWidgets import QWidget, QApplication 5 6 7class MyWindow(QWidget): # QWidgetクラスを使用します。 8 9 def __init__(self): 10 super().__init__() 11 self.title = 'ウィンドウだけだよウィンドウ' 12 self.width = 500 13 self.height = 400 14 self.initUI() 15 16 def initUI(self): 17 self.setWindowTitle(self.title) 18 self.setGeometry(0, 0, self.width, self.height) 19 self.show() 20 21 22 23 24 25if __name__ == "__main__": 26 app = QApplication(sys.argv) 27 gui = MyWindow() 28 sys.exit(app.exec_())
こちらはエラーなくGUIを作成することが出来ました。
次に、ラズパイのファイルデータが破損する前に行っていた「自動ドアの制御コード」を打ってみました。
↓自動ドアの制御コード【autodoor3.py】
python
1 2import sys 3from PyQt5.QtWidgets import * 4from PyQt5.QtGui import * 5from PyQt5.QtCore import * 6import subprocess 7import time 8import numpy as np 9import cv2 10import RPi.GPIO as GPIO 11 12 13Shoden_PIN=22 14 15Motor_PIN_1=24 16Motor_PIN_2=25 17 18Reed_PIN_1=17 19Reed_PIN_2=27 20 21GPIO.setmode(GPIO.BCM) 22GPIO.setup(Shoden_PIN, GPIO.IN) 23GPIO.setup(Reed_PIN_1, GPIO.IN) 24GPIO.setup(Reed_PIN_2, GPIO.IN) 25 26def setMotor(): 27 GPIO.setmode(GPIO.BCM) 28 GPIO.setup(Motor_PIN_1, GPIO.OUT) 29 GPIO.setup(Motor_PIN_2, GPIO.OUT) 30 31def Motor_Forward(): 32 GPIO.output(Motor_PIN_1, 1) 33 GPIO.output(Motor_PIN_2, 0) 34 35def Motor_Backward(): 36 GPIO.output(Motor_PIN_1, 0) 37 GPIO.output(Motor_PIN_2, 1) 38 39def Motor_Stop(): 40 GPIO.output(Motor_PIN_1, 0) 41 GPIO.output(Motor_PIN_2, 0) 42 43def Clean(): 44 GPIO.cleanup(24) 45 GPIO.cleanup(25) 46 47 48class Tab1Widget(QWidget): 49 50 def __init__(self, parent=None): 51 super().__init__(parent) 52 53 self.qt_thread = None 54 #self.running = False 55 self.title = "GUI test" 56 self.left = 10 57 self.top = 10 58 self.width = 640 59 self.height = 480 60 self.initUI() 61 self.counter = 0 62 63 def initUI(self): 64 65 66 #super(Tab1Widget, self).__init__() 67 68 btn1 = self.auto_button = QPushButton("自動", self) 69 btn2 = self.stop_button = QPushButton("停止", self) 70 71 btn1.clicked.connect(self.auto ) 72 btn2.clicked.connect(self.stop ) 73 74 self.textbox4 = QLineEdit(self) 75 self.textbox5 = QLineEdit(self) 76 77 78 label3 = QLabel("自動ドア") 79 label4 = QLabel("ドアの状態") 80 label5 = QLabel("モーター") 81 82 layoutA = QGridLayout() 83 layoutA.addWidget(label4,0,0) 84 layoutA.addWidget(self.textbox4,0,1) 85 layoutA.addWidget(label5,1,0) 86 layoutA.addWidget(self.textbox5,1,1) 87 layoutA.addWidget(btn1,2,0) 88 layoutA.addWidget(btn2,2,1) 89 90 layoutB = QVBoxLayout() 91 layoutB.addWidget(label3) 92 layoutB.addLayout(layoutA) 93 94 self.setLayout(layoutB) 95 96 self.show() 97 98 def closeEvent(self, event): 99 self.stop() 100 101 if self.qt_thread: 102 self.qt_thread.wait(2000) 103 104 super().closeEvent(event) 105 106 def stop(self): 107 if self.qt_thread: 108 self.qt_thread.requestInterruption() 109 110 111 112 def String(self, alpha): 113 self.textbox4.setText("{}".format(alpha)) 114 115 def Motor(self, beta): 116 self.textbox5.setText("{}".format(beta)) 117 118 119 def auto(self): 120 121 class MyQtThread(QThread): 122 123 sendString = pyqtSignal(str) 124 sendMotor = pyqtSignal(str) 125 126 def run(self): 127 while 1: 128 motor="" 129 self.sendMotor.emit(motor) 130 door="" 131 self.sendString.emit(door) 132 self.sleep(0.1) 133 134 if self.isInterruptionRequested(): 135 #Cleanup() 136 motor="Cleanup" 137 self.sendMotor.emit(motor) 138 #self.sleep(1) 139 break 140 141 while GPIO.input(Shoden_PIN)!=GPIO.HIGH: #物体検知 142 if self.isInterruptionRequested(): 143 #Cleanup() 144 motor="Cleanup" 145 self.sendMotor.emit(motor) 146 #self.sleep(1) 147 return 148 time.sleep(0.5) 149 150 #setMotor() 151 #Motor_Forward() #ドアが開く 152 motor="FORWARD" 153 self.sendMotor.emit(motor) 154 door="OPENED" 155 self.sendString.emit(door) 156 #self.sleep(1) 157 158 while GPIO.input(Reed_PIN_2)!=GPIO.HIGH: #ドアが完全に開く 159 if self.isInterruptionRequested(): 160 #Cleanup() 161 motor="Cleanup" 162 self.sendMotor.emit(motor) 163 #self.sleep(1) 164 return 165 time.sleep(0.5) 166 167 #Motor_Stop() 168 #time.sleep(0.5) 169 motor="STOP" 170 self.sendMotor.emit(motor) 171 self.sleep(1) 172 173 #Motor_Backward() #ドアが閉まる 174 motor="BACKWARD" 175 self.sendMotor.emit(motor) 176 #self.sleep(1) 177 178 while GPIO.input(Reed_PIN_1)!=GPIO.HIGH: #ドアが完全に閉まる 179 door="CLOSED" 180 self.sendString.emit(door) 181 if self.isInterruptionRequested(): 182 #Cleanup() 183 motor="Cleanup" 184 self.sendMotor.emit(motor) 185 #self.sleep(1) 186 return 187 time.sleep(0.5) 188 189 door="CLOSED" 190 self.sendString.emit(door) 191 #Motor_Stop() 192 #time.sleep(0.5) 193 motor="STOP" 194 self.sendMotor.emit(motor) 195 door="CLOSED" 196 self.sendString.emit(door) 197 self.sleep(1) 198 199 200 201 202 203 204 205 206 207 208 thread = self.qt_thread = MyQtThread() 209 210 thread.sendString.connect(self.String) 211 thread.sendMotor.connect(self.Motor) 212 213 214 self.stop_button.clicked.connect(self.stop) 215 216 thread.finished.connect(lambda: print("Qt Thread Finished")) 217 thread.start() 218 219 220if __name__ == "__main__": 221 app = QApplication(sys.argv) 222 ex = Tab1Widget() 223 sys.exit(app.exec_())
これを作動させたところ
このようなエラー文(?)が出てきました。
とてもタイピングで写せるようなものではないので、画像にて貼らせていただきます。
何が起こっているのでしょうか?
ldd --version を実行してみてください。
ldd (Debian GLIBC 2.24-11+deg9u4) 2.24
copyright (c) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
作者 Roland McGrath および Ulrich Drepper。
と出てきました。
回答4件
あなたの回答
tips
プレビュー