User Tools

Site Tools


module:micropython:esp32uart:esp32uart

MicroPython: Esp32Uart

Übersicht

Version

Beschreibung

Ausgabe MicroPython-Terminal Esp32CheckUart.py

>>>Running ...Esp32CheckUart.py
>>> *** Esp32CheckUart: begin
CBUartOnTxLine[000 <command>]
CBUartOnRxLine[000 <command>]
CBUartOnTxLine[111 <command> <parameter0>]
CBUartOnTxLine[222 <command> <parameter0> <parameter1>]
CBUartOnRxLine[111 <command> <parameter0>]
CBUartOnTxLine[333 <command> <parameter0> <parameter1> <parameter2>]
CBUartOnRxLine[222 <command> <parameter0> <parameter1>]
CBUartOnTxLine[444 <command> <parameter0> <parameter1> <parameter2> <parameter3>]
CBUartOnRxLine[333 <command> <parameter0> <parameter1> <parameter2>]
CBUartOnTxLine[555 <command>]
CBUartOnRxLine[444 <command> <parameter0> <parameter1> <parameter2> <parameter3>]
CBUartOnTxLine[666 <command> <parameter0>]
CBUartOnRxLine[555 <command>]
CBUartOnTxLine[777 <command> <parameter0> <parameter1>]
CBUartOnRxLine[666 <command> <parameter0>]
CBUartOnTxLine[888 <command> <parameter0> <parameter1> <parameter2>]
CBUartOnRxLine[777 <command> <parameter0> <parameter1>]
CBUartOnTxLine[999 <command> <parameter0> <parameter1> <parameter2> <parameter3>]
CBUartOnRxLine[888 <command> <parameter0> <parameter1> <parameter2>]
CBUartOnRxLine[999 <command> <parameter0> <parameter1> <parameter2> <parameter3>]  
*** Esp32CheckUart: end
>>>

Main-Program: Esp32CheckUart.py

#
import time as TIM
#
import Define as DEF
import Uart as UART
#
#-------------------------------------------------------------------
#   Callback - Uart
#-------------------------------------------------------------------
def CBUartOnRxLine(rxline):
    print('CBUartOnRxLine[{}]'.format(rxline))
#
def CBUartOnTxLine(txline):
    print('CBUartOnTxLine[{}]'.format(txline))
#
#-------------------------------------------------------------------
#   Main - Uart
#-------------------------------------------------------------------
if ('__main__' == __name__):
    print('*** Esp32CheckUart: begin')    
    #
    Uart = UART.CUart(DEF.ID_UART1, DEF.PIN_UART1_TX, DEF.PIN_UART1_RX)
    Uart.SetOnRxLine(CBUartOnRxLine)
    Uart.SetOnTxLine(CBUartOnTxLine)
    Uart.Open()
    #
    Uart.TxLine('000 <command>')
    Uart.TxLine('111 <command> <parameter0>')
    Uart.TxLine('222 <command> <parameter0> <parameter1>')
    Uart.TxLine('333 <command> <parameter0> <parameter1> <parameter2>')
    Uart.TxLine('444 <command> <parameter0> <parameter1> <parameter2> <parameter3>')
    Uart.TxLine('555 <command>')
    Uart.TxLine('666 <command> <parameter0>')
    Uart.TxLine('777 <command> <parameter0> <parameter1>')
    Uart.TxLine('888 <command> <parameter0> <parameter1> <parameter2>')
    Uart.TxLine('999 <command> <parameter0> <parameter1> <parameter2> <parameter3>')
    TIM.sleep(2.0)
    #
    Uart.Close()
    #
    print('*** Esp32CheckUart: end')
    #
#

Library-Module: Uart.py

