Access Controller manual Download PDF

Chapter 05

Controllers and hardware

This chapter is for the installer. It covers the supported controller boards, what connects to them, the default wiring for each board type, flashing and adopting a new controller from the browser, onboarding it into a tenant, over-the-air updates, moving a controller to a new server, and reading controller health.

Supported boards

The controller firmware runs on three families of board. The same firmware image is used for every unit of a family; nothing is compiled per site.

BoardNetworkNotes
Classic ESP32 devkit (WROOM-32 / WROVER)Wi-FiThe general-purpose choice. Cheap, widely available.
Olimex ESP32-POE-ISOWired Ethernet with PoEOne cable for power and data, isolated. Ignores Wi-Fi settings and uses DHCP. Recommended where a network point is available.
ESP32-S3 (for example ESP32-S3-N16R8)Wi-FiA different chip family from the classic ESP32 with its own firmware build. The flash wizard picks the right build automatically.

There are two firmware kinds:

What connects to a controller

Per door (per channel on a dual-door unit):

A dual-door controller is one board with two of everything above, wired to the channel 1 and channel 2 pins.

Default GPIO wiring

The firmware ships with per-chip defaults so that a freshly flashed board works before anything is configured. The defaults are chosen to be free on both a generic devkit and the Olimex POE board (whose Ethernet PHY uses GPIO 12, 17, 18, 19, 21, 22, 23, 25, 26 and 27). Every pin can be changed in Settings (chapter 13); the values are sent to the controller when it is provisioned.

Classic ESP32 and Olimex ESP32-POE-ISO, channel 1

SignalGPIONotes
Wiegand D032reader green wire
Wiegand D133reader white wire
Lock relay4active high by default (energise = HIGH); switchable to active low
Exit button (REX)14to 0 V, internal pull-up; -1 if absent
Door position sensor15reed to 0 V, closed = low, internal pull-up; -1 if absent
RTC SDA / SCL13 / 16optional DS3231
Setup button0 (BOOT)hold low at power-up to force setup mode

Classic ESP32 dual-door, channel 2 (panel defaults)

The Settings page pre-fills channel 2 with these values. They must not clash with channel 1. On an Olimex POE board GPIO 25, 26 and 27 are used by the Ethernet PHY, so choose other free pins for channel 2 there.

SignalGPIO
Wiegand D025
Wiegand D126
Lock relay27
Exit button (REX)13
Door position sensor2

ESP32-S3, channel 1

The S3 has reserved pins that must be avoided: 26 to 32 (SPI flash), 33 to 37 (OPI PSRAM on -R8 parts; touching these hangs the chip), 19 and 20 (USB), 43 and 44 (UART0), and 0, 45 and 46 (strapping). The firmware defaults for the S3 all sit in the always-safe 1 to 18 range.

SignalGPIONotes
Wiegand D04
Wiegand D15
Lock relay6active high by default
Exit button (REX)7to 0 V, internal pull-up
Door position sensor15reed to 0 V, closed = low
RTC SDA / SCL8 / 9optional DS3231
Setup button0 (BOOT)hold at power-up for setup mode

Note: the pin values held in the panel's Settings page are what actually get written to a controller when it is provisioned. The Settings defaults are the classic ESP32 values (D0 32, D1 33, relay 4, REX 14, door 15). If you are provisioning an ESP32-S3 from the panel, change the channel 1 pin map in Settings to the S3-safe values above before sending settings, otherwise the S3 will be told to use GPIO 33 and may hang.

Other fixed behaviour: the relay pulse defaults to 4000 ms, the held-open alert to 60 s until the door's own Alert if held open value arrives in its keyset (chapter 3), the door contact is debounced over 200 ms, and a stalled controller reboots itself after 30 s (hardware watchdog).

Flash and adopt: step by step

The Flash & adopt page turns a blank board into a door controller entirely from the browser. No installer software is needed. You need a laptop with Chrome or Edge, a USB cable to the board, and the panel open on a secure page.

The Flash & adopt wizard: four steps across the top (Type, Flash, Configure, Done) and the choice of controller kind.
The Flash & adopt wizard: four steps across the top (Type, Flash, Configure, Done) and the choice of controller kind.

The four steps across the top are Type, Flash, Configure and Done. They are also buttons: click any of them to jump straight there. That matters most for a board that is already flashed, where you want to go directly to Configure and send it its settings over USB or Bluetooth without flashing it again. Jumping ahead without choosing a firmware type first assumes Networked controller, which is what you want in all but a handful of cases.

Note: Web Serial and Web Bluetooth only work on a secure page. Use the panel's https:// address (hosted panels are already HTTPS; a self-hosted panel also listens on port 8443 with a self-signed certificate, so accept the browser warning once), or open http://localhost:8080/flash on the panel machine itself. Safari on iPhone and iPad supports neither Web Serial nor Web Bluetooth.

Before you start

  1. On Settings (chapter 13) enter the controller Wi-Fi network and password (not needed for the Olimex wired board), the controller type (single or dual door), the pin maps if they differ from the defaults, and check the Adoption address and MQTT port the controllers will connect to. These are what the wizard sends to the board.
  2. Plug the board into the laptop over USB. Most boards need no driver on current Windows, macOS or Linux; if the port does not appear, install the USB-serial driver for the board's chip (typically CP210x or CH340).

Step 1: Type

Choose Networked controller (adopts to this panel) or Standalone controller. Press Continue.

Step 2: Flash

The page shows, for the chosen kind, which chip builds are staged on the panel ("ready", a partial count, or "not built"). Press the install button, pick the serial port in the browser's chooser, and let it run. The right build for the connected chip is selected automatically (classic ESP32 and ESP32-S3 have different bootloader offsets; this is handled for you). A first install takes about a minute.

