Fox Red Labs / Builds / Smart home and radio
Send sensor readings over a sub-1 GHz radio from an LP-MSPM0G5187
A plain MSPM0 with a CC1407P radio plug-in sends temperature, humidity and light at 915 MHz; a CC1354P10 LaunchPad receives them. Tested on one desk; range not measured.
HardWiring neededan evening with two boards
Parts and steps
You need
- LP-MSPM0G5187 LaunchPad development kit the sender's host
- BP-BASSENSORSMKII Sensors BoosterPack plug-in module temperature, humidity and light
- BP-CC1407P-9-FE sub-1 GHz radio BoosterPack plug-in module the sub-1 GHz radio
- LP-CC1354P10-1 LaunchPad development kit the receiver
- ELEGOO jumper wires x8 radio to the LaunchPad's J20 header

Pin table
| Radio pin | LaunchPad pin | What it is | Needed |
|---|---|---|---|
| Radio pin 1 (3V3) | J1 pin 1 (3V3), through the sensor pack | power | required |
| Radio pin 20 (GND) | J3 pin 22 (GND), through the sensor pack | ground | required |
| Radio pin 7 (SCLK) | J20 PB9 | SPI clock | required |
| Radio pin 15 (PICO) | J20 PB8 | data into the radio | required |
| Radio pin 14 (POCI) | J20 PB7 | data out of the radio | required |
| Radio pin 18 (CS_N) | J20 PB6 | chip select | required |
| Radio pin 36 (RESET_N) | J20 PB10 | radio reset | required |
| Radio pin 23 (SPI_INT) | J20 PB11 | radio says it has data | required |
Stack the sensors, wire the radio beside them.BENCH
With USB unplugged, plug the Sensors BoosterPack onto the MSPM0 G5187. Screw the 915 MHz antenna onto the radio board's SMA socket. Join the radio to the LaunchPad's J20 header with the eight wires in the table: the LaunchPad has pins only on J1 and J3, which the sensor pack uses.
You should see: Each wire's other end is on the pin in the table (the picture tags both ends).
Build the sender.TERMINAL
Check the power limit for 915 MHz in your country first: the sender runs at the amplifier's top setting, above what a license-free link normally allows; lower it before any outdoor run. Then, from the repository root, with the MSPM0 SDK 2.11, SysConfig and TI Arm Clang installed:
RADIO_APP=radio_tx RADIO_CFLAGS=-DHB_INT_POLL mspm0g5187/radio/build.shYou should see: The image
mspm0g5187/radio/out/radio_tx.out(20.4 kB of flash).Flash the sender and read its port.TERMINAL
Put your probe serial in
mspm0g5187/MSPM0G5187_<probe serial>.ccxml(xdsdfu -elists it), flash, then open the board's first serial port at 115200 baud.Replace <probe serial> before you run this.
/Applications/ti/uniflash_9.6.0/dslite.sh --mode flash -c mspm0g5187/MSPM0G5187_<probe serial>.ccxml -e -f -v -u mspm0g5187/radio/out/radio_tx.outYou should see: A banner
radio_tx: G5187 + Sensors BoosterPack -> CC1407P, 915 MHz 50 kbps 2-GFSK, then one line a second:tx FRL n=12 t=24.80C rh=36.9% lux=207.20 -> sent status=16 ....Build the receiver.TERMINAL
TI's receive example for the CC1354P10-1, moved to 915 MHz with two files changed. Fetch the F2 SDK sources, build its libraries, then build the example; the full command list (about 5 minutes and 110 MB) is in
cc1354p10/radio-rx/README.mdunder Build.python3 cc1354p10/radio-rx/build_f2_libs.py f2sdkYou should see: Libraries built (43 of 43 driverlib files); then
makein the example'sticlangfolder leavesrfPacketRx.hex(29.2 kB).Flash and start the receiver.TERMINAL
Flash the hex with DSLite and the CC1354P10 connection file (your probe serial in it), then start it with the reset command; the flash does not reset the board.
Replace <probe serial> before you run this.
/Applications/ti/uniflash_9.6.0/dslite.sh --mode flash -c cc1354p10/CC1354P10.ccxml -e -f -v -u rfPacketRx.hex xds110reset -s <probe serial>You should see: No output until you run the reset command; then open the receiver's first serial port at 115200 baud.
Read the packets.TERMINAL
Watch the receiver's port. Each packet prints as hex; the text is the reading.
You should see: Lines like
pkt 2 len=38 rssi=-14 status=0x00 data=46524c20..., which readsFRL n=292 t=25.21C rh=36.0% lux=208.48, and every 14 scount ok=350 crc_bad=0.Optional: post the readings to Home Assistant.TERMINAL
Set
HA_URLandHA_TOKEN(a long-lived token from your profile), then run the bridge on the receiver's port.Replace <probe serial> before you run this.
python3 cc1354p10/radio-rx/ha_bridge.py --port /dev/cu.usbmodem<probe serial>1You should see: Four sensors appear:
sensor.frl_radio_temperature,sensor.frl_radio_humidity,sensor.frl_radio_lightandsensor.frl_radio_signal.
Or hand it to a coding assistant
Paste this in a terminal. It hands off to an AI assistant, which says when to plug in each of the two boards.
git clone --depth 1 --filter=blob:none https://github.com/Fox-Red-Labs/fox-red-labs.git && cd fox-red-labs
./start.sh mspm0g5187 sub-ghz-link --assistant claudegit clone --depth 1 --filter=blob:none https://github.com/Fox-Red-Labs/fox-red-labs.git && cd fox-red-labs
py start.py mspm0g5187 sub-ghz-link --assistant claudeIt runs the steps above and reports what it saw.
Not Claude Code? Copy this prompt instead.
If something goes wrong
| The radio later answers with a checksum error on everything it receives | The inner-row wires (pins 23 and 36) are the usual missing ones. |
| At step 2 | The script copies TI's SDK SPI example and patches the copy; if it cannot find the SDK, set the paths it prints. |
No sent status=16 and a version error | Check the wires; diag.c and mosi.c in the same folder test which wire is open. |
| At step 4 | CAN, SD card and microphone driver files fail to build; the receiver does not use them. |
| No output | Start it with the reset command; the flash does not reset the board. |
More troubleshooting
| At step 6 | crc_bad rising or silence means the two settings disagree or the sender is not running. |
| At step 7 | Plain http is accepted only for a local or private address; otherwise use https. |
What to build next
Every build. The code for all of them is in the GitHub repository.
Evidence and limits21,658 of 21,658 packets from an MSPM0G5187 and a CC1407P radio reached a CC1354P10 over 6 h 15 min, no checksum errors, -14 dBm on one desk. Ran on 2 boards. Results, sources, timing and limits.
Expected result: The sender prints one sent status=16 line a second. The receiver prints each packet with the readings as text and a signal near -14 dBm on one desk, and its checksum-error count stays at 0.
What this shows
- A plain MSPM0 can host this radio: 21,658 of 21,658 packets over about 6 h 15 min, 0 checksum errors, at 915 MHz, 50 kbps, one desk.
- The same host sent all 23 of the radio's PHY profiles (345 of 345 transmit commands finished), and a CC1354P10 received 2-GFSK and the Wi-SUN FSK modes listed in mspm0g5187/radio/README.md.
- Readings reached Home Assistant through a bridge on the computer.
What this does not establish, and limits
What this does not establish
- Range through a house or outdoors: not measured. Distance on the desk was not recorded.
- A Wi-SUN or other network stack: none is on the sender. The packets are plain text lines.
- Legal power: the sender runs at the amplifier's top setting, above what a license-free 915 MHz link normally allows.
- Battery life: not measured.
Limits to keep in mind
- TI ships no MSPM0 code for this radio; this host layer is this repository's own, around TI's driver.
- Checked on one Intel Mac only.
- The radio is a preview part, and the setup interface can change at release.
Sources
Why this board
The radio's maker ships host examples for its own LaunchPad kits only; an MSPM0 host is a port: TI's host driver runs here with its two Zephyr-only files replaced.
Versions, sizes and timing
| Link | 915 MHz, 50 kbps 2-GFSK, 37 to 39 byte text packets every 1.04 s | README notes |
|---|---|---|
| Sender size | 20.4 kB of flash, 5.4 kB of RAM (TI's 24 SPI buffers) | |
| Receiver size | 29.2 kB of flash | |
| Radio firmware | 3.0.0.25, read 5 of 5 times | |
| SPI clock | 1 MHz for this link; 1 to 8 MHz tested |
Evidence
- 2026-10-10 and 11: a CC1354P10-1 running TI's receive example at 915 MHz received 21,658 of 21,658 packets over about 6 h 15 min, 0 checksum errors, signal -14 dBm (range -15 to -14), boards on one desk. The sender image is 20.4 kB of flash and 5.4 kB of RAM. README notes
- One hour logged at both ends: 3,508 of 3,508, 0 checksum errors. README notes
- Home Assistant: four sensors posted every 10 s by a bridge, 253 posts logged. README notes
Other boards
- MSPM0G3507should work
- MSPM0L1306, CC2340R5, F2800137Not for this chip no radio
What the status words mean
Works ran here and did what it shouldCould work some of it ran; real porting effort is left; hover for whatNot for this chip the chip or its vendor software cannot; hover for why
Result grid
Works ran here and did what it shouldShould work it builds; only naming, packaging or build glue is in the way; hover for whichCould work some of it ran; real porting effort is left; hover for whatNot for this chip the chip or its vendor software cannot; hover for why
Experiments (4)
| Status | What was tried | Result |
|---|---|---|
| Works | Can an MSPM0 host TI's CC1407P radio, the BP-CC1407P-9-FE, and send sensor readings to another board? MSPM0 G5187, 2026-10-10 | TI's CC1407P host driver runs on the MSPM0G5187 with its driver files unchanged and its two Zephyr-only files replaced by this repo's bare-metal layer. It needs eight wires, because the LaunchPad has pins only on J1... |
| Works | Can an MSPM0 host run every protocol TI's CC1407P has, and keep up on the fastest? MSPM0 G5187, 2026-10-11 | On transmit, all 23 of TI's CC1407P PHY profiles ran from the MSPM0G5187. That is 345 of 345 packets, each within 3.4 percent of TI's stated rate. Receive was checked where a CC1354P10 setting exists: Wi-SUN FSK 2b... |
| Works | Can TI's CC1407P and CC1354P10 talk to each other on every protocol they share? MSPM0 G5187, 2026-10-11 | On 2-GFSK 50 kbps and Wi-SUN FSK modes 1a, 1b, 2a, 2b, 3 and 4b, 20 of 20 packets went both ways between the CC1407P on an MSPM0G5187 and a CC1354P10. Modes 4a and 5 lose packets toward the CC1407P. Pings are partial... |
| Works | Can one TI radio and an MSPM0 run family demos: walkie-talkie, fox hunt, key finder, smart house? MSPM0 G5187, 2026-10-11 | All five demos work as built. One-way voice passed 122 of 122 frames. Fox hunt heard 64 of 64 beacons, hot to cool. The key finder answered 10 of 10 in 21 ms. The house node sent mailbox, doorbell, panic, kid messages... |
Source files
- LP-MSPM0G5187 radio notes (MSPM0 G5187)
- LP-CC1354P10-1 radio rx notes (CC1354P10-1)
Get the code and tell us how it wentThe clone command, the board folder with its AGENTS.md, reports from others, and the three report forms.
Get the code
Clone the repository and open the board's folder below. AGENTS.md is a plain text file of notes for AI coding assistants, and llms.txt at the root indexes the site for one.
git clone https://github.com/Fox-Red-Labs/fox-red-labs.git
- LP-MSPM0G5187: folder
mspm0g5187/.- README: the board's lab notebook (what was run, in order)
- Notes for an AI coding assistant working in this repository: notes for an AI assistant; copy it into your own project if you use one
- FAQ: errors and fixes
The other 1 board folder
- LP-CC1354P10-1: folder
cc1354p10/.- README: the board's lab notebook (what was run, in order)
- Notes for an AI coding assistant working in this repository: notes for an AI assistant; copy it into your own project if you use one
- FAQ: errors and fixes
- LP-CC1354P10-1: folder
Code is BSD-3-Clause, writing is CC BY 4.0; third-party folders keep their own licenses.
Built it? Tell us
Built this, or got stuck? Report it on GitHub with a few short answers. Your report shows here in your words, marked as yours. A failure that repeats on the bench gets its fix here.