The Golioth Developer Blog

Adding SiLabs EFR32BG27 to the Golioth Bluetooth-to-Cloud Service

💡 Golioth Bluetooth-to-Cloud is now known as Golioth Connectivity, which is now out of private access. For ongoing support of SiLabs components, we are tracking changes in a thread on the Golioth forum specific to SiLabs parts.
If there’s one thing we love doing, it’s adding new chips to an IoT fleet. The Golioth Bluetooth-to-Cloud service is so hot right now because if your chip speaks BLE, we can connect it to the cloud. The Silicon Labs EFR32BG27 found on the xG27 development kit is the latest Bluetooth offering to be added to a Golioth fleet. Let’s jump in and discuss what it takes to enable SiLabs parts.

Using the EFR32BG27 with Zephyr

We grabbed the SiLabs xG27 dev kit for this experiment because it already has support in the Zephyr tree. Although support begins with v4.1.0 of Zephyr, our testing showed that for the device to work correctly with our gateways we needed to upgrade to v4.2.0. Black rectangular development board about the size of two postage stamps with a white Silicon Labs logo on it.This board includes an embedded J-Link adapter so you can flash it using the USB-C port and Zephyr’s west flash command. To access the Bluetooth features of the chip, use west to grab the binary blob.

west blobs fetch hal_silabs
That takes care of the BLE prerequisites. I find that

the Zephyr Bluetooth Observer sample is really handy when testing out new chips, so I built and ran that sample to confirm the radio was working as expected. Now it’s time to add this to our IoT fleet!

Building Golioth’s Bluetooth-to-Cloud Example To get the SiLabs EFR32BG27 talking to the cloud I followed the instructions from the

Golioth Bluetooth-to-Cloud connectivity repository. The example application is found in the Pouch non-IP protocol repository that is included as a submodule. I just needed to make a few updates to the pouch/west.yml manifest file in that repo so it will work with SiLabs parts:

  1. Use Zephyr v4.2.0
  2. Add the SiLabs HAL library to the allowlist
  3. Add cmsis_6 to the allowlist
# Copyright (c) 2025 Golioth, Inc.
# SPDX-License-Identifier: Apache-2.0

manifest:
  version: 0.8

  projects:
    - name: zephyr
      revision: v4.2.0
      url: https://github.com/zephyrproject-rtos/zephyr
      west-commands: scripts/west-commands.yml
      import:
        path-prefix: deps
        name-allowlist:
          - zephyr
          - cmsis
          - cmsis_6
          - hal_nordic
          - hal_silabs
          - mbedtls
          - mcuboot
          - segger
          - tfm-mcuboot
          - trusted-firmware-m
          - zcbor
Don’t forget to run

west update after making these changes to pull in the new version and new library. Here’s what that looks like, including the step to download binary blobs.

west update
west blobs fetch hal_silabs
Next, build the example application. Don’t forget to replace the

REPLACEME part with the Device ID from the Golioth console.

west build -p -b xg27_dk2602a pouch/examples/ble_gatt -- -DCONFIG_EXAMPLE_DEVICE_ID=\"REPLACEME\"
west flash
You should have already set up your gateway by

following steps 1 and 2 from the getting started guide. If so, your newly flashed SiLabs board will soon be reporting into the cloud!

Golioth web console showing the SiLabs xg27_dk2602a connecting to the Gateway.

Go Deeper with the SiLabs xG27

By default the Golioth example sends simulated temperature sensor data. But the xG27 dev board has a Si7210 sensor that includes a temperature reading. It’s far more fun to send actual sensor readings to the cloud so let’s update the sample to read that sensor! First, create an overlay file to enable the sensor node which is already part of the in-tree Zephyr definition.

&i2c0 {
  si7210 {
    status = "okay";
  };
};
I also added some Kconfig symbols to get this sensor working. The SHELL-related symbols are optional:
CONFIG_I2C=y
CONFIG_I2C_SHELL=y
CONFIG_SENSOR=y
CONFIG_SENSOR_SHELL=y
From there it’s the simple matter of actually reading the sensor and sending it to Golioth.
const struct device *const temperature_dev = DEVICE_DT_GET_ANY(silabs_si7210);
#include 

static void pouch_event_handler(enum pouch_event event, void *ctx)
{
    if (POUCH_EVENT_SESSION_START == event)
    {
        sensor_sample_fetch(temperature_dev);
        struct sensor_value temperature;
        sensor_channel_get(temperature_dev, SENSOR_CHAN_AMBIENT_TEMP, &temperature);

        char sbuf[64];
        snprintk(sbuf, sizeof(sbuf), "{\"temp\":%g}", sensor_value_to_double(&temperature));

        pouch_uplink_entry_write(".s/sensor",
                                 POUCH_CONTENT_TYPE_JSON,
                                 sbuf,
                                 strlen(sbuf),
                                 K_FOREVER);

        golioth_sync_to_cloud();
    }

    if (POUCH_EVENT_SESSION_END == event)
    {
        service_data.data.flags = 0x00;
        k_work_schedule(&sync_request_work, K_SECONDS(CONFIG_EXAMPLE_SYNC_PERIOD_S));
    }
}
And we immediately notice actual sensor data streaming in instead of the hardcoded value of 22:

Golioth console showing a simulated temperature of 22 followed by an actual reading of 29.5275

Bluetooth to Cloud has never been this easy

The Golioth Bluetooth-to-Cloud service is incredibly easy to integrate with your low-power devices. Add a Gateway to your fleet and you will be streaming your sensor data to the cloud right away.

About the author
M
Mike Szczys
Golioth

Mike is a Senior Firmware Engineer at Golioth. His deep love of microcontrollers began in the early 2000s, growing from the desire to make more of the BEAM robotics he was building. During his 12 years at Hackaday (eight of them as Editor in Chief), he had a front-row seat for the growth of the industry, and was active in developing a number of custom electronic conference badges. When he’s not reading data sheets he’s busy as an orchestra musician in Madison, Wisconsin.

View all posts by Mike Szczys →

Get every post, as it ships

Zephyr RTOS, IoT engineering, and platform release notes. Twice a month.

Keep reading

More from the archive

Hardware

Why build hardware at a software company?

Golioth has built a range of custom hardware to test out many of the aspects of our own IoT offering. These challenges mirror what our customers face with their …

C
Chris Gammell
Feb 2, 2026 · 9 min
Featured

WiFi HaLoW with Morse Micro, Zephyr, and Golioth

Wi-Fi HaLoW enables high throughput, at a long distance using ISM band radios (850-950 MHz, depending on location). This post introduces the concepts behind the …

A
Arien Judge
Jan 22, 2026 · 4 min