Skip to content

Instantly share code, notes, and snippets.

@X-Adam
Created October 1, 2024 08:44
Show Gist options
  • Save X-Adam/b923210956b08022d2955962f7cb8216 to your computer and use it in GitHub Desktop.
Save X-Adam/b923210956b08022d2955962f7cb8216 to your computer and use it in GitHub Desktop.
MicroPython GSM Module Baudrate Fixed
from machine import UART, Pin
import time
class GSM:
def __init__(self, regulator, power, baudrate=115200):
self._regulator = Pin(regulator, mode=Pin.OUT, value=False)
self._power = Pin(power, mode=Pin.OUT, value=False)
self._baudrate = baudrate
self._uartWizard: callable = None
self._uart = None
def restart(self):
self._regulator.off()
self._power.off()
time.sleep_ms(100)
self._regulator.on()
self._power.on()
time.sleep_ms(100)
self._power.off()
time.sleep_ms(50)
self._power.on()
def setUARTWizard(self, callback: callable):
self._uartWizard = callback
def getUART(self):
if not self._uart:
self.setUART(self._baudrate)
return self._uart
def setUART(self, baudrate: int):
self._baudrate = baudrate
self._uart = self._uartWizard(baudrate)
def baudrateFixed(self, baudrate: int):
self.restart()
while True:
if self.getUART().any():
print(data := self.getUART().read())
if data == b'\r\n+CPIN: SIM REMOVED\r\n':
print('AT Ready')
break
self.getUART().write('AT+IPREX=' + str(baudrate) + '\r\n')
self.getUART().flush()
while True:
if self.getUART().any():
print(data := self.getUART().read())
if data == b'\r\nOK\r\n':
print('Baudrate set')
break
self.restart()
self.setUART(baudrate)
while True:
if self.getUART().any():
print(data := self.getUART().read())
if data == b'\r\n+CPIN: SIM REMOVED\r\n':
print('AT Ready')
break
regulatorPin=7
powerPin=8
uartID = 1
uartRX = 5
uartTX = 6
gsm = GSM(regulatorPin, powerPin, 115200)
gsm.setUARTWizard(lambda baudrate: UART(uartID, baudrate=baudrate, rx=uartRX, tx=uartTX))
gsm.baudrateFixed(460800)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment