Skip to the content
2 layers99.8 × 99.8 mm1Wire LEDController, the printed circuit board in 3D

Software, Firmware & Documentation is licensed under GPLv3

Size
99.8 × 99.8 mm
Copper layers
2
Thickness
1.6 mm
Parts
35
Nets
80
Pads
203
Tracks, vias
607, 94
Pours
2
Routed
Yes
KiCad
KiCad 5 (file 20171130)
Created
3 Jun 2017
Updated
10 Nov 2021

Overview

1Wire LEDController is an open-source printed circuit board by InfernoEmbedded, from the InfernoEmbedded/onewire-softdevice repository on GitHub. It is a 2-layer board of 99.8 × 99.8 mm with 35 parts on 80 nets, routed with 607 tracks and 94 vias.

It is built around the STM32F030R8T6, LP2950-33 and RJ45. Its parts include 16 transistors, 11 connectors, 5 capacitors, 2 ICs and 1 resistor. It belongs with the STM32 boards of this library.

Main components

3

README

README.md

About

This repository contains hardware designs and software for implementing slave devices using the Maxim 1-Wire® protocol on the STM32 microcontrollers.

Licensing

Hardware is licensed under the The TAPR Open Hardware License Version 1.0

Software, Firmware & Documentation is licensed under GPLv3

Prerequisites

Hardware Design

Firmware

Layout

The libs directory contains source code for the OneWireSlave library.

The devices directory contains schematics, PCBs & firmware for the client devices.

Devices

Template

A template schematic with the basics wired up.

Splitter

A passive Y splitter that allows short CAT5 runs to be broken off the main bus. A typical use would be to allow a short run to be dropped down a wall to a sensor or switch panel. Optionally includes a DS18B20 for temperature sensing.

DS2408 Emulator

A partial implementation of the DS2408 in software, used for initial testing of the 1-Wire® protocol, but is otherwise unmaintained and unsupported.

DS2408 4 Channel Switch

A device that accepts 4 switches, and provides 4 solid state relays. A jumper allows the relays to operate independently, or forced to operate in on/off pairs (for roller shutter/projector screen control). Somewhat obsoleted by SoManySwitches.

Fimware Updater

A sub-16KB bootloader which allows devices that implement the Inferno Embedded commands to update firmware over the bus. The included STM32F030X8.ld linker file stores the bootloader at the start of the flash region. Firmware that is designed to be flashed with this uses a modified linker file that stores the firmware with a 16kB offset.

Inferno Embedded commands allow the device to be rebooted into the bootloader so that they can be updated. The device can also be forced to remain in bootloader mode by shorting SWDAT on the SWD header to GND with a jumper.

SoManySwitches

A device with 8 RJ45 jacks, which each permit 6 toggle or momentary switches to be connected to the 1-Wire® network. The device will be alarmed when a switch is activated, and can then be polled to identify which switch was activated.

SoManySwitches Clientboard

A daughterboard for SoManySwitches, designed to be installed at the switch point. The RJ45 socket is broken out into pairs of Gnd/Switch, and pullup/pulldowns are provided to suppress spurious switch activations.

Aircon Zone Controller

A device that controls up to 8 24VAC air conditioning dampers, following the PolyAire pinout:

RJ45 PinSignal
1N/C
2Open
3Open
4Neutral
5Neutral
6Close
7Close
8N/C

By setting the transition time for each damper, the controller can partially open them, allowing balancing to be achieved via software control.

4 Channel RGBW LED Controller

A device to control up to 4 channels of common-anode RGBW LED strips, at up to 48V. Fading from the current colour to a new one is handled locally. An external relay can be driven via the Inline SSR board, allowing the LED power supply to be shut down when no strips require power.

Inline SSR

A small board with a solid state relay installed, designed to be mounted inline in a power cord. It connects to other boards via a headphone cable.

Hardware Design

Microcontroller

This software has been developed and tested on the STM32F030R8 microcontroller, an ARM Cortex-M0 with 64kB of flash & 8kB of RAM. We are running it at 48MHz using the internal RC oscillator. It may be possible to reduce the clock speed, but this is untested. They can be purchased for around AUD$1 each on Aliexpress.

Prototype testing can be performed on a Nucleo-F030R8.

Microcontroller Pin Usage

A single GPIO from the microcontroller is used to communicate over the 1-Wire® protocol. This is typically pin F0.

RJ45 Pinout

RJ45 PinSignal
1Gnd
2+5V
3Gnd
41W Data
5Gnd
6N/C
7+24V
8Gnd

Software Design

Runtime

The library sits on top of the Mbed runtime, altough it is more reliant on the lower level HAL APIs than the Mbed constructs. The bootloader uses a cut-down version of the runtime to allow it to fit within 16kB, however, the cost is that it cannot print to the serial port.