If the board will not connect: hold BOOT, tap RST (reset), release BOOT, then retry. Some boards need this every time to enter download mode.

Upload firmware binaries lets an administrator stage new builds on the panel for a chip (four .bin files per chip: bootloader, partitions, boot_app0 and firmware). Most users never need this; 2plus1 stages builds on hosted panels.

As soon as flashing finishes, the wizard automatically reopens the USB port and sends the settings from step 3 to the board. Watch the log box under the flash button. If it reports that the port could not be reopened, go to step 3 and press the send button yourself.

Step 3: Configure

This step sends the Wi-Fi, the adoption address and port, the MQTT credentials and the pin map to the controller, which saves them, reboots and registers with the panel. First choose Doors on this controller: single door or dual door (two readers and relays). Then choose how to reach the board:

USB cable (default). A summary shows the Wi-Fi, adoption address and pins that will be sent, with a Change in Settings link. Press Send settings to device, pick the port again if asked, and wait for ACSCFG OK in the log. The board restarts and should appear under Controllers within a minute. Query device reads the board's current settings back (passwords masked) without changing anything; use it to check what a board believes.

If the board does not answer, press its RESET button and click send again. The board listens for settings over USB at any time, including in normal operation, so this also works later to re-provision a unit on the bench.

Bluetooth. No cable needed after flashing. Put the controller into setup mode by holding BOOT while powering it on. Press Scan & connect and pick the controller from the chooser: it advertises as ACS-Cfg- followed by the last six characters of its ID. Once connected, the Wi-Fi and address fields are pre-filled from Settings and can be overridden here; Read current shows what the board holds, Write settings to controller sends the new values and the board reboots onto Wi-Fi. Bluetooth configuration is only available while the controller is in setup mode; it is switched off during normal running.

Web Bluetooth works in Chrome and Edge on desktop and Android. It does not work in Safari or on iOS.

Step 4: Done

For a networked controller, go to Controllers to finish onboarding. For a standalone controller, connect a phone to the board's own Wi-Fi network (ACS-Door- followed by its ID, default password access1234 unless you changed it in step 3) and its admin page opens automatically.

The setup portal fallback

A controller with no saved settings, or one powered up with BOOT held, starts its own Wi-Fi access point named ACS-Setup- followed by its ID with a captive setup page at http://192.168.4.1. The page takes the Wi-Fi network and password, the panel address and MQTT port, and optional MQTT username and password, then saves and restarts. Use this when there is no laptop to hand. The same setup mode is also where Bluetooth configuration is available.

Adopting a controller into a tenant

After provisioning, the controller connects to the panel and announces itself. The panel registers it automatically and logs a Controller registered system event. Finish onboarding on the Controllers page:

The Controllers page: each controller with its ID, friendly name, online state, door, status, firmware, IP and last-seen time, plus its action buttons.
The Controllers page: each controller with its ID, friendly name, online state, door, status, firmware, IP and last-seen time, plus its action buttons.
  1. Give it a friendly name ("Front door controller").
  2. Choose its Door (this maps channel 1; for the second door of a dual controller use the door's own detail page and pick channel 2, as in chapter 3). A controller set to dual door is listed there with "- dual" after its ID, so you can see which units have a second channel to assign.
  3. Set Status to active.
  4. Press Save. The panel compiles the keyset for that door and pushes it; the message "Controller saved - keyset pushed" confirms it.

Status values: pending (registered, not yet onboarded; it receives no keyset), active (in service), disabled (kept in the list but ignored; no keyset is pushed and its events are not attributed to a door).

Which tenant does a new controller land in?

A controller only ever receives the fobs of the tenant that owns it.

Controller status and health

Each row on the Controllers page shows:

The dashboard tile "Controllers online" shows the same information as a count. A controller that shows offline is still opening its door from its saved keyset; what it cannot do is receive new fobs or send events until it reconnects. Chapter 17 has the offline checklist.

Action buttons

Over-the-air (OTA) updates

Update tells the controller to download the firmware image staged on the panel for its chip and flash it into its spare firmware slot, then reboot into it. The download rides HTTP on the panel's own port, or HTTPS through the reverse proxy if Public HTTPS URL is set in Settings (chapter 13). An ota_start event is logged when the download begins; a failure raises an ota_failed alert with the reason.

Things to know:

Re-pointing a controller to a new server

Re-point... opens a small form on the controller's row: new server address, MQTT port (1883 by default), and optional MQTT user and password. Send it and the controller saves the new address, reboots and connects to the new panel, where it registers as a new controller. No site visit or USB cable is needed.

Hardware installation checklist

  1. Mount the controller in the same enclosure the old panel came out of, or a small IP-rated box, within cable reach of the reader, lock and exit button.
  2. Wire the reader (D0, D1, 0 V, 12 V from the reader supply), relay (to the lock supply, NO or NC to suit fail-safe or fail-secure), exit button and door contact per the GPIO table for the board.
  3. Fit a flyback diode across a maglock coil. Put the lock supply on a battery-backed PSU. Keep a break-glass or fire-alarm interface in the lock circuit where required.
  4. Power the controller (USB 5 V or PoE) and confirm the reader's LED and the serial banner (115200 baud) if you have a console.
  5. Flash and adopt from the panel, or use the setup portal.
  6. On the Controllers page: name, door, active, Save.
  7. Present a known fob: the log should show OK and the relay should click. Press the exit button: the log should show Exit button. Open and close the door: the log should show Door opened then Door closed (if a sensor is fitted). Open the door without a grant: the log should show Door forced.
  8. Note the controller ID on the door's paperwork.