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
- Drag Raspberry Pi 4B onto the Canvas.
- 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.
- 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.
- Hover over the module's 8 pins to confirm the labels: VBAT, VBAT, GND, GND, TXD, RXD, PWRKEY, ANT_MAIN.
- 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.
- 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.
- Wire PWRKEY → a Pi GPIO pin you'll drive as an output (e.g. physical pin 37).
- 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 GPIOimport timeimport 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)- 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.
- 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.
- 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.
- 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.