Low Level (OneWireSlave.cpp)

This file contains the base class for implementing 1-Wire® protocol devices. It provides methods to send and receive data on the bus, and handles device enumeration. It consumes Timer6 which it uses to maintain a 1 uS timer for signal timing. It uses the low level HAL APIs for catching state changes on the GPIO line, as the InterruptIn class added too much latency.

Protocol Level (SoftDevice.cpp)

This file defines how InfernoEmbedded devices communicate over 1wire. Each device reports a 64 bit type and 64 bit version, so only a single 1-Wire® family code is used (FE).

1wire commands are issued as follows: Master: Command Code (1 byte), Command data (up to 8 bytes), CRC8

Slave: Command good/bad (1 byte)

Slave: device response (chunks of up to 8 bytes)

Or...

Master: Streaming data

A 64 bit status register is provided, and the device will show up in alarm scans if any bits are set. On powerup, bit 0 is set (Power-on), allowing the devices to be reinitialised if they need state from the master. The status register is cleared automatically after each read.

Device Level (SwitchMaster.cpp & friends)

These files provide the device specific implementations. They define the 1-Wire® commands that are accepted, and interact with the user code via Listener classes. to allow designs to scale, the driver will report the number of implementations it supports (eg. switches), so that many physical variants can share the same code.

Getting Started

Development Environment

  • Install Eclipse for C/C++ development
  • Install System Workbench for STM32 Eclipse plugins
  • Clone the mbed sources git clone https://github.com/ARMmbed/mbed-os.git
  • Build the arm-nano-eabi toolchain by running build.sh in the toolchain directory
  • Fetch the ARM official toolchain by running build-arm.sh in the toolchain directory
  • use the scripts build.(bat|sh) and build-trace.(bat|sh) in the mbed directory to build the thin or trace-enabled builds of Mbed
  • Import the mbed Eclipse project
  • Import the Eclipse projects from this repository

Hardware Tools

These will be useful during development

Adding a new device

First, consider whether one of the existing device level drivers will do what you need, or can be expanded to achieve your goals (without straying too far from the intent of the driver). If you need to expand it, increment the version so that the client software (eg. OWFS) can identify what commands are available.

Next, create a frontend project that interacts with the device level driver. You may initially want to use a listener that uses the TRACE() macro rather than interacting with the hardware until you are happy with the protocol.

Finally, submit patches to OWFS that implement the new device driver. You can look at owfs/owlib/src/c/ow_ie_*.c to see how the existing drivers work. Important to note are the visibility functions, which allow a single family code to appear as many different devices.

Parts

35
QtyValueFootprintReferences
16IRLZ44NSkicad-open-modules:D2PAKQ1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, Q10, Q11, Q12, Q13, Q14, Q15, Q16
4CONN_01X052EDCK-Screw-Connectors:2EDCK-5.08-5PINP2, P3, P5, P7
3100nFCapacitors_SMD:C_0603C3, C4, C5
2RJ45RJ45:RJ45-ChinaSMDJ1, J2
1100uFCapacitors_SMD:c_elec_8x6.7C1
110kResistors_SMD:R_0603R1
14.7uFCapacitors_SMD:C_0603C2
1BARREL_JACKConnect:BARREL_JACKCON1
1CONN_01X05Pin_Headers:Pin_Header_Straight_1x05_Pitch2.54mmP6
1CONN_02X05Pin_Headers:Pin_Header_Straight_SMT_02x05P1
1DC_IN2EDCK-Screw-Connectors:2EDCK-5.08-2PINP4
1JACK_STEREOw_conn_av:jack_3.5_pj313d-smtJ3
1LP2950TO_SOT_Packages_SMD:TO-252-2LeadU1
1STM32F030R8Housings_QFP:LQFP-64_10x10mm_Pitch0.5mmU2

More from InfernoEmbedded/onewire-softdevice

