This is a Zigbee Light running on Thunderboard Sense 2 "the ultimate multi-sensor, multiprotocol cloud inspiration kit". This is also my toy project, an attempt to learn the Zigbee Application Framework. The project is based on Zigbee 3 Light example project, with some addional components like hall sensor, IMU sensor etc to provide an interface for light and device control.
Well, my kids like playing Minecraft, I like playing Minecraft and when I saw this online, I just couldn't resist the impulsive buying and ordered a few. Although there's nothing wrong with those lights, I felt that it didn't fit well with all the other lights in the house controlled by Home Assistant Zigbee integration. That's when I decided these lights to be Zigbee enabled. However, instead of cutting open the lights, I opted to 3D print the Minecraft Torch Nightlight and designed a custom torch head torch head to hold the TBS2 board. In the future, I'll need to find a replacement for TBS2. Although, BRD2601b supports Matter, it is a bit expensive. Alternatively, I might consider building a custom board because I haven't been able to find any other board that at least has an IMU and a microphone.
For the very 1st time, you would need to install both the boot loader and the application. For updates, you either could download just the app update or use the OTA imager for the over-the-air update.
Head over to TBS2-Torch Release, find the a release with the bootloader, download the bootloader artifact and copy app_btl-combined.s37
to TB004
Thunderboard Sense 2 mass storage device. Once copied, the device will reboot.
Next, download the application artifact archive and copy TBS2Torch.hex
to TB004
mass storage device.
Alternatively, if you have Simplicity Commander installed, you can use the simplicity commander to flash the same files. At least once, you would need to flash the app_btl-combined.s37
, for the upgrades, just flash the TBS2Torch.gbl
or TBS2Torch.hex
- Short duration press -- Toggle light
- Medium duartion press -- Dim light on/off over 5 seconds
- Short duration press:
- Indicate network status and Try to join network if is offline
- Long Blink -- Network is Offline/Couldn't join
- Three short blinks -- Network is Online
- Indicate network status and Try to join network if is offline
- Long duration press -- Leave network and try to join a new one
Shaking the board/torch for longer than 0.75s, but less than 1.5s will toggle light on or off.
Using the magnet you can toggle the light on or off, but also check for the network state or leave and rejoin network. The hall sensor is located on the top of the board.
- bringing the magnet for the short duration (0.5s or so) will toggle the light
- Keeping the magnet near the board could be used to indicate the network state or forcing the device to leave and re-join the network. Keeping the magnet for longer than 3 seconds, will cause the light to turn on green color. If you remove the magnet once the light turns green, then the network state will be indicated as follows:
- Online -- Green blinkining
- Offline -- Red blinking
If you keep and don't remove the magnet once the light turns green, then after three seconds the light turns orange, after three more seconds light turns red and after three more seconds the light starts blinking red. If the magnetic field is still detected for 3 seconds while the light is blinking red, then the device will leave the current Zigbee network and starts attempts to join the new network. Removing the magnet during any of those steps aborts leaving the network.
The application makes use of the temperature and humidity sensor, however, when using the micro-usb connector to power the, the LDO regulator generates heat which skews the temperature measurement. Same happens if the light is on, there's enough heat generated by the LED driver to skew the temperature measurement.
Currently, the project is built with Gecko SDK 4.3.0. To build the project with the Simplicity Studio v5 do the following:
- Clone the Torch Light project onto your machine
- In Simplicity Studio, import the project from
./TBS2Torch
folder of the cloned repository into your workspace - Force project generation and build the project
To build the project locally the build container can be reused. Simply start the container local with this repository bind-mounted as /build
, e.g.
docker run --rm -it \
--user builder \
-v $(pwd):/build -v ~/.gitconfig:/home/builder/.gitconfig \
ghcr.io/adminiuga/silabs-project-builder:4.3.0
Generate the project with
slc generate \"
--with="EFR32MG12P332F1024GL125,brd4166a" \"
--project-file="$(pwd)/TBS2Torch/TBS2Torch.slcp" \"
--copy-sdk-sources \"
--configuration="SL_IOSTREAM_USART_VCOM_RX_BUFFER_SIZE:32"
Next, apply the SDK patches:
pushd TBS2Torch/gecko_sdk_4.3.0
for patch in "../../patches/GeckoSDK"/*.patch
do
echo "Applying ${patch}"
patch -p1 < $patch
done
popd
Then build it with
pushd TBS2Torch
make -f TBS2Torch2.Makefile -j8 release
popd
Once the build is complete, the build artifacts are going to be in ./build/release
folder.
It is possible to use a LiIon 18650 cell for powering. Just find an appropriate battery holder and connect:
Header | Pin Number | Function | Connect to |
---|---|---|---|
EXPA | 1 | Ground | Battery "-" |
EXPA | 7 | Battery Voltage Sense (PA6) | Voltage Divider for battery voltage sensing |
EXPB | 18 | 5V | Battery "+" |
The new version supports battery voltage and % charge remaining, assuming you are using a standard 18650 cell. Since fully charged battery voltage exceeds 3.3V, you cannot feed it directly to header pin #7, but need to use a volgage divider to reduce the voltage. The current firmware is using 18K + 27K voltage divider (just because I had those resistor handy), if you change those, then you would need to update the resistor values in config/sl_battery_monitor_config.h and recompile the firmware.