https://github.com/kcsoft/arduzombieos
https://github.com/kcsoft/arduzombieos
Last synced: about 1 year ago
JSON representation
- Host: GitHub
- URL: https://github.com/kcsoft/arduzombieos
- Owner: kcsoft
- Created: 2020-08-19T10:02:05.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2024-03-22T04:50:40.000Z (about 2 years ago)
- Last Synced: 2025-01-29T16:08:52.065Z (over 1 year ago)
- Language: C++
- Size: 512 KB
- Stars: 0
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# ArduZombieOS
* read up to 16 push buttons
* blink up to 16 LEDs (push button LEDs)
* up to 16 outputs
* connect to ethernet (DHCP)
* connect to MQTT server
* send mqtt message on output state change or state query
* subscribe to mqtt and output changes
* output state can be 0 = off, 1 = on, >1 = seconds till stop
Uses [FreeRTOS](https://github.com/feilipu/Arduino_FreeRTOS_Library) port for Arduino.
### Requirements
- Arduino MEGA 2560 board with W5100 ethernet shield
- Arduino AVR Boards version 1.8.6
- FreeRTOS version 11.0.1
### Operation mode
#### Startup
- when connecing to MQTT server, send mqtt message `house/:id/start` with payload `1` (online)
#### Outputs
- can be set/toggled by mqtt message on `house/:id/light/:output` with payload `0`, `1` or number of seconds to keep output on
- can be set/toggled by button press (actions)
- on change, send mqtt message `house/:id/light/state/:output` with payload `0`, `1` or number of seconds to keep output on
#### Button has 3 functions, each can have a different action:
- short press (default action is toggle output for light X)
- medium press - 1.5 seconds (default action is toggle blink mode for button LED)
- long press - 6 seconds (default action is mqtt publish button number)
#### Actions that can be assigned to button short, medium and long press
Can be set by sending mqtt message `house/:id/set` with payload
- `asXYZ` - set action short for button X (0-F), action Y (0-5), param Z (0-F)
- `amXYZ` - set action medium for button X, action Y, param Z
- `alXYZ` - set action long for button X, action Y, param Z
eg: `as01F` - set action short for button 0 to toggle output 15 (will set output 16)
##### Actions:
- `0`: no action
- `1`: toggle output for light X
- `2`: toggle blink mode for button LED
- `3`: mqtt publish `1` on button number topic: `house/:id/button/:button`
- `4`: mqtt publish `2` on button number topic
- `5`: mqtt publish `3` on button number topic
##### On MQTT message:
- `house/:id/light/:output` with payload `0` or `1`: set output on or off. If `:output` is `0`, turn off all outputs. If payload is a number > 1, set output on for that many seconds.
- `house/:id` send status for all outputs that are on
- `house/:id/reset` reset the device
- `house/:id/set` update setting, when payload
- `0` - reset settings to default
- `?X` - send current settings via mqtt `house/:id/settings`, X can be i = id, h = hostname, a[sml] = actions, b = blink modes
- `iX` - set id to `X` eg: `i1`
- `hHOSTNAME` - set hostname to `HOSTNAME` eg: `hArdu`
- `asXYZ` - set action short for button X (0-F), action Y (0-5), param Z (0-F)
- `amXYZ` - set action medium for button X, action Y, param Z
- `alXYZ` - set action long for button X, action Y, param Z
- `bX`, X=0..4 - set blink mode
### Pinout
#### Inputs (Buttons) from 1 to 16 (PORTA, PORTC)
- multiplexed with button LED:
- LED+ = 5V
- LED- = pin
- ButtonNO1 = pin
- ButtonNO2 = GND
- Arduino PINS: 22 - 29, 37 - 30
#### Outputs (Relays) from 1 to 16 (ADC/PORTK, PORTL)
- Arduino PINS: A8 - A15, 42 - 49
### Using Timer3 as a RTOS tick timer
##### FreeRTOS library changes are need, add to FreeRTOSVariant.h at LINE 66
```C
#undef portUSE_WDTO
#undef configTICK_RATE_HZ
#undef portTICK_PERIOD_MS
#define portTICK_PERIOD_MS 15
#define configTICK_RATE_HZ ( (TickType_t) ( 1000 / portTICK_PERIOD_MS ) )
#define portSCHEDULER_ISR TIMER3_COMPA_vect
extern void prvSetupTimerInterrupt( void );
```
### Arduino MEGA 2560 Pinout
