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

Next revision
Previous revision
module:micropython:esp32udpclientserver:esp32udpclientserver02v01 [2021/12/13 11:07] – external edit 127.0.0.1module: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 9: Line 9:
  
 ===== Übersicht ===== ===== Übersicht =====
-  * Single MicroPython-Modul **Esp32UdpClient.py** zum Empfangen von UDP-Daten +  * Esp32(Wlan, Uart): Bidirektionales Senden und -Empfangen von UDP-Datenpaketen ohne Blocking mit Threads 
-  * Single MicroPython-Modul **Esp32UdpServer.py** zum Senden von UDP-Daten +  * Programmierung mit VSCode(PyMakr) unter MicroPython mit Uart-MicroPython-Terminal 
 +  Erweiterung von VSCode mit Python-Terminal und **Ampy**(Adafruits)
 ===== Benutzung ===== ===== Benutzung =====
-  * Datenaustausch zwischen UdpClient und UdpServer 
-  * UdpClient(Esp32) wartet (nicht blocking!) auf Daten vom UdpServer(Pc) 
-  * UdpClient(Pc) wartet (nicht blocking!) auf Daten vom UdpServer(Esp32) 
  
-SourceCode **Esp32UdpClient.py**, arbeitet zusammen mit [[:module:python:pcudpclientserver:PcUdpClientServer#PcUdpServer|PcUdpServer.py]]:+**Esp32UdpClientServer.py**
 <code python>  <code python> 
 # #
 +# Syntax-Arguments: <headerid> <rxipport> <txipaddress> <txipport>
 +#
 +# WindowsPC[192.168.178.33] <-> # WindowsPC[192.168.178.33]:
 +# WinPC: python CheckUdpClientServer.py Windows 4321 192.168.178.33 4321
 +
 +
 +# WindowsPC[192.168.178.33] <-> UbuntuPC[192.168.178.48]
 +# WinPC: python CheckUdpClientServer.py Windows 5001 192.168.178.48 5000
 +# LinPC: python CheckUdpClientServer.py Ubuntu  5000 192.168.178.33 5001 
 +#
 +import sys
 import time import time
-import network as NTW 
 import socket as SKT import socket as SKT
 # #
-WL_SSID = 'ssid' +import Thread as THR 
-WL_PW = 'pw'+import UdpClientServer as UCS
 # #
-UDP_IPADDRESS = '192.168.178.33' # '255.255.255.255' # '192.168.178.255' #'192.168.178.33+UDP_HEADERID = 'UDPHID' 
-UDP_IPPORT 5005+#----------------------------------------------------------- 
 +  UDP - TxD - TransmitData 
 +#----------------------------------------------------------- 
 +UDP_IPADDRESS_TX = '127.0.0.255' 
 +UDP_IPPORT_TX 5000
 # #
 +#-----------------------------------------------------------
 +#   UDP - RxD - ReceiveData
 +#-----------------------------------------------------------
 +UDP_IPADDRESS_LOCAL = '127.0.0.1' # dummy
 +UDP_IPPORT_RX = 5000
 +#   
 +#-----------------------------------------------------------
 +#   Callback - UdpClient
 +#-----------------------------------------------------------
 +def CBOnTxData(udpclientserver, txdata):
 +    Line = 'CBOnTxData[{}]<{}>'.format(udpclientserver.GetHeaderID(), txdata)
 +    print(Line)
 +    return
 +#
 +def CBOnRxData(udpclientserver, rxdata):
 +    Line = 'CBOnRxData[{}]<{}>'.format(udpclientserver.GetHeaderID(), rxdata)
 +    print(Line)
 +    return
 +#
 +def CBOnStart(udpclientserver):
 +    # debug print('Main-CBOnStart')
 +    return
 +#
 +def CBOnBusy(udpclientserver):
 +    # debug print('Main-CBOnBusy')
 +    return
 +#
 +def CBOnAbort(udpclientserver):
 +    # debug print('Main-CBOnAbort')
 +    return
 +#
 +def CBOnEnd(udpclientserver):
 +    # debug print('Main-CBOnEnd')
 +    return
 +#   
 +#-----------------------------------------------------------
 +#   Main
 #----------------------------------------------------------- #-----------------------------------------------------------
 if ('__main__' == __name__): if ('__main__' == __name__):
     #     #
-    print('*** UdpClient: begin')+    print('*** CheckUdpClientServer: begin'
 +    if (5 <= len(sys.argv)): 
 +        # Analyse Arguments für Tx/Rx-Parameter 
 +        UDP_HEADERID = sys.argv[1] 
 +        # RX 
 +        UDP_IPPORT_RX = int(sys.argv[2]) 
 +        # TX 
 +        UDP_IPADDRESS_TX = sys.argv[3] 
 +        UDP_IPPORT_TX = int(sys.argv[4])
     #     #
-    Wlan NTW.WLAN(NTW.STA_IF+    UdpCS UCS.CUdpClientServer(UDP_HEADERID, UDP_IPPORT_RX, 
-    Wlan.active(False+                                 UDP_IPADDRESS_TX, UDP_IPPORT_TX,  
-    Wlan.active(True+                                 CBOnTxData, CBOnRxData,  
-    Wlan.connect(WL_SSIDWL_PW+                                 CBOnStart, CBOnBusy, CBOnAbort, CBOnEnd
-    while not(Wlan.isconnected()): +    #         
-        pass +    print('{}: TxIP-Address[{}]-Port[{}]'.format(UdpCS.GetHeaderID() 
-    print('Wlan-IP[{0}]'.format(Wlan.ifconfig()))    +                                                 UdpCS.GetIPAddressTX(),  
 +                                                 UdpCS.GetIPPortTX())
 +    print('{}: RxIP(local)-Address[{}]-Port[{}]'.format(UdpCS.GetHeaderID() 
 +                                                 UdpCS.GetIPAddressRXLocal(), 
 +                                                 UdpCS.GetIPPortRX())) 
 +    UdpCS.Open() 
 +    for I in range(0, 6): 
 +        time.sleep(5.0) 
 +        UdpCS.Transmit('{}[{}]'.format(I,UdpCS.GetHeaderID())) 
 +    time.sleep(1.0) 
 +    UdpCS.Close()
     #     #
-    Socket = SKT.socket(SKT.AF_INET, SKT.SOCK_DGRAM) +    print('*** CheckUdpClientServer: end')
-    Socket.bind((UDP_IPADDRESS, UDP_IPPORT)) +
-    Socket.setblocking(0) +
-    Loop = True +
-    while (Loop): +
-        try:        +
-            Data, Address = Socket.recvfrom(1024) +
-            if (b'Q' == Data): +
-                Loop = False +
-        except SKT.error: +
-            pass  +
-        else: +
-            print(Data) +
-        finally: +
-            # debug print('-'+
-            time.sleep(0.1) +
-    Socket.close() +
-    # +
-    print('*** UdpClient: end')+
     #     #
 +#
 </code> </code>
  
-SourceCode **Esp32UdpServer.py**, arbeitet zusammen mit [[:module:python:pcudpclientserver:PcUdpClientServer#PcUdpClient|PcUdpClient.py]]: +**UdpClientServer.py** 
-<code python>+<code python> 
 # #
 import time import time
-import network as NTW+import enum as ENU
 import socket as SKT import socket as SKT
 # #
-WL_SSID = 'ssid' +import Thread as THR
-WL_PW = 'pw'+
 # #
-UDP_IPADDRESS = '192.168.178.255' # '255.255.255.255' # '192.168.178.255' #'192.168.178.33+class CUdpClientServer(): 
-UDP_IPPORT 5005+    # 
 +    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>
 +
 +**Thread.py**
 +<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__): if ('__main__' == __name__):
     #     #
-    print('*** UdpServer: begin')+    print('*** CheckThread: begin'       
     #     #
-    Wlan NTW.WLAN(NTW.STA_IF+    Thread CThread(CBOnStart, CBOnBusy, CBOnAbort, CBOnEnd
-    Wlan.active(False+    Thread.Start() 
-    Wlan.active(True) +    time.sleep(5.0
-    Wlan.connect(WL_SSID, WL_PW+    Thread.Abort()
-    while not(Wlan.isconnected()): +
-        pass +
-    print('Wlan-IP[{0}]'.format(Wlan.ifconfig()))    +
     #     #
-    Socket = SKT.socket(SKT.AF_INET, SKT.SOCK_DGRAM) +    print('*** CheckThread: end')
-    for I in range(0, 10): +
-        print('.'+
-        Socket.sendto(b'Hello', (UDP_IPADDRESS, UDP_IPPORT)) +
-        time.sleep(1.0) +
-    # +
-    Socket.sendto(b'Q', (UDP_IPADDRESS, UDP_IPPORT)) +
-    Socket.close() +
-    print('*** UdpServer: end')+
     #     #
 +#
 +</code>
 +
 +MicroPython-Terminal-Commands (Comments in Helper.h):
 +<code python>
 +> import os
 +> print(os.listdir())
 +</code>
 +
 +**Ampy**-Commands:
 +<code python>
 +> ampy -p COM22 ls
 +</code>
 +<code python>
 +> ampy -p COM22 rm /project.pymakr
 +</code>
 +<code python>
 +> ampy -p COM22 reset
 </code> </code>
  
 +!!! NOCH ERGÄNZEN !!!
 Ausgabe in Terminal: Ausgabe in Terminal:
 <code python> <code python>
Line 110: Line 339:
  
 ===== Version ===== ===== Version =====
-{{:module:micropython:2112090400_Esp32UdpClientServer_01V01.zip|2112090400_Esp32UdpClientServer_01V01.zip}}+{{:module:micropython:2112121950_Esp32UdpClientServer_02V01.zip|2112121950_Esp32UdpClientServer_02V01.zip}}
  
 ----- -----
module/micropython/esp32udpclientserver/esp32udpclientserver02v01.1639390044.txt.gz · Last modified: 2021/12/13 12:07 (external edit)