User Tools

Site Tools


module:micropython:esp32udpclientserver:esp32udpclientserver02v01

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
module:micropython:esp32udpclientserver:esp32udpclientserver02v01 [2021/12/13 11:35] – [Benutzung] omdevelopmodule:micropython:esp32udpclientserver:esp32udpclientserver02v01 [2022/09/13 11:58] (current) – external edit 127.0.0.1
Line 1: Line 1:
-====== Esp32UdpClientServer 01V01 =====+====== Esp32UdpClientServer 02V01 =====
 [[http://www.openhardsoftware.de/ | Open Hard- & Software]] [[http://www.openhardsoftware.de/ | Open Hard- & Software]]
 [ [
Line 14: Line 14:
 ===== Benutzung ===== ===== Benutzung =====
  
 +**Esp32UdpClientServer.py**
 <code python>  <code python> 
 # #
Line 114: Line 114:
 </code> </code>
  
 +**UdpClientServer.py**
 <code python>  <code python> 
 +#
 +import time
 +import enum as ENU
 +import socket as SKT
 +#
 +import Thread as THR
 +#
 +class CUdpClientServer():
 +    #
 +    def __init__(self, headerid, ipportrx, \
 +                 ipaddresstx, ipporttx, \
 +                 ontxdata, onrxdata, \
 +                 onstart, onbusy, onabort, onend):
 +        self.HeaderID = headerid
 +        self.IPAddressRXLocal = ''
 +        self.IPPortRX = ipportrx
 +        self.IPAddressTX = ipaddresstx
 +        self.IPPortTX = ipporttx
 +        self.OnTxData = ontxdata
 +        self.OnRxData = onrxdata
 +        self.OnStart = onstart
 +        self.OnBusy = onbusy
 +        self.OnAbort = onabort
 +        self.OnEnd = onend
 +        self.Thread = THR.CThread(self.CBOnStart, self.CBOnBusy, \
 +                                  self.CBOnAbort, self.CBOnEnd)
 +        self.RxSocket = None
 +        self.TxSocket = None
 +        # find local IPAddress:
 +        S = SKT.socket(SKT.AF_INET, SKT.SOCK_DGRAM)
 +        S.connect(('8.8.8.8', 1))
 +        self.IPAddressRXLocal = S.getsockname()[0]
 +        S.close()
 +        #
 +        return
 +    #
 +    def GetHeaderID(self):
 +        return self.HeaderID
 +    def GetIPAddressTX(self):
 +        return self.IPAddressTX
 +    def GetIPPortTX(self):
 +        return self.IPPortTX
 +    def GetIPAddressRXLocal(self):
 +        return self.IPAddressRXLocal
 +    def GetIPPortRX(self):
 +        return self.IPPortRX
 +    #
 +    def IsBusy(self):
 +        return THR.EStateThread.stBusy == self.Thread.State
 +    #
 +    def Open(self):
 +        # Rx
 +        if (THR.EStateThread.stBusy == self.Thread.State):
 +            self.Thread.Abort()
 +        self.RxSocket = SKT.socket(SKT.AF_INET, SKT.SOCK_DGRAM)
 +        # FORWARD Socket.bind !!!
 +        self.RxSocket.setsockopt(SKT.SOL_SOCKET, SKT.SO_REUSEADDR, 1)
 +        self.RxSocket.bind((self.IPAddressRXLocal, self.IPPortRX))
 +        self.RxSocket.setblocking(0)
 +        self.Thread.Start()
 +        # Tx
 +        self.TxSocket = SKT.socket(SKT.AF_INET, SKT.SOCK_DGRAM)
 +        self.TxSocket.connect((self.IPAddressTX, self.IPPortTX))
 +        return   
 +    #
 +    def Close(self):
 +        self.Thread.Abort()
 +        self.RxSocket.close()
 +        self.TxSocket.close()
 +    #
 +    def Abort(self):
 +        self.Thread.Abort()
 +        return
 +    #
 +    def Transmit(self, text):
 +        if (None != self.OnTxData):
 +            self.OnTxData(self, text)
 +        self.TxSocket.sendto(text.encode('utf-8'), \
 +                                         (self.IPAddressTX, self.IPPortTX))            
 +    #
 +    def CBOnStart(self, thread):
 +        if (None != self.OnStart):
 +            self.OnStart(self)
 +        return    
 +    #
 +    def CBOnBusy(self, thread):
 +        while self.IsBusy():
 +            RxData = ''
 +            try:
 +                Data, Address = self.RxSocket.recvfrom(1024)
 +                RxData = Data.decode('utf-8')
 +            except SKT.error:
 +                pass 
 +            else:
 +                # print('RxData[{}]'.format(Data.decode('utf-8')))
 +                if (None != self.OnRxData):
 +                    self.OnRxData(self, RxData)
 +            finally:
 +                time.sleep(0.1)            
 +                if (None != self.OnBusy):
 +                    self.OnBusy(self)
 +        self.RxSocket.close()
 +        return    
 +    #
 +    def CBOnAbort(self, thread):
 +        self.RxSocket.close()
 +        if (None != self.OnAbort):
 +            self.OnAbort(self)
 +        return
 +    #
 +    def CBOnEnd(self, thread):
 +        self.RxSocket.close()
 +        if (None != self.OnEnd):
 +            self.OnEnd(self)
 +        return
 +    #
 +#
 </code> </code>
  
 +**Thread.py**
 <code python>  <code python> 
 +import time
 +import _thread as THR
 +# States
 +stIdle = 0
 +stBusy = 1
 +stEnd = 2
 +#
 +class CThread():
 +    #
 +    def __init__(self, onstart, onbusy, onabort, onend):
 +        self.State = stIdle        
 +        self.Thread = None
 +        self.OnStart = onstart
 +        self.OnBusy = onbusy
 +        self.OnAbort = onabort
 +        self.OnEnd = onend
 +        return
 +    #
 +    def Start(self):
 +        self.State = stBusy
 +        if (None != self.OnStart):
 +            self.OnStart(self)
 +        self.ThreadID = THR.start_new_thread(self.CBOnExecute, [self])
 +        return    
 +    #
 +    def Abort(self):
 +        self.State = stEnd
 +        if (None != self.OnAbort):
 +            self.OnAbort(self)
 +        return
 +    #
 +    def CBOnExecute(self, thread):
 +        if (None != self.OnBusy):
 +            self.OnBusy(self)
 +        if (None != self.OnEnd):
 +            self.OnEnd(self)
 +        return
 +    #
 +#   
 +#-----------------------------------------------------------
 +#   Check Thread
 +#-----------------------------------------------------------
 +def CBOnStart(thread):
 +    print('CBOnStart')
 +    return
 +def CBOnBusy(thread):
 +    print('CBOnBusy')
 +    Counter = 0
 +    while (stBusy == thread.State):
 +        Counter += 1
 +        print(Counter)
 +        if (3 <= Counter):
 +            thread.Abort()
 +        else:
 +            time.sleep(1.0)
 +    return
 +def CBOnAbort(thread):
 +    print('CBOnAbort')
 +    return
 +def CBOnEnd(thread):
 +    print('CBOnEnd')
 +    return
 +#
 +if ('__main__' == __name__):
 +    #
 +    print('*** CheckThread: begin'       
 +    #
 +    Thread = CThread(CBOnStart, CBOnBusy, CBOnAbort, CBOnEnd)
 +    Thread.Start()
 +    time.sleep(5.0)
 +    Thread.Abort()
 +    #
 +    print('*** CheckThread: end')
 +    #
 +#
 </code> </code>
  
-MicroPython-Terminal-Commands:+MicroPython-Terminal-Commands (Comments in Helper.h):
 <code python> <code python>
 > import os > import os
Line 139: Line 331:
 </code> </code>
  
 +!!! NOCH ERGÄNZEN !!!
 Ausgabe in Terminal: Ausgabe in Terminal:
 <code python> <code python>
module/micropython/esp32udpclientserver/esp32udpclientserver02v01.1639391720.txt.gz · Last modified: 2021/12/13 12:35 (external edit)