Skip to content

Instantly share code, notes, and snippets.

@X-Adam
Created October 1, 2024 08:43
Show Gist options
  • Save X-Adam/21de6adf0803ee6f696eefbe66016b57 to your computer and use it in GitHub Desktop.
Save X-Adam/21de6adf0803ee6f696eefbe66016b57 to your computer and use it in GitHub Desktop.
MicroPython GSM Module Baudrate Finder
from machine import UART, Pin
import time
class GSM:
def __init__(self, regulator, power):
self._regulator = Pin(regulator, mode=Pin.OUT, value=False)
self._power = Pin(power, mode=Pin.OUT, value=False)
self._uartWizard: callable = 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 setUART(self, baudrate: int):
return self._uartWizard(baudrate)
def isMeaningful(data):
return data == b'\r\n*ATREADY: 1\r\n'
def baudrateFind(self, baudrateRange: list[int] | tuple[int] = None):
if baudrateRange is None:
baudrateRange = [300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200, 230400, 460800, 921600,
1842000, 3686400]
for baudrate in baudrateRange:
self.restart()
uart = self.setUART(baudrate)
while not uart.any():
pass
data = uart.read()
print(data, baudrate)
if data and self.isMeaningful(data):
print(f"Meaningful data received with baudrate: {baudrate}")
break
regulatorPin=7
powerPin=8
uartID = 1
uartRX = 5
uartTX = 6
gsm = GSM(regulatorPin, powerPin)
gsm.baudrateFind()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment