An arduino sketch for controlling GPIO output pins via a webhook.
Go to file
2020-05-20 18:09:32 +00:00
.gitignore Rename project. 2020-05-20 18:09:32 +00:00
config.h.example Rename project. 2020-05-20 18:09:32 +00:00
gpio-webhook-arduino.ino Rename project. 2020-05-20 18:09:32 +00:00
Makefile Fix makefile to use proper arduino-cli semantics. 2020-05-13 01:21:31 -04:00
readme.md Rename project. 2020-05-20 18:09:32 +00:00
wifi.h Numerous fixes, first working commit. 2020-05-14 18:26:02 +00:00

Control I/O pins with a webhook

This is an Arduino IDE sketch for a "smart" controller that can activate pins based on the state of some webpage. (designed to be driven by gpio webhook server) The motivating use cases are:

  • Controlling a PC power switch remotely, using a transistor wired to the power switch pins
  • Lighting specific LEDs to create a remotely controlled 'traffic light'.

This sketch currently targets only the ESP8266, and will probably not work with other microcontrollers. Support for other boards may come if I run out of ESP8266s.

Configuration

First:

cp config.h.example config.h

Then edit config.h and fill in the correct values for your environment.

PIN_MAP in config.h is an array of pins that we want to control. Each item in the array is itself an array, with the following format:

[output_pin, control_mode]

The index of the item in the top-level array is its 'index' value in the webhook. (see webhook data, below)

output_pin is the pin to control.

control_mode is either 0 or 1. 0 is for momentary mode; that is, when the state is active the pin will only be high for a short time. 1 is for latched mode; the pin will stay high until the state changes.

Building

Just run make to build the code. You need to have config.h and data/ca_cert.pem defined.

Webhook data

The webhook should always return a page in the following (JSON-compatible) format:

[state_0, state_1, ...]

Where index and state are both integers. If you are expecting momentary input, you should return the state to '0' after the page is served / the webhook is consumed.

Future Improvements

  • make it actually work...
  • use WifiManager?