module:micropython:esp32udpclientserver:esp32udpclientserver02v03
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
module:micropython:esp32udpclientserver:esp32udpclientserver02v03 [2021/12/13 19:54] – [Benutzung] omdevelop | module:micropython:esp32udpclientserver:esp32udpclientserver02v03 [2022/09/13 11:58] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 9: | Line 9: | ||
===== Übersicht ===== | ===== Übersicht ===== | ||
+ | |||
+ | Esp32-MicroPython-Software: | ||
+ | {{: | ||
+ | |||
===== Benutzung ===== | ===== Benutzung ===== | ||
Line 97: | Line 101: | ||
**UdpClientServer.py** | **UdpClientServer.py** | ||
<code python> | <code python> | ||
+ | # | ||
+ | import time | ||
+ | import socket as SKT | ||
+ | import network as NTW | ||
+ | import Thread as THR | ||
+ | # | ||
+ | class CUdpClientServer(): | ||
+ | # | ||
+ | def __init__(self, | ||
+ | | ||
+ | | ||
+ | | ||
+ | self.WlanSSID = wlanssid | ||
+ | self.WlanPW = wlanpw | ||
+ | self.HeaderID = headerid | ||
+ | self.IPAddressRXLocal = '' | ||
+ | self.IPPortRX = ipportrx | ||
+ | self.IPAddressTX = ipaddresstx | ||
+ | self.IPPortTX = ipporttx | ||
+ | self.OnTxData = ontxdata | ||
+ | self.OnRxData = onrxdata | ||
+ | self.Thread = THR.CThread(self.CBOnStart, | ||
+ | self.CBOnAbort, | ||
+ | self.Wlan = None | ||
+ | self.RxSocket = None | ||
+ | self.TxSocket = None | ||
+ | # | ||
+ | self.DEBUG = False | ||
+ | # | ||
+ | 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.stBusy == self.Thread.State | ||
+ | # | ||
+ | def CBOnStart(self, | ||
+ | if self.DEBUG: | ||
+ | print(' | ||
+ | return | ||
+ | # | ||
+ | def CBOnBusy(self, | ||
+ | if self.DEBUG: | ||
+ | print(' | ||
+ | while self.IsBusy(): | ||
+ | RxData = '' | ||
+ | try: | ||
+ | Data, Address = self.RxSocket.recvfrom(1024) | ||
+ | RxData = Data.decode(' | ||
+ | except: | ||
+ | pass | ||
+ | else: | ||
+ | if self.DEBUG: | ||
+ | print(' | ||
+ | if (None != self.OnRxData): | ||
+ | self.OnRxData(self, | ||
+ | finally: | ||
+ | time.sleep(0.1) | ||
+ | self.RxSocket.close() | ||
+ | return | ||
+ | # | ||
+ | def CBOnAbort(self, | ||
+ | if self.DEBUG: | ||
+ | print(' | ||
+ | self.RxSocket.close() | ||
+ | return | ||
+ | # | ||
+ | def CBOnEnd(self, | ||
+ | if self.DEBUG: | ||
+ | print(' | ||
+ | self.RxSocket.close() | ||
+ | return | ||
+ | # | ||
+ | def Open(self): | ||
+ | self.Wlan = NTW.WLAN(NTW.STA_IF) | ||
+ | self.Wlan.active(False) | ||
+ | self.Wlan.active(True) | ||
+ | self.Wlan.connect(self.WlanSSID, | ||
+ | while not(self.Wlan.isconnected()): | ||
+ | pass | ||
+ | self.IPAddressRXLocal = self.Wlan.ifconfig()[0] | ||
+ | if self.DEBUG: | ||
+ | print(' | ||
+ | print(' | ||
+ | # Rx | ||
+ | if (THR.stBusy == self.Thread.State): | ||
+ | self.Thread.Abort() | ||
+ | self.RxSocket = SKT.socket(SKT.AF_INET, | ||
+ | # FORWARD Socket.bind !!! | ||
+ | self.RxSocket.setsockopt(SKT.SOL_SOCKET, | ||
+ | self.RxSocket.bind((self.IPAddressRXLocal, | ||
+ | self.RxSocket.setblocking(0) | ||
+ | self.Thread.Start() | ||
+ | # Tx | ||
+ | self.TxSocket = SKT.socket(SKT.AF_INET, | ||
+ | self.TxSocket.connect((self.IPAddressTX, | ||
+ | return | ||
+ | # | ||
+ | def Close(self): | ||
+ | if self.DEBUG: | ||
+ | print(' | ||
+ | self.Thread.Abort() | ||
+ | self.RxSocket.close() | ||
+ | self.TxSocket.close() | ||
+ | # | ||
+ | def Abort(self): | ||
+ | if self.DEBUG: | ||
+ | print(' | ||
+ | self.Thread.Abort() | ||
+ | return | ||
+ | # | ||
+ | def Transmit(self, | ||
+ | if self.DEBUG: | ||
+ | print(' | ||
+ | if (None != self.OnTxData): | ||
+ | self.OnTxData(self, | ||
+ | self.TxSocket.sendto(text.encode(' | ||
+ | | ||
+ | # | ||
+ | def Execute(self): | ||
+ | return | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # Check UdpClientServer | ||
+ | # | ||
+ | WLAN_SSID = ' | ||
+ | WLAN_PW = ' | ||
+ | # | ||
+ | UDP_HEADERID = ' | ||
+ | # | ||
+ | # UDP - TxD - TransmitData | ||
+ | # | ||
+ | # UDP_IPADDRESS_TX = ' | ||
+ | UDP_IPADDRESS_TX = ' | ||
+ | UDP_IPPORT_TX = 5000 | ||
+ | # | ||
+ | # | ||
+ | # UDP - RxD - ReceiveData | ||
+ | # | ||
+ | UDP_IPADDRESS_LOCAL = ' | ||
+ | UDP_IPPORT_RX = 5000 | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | def CBOnTxData(udpclientserver, | ||
+ | Line = ' | ||
+ | print(Line) | ||
+ | return | ||
+ | # | ||
+ | def CBOnRxData(udpclientserver, | ||
+ | Line = ' | ||
+ | print(Line) | ||
+ | return | ||
+ | # | ||
+ | if (' | ||
+ | # | ||
+ | print(' | ||
+ | # | ||
+ | UdpCS = CUdpClientServer(WLAN_SSID, | ||
+ | | ||
+ | | ||
+ | | ||
+ | UdpCS.Open() | ||
+ | # | ||
+ | print(' | ||
+ | | ||
+ | | ||
+ | print(' | ||
+ | | ||
+ | | ||
+ | # | ||
+ | UdpCS.Transmit(' | ||
+ | time.sleep(1.0) | ||
+ | UdpCS.Transmit(' | ||
+ | time.sleep(1.0) | ||
+ | UdpCS.Transmit(' | ||
+ | time.sleep(1.0) | ||
+ | # | ||
+ | UdpCS.Close() | ||
+ | # | ||
+ | print(' | ||
+ | # | ||
+ | # | ||
</ | </ | ||
**Thread.py** | **Thread.py** | ||
<code python> | <code python> | ||
- | </ | + | import time |
+ | import _thread as THR | ||
+ | # States | ||
+ | stIdle = 0 | ||
+ | stBusy = 1 | ||
+ | stEnd = 2 | ||
+ | # | ||
+ | class CThread(): | ||
+ | # | ||
+ | def __init__(self, | ||
+ | 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, | ||
+ | return | ||
+ | # | ||
+ | def Abort(self): | ||
+ | self.State = stEnd | ||
+ | if (None != self.OnAbort): | ||
+ | self.OnAbort(self) | ||
+ | return | ||
+ | # | ||
+ | def CBOnExecute(self, | ||
+ | if (None != self.OnBusy): | ||
+ | self.OnBusy(self) | ||
+ | if (None != self.OnEnd): | ||
+ | self.OnEnd(self) | ||
+ | return | ||
+ | # | ||
- | !!! NOCH ERGÄNZEN !!! | + | # |
- | Ausgabe in Terminal: | + | # |
- | <code python> | + | # |
+ | # Check Thread | ||
+ | # | ||
+ | def CBOnStart(thread): | ||
+ | | ||
+ | return | ||
+ | def CBOnBusy(thread): | ||
+ | print(' | ||
+ | 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(' | ||
+ | return | ||
+ | def CBOnEnd(thread): | ||
+ | print(' | ||
+ | return | ||
+ | # | ||
+ | if (' | ||
+ | # | ||
+ | print(' | ||
+ | # | ||
+ | Thread = CThread(CBOnStart, | ||
+ | Thread.Start() | ||
+ | time.sleep(5.0) | ||
+ | Thread.Abort() | ||
+ | # | ||
+ | print(' | ||
+ | # | ||
+ | # | ||
</ | </ | ||
module/micropython/esp32udpclientserver/esp32udpclientserver02v03.1639421693.txt.gz · Last modified: 2021/12/13 20:54 (external edit)