#
import time
from machine import UART
#
import Define
import Lines as LIN
import Thread as THR
#
class CUart():
    #---------------------------------------------------------
    #   Constructor
    #---------------------------------------------------------
    def __init__(self, uartid, txpin, rxpin):
        self.Uart = UART(uartid, tx=txpin, rx=rxpin)
        self.TxLines = LIN.CLines()
        self.RxLines = LIN.CLines() 
        self.OnRxLine = None
        self.OnTxLine = None
        self.Thread = THR.CThread(self.CBOnStart, self.CBOnBusy, self.CBOnAbort, self.CBOnEnd)
        self.RxLine = ''
    #---------------------------------------------------------
    #   Property
    #---------------------------------------------------------
    def SetOnRxLine(self, onrxline):
        self.OnRxLine = onrxline
    def SetOnTxLine(self, ontxline):
        self.OnTxLine = ontxline
    #---------------------------------------------------------
    #   Callback Thread
    #---------------------------------------------------------
    def CBOnStart(self, thread):
        return
    def CBOnBusy(self, thread):
        while (THR.stBusy == thread.State):
            # first: RxData
            while (0 < self.Uart.any()):
                C = self.Uart.read(1)
                if (b'\r' == C) or (b'\n' == C):
                    if (0 < len(self.RxLine)):
                        self.RxLines.Push(self.RxLine)
                        self.RxLine = '';
                else:
                    self.RxLine += C.decode("utf-8")
            if (0 < self.RxLines.Count()):
                Line = self.RxLines.Pop()
                if (None != self.OnRxLine):
                    self.OnRxLine(Line)
            # second: TxData
            if (0 < self.TxLines.Count()):
                Line = self.TxLines.Pop()
                self.Uart.write(Line + '\r\n')
                if (None != self.OnTxLine):
                    self.OnTxLine(Line)
    def CBOnAbort(self, thread):
        return
    def CBOnEnd(self, thread):
        return
    #---------------------------------------------------------
    #   Management
    #---------------------------------------------------------
    def Open(self):
        self.Uart.init(baudrate=115200)#, bits=8, parity=None, stop=1, cts=-1, rts=-1)
        self.Thread.Start()   
        self.RxLine = ''
        return
    #
    def Close(self):
        self.Thread.Abort()
        self.Uart.deinit()
        return 
    #
    def TxLine(self, line):
        self.TxLines.Push(line)
    #
#
#-------------------------------------------------------------
#   Uart - Main - Check Library
#-------------------------------------------------------------
def CBOnRxLine(rxline):
    print('CBOnRxLine[{}]'.format(rxline))
#
def CBOnTxLine(txline):
    print('CBOnTxLine[{}]'.format(txline))
#
if ('__main__' == __name__):    
    print('*** CheckUart: begin')
    #
    Uart = CUart(Define.ID_UART1, Define.PIN_UART1_TX, Define.PIN_UART1_RX)
    Uart.SetOnRxLine(CBOnRxLine)
    Uart.SetOnTxLine(CBOnTxLine)
    Uart.Open()
    #
    Uart.TxLine('000asdf')
    Uart.TxLine('111asdf')
    time.sleep(2.0)
    #
    Uart.Close()
    #
    print('*** CheckUart: end')
#    

Library-Module: Thread.py

#
import time
import _thread as THR
#
# States - EStateThread :
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
    #
#-------------------------------------------------------------
if ('__main__' == __name__):
    print('*** Check Thread: begin')        
    #
    # Thread = CThread(CBOnStart, CBOnBusy, CBOnAbort, CBOnEnd)
    # Thread.Start()
    # time.sleep(5.0)
    # Thread.Abort()
    #
    print('*** Check Thread: end')
#

Library-Module: Lines.py

#
# CLines : FirstIn-FirstOut
class CLines(list):
    #
    def __init__(self):
        self = []
    #
    def Count(self):
        return len(self)
    #
    def Push(self, line):
        self.append(line)
        return
    #
    def Pop(self):
        Line = ''
        if (0 < self.Count()):
            Line = self.pop(0)
        return Line

Library-Module: Define.py

#
ID_UART0     =  0
PIN_UART0_TX =  1 # USB
PIN_UART0_RX =  3 # USB
#
ID_UART1     =  1
PIN_UART1_RX = 25 #  9 - not usable 
PIN_UART1_TX = 26 # 10 - not usable 
#
ID_UART2     =  2
PIN_UART2_RX = 16
PIN_UART2_TX = 17
#

Entwicklung

211219 : Esp32Uart

211218 : Esp32Uart

  • Uart0 (UsbPC) : Programmier-/Debug-Schnittstelle VSCode
  • Uart1 (PIN_UART1_RX(25) rückgekoppelt mit PIN_UART1_TX(26))

Esp32Uart.py : Senden/Empfangen bei Tx/Rx-Kabel-Rückkopplung:

>>> Running c:\Downloads\python\Esp32Uart\Uart.py
>>> *** CheckUart: begin
CBOnTxLine[111asdf]
CBOnRxLine[111asdf]
CBOnTxLine[222asdf]
CBOnRxLine[222asdf]
CBOnTxLine[333asdf]
CBOnRxLine[333asdf]
*** CheckUart: end
>>>

211217 : Erste Versuche

Uart-Pin-Assignment Esp32 in Define.py

ID_UART0     =  0
PIN_UART0_TX =  1 # USB
PIN_UART0_RX =  3 # USB
#
ID_UART1     =  1
PIN_UART1_RX = 25 #  9 - not usable 
PIN_UART1_TX = 26 # 10 - not usable 
#
ID_UART2     =  2
PIN_UART2_RX = 16
PIN_UART2_TX = 17

Open Hard- & Software [ DokuWiki WebSites MediaWiki NextCloud ]

module/micropython/esp32uart/esp32uart.txt · Last modified: 2022/09/13 11:58 by 127.0.0.1