Sfoglia il codice sorgente

Portierungsaufgabenzu ESP

Chris Hoelzel 4 anni fa
parent
commit
164f1da975
2 ha cambiato i file con 171 aggiunte e 0 eliminazioni
  1. 162 0
      test/SIM.py
  2. 9 0
      test/esp_uart.py

+ 162 - 0
test/SIM.py

@@ -0,0 +1,162 @@
+# Diese Klasse ist für normales Python mit pySerial
+# Sie stellt ein Interface für SIM800 Befehlssätze dar
+
+# 2022-03-02 - devnull - initial
+# 2022-03-06 - devnull - Schritt 1 : Anpassung für ESP ohne Auslesefunktionalitäten
+
+import sys
+import io
+from machine import UART
+
+class SIM:
+
+
+    tty = None
+    ser = None
+    pin = None
+    baud = None
+    sio = None
+    devInfo = None
+    devTemp = None
+    devSN = None
+    devProd = None
+    devRev = None
+
+
+
+    # wenn keine PIN übergeben, dann brechen wir ab
+    def __init__(self, tty = None, baud = 115200, pin = None):
+
+        # wir brauchen hier noch etwas um zu prüfen und abzubrechen, wenn PIN und TTY nicht gesetzt sind
+        if (tty is None) or (pin is None):
+            sys.stderr.write('TTY oder PIN fehlt')
+            sys.exit(1)
+        else:
+            self.setTTY(tty)
+            self.setBaud(baud)
+            self.setPIN(pin)
+
+        #PC: import serial
+
+        try:
+        # Verbindung oeffnen
+            #PC: self.ser = serial.Serial(self.getTTY(), self.getBaud(), timeout=1) # PC
+            #PC: self.sio = io.TextIOWrapper(io.BufferedRWPair(self.ser, self.ser)) # PC
+            self.sio = UART(self.getTTY(), baudrate=self.getBaud())
+            self.devSetup()
+
+        #try:
+        #    self.ser.open()
+        #PC: except serial.SerialException as e:
+        except:
+            sys.stderr.write('Could not open serial port {}: {}\n'.format(self.getTTY(), e))
+            sys.exit(1)
+
+
+
+        # sammle Modem Informationen
+        #self.devInfo()
+        #self.devProd()
+        #self.devRev()
+        #self.devSN()
+        #self.devTemp()
+
+        # PIN Übergabe
+        self.sendESPPIN(pin)
+
+
+        # PIN senden
+
+    #übermittelt ein AT Command, aber bitte nur eine Zeile als Rückgabewert
+    def sendAT(self,AT):
+        self.sio.write(AT + '\n')
+        #PC: self.sio.flush() # it is buffering. required to get the data out *now*
+
+        #PC: return self.cleanOutput(self.sio.readlines())
+
+    # Antwort DICT bereinigen
+    def cleanOutput(self,output):
+        # erstmal suchen wir nach einem OK in der Ausgabe
+        if not 'Error' in output:
+
+            # wir entfernen alle OKs
+            while 'OK\n' in output:
+                output.remove('OK\n')
+
+            # wir entfernen alle \n
+            while '\n' in output:
+                output.remove('\n')
+
+        else:
+            return 'ERROR'
+
+        if len(output) > 0:
+            return output[0].replace('\n','')
+        else:
+            return ' '
+
+
+
+    # tty setter
+    def setTTY(self,tty):
+        self.tty = tty
+
+    # tty getter
+    def getTTY(self):
+        return self.tty
+
+    # PIN setter/getter
+    def setPIN(self,pin):
+        self.pin = pin
+
+    def getPIN(self):
+        return self.pin
+
+    # Baud setter/getter
+    def setBaud(self,baud):
+        self.baud = baud
+
+    def getBaud(self):
+        return self.baud
+
+    # Konfigurationsoptionen für das Modem
+    def devSetup(self):
+        self.sendAT('ATE0')
+        self.sendAT('AT+CRSL=100')
+        self.sendAT('AT+CSCS="GSM"')
+        self.sendAT('AT+CMGF=1')
+
+    # Temperaturchecks
+    def devTemp(self):
+        self.devTemp = self.sendAT('AT+CMTE?').partition(",")[2]
+
+    # Informationen vom Modem lesen
+    def devInfo(self):
+        self.devInfo = self.sendAT('ATI')
+
+    def devProd(self):
+        self.devProd = self.sendAT('AT+GMM')
+
+    def devSN(self):
+        self.devSN = self.sendAT('AT+GSN')
+
+    def devRev(self):
+        self.devRev = self.sendAT('AT+GMR')
+
+    # setzt den PIN auf dem Modem
+    def sendPIN(self,pin):
+        if not 'ready' in self.sendAT('AT+CPIN?'):
+            # PIN fehlt, hier noch eintragen
+            self.sendAT('AT+CPIN=' + str(pin))
+
+    # temporaer: ESP setzt den PIN auf dem Modem
+    def sendESPPIN(self,pin):
+        self.sendAT('AT+CPIN=' + str(pin))
+
+
+    def sendSMS(self,number,text):
+        self.sendAT('AT+CMGS="'+ str(number) + '"\n' + str(text) + '\x1A')
+
+#print (ser.out_waiting)
+#mdm = SIM('/dev/ttyUSB1', 115200, 2389)
+#mdm.sendSMS("017643609376", "neue Testnachricht")

+ 9 - 0
test/esp_uart.py

@@ -0,0 +1,9 @@
+# demo script zum Testversand einer SMS
+
+from machine import UART
+uart = UART(1, baudrate=115200)
+uart.write('ATI\r\n')
+uart.write('AT+CPIN?\r\n')
+uart.write('AT+CPIN=2389\r\n') # PIN Check
+#uart.read(5) # read up to 5 bytes
+