微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在不同的线程中使用TCP / IP通信例程进行连续操作

如何解决如何在不同的线程中使用TCP / IP通信例程进行连续操作

我正在一个项目中,在该项目中,我将两个旋转编码器与RaspBerry pi进行了接口,同时读取了两个传感器值,并在tkinter窗口中显示了它们,现在根据项目,每当收到查询命令时,我就需要将这些值发送到PC从PC上。我从Google读到,如果我们想要两个连续循环,那么我们可以通过线程方法来实现。但是我对线程没有足够的了解。 下面我提供了tkinter代码以及TCP / IP代码

import pigpio
import tkinter as tk
from PIL import ImageTk,Image
import time
from RPi import GPIO
import serial

i="*00T%"
j="*01T%"
s=serial.Serial(port='/dev/ttyS0',baudrate=9600,parity=serial.PARITY_NONE,stopbits=serial.STOPBITS_ONE,bytesize=serial.EIGHTBITS,timeout=1)

class decoder:           # class for decoding rotary encoder 
  def __init__(self,pi,gpioA,gpioB,callback):
      ----------
     ---------------
        ----------------

if __name__ == "__main__":

   rpm=0
   tor=0
   pow=0
   
   pi = pigpio.pi()
   st=1
   pos=0
   def callback(way):  # interrupt event sense on pin no 17,18

      global pos
      global st

      if st ==1:
        pos += way
      if pos >= 9999:
          pos=9999
        if pos <= 0:
          pos=0

        var.set(pos)
       
        print("pos={}".format(pos))
   def rpm_update():
     --------------
     rpm read code
    ---------------
   def tor_update():
     -------------------
     torque read code
     ---------------------

   def pow_update():
    ------------------------
    power Calculation
   --------------------------
  def update():
    --------------------
     root.after(200,update)
   path="/home/pi/logo.png"
   root=tk.Tk()
   img=ImageTk.PhotoImage(Image.open(path))
   panel=tk.Label(root,image=img)
   panel.pack()
   panel.place(x=195,y=10,height=50,width=80)
   root.title("Dynalec")
   root.geometry("500x600")
 
   {
    body of tkinter screen
   }
   decoder=decoder(pi,17,18,callback)
   root.after(200,update)
   root.mainloop()  

和我的服务器代码,它们在while循环中运行良好。 我想将这两个代码完美地合并以达到预期的效果

import socket
import encodings
rpm = 2000
tor = 35
pow = 7.33

HOST = '169.254.29.78' 
PORT = 65432        


def data():
    global rpm,tor,pow
            
    my_sensor = "{},{},{}".format(rpm,pow)
    return my_sensor                            # return data seperated by comma




def my_server():

    with socket.socket(socket.AF_INET,socket.soCK_STREAM) as s:
        print("Server Started waiting for client to connect ")
        s.bind((HOST,PORT))
        s.listen(5)
        conn,addr = s.accept()

        with conn:
            print('Connected by',addr)
            while True:

                data = conn.recv(1024).decode('utf-8')

                if str(data) == "Data":

                    print("Ok Sending data ")

                    my_data = data()

                    x_encoded_data = my_data.encode('utf-8')

                    conn.sendall(x_encoded_data)

                elif  str(data) == "Quit":
                    print("shutting down server ")
                    break


                if not data:
                    break
                else:
                    pass


if __name__ == '__main__':
    while 1:
        my_server()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。