質問内容
raspberry pi4 でシリアル通信(GPS)を受信して表示するプログラムを作成中です。
言語はpythonです。
シリアル通信は別クラス Serial_GPS.py で行い、呼び出し側 start.pyで受信内容を表示させます。
タイマーイベント def tmrSerial(self):
でdata = self.clsGPS,Get_Data()の所でクラスに参照できません。
start.py全体でSerial_GPSを参照できる書き方が分かる方がいれば教えてください。
エラーメッセージ
Traceback (most recent call last): File "/home/pi/pg/python2/start.py", line 61, in <module> app = Application(master = root) File "/home/pi/pg/python2/start.py", line 51, in __init__ self.tmrSerial() File "/home/pi/pg/python2/start.py", line 55, in tmrSerial data = self.clsGPS,Get_Data() NameError: name 'Get_Data' is not defined
該当のソースコード
python
1Serial_GPS.py 2import datetime 3import serial 4import threading 5 6# シリアル通信 7class Serial_GPS(): 8 data = "" 9 # 初期設定 10 def __init__(self, iPort, iBaudrate): 11 try: 12 self.comm = serial.Serial(iPort, iBaudrate) 13 self.comm.parity = serial.PARITY_NONE 14 self.comm.bytesize = serial.EIGHTBITS 15 self.comm.stopbits = serial.STOPBITS_ONE 16 self.comm.timeout = 5 #sec 17 self.comm.port = iPort 18 self.comm.close() # 自動OPENなので一旦COMポート閉じる 19 except Exception as e: 20 print('=== エラー内容 Serial_GPS() ===') 21 print('type:' + str(type(e))) 22 print('e自身:' + str(e)) 23 24 def Start2(self): 25 self.comm.open() # COMポート開く 26 self.thread_main = threading.Thread(target = self.COM_read) 27 self.thread_main.start() 28 29 30 # COM OPEN 31 def Start(self): 32 rc = 0 33 try: 34 if(self.comm.isOpen() == False): 35 self.comm.open() # COMポート開く 36 self.thread_main = threading.Thread(target = self.COM_read) 37 self.thread_main.start() 38 print("COM OPEN") 39 rc = 1 40 else: 41 self.comm.close() # COMポート閉じる 42 print("COM CLOSE") 43 rc = -1 44 except Exception as e: 45 print('=== エラー内容 GPS_Start() ===') 46 print('type:' + str(type(e))) 47 print('e自身:' + str(e)) 48 finally: 49 return(rc) 50 51 def COM_read(self): 52 # 別スレッドでserialを読む 53 try: 54 while 1: 55 self.data = self.comm.readline() 56 print(self.data) 57 except Exception as e: 58 print('=== エラー内容 COM_read() ===') 59 print('type:' + str(type(e))) 60 print('e自身:' + str(e)) 61 62 def Get_Data(self): 63 return(self.data+"*****") 64
python
1start.py 2import sys 3import tkinter as tk 4import PIL.Image, PIL.ImageTk 5import cv2 6import time 7import threading 8import datetime 9import subprocess 10from tkinter import filedialog 11from PIL import Image, ImageTk, ImageOps # 画像データ用 12from tkinter import font 13import Serial_GPS 14 15# python3 pg/python/patoview/patoview.py 16class Application(tk.Frame): 17 18 def __init__(self,master): 19 super().__init__(master) 20 21 #clsGPS = Serial_GPS.Serial_GPS("/dev/ttyS0", 9600) 22 self.clsGPS = Serial_GPS.Serial_GPS("/dev/ttyS0", 9600) 23 rc = self.clsGPS.Start() 24 data=self.clsGPS.Get_Data() 25 print("aaa"+data) 26 27 28 # 画面定義 29 self.master.geometry("1000x700") 30 self.master.title("STRAT PG") 31 32 self.font1 = font.Font( family="VLゴシック", size=35, weight="normal" ) 33 self.font2 = font.Font( family="VLゴシック", size=28, weight="normal" ) 34 35 self.frmMaim = tk.Frame(self.master, relief= tk.FLAT) 36 self.frmMaim.place(x = 2, y = 2) 37 self.frmMaim.configure(width = 800, height = 550) 38 39 self.lblTitle = tk.Label(self.frmMaim, text='(準備画面)', font=self.font1) 40 self.lblTitle.place(x=220, y=10) 41 42 self.lblGps1 = tk.Label(self.frmMaim, text='時間:GPS未受信', font=self.font2) 43 self.lblGps1.place(x=200, y=150) 44 45 self.lblGps2 = tk.Label(self.frmMaim, text='----', font=self.font2) 46 self.lblGps2.place(x=290, y=200) 47 48 self.lblLTE = tk.Label(self.frmMaim, text='通信:LTE回線起動中', font=self.font2) 49 self.lblLTE.place(x=200, y=250) 50 51 self.tmrSerial() 52 53 54 def tmrSerial(self): 55 data = self.clsGPS,Get_Data() # GPSデータを参照する 56 self.lblGps1.text.set(data) 57 self.master.after(100, self.tmrSerial) # 100ms毎繰り返す 58 59if __name__ == "__main__": 60 root = tk.Tk() 61 app = Application(master = root) 62 app.mainloop() 63
回答1件
あなたの回答
tips
プレビュー