11
  • 2 layers88.3 × 48.3 mmOutputBoard, the printed circuit board in 3D

    OutputBoard

    InfernoEmbedded/onewire-softdevice

    Software, Firmware & Documentation is licensed under GPLv3

    71 parts11
  • 2 layers99.8 × 99.8 mm1Wire Blank, the printed circuit board in 3D

    1Wire Blank

    InfernoEmbedded/onewire-softdevice

    Software, Firmware & Documentation is licensed under GPLv3

    40 parts11
  • 2 layers99.9 × 94.5 mm1Wire AC Zoning, the printed circuit board in 3D

    1Wire AC Zoning

    InfernoEmbedded/onewire-softdevice

    Software, Firmware & Documentation is licensed under GPLv3

    39 parts11
  • 2 layers94.6 × 60.3 mmControlBoard, the printed circuit board in 3D

    ControlBoard

    InfernoEmbedded/onewire-softdevice

    Software, Firmware & Documentation is licensed under GPLv3

    31 parts11
  • 2 layers46 × 91.3 mm4Channel SSR Switch, the printed circuit board in 3D

    4Channel SSR Switch

    InfernoEmbedded/onewire-softdevice

    Software, Firmware & Documentation is licensed under GPLv3

    25 parts11
  • 2 layers192.9 × 41.3 mm1Wire SoManySwitches, the printed circuit board in 3D

    1Wire SoManySwitches

    InfernoEmbedded/onewire-softdevice

    Software, Firmware & Documentation is licensed under GPLv3

    20 parts11
  • 2 layers45.1 × 44.7 mm16 Channel SSR Driver, the printed circuit board in 3D

    16 Channel SSR Driver

    InfernoEmbedded/onewire-softdevice

    Software, Firmware & Documentation is licensed under GPLv3

    18 parts11
  • 2 layers65.5 × 59.4 mm1wire-4switch, the printed circuit board in 3D

    1wire-4switch

    InfernoEmbedded/onewire-softdevice

    Software, Firmware & Documentation is licensed under GPLv3

    18 parts11
  • 2 layers19.9 × 27.4 mmSoManySwitches ClientBoard, the printed circuit board in 3D

    SoManySwitches ClientBoard

    InfernoEmbedded/onewire-softdevice

    Software, Firmware & Documentation is licensed under GPLv3

    8 parts11
  • 2 layers59.4 × 31 mm1wire roof module, the printed circuit board in 3D

    1wire roof module

    InfernoEmbedded/onewire-softdevice

    Software, Firmware & Documentation is licensed under GPLv3

    5 parts11
  • 2 layers17.1 × 30.5 mmInline SSR, the printed circuit board in 3D

    Inline SSR

    InfernoEmbedded/onewire-softdevice

    Software, Firmware & Documentation is licensed under GPLv3

    4 parts11

Similar boards

  • 2 layers39.5 × 80.5 mmCem3340-vco, the printed circuit board in 3D

    Cem3340-vco

    carr-james/cem3340-vco

    A clone of Kassutronics 3340. Entirely for the purpose of learning how to build a Eurorack module, start to finish.

    58 parts7
  • 2 layers50 × 50 mmLiPo Protection, the printed circuit board in 3D

    LiPo Protection

    ngollon/LiPo-Protection

    KiCAD Layout of a LiPo discharge protection board

    56 parts2
  • 2 layers114.3 × 114.3 mmPCB design files, the printed circuit board in 3D

    PCB design files

    ACSLaboratory/pheeno_robot_electronic_schematics

    Electronic schematics for the Pheeno robot!

    75 parts1BSD-3-Clause
  • 2 layers38 × 120 mmTemp, the printed circuit board in 3D

    Temp

    uel/temperature-indicator

    A 44 component rugged temperature-indicating PCB using solar power and a supercapacitor. Board is designed to fit in a durable and cost efficent enclosure (PET bottle prefab) and sized exactly to the solar panel.

    51 parts
  • 2 layers33.7 × 97.8 mmHAN ESP TSS721, the printed circuit board in 3D

    HAN ESP TSS721

    UtilitechAS/amsreader-firmware

    ESP8266 and ESP32 compatible firmware to read, interpret and publish data to MQTT from smart electrical meters, both DLMS and DSMR is supported

    29 parts470
  • 4 layers84 × 82 mmToad, the printed circuit board in 3D

    Toad

    travisgoodspeed/goodfet

    An embedded bus adapter for various microcontrollers and radios.

    241 parts333
  • 2 layers100 × 100 mmCANBuster, the printed circuit board in 3D

    CANBuster

    GBert/misc

    miscellaneous stuff / unsorted

    182 parts99
  • 2 layers50 × 55.4 mmCasserole, the printed circuit board in 3D

    Casserole

    puddly/casserole

    Control GE appliances

    23 parts94Apache-2.0

Questions

How big is the 1Wire LEDController PCB?

It measures 99.8 × 99.8 mm and has 2 copper layers, 1.6 mm thick.

What parts does the 1Wire LEDController use?

35 parts, built around the STM32F030R8T6, LP2950-33 and RJ45. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the 1Wire LEDController KiCad files?

From the InfernoEmbedded/onewire-softdevice repository on GitHub, at the commit this page was made from: the board is devices/4Channel_RGBW_LED_Controller/1Wire-LEDController.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.

Can I use the 1Wire LEDController design in my own project?

Its repository states no licence, so its author keeps all rights: ask InfernoEmbedded before reusing the design.