Learn

Powering On a SIM7600G-H 4G LTE Module on a Raspberry Pi 4B

Wire a SIM7600G-H 4G LTE module to a Raspberry Pi 4B and control its real power-on sequence in Python — the module's own 3.8-4.2V VBAT requirement, the PWRKEY hold timing that actually turns it on, and why an antenna connection matters for network status.

Note: the SIM7600G-H 4G LTE Module is a Premium-tier component in the simulator — you’ll need a Premium or VIP plan to use it there.

Try this directly in the free Raspberry Pi 4B simulator — no hardware or signup required. New to the GPIO header? Start with the interactive pinout guide.

What you’ll need

  • Raspberry Pi 4B
  • SIM7600G-H 4G LTE Module
  • DC Power Supply (this module's own dedicated 3.8-4.2V source — NOT the Pi's 5V/3.3V rails)

Step by step

  1. Drag Raspberry Pi 4B onto the Canvas.
  2. Drag the SIM7600G-H 4G LTE Module onto the Canvas — like the Servo or HC-SR04, it connects only through drawn wires, not a breadboard.
  3. Drag a DC Power Supply onto the Canvas too. Select it and, in its settings panel, set Voltage to 4.0 — inside the module's real 3.8-4.2V VBAT range.
  4. Hover over the module's 8 pins to confirm the labels: VBAT, VBAT, GND, GND, TXD, RXD, PWRKEY, ANT_MAIN.
  5. Wire the DC Power Supply's + → either of the module's two VBAT pins, and its − → a Pi GND pin, then that same Pi GND pin → either of the module's two GND pins. The module's two VBAT pins are the same internal node (same for the two GND pins) — wiring to just one of each is enough.

Do NOT wire VBAT to a Pi 5V or 3.3V pin — neither is inside the required 3.8-4.2V window, and the module will correctly refuse to power on. This is real hardware behavior, not a simulator restriction: a real SIM7600G-H needs its own regulated supply, which is exactly what the DC Power Supply component stands in for here.

  1. Wire ANT_MAIN → any nearby pin — for example, back to a spare Pi GND pin. The module only needs SOMETHING wired there to represent an antenna being attached; without it, the module can power on but will never report as registered on the network.
  2. Wire PWRKEY → a Pi GPIO pin you'll drive as an output (e.g. physical pin 37).
  3. Go to the Code tab and write a script that pulls PWRKEY LOW for a real hold, matching the module's actual datasheet timing:
import RPi.GPIO as GPIO
import time
import asyncio
 
GPIO.setmode(GPIO.BOARD)
PWRKEY = 37 # adjust to match your wiring
 
GPIO.setup(PWRKEY, GPIO.OUT)
GPIO.output(PWRKEY, True) # idle HIGH — not pressed
 
# Hold PWRKEY LOW for just over 1 second to power the module on.
GPIO.output(PWRKEY, False)
await asyncio.sleep(1.2)
GPIO.output(PWRKEY, True)
 
print("PWRKEY released — check the module's status text on the Canvas")
 
while not should_stop():
await asyncio.sleep(1)
  1. Click Start. Watch the module's own on-canvas status LED and text — it should read PWR shortly after the script releases PWRKEY (powered on, but not yet registered), then NET once the antenna wiring is taken into account.
  2. To see the reject behavior for real: click Stop, change PWRKEY's hold to a short pulse instead — replace `await asyncio.sleep(1.2)` with `await asyncio.sleep(0.3)` — and click Start again. Because the hold never reaches 1 full second, the module stays OFF no matter how many times you repeat the pulse.
  3. Now try the VBAT rejection: click Stop, change the DC Power Supply's Voltage to 12 (well outside 3.8-4.2V), restore the script's hold back to 1.2 seconds, and click Start. The module's status stays OFF and the Console logs a one-time note explaining PWRKEY was held but VBAT was out of range.
  4. To power the module back off: with it already powered on (status PWR or NET), hold PWRKEY LOW again — this time for longer than 3 seconds, e.g. `await asyncio.sleep(3.5)` — then click Start. A hold that reaches 1 second but not 3 seconds while already on has no effect at all; only crossing the full 3-second threshold turns it off.

What “working correctly” looks like

  • A clean 1.2-second PWRKEY LOW hold (with VBAT in range and GND connected) flips the module's status from OFF to PWR, and to NET once ANT_MAIN is also wired to something.
  • A short pulse under 1 second — no matter how many times it's repeated — never powers the module on; the status stays OFF the whole time.
  • With VBAT set outside 3.8-4.2V (or the DC Power Supply left unwired entirely, reading 0V), even a correctly-timed 1.2-second PWRKEY hold leaves the module OFF, and the Console logs exactly one explanatory note per press attempt.
  • Once powered on, a PWRKEY hold under 3 seconds does nothing; a hold past 3 seconds turns the module back off.
  • Clicking Stop always resets the module back to OFF, regardless of what state it was in — the next Start needs a fresh, correctly-timed PWRKEY hold.

If something’s wrong

  • Status never leaves OFF even with a 1.2-second hold → double-check the DC Power Supply's Voltage is actually between 3.8 and 4.2 (its default is 12V, well out of range) and that its − pin traces back to the same GND the module's own GND pin is wired to — VBAT reads 0V if there's no return path to ground at all.
  • Status shows PWR but never reaches NET → confirm ANT_MAIN has a wire on it — any wire, to any pin. This module never reports network registration with ANT_MAIN left completely unwired.
  • PWRKEY seems to do nothing at all → make sure the script actually drives it LOW then back HIGH with a real `asyncio.sleep()` in between (not `GPIO.output(PWRKEY, False)` immediately followed by `True)` with no delay at all) — the hold DURATION is what the module measures, not just that the pin toggled.
  • TXD/RXD are wired but nothing about them shows up anywhere → this is expected, not a bug: this simulator has no UART/serial protocol simulation at all, so TXD/RXD exist as real, correctly labeled pins to practice wiring (they cross to the Pi's own RXD/TXD, GPIO15/GPIO14) but carry no actual data.