├── .gitignore
├── 3D_files
├── LED
│ ├── ESP32_Macropad_top_V2.stl
│ ├── ESP32_keypad_short_bottom.stl
│ └── ESP32_keypad_tall_bottom.stl
├── NO_LED
│ ├── ESP32_Macropad_top_V1.stl
│ ├── ESP32_keypad_short_bottom.stl
│ └── ESP32_keypad_tall_bottom.stl
└── readme.md
├── LICENSE.md
├── README.md
├── YAML
├── esp32_keypad_LED.yaml
└── esp32_keypad_NO_LED.yaml
├── assets
├── LED
│ ├── Inside_LED.JPG
│ ├── LED_Layout.JPG
│ ├── RGB_Lighting_Demo.gif
│ ├── Top_LED.JPG
│ ├── common_GND.JPG
│ └── wiring_diagram_LED.png
└── NO_LED
│ ├── inside_NO_LED.JPG
│ ├── top_NO_LED.JPG
│ └── wiring_diagram_NO_LED.png
├── automations
├── baby_buddy_keypad_automation.yaml
└── generic_keypad_automation.yaml
└── icons
├── Keyboard_Template.ai
├── Keyboard_Template.pdf
├── Single Key Legend Template.pdf
├── basic_flat_lineal_icons
├── baby-bottle.png
├── breast-pump.png
├── crawl.png
├── crawl_01.png
├── crawl_bow.png
├── crawling.png
├── diaper.png
├── mom.png
├── sleep.png
├── spoon.png
└── timer.png
├── readme.md
└── special_lineal_icons
├── breastfeed.png
├── diaper-thin.png
├── feeding-bottle copy.png
├── feeding-bottle.png
├── moon.png
├── sleep2.png
├── spoon.png
├── stopwatch.png
├── timer.png
└── tummy-time.png
/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | .DS_Store
3 |
--------------------------------------------------------------------------------
/3D_files/LED/ESP32_Macropad_top_V2.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/drpeppershaker/ESP32_keypad/a234bb7c294f27ec7542f176638d677312a37ac3/3D_files/LED/ESP32_Macropad_top_V2.stl
--------------------------------------------------------------------------------
/3D_files/LED/ESP32_keypad_short_bottom.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/drpeppershaker/ESP32_keypad/a234bb7c294f27ec7542f176638d677312a37ac3/3D_files/LED/ESP32_keypad_short_bottom.stl
--------------------------------------------------------------------------------
/3D_files/LED/ESP32_keypad_tall_bottom.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/drpeppershaker/ESP32_keypad/a234bb7c294f27ec7542f176638d677312a37ac3/3D_files/LED/ESP32_keypad_tall_bottom.stl
--------------------------------------------------------------------------------
/3D_files/NO_LED/ESP32_Macropad_top_V1.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/drpeppershaker/ESP32_keypad/a234bb7c294f27ec7542f176638d677312a37ac3/3D_files/NO_LED/ESP32_Macropad_top_V1.stl
--------------------------------------------------------------------------------
/3D_files/NO_LED/ESP32_keypad_short_bottom.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/drpeppershaker/ESP32_keypad/a234bb7c294f27ec7542f176638d677312a37ac3/3D_files/NO_LED/ESP32_keypad_short_bottom.stl
--------------------------------------------------------------------------------
/3D_files/NO_LED/ESP32_keypad_tall_bottom.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/drpeppershaker/ESP32_keypad/a234bb7c294f27ec7542f176638d677312a37ac3/3D_files/NO_LED/ESP32_keypad_tall_bottom.stl
--------------------------------------------------------------------------------
/3D_files/readme.md:
--------------------------------------------------------------------------------
1 | ## 3D Files
2 |
3 | - ESP32\_keypad\_short_bottom.stl - Mount the esp32 'upside-down' and screw in with the tiniest screws you can find.
4 | - ESP32\_keypad\_tall\_bottom.stl - Taller version which should allow a _bit_ more rooom for wires/soldering
5 | - ESP32\_Macropad\_top.stl - Top where you mount the key switches. There are groves on the bottom to help with wiring the common GND wire.
6 |
7 | NOTE: You can absolutely use the LED version without LEDs inside of it.
8 |
9 | ## Attributions
10 |
11 | Remixed from ['Macro Pad' on Thingiverse](https://www.thingiverse.com/thing:5628107) by tomtompoperdom
12 |
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 drpeppershaker
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # ESP32_keypad
2 |
3 | This DIY macropad is built with only off-the-shelf parts. No custom PCBs for absolute ease of building! It uses an ESP32 with [ESPHome](https://esphome.io/) in order to control devices or trigger automations in [Home Assistant](https://home-assistant.io).
4 | It has 8 keys, and supports different actions for single, double, and triple clicks, long clicks, and click and holds.
5 |
6 |
7 |
8 |
9 |
10 |
11 |
LED Version
12 |
13 |
NO_LED version
14 |
15 |
16 | ## Versions
17 | ### NO_LED
18 | - As the names suggest, the NO_LED version does not use any LEDs. This keeps the cost and soldering skills required lower.
19 | ### LED
20 | - The LED version uses 16 addressable LEDs -- 8 LEDs for RGB backlighting with various effects and 1 LED for each individual key for reactive keypresses. This version is a few millimeters taller than the NO_LED version to accommodate the LED Pixels.
21 |
22 |
23 | ## Requirements
24 | - [Home Assistant installation](https://www.home-assistant.io)
25 | - [ESPHome integration](https://www.home-assistant.io/integrations/esphome/)
26 |
27 | ## Building the Macro Pad
28 |
29 | LED VERSION
(Click to expand)
30 |
31 | ### Tools
32 | | **Tool** | **Non Referral Link** | **Referral Link** | **Notes** |
33 | |----------------------------|--------------------------------------|--------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
34 | | Soldering Iron Kit | https://www.amazon.com/dp/B08R3515SF | https://amzn.to/3JADtWo | This is not the soldering iron kit I used. I use a [Pinecil](https://amzn.to/3K6qU6E) by Pine64, which I can't recommend enough. But if you're just doing one project--just grab a full kit with all the do-dads you need. |
35 | | Silicone Wire | https://www.amazon.com/dp/B01LH1G2IE | https://amzn.to/40wMlTD | Silicone wire is helpful for wiring the switches to the board. It's extra flexible, which helps with the smash and cram at the end. |
36 | | Solid Core Wire | https://www.amazon.com/dp/B09BFFJRST | https://amzn.to/3lhCEd2 | Solid core wire is practically a requirement to wire up the LED Pixels. In my original prototype I used the legs from a few resistors, and some header pins instead of solid core wire. It was a PAIN to wire that way. Go with some solid core wire... |
37 | | M3 Bolts | https://www.amazon.com/dp/B0B31SC98Z | https://amzn.to/3nlqikM | M3 Socket Cap bolts for the 3D Printed Case |
38 | | Tiny Screws | https://www.amazon.com/dp/B09L4R6B1Q | https://amzn.to/3JLnSDx | I used some tiny screws to attach the ESP32 board to the bottom of the case. |
39 | If you choose to use the above affiliate links I may receive a very small commision from Amazon at no extra cost to you
40 |
41 |
42 |
43 | ### Parts
44 | | **Parts** | **Referral Link** | **Non-Referral Link** | **Notes** |
45 | |----------------------|-------------------------|--------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
46 | | 8 Cherry MX Switches | https://amzn.to/3YT6VgA | https://www.amazon.com/dp/B07KMXJ4KG | I like the Blue switches because they're *very* click-y |
47 | | an ESP32 board | https://amzn.to/41l7mCi | https://www.amazon.com/dp/B08DR31G4G | These are to the cheapest ESP32 boards I could find on Amazon. Use whatever boards you like |
48 | | Relegendable Keycaps | https://amzn.to/3SmIaqX | https://www.amazon.com/dp/B01M023NFK | Originally I went with the grey keycaps, but switched to the translucent keycaps when I put the LEDs in. |
49 | | Addressable LEDs (LED VERSION) | https://amzn.to/3yH5whK | https://www.amazon.com/dp/B01DC0J0WS | I used these pixels because all the LED strips I have are low density and the Pixels are too spread out. I really wanted to cram two LEDs behind each key switch, and this seems like the simplest way to achieve that. After building two keypads with LEDs, I think that someone who isn't me should attempt this with an LED strip with 144 pixel/m strips. You should be able to fit two leds behind each key with that kind of density. |
50 | If you choose to use the above affiliate links I may receive a very small commision from Amazon at no extra cost to you
51 |
52 |
53 | ### Assembly
54 | - all switches are now connected to common GND and to their respective GPIOs (see ESPHome YAML files)
55 | - Note, your GPIO pins may be different based on the version of the board you use. I'm using the built-in PULLUP resistors on the ESP32 board for the switches. If you need to switch GPIO pins, make sure you use pins that have PULLUP resistors.
56 | 
57 |
58 |
59 |
60 |
61 |
62 |
63 | |
64 | |
65 |
66 | Leds Wired and test fit. |
67 | All switches **connected to common GND** rather than VIN. |
68 |
69 |
70 |
71 |
72 | The LED pixels are sold in a 10x10 grid. The PCBs for each LED are attached to one another, but they are easy to break apart. You will want to keep them attached in two separate 'strips' of 8 connected leds each. Don't try to break them into individual pixels because they'll fall through the case.
73 |
74 | NOTE: When wiring up the LED pixels, you *can* have a single solid wire for all the 5V and one for all the GND contacts. However, the data contacts must be separated and move from DIN to DOUT--they can't be connected on the same pixel or they will NOT work. Stick to the wiring diagram for the Data Line.
75 |
76 | ### Case
77 | [STL files here](/3D_files)
78 | - I 3D printed my case. I've included two versions of the macropad case bottom. The images from V1 is using the 'short_bottom'. The short bottom version of the case makes things very tight, but everything should fit if you are careful with your wiring. Run the wires along the sides of the board, and keep them trimmed short. That said, If you don't want to put your soldering skills and smash and cram skills to the test, I also included a slightly taller version as well. The V2 version of the keypad w/ the LEDs that I made was testing my patience already, so I just put it in the taller version of the case. Certainly much easier, and not *that* much taller overall.
79 |
80 | - The V2 top case has cutouts for the LED pixels and for the common ground wire. This can be printed without supports, your printer must be at least *kinda* dialed in. You can see my pictures--my printer isn't all that calibrated, and I was still able to print this without supports. The real trick is to print it SLOWLY. The slower you print it, the better chance you'll have of not knocking off the the little center posts, plus your bridging will be better. I dialed my printer back to 35mm/s on both walls and infill and all the way down to 25mm/s for bridging.
81 | - You will probably want to set your slicer to print the external perimeters first. The case is designed for the key switches to be pressure fit. Printing the outer walls first will help keep the print from over expanding and making your switches not fit. You can also dial back your flow settings to help keep things fitting as they should. If you're still struggling, you can also increase the dimensions of the STLs by 1 or 2 percent to help things fit a bit easier. NOTE: I have not tested printing the case larger, so I don't know how well the LEDs will fit when you size it up.
82 | - Finally, I'm not a 3D designer or engineer. I adapted the original design from thingiverse for my needs using Tinkercad.
83 | - [Macropad Top on Tinkercad](https://www.tinkercad.com/things/466cJwJKiFd-macropadv2topver37)
84 | - [Macropad Bottoms on Tinkercad](https://www.tinkercad.com/things/ekNTHmUWMJU-esp32macropadbottoms)
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 | NO_LED VERSION
(Click to expand)
95 |
96 | ### Tools
97 | | **Tool** | **Non Referral Link** | **Referral Link** | **Notes** |
98 | |----------------------------|--------------------------------------|--------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
99 | | Soldering Iron Kit | https://www.amazon.com/dp/B08R3515SF | https://amzn.to/3JADtWo | This is not the soldering iron kit I used. I use a [Pinecil](https://amzn.to/3K6qU6E) by Pine64, which I can't recommend enough. But if you're just doing one project--just grab a full kit with all the do-dads you need. |
100 | | Silicone Wire | https://amzn.to/40wMlTD | https://www.amazon.com/dp/B01LH1G2IE | Silicone wire is helpful for wiring the switches to the board. It's extra flexible, which helps with the smash and cram at the end. |
101 | | Solid Core Wire | https://amzn.to/3lhCEd2 | https://www.amazon.com/dp/B09BFFJRST | Solid core wire is practically a requirement to wire up the LED Pixels. In my original prototype I used the legs from a few resistors, and some header pins instead of solid core wire. It was a PAIN to wire that way. Go with some solid core wire... |
102 | | M3 Bolts | https://www.amazon.com/dp/B0B31SC98Z | https://amzn.to/3nlqikM | M3 Socket Cap bolts for the 3D Printed Case |
103 | | Tiny Screws | https://www.amazon.com/dp/B09L4R6B1Q | https://amzn.to/3JLnSDx | I used some tiny screws to attach the ESP32 board to the bottom of the case. |
104 | If you choose to use the above affiliate links I may receive a very small commision from Amazon at no extra cost to you
105 |
106 |
107 |
108 | ### Parts
109 | | **Parts** | **Referral Link** | **Non-Referral Link** | **Notes** |
110 | |----------------------|-------------------------|--------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
111 | | 8 Cherry MX Switches | https://amzn.to/3YT6VgA | https://www.amazon.com/dp/B07KMXJ4KG | I like the Blue switches because they're *very* click-y |
112 | | an ESP32 board | https://amzn.to/41l7mCi | https://www.amazon.com/dp/B08DR31G4G | These are to the cheapest ESP32 boards I could find on Amazon. Use whatever boards you like |
113 | | Relegendable Keycaps | https://amzn.to/3SmIaqX | https://www.amazon.com/dp/B01M023NFK | |
114 |
115 | If you choose to use the above affiliate links I may receive a very small commision from Amazon at no extra cost to you
116 |
117 |
118 | ### Assembly
119 | - all switches are now connected to common GND and to their respective GPIOs (see ESPHome YAML files)
120 | - Note, your GPIO pins may be different based on the version of the board you use. I'm using the built-in PULLUP resistors on the ESP32 board for the switches. If you need to switch GPIO pins, make sure you use pins that have PULLUP resistors.
121 | 
122 |
123 |
124 |
125 | 
126 |
127 | ### Case
128 | [STL files here](/3D_files)
129 | - I 3D printed my case. I've included two versions of the macropad case bottom. The images from the NO_LED version is using the 'short_bottom'. The short bottom version of the case makes things very tight, but everything should fit if you are careful with your wiring. Run the wires along the sides of the board, and keep them trimmed short. That said, If you don't want to put your soldering skills and smash and cram skills to the test, I also included a slightly taller version as well.
130 |
131 | - You can use the LED version of the case and it will still work well for the non-led version of the keypad. However, the LED version of the case requires your printer to be more dialed in, and you will likely need to print slower because it has more overhangs.
132 | - You will probably want to set your slicer to print the external perimeters first. The case is designed for the key switches to be pressure fit. Printing the outer walls first will help keep the print from over expanding and making your switches not fit. You can also dial back your flow settings to help keep things fitting as they should. If you're still struggling, you can also increase the dimensions of the STLs by 1 or 2 percent to help things fit a bit easier. NOTE: I have not tested printing the case larger, so I don't know how well the LEDs will fit when you size it up.
133 | - Finally, I'm not a 3D designer or engineer. I adapted the original design from thingiverse for my needs using Tinkercad.
134 | - [Macropad Top on Tinkercad](https://www.tinkercad.com/things/466cJwJKiFd-macropadv2topver37)
135 | - [Macropad Bottoms on Tinkercad](https://www.tinkercad.com/things/ekNTHmUWMJU-esp32macropadbottoms)
136 |
137 |
138 |
139 | ## Programming
140 | - Add your ESP device to Home Assistant once detected
141 | - Install esp32_keypad.yaml
142 | - Add your own automations (you can use the one here for inspiration).
143 | - Note: this uses events rather than binary sensors for recording multi-clicks.
144 |
145 |
146 |
147 | ## Icons
148 | [icons here](/icons)
149 | - I've included individual icons, a printable template, and a blank template for printing out your own icons for your relegendable keycaps.
150 |
151 |
152 |
153 |
154 | ## Credits
155 | inspired by:
156 | - https://github.com/sfgabe/OITProjects/tree/master/Baby_Buddy_Keypad
157 | - https://github.com/jeroenterheerdt/Baby-Buddy-Keypad.
158 |
159 | STLs:
160 | - Remixed from ['Macro Pad' on Thingiverse](https://www.thingiverse.com/thing:5628107) by tomtompoperdom
161 |
162 | icons:
163 | - [Icons for keypad courtesy of Freepik on Flaticon](https://www.flaticon.com/authors/freepik)
164 | - [blank template courtesy of X-keys](https://xkeys.com/)
165 |
166 |
167 |
168 | Special Thanks:
169 | - [jesserockz](https://github.com/jesserockz) & [ssieb](https://github.com/ssieb) on the [ESPHome Discord](https://discord.com/invite/KhAMKrd) for all the support getting this thing working.
170 |
--------------------------------------------------------------------------------
/YAML/esp32_keypad_LED.yaml:
--------------------------------------------------------------------------------
1 | esphome:
2 | name: esp32-keypad
3 | friendly_name: eps32_keypad
4 |
5 | esp32:
6 | board: esp32dev
7 | framework:
8 | type: arduino
9 |
10 | # Enable logging
11 | logger:
12 |
13 | # Enable Home Assistant API
14 | api:
15 | encryption:
16 | key: !secret api_key
17 |
18 | ota:
19 | password: !secret ota_password
20 |
21 | wifi:
22 | ssid: !secret wifi_ssid
23 | password: !secret wifi_password
24 |
25 | # Enable fallback hotspot (captive portal) in case wifi connection fails
26 | ap:
27 | ssid: "esp32 Keypad Fallback Hotspot"
28 | password: !secret ssid_password
29 |
30 | captive_portal:
31 |
32 | #connections: all buttons are on GND and on their respective pins
33 | #(we are relying on esp32s built-in pullup resistors but could have used external resistors as well)
34 | #Button 1: GPIO25 /
35 | #Button 2: GPIO26 /
36 | #Button 3: GPIO27 /
37 | #Button 4: GPIO14 /
38 |
39 | #Button 5: GPIO19 /
40 | #Button 6: GPIO18 /
41 | #Button 7: GPI17 /
42 | #Button 8: GPIO16
43 |
44 |
45 |
46 | # Light Compenent
47 | light:
48 | - platform: fastled_clockless
49 | id: light1
50 | name: light1
51 | chipset: WS2812B
52 | pin: GPIO33
53 | num_leds: 16
54 | rgb_order: GRB
55 | default_transition_length: 0s
56 | restore_mode: RESTORE_AND_ON
57 | internal: True
58 |
59 | # Backlights
60 | - platform: partition
61 | name: "Backlight"
62 | id: backlight
63 | default_transition_length: 0s
64 | restore_mode: RESTORE_AND_ON
65 | on_turn_on:
66 | then:
67 | - light.control:
68 | id: backlight
69 | effect: Rainbow
70 | brightness: 60%
71 | segments:
72 | - id: light1
73 | from: 0
74 | to: 0
75 | - id: light1
76 | from: 2
77 | to: 2
78 | - id: light1
79 | from: 4
80 | to: 4
81 | - id: light1
82 | from: 6
83 | to: 6
84 | - id: light1
85 | from: 8
86 | to: 8
87 | - id: light1
88 | from: 10
89 | to: 10
90 | - id: light1
91 | from: 12
92 | to: 12
93 | - id: light1
94 | from: 14
95 | to: 14
96 | effects:
97 | - pulse:
98 | - pulse:
99 | name: "Fast Pulse"
100 | transition_length: 0.5s
101 | update_interval: 0.5s
102 | - pulse:
103 | name: "Slow Pulse"
104 | # transition_length: 1s # defaults to 1s
105 | update_interval: 2s
106 | - pulse:
107 | name: "Blink"
108 | transition_length: .25s # defaults to 1s
109 | update_interval: .25s
110 | - addressable_rainbow:
111 | name: "Rainbow"
112 | - addressable_rainbow:
113 | name: "Rainbow Skinny"
114 | speed: 10
115 | width: 25
116 | - addressable_scan:
117 | - addressable_scan:
118 | name: "Scan Fast"
119 | move_interval: 50ms
120 | scan_width: 1
121 | - addressable_twinkle:
122 | - addressable_random_twinkle:
123 | - addressable_fireworks:
124 | use_random_color: true
125 | name: Fireworks
126 | - addressable_flicker:
127 |
128 | # Light for each individual key
129 | - platform: partition
130 | name: "Key 1"
131 | id: key1
132 | segments:
133 | - id: light1
134 | from: 1
135 | to: 1
136 | default_transition_length: 0s
137 |
138 | - platform: partition
139 | name: "Key 2"
140 | id: key2
141 | segments:
142 | - id: light1
143 | from: 3
144 | to: 3
145 | default_transition_length: 0s
146 |
147 | - platform: partition
148 | name: "Key 3"
149 | id: key3
150 | segments:
151 | - id: light1
152 | from: 5
153 | to: 5
154 | default_transition_length: 0s
155 |
156 | - platform: partition
157 | name: "Key 4"
158 | id: key4
159 | segments:
160 | - id: light1
161 | from: 7
162 | to: 7
163 | default_transition_length: 0s
164 |
165 | - platform: partition
166 | name: "Key 5"
167 | id: key5
168 | segments:
169 | - id: light1
170 | from: 9
171 | to: 9
172 | default_transition_length: 0s
173 |
174 | - platform: partition
175 | name: "Key 6"
176 | id: key6
177 | segments:
178 | - id: light1
179 | from: 11
180 | to: 11
181 | default_transition_length: 0s
182 |
183 | - platform: partition
184 | name: "Key 7"
185 | id: key7
186 | segments:
187 | - id: light1
188 | from: 13
189 | to: 13
190 | default_transition_length: 0s
191 |
192 | - platform: partition
193 | name: "Key 8"
194 | id: key8
195 | segments:
196 | - id: light1
197 | from: 15
198 | to: 15
199 | default_transition_length: 0s
200 |
201 |
202 |
203 | binary_sensor:
204 | #Button 1
205 | - platform: gpio
206 | icon: "mdi:dialpad"
207 | name: "Keypad 2x4 Button 1"
208 | pin:
209 | number: GPIO25
210 | inverted: True
211 | mode: INPUT_PULLUP
212 | id: esp32_keypad_b1
213 | on_press:
214 | then:
215 | - light.turn_on:
216 | id: key1
217 | red: .5
218 | green: .5
219 | blue: .5
220 | on_release:
221 | then:
222 | - light.turn_off:
223 | id: key1
224 |
225 | on_multi_click:
226 | - timing:
227 | - ON for at most 1s
228 | - OFF for at most 1s
229 | - ON for at most 1s
230 | - OFF for at least 0.2s
231 | then:
232 | - logger.log:
233 | format: "Double Clicked"
234 | level: INFO
235 | - homeassistant.event:
236 | event: esphome.esp32_keypad_V2
237 | data:
238 | title: dbl_click
239 | button: b1
240 | - timing:
241 | - ON for at most 1s
242 | - OFF for at most 1s
243 | - ON for at most 1s
244 | - OFF for at most 1s
245 | - ON for at most 1s
246 | - OFF for at least 0.2s
247 | then:
248 | - logger.log:
249 | format: "Triple Clicked"
250 | level: INFO
251 | - homeassistant.event:
252 | event: esphome.esp32_keypad_V2
253 | data:
254 | title: triple_click
255 | button: b1
256 | - timing:
257 | - ON for 1s to 2s
258 | - OFF for at least 0.5s
259 | then:
260 | - logger.log:
261 | format: "Single Long Clicked"
262 | level: INFO
263 | - homeassistant.event:
264 | event: esphome.esp32_keypad_V2
265 | data:
266 | title: long_click
267 | button: b1
268 | - timing:
269 | - ON for at least 2.2s
270 | then:
271 | - logger.log:
272 | format: "Click and Hold"
273 | level: INFO
274 | - homeassistant.event:
275 | event: esphome.esp32_keypad_V2
276 | data:
277 | title: hold
278 | button: b1
279 | - timing:
280 | - ON for at most 1s
281 | - OFF for at least 0.5s
282 | then:
283 | - logger.log:
284 | format: "Single Short Clicked"
285 | level: INFO
286 | - homeassistant.event:
287 | event: esphome.esp32_keypad_V2
288 | data:
289 | title: single_click
290 | button: b1
291 |
292 | #Button 2
293 | - platform: gpio
294 | icon: "mdi:dialpad"
295 | name: "Keypad 2x4 Button 2"
296 | pin:
297 | number: GPIO26
298 | inverted: True
299 | mode: INPUT_PULLUP
300 | id: esp32_keypad_b2
301 | on_press:
302 | then:
303 | - light.turn_on:
304 | id: key2
305 | red: .5
306 | green: .5
307 | blue: .5
308 | on_release:
309 | then:
310 | - light.turn_off:
311 | id: key2
312 | on_multi_click:
313 | - timing:
314 | - ON for at most 1s
315 | - OFF for at most 1s
316 | - ON for at most 1s
317 | - OFF for at least 0.2s
318 | then:
319 | - logger.log:
320 | format: "Double Clicked"
321 | level: INFO
322 | - homeassistant.event:
323 | event: esphome.esp32_keypad_V2
324 | data:
325 | title: dbl_click
326 | button: b2
327 | - timing:
328 | - ON for at most 1s
329 | - OFF for at most 1s
330 | - ON for at most 1s
331 | - OFF for at most 1s
332 | - ON for at most 1s
333 | - OFF for at least 0.2s
334 | then:
335 | - logger.log:
336 | format: "Triple Clicked"
337 | level: INFO
338 | - homeassistant.event:
339 | event: esphome.esp32_keypad_V2
340 | data:
341 | title: triple_click
342 | button: b2
343 | - timing:
344 | - ON for 1s to 2s
345 | - OFF for at least 0.5s
346 | then:
347 | - logger.log:
348 | format: "Single Long Clicked"
349 | level: INFO
350 | - homeassistant.event:
351 | event: esphome.esp32_keypad_V2
352 | data:
353 | title: long_click
354 | button: b2
355 | - timing:
356 | - ON for at least 2.2s
357 | then:
358 | - logger.log:
359 | format: "Click and Hold"
360 | level: INFO
361 | - homeassistant.event:
362 | event: esphome.esp32_keypad_V2
363 | data:
364 | title: hold
365 | button: b2
366 | - timing:
367 | - ON for at most 1s
368 | - OFF for at least 0.5s
369 | then:
370 | - logger.log:
371 | format: "Single Short Clicked"
372 | level: INFO
373 | - homeassistant.event:
374 | event: esphome.esp32_keypad_V2
375 | data:
376 | title: single_click
377 | button: b2
378 | #Button 3
379 | - platform: gpio
380 | icon: "mdi:dialpad"
381 | name: "Keypad 2x4 Button 3"
382 | pin:
383 | number: GPIO27
384 | inverted: True
385 | mode: INPUT_PULLUP
386 | id: esp32_keypad_b3
387 | on_press:
388 | then:
389 | - light.turn_on:
390 | id: key3
391 | red: .5
392 | green: .5
393 | blue: .5
394 | on_release:
395 | then:
396 | - light.turn_off:
397 | id: key3
398 | on_multi_click:
399 | - timing:
400 | - ON for at most 1s
401 | - OFF for at most 1s
402 | - ON for at most 1s
403 | - OFF for at least 0.2s
404 | then:
405 | - logger.log:
406 | format: "Double Clicked"
407 | level: INFO
408 | - homeassistant.event:
409 | event: esphome.esp32_keypad_V2
410 | data:
411 | title: dbl_click
412 | button: b3
413 | - timing:
414 | - ON for at most 1s
415 | - OFF for at most 1s
416 | - ON for at most 1s
417 | - OFF for at most 1s
418 | - ON for at most 1s
419 | - OFF for at least 0.2s
420 | then:
421 | - logger.log:
422 | format: "Triple Clicked"
423 | level: INFO
424 | - homeassistant.event:
425 | event: esphome.esp32_keypad_V2
426 | data:
427 | title: triple_click
428 | button: b3
429 | - timing:
430 | - ON for 1s to 2s
431 | - OFF for at least 0.5s
432 | then:
433 | - logger.log:
434 | format: "Single Long Clicked"
435 | level: INFO
436 | - homeassistant.event:
437 | event: esphome.esp32_keypad_V2
438 | data:
439 | title: long_click
440 | button: b3
441 | - timing:
442 | - ON for at least 2.2s
443 | then:
444 | - logger.log:
445 | format: "Click and Hold"
446 | level: INFO
447 | - homeassistant.event:
448 | event: esphome.esp32_keypad_V2
449 | data:
450 | title: hold
451 | button: b3
452 | - timing:
453 | - ON for at most 1s
454 | - OFF for at least 0.5s
455 | then:
456 | - logger.log:
457 | format: "Single Short Clicked"
458 | level: INFO
459 | - homeassistant.event:
460 | event: esphome.esp32_keypad_V2
461 | data:
462 | title: single_click
463 | button: b3
464 | #Button 4
465 | - platform: gpio
466 | icon: "mdi:dialpad"
467 | name: "Keypad 2x4 Button 4"
468 | pin:
469 | number: GPIO14
470 | inverted: True
471 | mode: INPUT_PULLUP
472 | id: esp32_keypad_b4
473 | on_press:
474 | then:
475 | - light.turn_on:
476 | id: key4
477 | red: .5
478 | green: .5
479 | blue: .5
480 | on_release:
481 | then:
482 | - light.turn_off:
483 | id: key4
484 | on_multi_click:
485 | - timing:
486 | - ON for at most 1s
487 | - OFF for at most 1s
488 | - ON for at most 1s
489 | - OFF for at least 0.2s
490 | then:
491 | - logger.log:
492 | format: "Double Clicked"
493 | level: INFO
494 | - homeassistant.event:
495 | event: esphome.esp32_keypad_V2
496 | data:
497 | title: dbl_click
498 | button: b4
499 | - timing:
500 | - ON for at most 1s
501 | - OFF for at most 1s
502 | - ON for at most 1s
503 | - OFF for at most 1s
504 | - ON for at most 1s
505 | - OFF for at least 0.2s
506 | then:
507 | - logger.log:
508 | format: "Triple Clicked"
509 | level: INFO
510 | - homeassistant.event:
511 | event: esphome.esp32_keypad_V2
512 | data:
513 | title: triple_click
514 | button: b4
515 | - timing:
516 | - ON for 1s to 2s
517 | - OFF for at least 0.5s
518 | then:
519 | - logger.log:
520 | format: "Single Long Clicked"
521 | level: INFO
522 | - homeassistant.event:
523 | event: esphome.esp32_keypad_V2
524 | data:
525 | title: long_click
526 | button: b4
527 | - timing:
528 | - ON for at least 2.2s
529 | then:
530 | - logger.log:
531 | format: "Click and Hold"
532 | level: INFO
533 | - homeassistant.event:
534 | event: esphome.esp32_keypad_V2
535 | data:
536 | title: hold
537 | button: b4
538 | - timing:
539 | - ON for at most 1s
540 | - OFF for at least 0.5s
541 | then:
542 | - logger.log:
543 | format: "Single Short Clicked"
544 | level: INFO
545 | - homeassistant.event:
546 | event: esphome.esp32_keypad_V2
547 | data:
548 | title: single_click
549 | button: b4
550 | #Button 5
551 | - platform: gpio
552 | icon: "mdi:dialpad"
553 | name: "Keypad 2x4 Button 5"
554 | pin:
555 | number: GPIO19
556 | inverted: True
557 | mode: INPUT_PULLUP
558 | id: esp32_keypad_b5
559 | on_press:
560 | then:
561 | - light.turn_on:
562 | id: key5
563 | red: .5
564 | green: .5
565 | blue: .5
566 | on_release:
567 | then:
568 | - light.turn_off:
569 | id: key5
570 | on_multi_click:
571 | - timing:
572 | - ON for at most 1s
573 | - OFF for at most 1s
574 | - ON for at most 1s
575 | - OFF for at least 0.2s
576 | then:
577 | - logger.log:
578 | format: "Double Clicked"
579 | level: INFO
580 | - homeassistant.event:
581 | event: esphome.esp32_keypad_V2
582 | data:
583 | title: dbl_click
584 | button: b5
585 | - timing:
586 | - ON for at most 1s
587 | - OFF for at most 1s
588 | - ON for at most 1s
589 | - OFF for at most 1s
590 | - ON for at most 1s
591 | - OFF for at least 0.2s
592 | then:
593 | - logger.log:
594 | format: "Triple Clicked"
595 | level: INFO
596 | - homeassistant.event:
597 | event: esphome.esp32_keypad_V2
598 | data:
599 | title: triple_click
600 | button: b5
601 | - timing:
602 | - ON for 1s to 2s
603 | - OFF for at least 0.5s
604 | then:
605 | - logger.log:
606 | format: "Single Long Clicked"
607 | level: INFO
608 | - homeassistant.event:
609 | event: esphome.esp32_keypad_V2
610 | data:
611 | title: long_click
612 | button: b5
613 | - timing:
614 | - ON for at least 2.2s
615 | then:
616 | - logger.log:
617 | format: "Click and Hold"
618 | level: INFO
619 | - homeassistant.event:
620 | event: esphome.esp32_keypad_V2
621 | data:
622 | title: hold
623 | button: b5
624 | - timing:
625 | - ON for at most 1s
626 | - OFF for at least 0.5s
627 | then:
628 | - logger.log:
629 | format: "Single Short Clicked"
630 | level: INFO
631 | - homeassistant.event:
632 | event: esphome.esp32_keypad_V2
633 | data:
634 | title: single_click
635 | button: b5
636 | #Button 6
637 | - platform: gpio
638 | icon: "mdi:dialpad"
639 | name: "Keypad 2x4 Button 6"
640 | pin:
641 | number: GPIO18
642 | inverted: True
643 | mode: INPUT_PULLUP
644 | id: esp32_keypad_b6
645 | on_press:
646 | then:
647 | - light.turn_on:
648 | id: key6
649 | red: .5
650 | green: .5
651 | blue: .5
652 | on_release:
653 | then:
654 | - light.turn_off:
655 | id: key6
656 | on_multi_click:
657 | - timing:
658 | - ON for at most 1s
659 | - OFF for at most 1s
660 | - ON for at most 1s
661 | - OFF for at least 0.2s
662 | then:
663 | - logger.log:
664 | format: "Double Clicked"
665 | level: INFO
666 | - homeassistant.event:
667 | event: esphome.esp32_keypad_V2
668 | data:
669 | title: dbl_click
670 | button: b6
671 | - timing:
672 | - ON for at most 1s
673 | - OFF for at most 1s
674 | - ON for at most 1s
675 | - OFF for at most 1s
676 | - ON for at most 1s
677 | - OFF for at least 0.2s
678 | then:
679 | - logger.log:
680 | format: "Triple Clicked"
681 | level: INFO
682 | - homeassistant.event:
683 | event: esphome.esp32_keypad_V2
684 | data:
685 | title: triple_click
686 | button: b6
687 | - timing:
688 | - ON for 1s to 2s
689 | - OFF for at least 0.5s
690 | then:
691 | - logger.log:
692 | format: "Single Long Clicked"
693 | level: INFO
694 | - homeassistant.event:
695 | event: esphome.esp32_keypad_V2
696 | data:
697 | title: long_click
698 | button: b6
699 | - timing:
700 | - ON for at least 2.2s
701 | then:
702 | - logger.log:
703 | format: "Click and Hold"
704 | level: INFO
705 | - homeassistant.event:
706 | event: esphome.esp32_keypad_V2
707 | data:
708 | title: hold
709 | button: b6
710 | - timing:
711 | - ON for at most 1s
712 | - OFF for at least 0.5s
713 | then:
714 | - logger.log:
715 | format: "Single Short Clicked"
716 | level: INFO
717 | - homeassistant.event:
718 | event: esphome.esp32_keypad_V2
719 | data:
720 | title: single_click
721 | button: b6
722 | #Button 7
723 | - platform: gpio
724 | icon: "mdi:dialpad"
725 | name: "Keypad 2x4 Button 7"
726 | pin:
727 | number: GPIO17
728 | inverted: True
729 | mode: INPUT_PULLUP
730 | id: esp32_keypad_b7
731 | on_press:
732 | then:
733 | - light.turn_on:
734 | id: key7
735 | red: .5
736 | green: .5
737 | blue: .5
738 | on_release:
739 | then:
740 | - light.turn_off:
741 | id: key7
742 | on_multi_click:
743 | - timing:
744 | - ON for at most 1s
745 | - OFF for at most 1s
746 | - ON for at most 1s
747 | - OFF for at least 0.2s
748 | then:
749 | - logger.log:
750 | format: "Double Clicked"
751 | level: INFO
752 | - homeassistant.event:
753 | event: esphome.esp32_keypad_V2
754 | data:
755 | title: dbl_click
756 | button: b7
757 | - timing:
758 | - ON for at most 1s
759 | - OFF for at most 1s
760 | - ON for at most 1s
761 | - OFF for at most 1s
762 | - ON for at most 1s
763 | - OFF for at least 0.2s
764 | then:
765 | - logger.log:
766 | format: "Triple Clicked"
767 | level: INFO
768 | - homeassistant.event:
769 | event: esphome.esp32_keypad_V2
770 | data:
771 | title: triple_click
772 | button: b7
773 | - timing:
774 | - ON for 1s to 2s
775 | - OFF for at least 0.5s
776 | then:
777 | - logger.log:
778 | format: "Single Long Clicked"
779 | level: INFO
780 | - homeassistant.event:
781 | event: esphome.esp32_keypad_V2
782 | data:
783 | title: long_click
784 | button: b7
785 | - timing:
786 | - ON for at least 2.2s
787 | then:
788 | - logger.log:
789 | format: "Click and Hold"
790 | level: INFO
791 | - homeassistant.event:
792 | event: esphome.esp32_keypad_V2
793 | data:
794 | title: hold
795 | button: b7
796 | - timing:
797 | - ON for at most 1s
798 | - OFF for at least 0.5s
799 | then:
800 | - logger.log:
801 | format: "Single Short Clicked"
802 | level: INFO
803 | - homeassistant.event:
804 | event: esphome.esp32_keypad_V2
805 | data:
806 | title: single_click
807 | button: b7
808 | #Button 8
809 | - platform: gpio
810 | icon: "mdi:dialpad"
811 | name: "Keypad 2x4 Button 8"
812 | pin:
813 | number: GPIO16
814 | inverted: True
815 | mode: INPUT_PULLUP
816 | id: esp32_keypad_b8
817 | on_press:
818 | then:
819 | - light.turn_on:
820 | id: key8
821 | red: .5
822 | green: .5
823 | blue: .5
824 | on_release:
825 | then:
826 | - light.turn_off:
827 | id: key8
828 | on_multi_click:
829 | - timing:
830 | - ON for at most 1s
831 | - OFF for at most 1s
832 | - ON for at most 1s
833 | - OFF for at least 0.2s
834 | then:
835 | - logger.log:
836 | format: "Double Clicked"
837 | level: INFO
838 | - homeassistant.event:
839 | event: esphome.esp32_keypad_V2
840 | data:
841 | title: dbl_click
842 | button: b8
843 | - timing:
844 | - ON for at most 1s
845 | - OFF for at most 1s
846 | - ON for at most 1s
847 | - OFF for at most 1s
848 | - ON for at most 1s
849 | - OFF for at least 0.2s
850 | then:
851 | - logger.log:
852 | format: "Triple Clicked"
853 | level: INFO
854 | - homeassistant.event:
855 | event: esphome.esp32_keypad_V2
856 | data:
857 | title: triple_click
858 | button: b8
859 | - timing:
860 | - ON for 1s to 2s
861 | - OFF for at least 0.5s
862 | then:
863 | - logger.log:
864 | format: "Single Long Clicked"
865 | level: INFO
866 | - homeassistant.event:
867 | event: esphome.esp32_keypad_V2
868 | data:
869 | title: long_click
870 | button: b8
871 | - timing:
872 | - ON for at least 2.2s
873 | then:
874 | - logger.log:
875 | format: "Click and Hold"
876 | level: INFO
877 | - homeassistant.event:
878 | event: esphome.esp32_keypad_V2
879 | data:
880 | title: hold
881 | button: b8
882 | - timing:
883 | - ON for at most 1s
884 | - OFF for at least 0.5s
885 | then:
886 | - logger.log:
887 | format: "Single Short Clicked"
888 | level: INFO
889 | - homeassistant.event:
890 | event: esphome.esp32_keypad_V2
891 | data:
892 | title: single_click
893 | button: b8
894 |
--------------------------------------------------------------------------------
/YAML/esp32_keypad_NO_LED.yaml:
--------------------------------------------------------------------------------
1 | esphome:
2 | name: esp32-keypad
3 | friendly_name: eps32_keypad
4 |
5 | esp32:
6 | board: esp32dev
7 | framework:
8 | type: arduino
9 |
10 | # Enable logging
11 | logger:
12 |
13 | # Enable Home Assistant API
14 | api:
15 | encryption:
16 | key: !secret api_key
17 |
18 | ota:
19 | password: !secret ota_password
20 |
21 | wifi:
22 | ssid: !secret wifi_ssid
23 | password: !secret wifi_password
24 |
25 | # Enable fallback hotspot (captive portal) in case wifi connection fails
26 | ap:
27 | ssid: "esp32 Keypad Fallback Hotspot"
28 | password: !secret ssid_password
29 |
30 | captive_portal:
31 |
32 | #connections: all buttons are on GND and on their respective pins
33 | #(we are relying on esp32s built-in pullup resistors but could have used external resistors as well)
34 | #Button 1: GPIO25 /
35 | #Button 2: GPIO26 /
36 | #Button 3: GPIO27 /
37 | #Button 4: GPIO14 /
38 |
39 | #Button 5: GPIO19 /
40 | #Button 6: GPIO18 /
41 | #Button 7: GPI17 /
42 | #Button 8: GPIO16
43 |
44 | binary_sensor:
45 | #Button 1
46 | - platform: gpio
47 | icon: "mdi:dialpad"
48 | name: "Keypad 2x4 Button 1"
49 | pin:
50 | number: GPIO25
51 | inverted: True
52 | mode: INPUT_PULLUP
53 | id: esp32_keypad_b1
54 |
55 | on_multi_click:
56 | - timing:
57 | - ON for at most 1s
58 | - OFF for at most 1s
59 | - ON for at most 1s
60 | - OFF for at least 0.2s
61 | then:
62 | - logger.log:
63 | format: "Double Clicked"
64 | level: INFO
65 | - homeassistant.event:
66 | event: esphome.esp32_keypad_V2
67 | data:
68 | title: dbl_click
69 | button: b1
70 | - timing:
71 | - ON for at most 1s
72 | - OFF for at most 1s
73 | - ON for at most 1s
74 | - OFF for at most 1s
75 | - ON for at most 1s
76 | - OFF for at least 0.2s
77 | then:
78 | - logger.log:
79 | format: "Triple Clicked"
80 | level: INFO
81 | - homeassistant.event:
82 | event: esphome.esp32_keypad_V2
83 | data:
84 | title: triple_click
85 | button: b1
86 | - timing:
87 | - ON for 1s to 2s
88 | - OFF for at least 0.5s
89 | then:
90 | - logger.log:
91 | format: "Single Long Clicked"
92 | level: INFO
93 | - homeassistant.event:
94 | event: esphome.esp32_keypad_V2
95 | data:
96 | title: long_click
97 | button: b1
98 | - timing:
99 | - ON for at least 2.2s
100 | then:
101 | - logger.log:
102 | format: "Click and Hold"
103 | level: INFO
104 | - homeassistant.event:
105 | event: esphome.esp32_keypad_V2
106 | data:
107 | title: hold
108 | button: b1
109 | - timing:
110 | - ON for at most 1s
111 | - OFF for at least 0.5s
112 | then:
113 | - logger.log:
114 | format: "Single Short Clicked"
115 | level: INFO
116 | - homeassistant.event:
117 | event: esphome.esp32_keypad_V2
118 | data:
119 | title: single_click
120 | button: b1
121 |
122 | #Button 2
123 | - platform: gpio
124 | icon: "mdi:dialpad"
125 | name: "Keypad 2x4 Button 2"
126 | pin:
127 | number: GPIO26
128 | inverted: True
129 | mode: INPUT_PULLUP
130 | id: esp32_keypad_b2
131 |
132 | on_multi_click:
133 | - timing:
134 | - ON for at most 1s
135 | - OFF for at most 1s
136 | - ON for at most 1s
137 | - OFF for at least 0.2s
138 | then:
139 | - logger.log:
140 | format: "Double Clicked"
141 | level: INFO
142 | - homeassistant.event:
143 | event: esphome.esp32_keypad_V2
144 | data:
145 | title: dbl_click
146 | button: b2
147 | - timing:
148 | - ON for at most 1s
149 | - OFF for at most 1s
150 | - ON for at most 1s
151 | - OFF for at most 1s
152 | - ON for at most 1s
153 | - OFF for at least 0.2s
154 | then:
155 | - logger.log:
156 | format: "Triple Clicked"
157 | level: INFO
158 | - homeassistant.event:
159 | event: esphome.esp32_keypad_V2
160 | data:
161 | title: triple_click
162 | button: b2
163 | - timing:
164 | - ON for 1s to 2s
165 | - OFF for at least 0.5s
166 | then:
167 | - logger.log:
168 | format: "Single Long Clicked"
169 | level: INFO
170 | - homeassistant.event:
171 | event: esphome.esp32_keypad_V2
172 | data:
173 | title: long_click
174 | button: b2
175 | - timing:
176 | - ON for at least 2.2s
177 | then:
178 | - logger.log:
179 | format: "Click and Hold"
180 | level: INFO
181 | - homeassistant.event:
182 | event: esphome.esp32_keypad_V2
183 | data:
184 | title: hold
185 | button: b2
186 | - timing:
187 | - ON for at most 1s
188 | - OFF for at least 0.5s
189 | then:
190 | - logger.log:
191 | format: "Single Short Clicked"
192 | level: INFO
193 | - homeassistant.event:
194 | event: esphome.esp32_keypad_V2
195 | data:
196 | title: single_click
197 | button: b2
198 | #Button 3
199 | - platform: gpio
200 | icon: "mdi:dialpad"
201 | name: "Keypad 2x4 Button 3"
202 | pin:
203 | number: GPIO27
204 | inverted: True
205 | mode: INPUT_PULLUP
206 | id: esp32_keypad_b3
207 |
208 | on_multi_click:
209 | - timing:
210 | - ON for at most 1s
211 | - OFF for at most 1s
212 | - ON for at most 1s
213 | - OFF for at least 0.2s
214 | then:
215 | - logger.log:
216 | format: "Double Clicked"
217 | level: INFO
218 | - homeassistant.event:
219 | event: esphome.esp32_keypad_V2
220 | data:
221 | title: dbl_click
222 | button: b3
223 | - timing:
224 | - ON for at most 1s
225 | - OFF for at most 1s
226 | - ON for at most 1s
227 | - OFF for at most 1s
228 | - ON for at most 1s
229 | - OFF for at least 0.2s
230 | then:
231 | - logger.log:
232 | format: "Triple Clicked"
233 | level: INFO
234 | - homeassistant.event:
235 | event: esphome.esp32_keypad_V2
236 | data:
237 | title: triple_click
238 | button: b3
239 | - timing:
240 | - ON for 1s to 2s
241 | - OFF for at least 0.5s
242 | then:
243 | - logger.log:
244 | format: "Single Long Clicked"
245 | level: INFO
246 | - homeassistant.event:
247 | event: esphome.esp32_keypad_V2
248 | data:
249 | title: long_click
250 | button: b3
251 | - timing:
252 | - ON for at least 2.2s
253 | then:
254 | - logger.log:
255 | format: "Click and Hold"
256 | level: INFO
257 | - homeassistant.event:
258 | event: esphome.esp32_keypad_V2
259 | data:
260 | title: hold
261 | button: b3
262 | - timing:
263 | - ON for at most 1s
264 | - OFF for at least 0.5s
265 | then:
266 | - logger.log:
267 | format: "Single Short Clicked"
268 | level: INFO
269 | - homeassistant.event:
270 | event: esphome.esp32_keypad_V2
271 | data:
272 | title: single_click
273 | button: b3
274 | #Button 4
275 | - platform: gpio
276 | icon: "mdi:dialpad"
277 | name: "Keypad 2x4 Button 4"
278 | pin:
279 | number: GPIO14
280 | inverted: True
281 | mode: INPUT_PULLUP
282 | id: esp32_keypad_b4
283 |
284 | on_multi_click:
285 | - timing:
286 | - ON for at most 1s
287 | - OFF for at most 1s
288 | - ON for at most 1s
289 | - OFF for at least 0.2s
290 | then:
291 | - logger.log:
292 | format: "Double Clicked"
293 | level: INFO
294 | - homeassistant.event:
295 | event: esphome.esp32_keypad_V2
296 | data:
297 | title: dbl_click
298 | button: b4
299 | - timing:
300 | - ON for at most 1s
301 | - OFF for at most 1s
302 | - ON for at most 1s
303 | - OFF for at most 1s
304 | - ON for at most 1s
305 | - OFF for at least 0.2s
306 | then:
307 | - logger.log:
308 | format: "Triple Clicked"
309 | level: INFO
310 | - homeassistant.event:
311 | event: esphome.esp32_keypad_V2
312 | data:
313 | title: triple_click
314 | button: b4
315 | - timing:
316 | - ON for 1s to 2s
317 | - OFF for at least 0.5s
318 | then:
319 | - logger.log:
320 | format: "Single Long Clicked"
321 | level: INFO
322 | - homeassistant.event:
323 | event: esphome.esp32_keypad_V2
324 | data:
325 | title: long_click
326 | button: b4
327 | - timing:
328 | - ON for at least 2.2s
329 | then:
330 | - logger.log:
331 | format: "Click and Hold"
332 | level: INFO
333 | - homeassistant.event:
334 | event: esphome.esp32_keypad_V2
335 | data:
336 | title: hold
337 | button: b4
338 | - timing:
339 | - ON for at most 1s
340 | - OFF for at least 0.5s
341 | then:
342 | - logger.log:
343 | format: "Single Short Clicked"
344 | level: INFO
345 | - homeassistant.event:
346 | event: esphome.esp32_keypad_V2
347 | data:
348 | title: single_click
349 | button: b4
350 | #Button 5
351 | - platform: gpio
352 | icon: "mdi:dialpad"
353 | name: "Keypad 2x4 Button 5"
354 | pin:
355 | number: GPIO19
356 | inverted: True
357 | mode: INPUT_PULLUP
358 | id: esp32_keypad_b5
359 |
360 | on_multi_click:
361 | - timing:
362 | - ON for at most 1s
363 | - OFF for at most 1s
364 | - ON for at most 1s
365 | - OFF for at least 0.2s
366 | then:
367 | - logger.log:
368 | format: "Double Clicked"
369 | level: INFO
370 | - homeassistant.event:
371 | event: esphome.esp32_keypad_V2
372 | data:
373 | title: dbl_click
374 | button: b5
375 | - timing:
376 | - ON for at most 1s
377 | - OFF for at most 1s
378 | - ON for at most 1s
379 | - OFF for at most 1s
380 | - ON for at most 1s
381 | - OFF for at least 0.2s
382 | then:
383 | - logger.log:
384 | format: "Triple Clicked"
385 | level: INFO
386 | - homeassistant.event:
387 | event: esphome.esp32_keypad_V2
388 | data:
389 | title: triple_click
390 | button: b5
391 | - timing:
392 | - ON for 1s to 2s
393 | - OFF for at least 0.5s
394 | then:
395 | - logger.log:
396 | format: "Single Long Clicked"
397 | level: INFO
398 | - homeassistant.event:
399 | event: esphome.esp32_keypad_V2
400 | data:
401 | title: long_click
402 | button: b5
403 | - timing:
404 | - ON for at least 2.2s
405 | then:
406 | - logger.log:
407 | format: "Click and Hold"
408 | level: INFO
409 | - homeassistant.event:
410 | event: esphome.esp32_keypad_V2
411 | data:
412 | title: hold
413 | button: b5
414 | - timing:
415 | - ON for at most 1s
416 | - OFF for at least 0.5s
417 | then:
418 | - logger.log:
419 | format: "Single Short Clicked"
420 | level: INFO
421 | - homeassistant.event:
422 | event: esphome.esp32_keypad_V2
423 | data:
424 | title: single_click
425 | button: b5
426 | #Button 6
427 | - platform: gpio
428 | icon: "mdi:dialpad"
429 | name: "Keypad 2x4 Button 6"
430 | pin:
431 | number: GPIO18
432 | inverted: True
433 | mode: INPUT_PULLUP
434 | id: esp32_keypad_b6
435 |
436 | on_multi_click:
437 | - timing:
438 | - ON for at most 1s
439 | - OFF for at most 1s
440 | - ON for at most 1s
441 | - OFF for at least 0.2s
442 | then:
443 | - logger.log:
444 | format: "Double Clicked"
445 | level: INFO
446 | - homeassistant.event:
447 | event: esphome.esp32_keypad_V2
448 | data:
449 | title: dbl_click
450 | button: b6
451 | - timing:
452 | - ON for at most 1s
453 | - OFF for at most 1s
454 | - ON for at most 1s
455 | - OFF for at most 1s
456 | - ON for at most 1s
457 | - OFF for at least 0.2s
458 | then:
459 | - logger.log:
460 | format: "Triple Clicked"
461 | level: INFO
462 | - homeassistant.event:
463 | event: esphome.esp32_keypad_V2
464 | data:
465 | title: triple_click
466 | button: b6
467 | - timing:
468 | - ON for 1s to 2s
469 | - OFF for at least 0.5s
470 | then:
471 | - logger.log:
472 | format: "Single Long Clicked"
473 | level: INFO
474 | - homeassistant.event:
475 | event: esphome.esp32_keypad_V2
476 | data:
477 | title: long_click
478 | button: b6
479 | - timing:
480 | - ON for at least 2.2s
481 | then:
482 | - logger.log:
483 | format: "Click and Hold"
484 | level: INFO
485 | - homeassistant.event:
486 | event: esphome.esp32_keypad_V2
487 | data:
488 | title: hold
489 | button: b6
490 | - timing:
491 | - ON for at most 1s
492 | - OFF for at least 0.5s
493 | then:
494 | - logger.log:
495 | format: "Single Short Clicked"
496 | level: INFO
497 | - homeassistant.event:
498 | event: esphome.esp32_keypad_V2
499 | data:
500 | title: single_click
501 | button: b6
502 | #Button 7
503 | - platform: gpio
504 | icon: "mdi:dialpad"
505 | name: "Keypad 2x4 Button 7"
506 | pin:
507 | number: GPIO17
508 | inverted: True
509 | mode: INPUT_PULLUP
510 | id: esp32_keypad_b7
511 |
512 | on_multi_click:
513 | - timing:
514 | - ON for at most 1s
515 | - OFF for at most 1s
516 | - ON for at most 1s
517 | - OFF for at least 0.2s
518 | then:
519 | - logger.log:
520 | format: "Double Clicked"
521 | level: INFO
522 | - homeassistant.event:
523 | event: esphome.esp32_keypad_V2
524 | data:
525 | title: dbl_click
526 | button: b7
527 | - timing:
528 | - ON for at most 1s
529 | - OFF for at most 1s
530 | - ON for at most 1s
531 | - OFF for at most 1s
532 | - ON for at most 1s
533 | - OFF for at least 0.2s
534 | then:
535 | - logger.log:
536 | format: "Triple Clicked"
537 | level: INFO
538 | - homeassistant.event:
539 | event: esphome.esp32_keypad_V2
540 | data:
541 | title: triple_click
542 | button: b7
543 | - timing:
544 | - ON for 1s to 2s
545 | - OFF for at least 0.5s
546 | then:
547 | - logger.log:
548 | format: "Single Long Clicked"
549 | level: INFO
550 | - homeassistant.event:
551 | event: esphome.esp32_keypad_V2
552 | data:
553 | title: long_click
554 | button: b7
555 | - timing:
556 | - ON for at least 2.2s
557 | then:
558 | - logger.log:
559 | format: "Click and Hold"
560 | level: INFO
561 | - homeassistant.event:
562 | event: esphome.esp32_keypad_V2
563 | data:
564 | title: hold
565 | button: b7
566 | - timing:
567 | - ON for at most 1s
568 | - OFF for at least 0.5s
569 | then:
570 | - logger.log:
571 | format: "Single Short Clicked"
572 | level: INFO
573 | - homeassistant.event:
574 | event: esphome.esp32_keypad_V2
575 | data:
576 | title: single_click
577 | button: b7
578 | #Button 8
579 | - platform: gpio
580 | icon: "mdi:dialpad"
581 | name: "Keypad 2x4 Button 8"
582 | pin:
583 | number: GPIO16
584 | inverted: True
585 | mode: INPUT_PULLUP
586 | id: esp32_keypad_b8
587 |
588 | on_multi_click:
589 | - timing:
590 | - ON for at most 1s
591 | - OFF for at most 1s
592 | - ON for at most 1s
593 | - OFF for at least 0.2s
594 | then:
595 | - logger.log:
596 | format: "Double Clicked"
597 | level: INFO
598 | - homeassistant.event:
599 | event: esphome.esp32_keypad_V2
600 | data:
601 | title: dbl_click
602 | button: b8
603 | - timing:
604 | - ON for at most 1s
605 | - OFF for at most 1s
606 | - ON for at most 1s
607 | - OFF for at most 1s
608 | - ON for at most 1s
609 | - OFF for at least 0.2s
610 | then:
611 | - logger.log:
612 | format: "Triple Clicked"
613 | level: INFO
614 | - homeassistant.event:
615 | event: esphome.esp32_keypad_V2
616 | data:
617 | title: triple_click
618 | button: b8
619 | - timing:
620 | - ON for 1s to 2s
621 | - OFF for at least 0.5s
622 | then:
623 | - logger.log:
624 | format: "Single Long Clicked"
625 | level: INFO
626 | - homeassistant.event:
627 | event: esphome.esp32_keypad_V2
628 | data:
629 | title: long_click
630 | button: b8
631 | - timing:
632 | - ON for at least 2.2s
633 | then:
634 | - logger.log:
635 | format: "Click and Hold"
636 | level: INFO
637 | - homeassistant.event:
638 | event: esphome.esp32_keypad_V2
639 | data:
640 | title: hold
641 | button: b8
642 | - timing:
643 | - ON for at most 1s
644 | - OFF for at least 0.5s
645 | then:
646 | - logger.log:
647 | format: "Single Short Clicked"
648 | level: INFO
649 | - homeassistant.event:
650 | event: esphome.esp32_keypad_V2
651 | data:
652 | title: single_click
653 | button: b8
654 |
--------------------------------------------------------------------------------
/assets/LED/Inside_LED.JPG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/drpeppershaker/ESP32_keypad/a234bb7c294f27ec7542f176638d677312a37ac3/assets/LED/Inside_LED.JPG
--------------------------------------------------------------------------------
/assets/LED/LED_Layout.JPG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/drpeppershaker/ESP32_keypad/a234bb7c294f27ec7542f176638d677312a37ac3/assets/LED/LED_Layout.JPG
--------------------------------------------------------------------------------
/assets/LED/RGB_Lighting_Demo.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/drpeppershaker/ESP32_keypad/a234bb7c294f27ec7542f176638d677312a37ac3/assets/LED/RGB_Lighting_Demo.gif
--------------------------------------------------------------------------------
/assets/LED/Top_LED.JPG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/drpeppershaker/ESP32_keypad/a234bb7c294f27ec7542f176638d677312a37ac3/assets/LED/Top_LED.JPG
--------------------------------------------------------------------------------
/assets/LED/common_GND.JPG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/drpeppershaker/ESP32_keypad/a234bb7c294f27ec7542f176638d677312a37ac3/assets/LED/common_GND.JPG
--------------------------------------------------------------------------------
/assets/LED/wiring_diagram_LED.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/drpeppershaker/ESP32_keypad/a234bb7c294f27ec7542f176638d677312a37ac3/assets/LED/wiring_diagram_LED.png
--------------------------------------------------------------------------------
/assets/NO_LED/inside_NO_LED.JPG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/drpeppershaker/ESP32_keypad/a234bb7c294f27ec7542f176638d677312a37ac3/assets/NO_LED/inside_NO_LED.JPG
--------------------------------------------------------------------------------
/assets/NO_LED/top_NO_LED.JPG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/drpeppershaker/ESP32_keypad/a234bb7c294f27ec7542f176638d677312a37ac3/assets/NO_LED/top_NO_LED.JPG
--------------------------------------------------------------------------------
/assets/NO_LED/wiring_diagram_NO_LED.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/drpeppershaker/ESP32_keypad/a234bb7c294f27ec7542f176638d677312a37ac3/assets/NO_LED/wiring_diagram_NO_LED.png
--------------------------------------------------------------------------------
/automations/baby_buddy_keypad_automation.yaml:
--------------------------------------------------------------------------------
1 | alias: Baby Buddy Keypad V2
2 | description: Do stuff when the keypad buttons are pressed
3 | trigger:
4 | - platform: event
5 | event_type: esphome.esp32_keypad
6 | id: Button_1
7 | event_data:
8 | title: single_click
9 | button: b1
10 | - platform: event
11 | event_type: esphome.esp32_keypad
12 | event_data:
13 | title: single_click
14 | button: b2
15 | id: Button_2
16 | - platform: event
17 | event_type: esphome.esp32_keypad
18 | event_data:
19 | title: single_click
20 | button: b3
21 | id: Button_3
22 | - platform: event
23 | event_type: esphome.esp32_keypad
24 | event_data:
25 | title: single_click
26 | button: b4
27 | id: Button_4
28 | - platform: event
29 | event_type: esphome.esp32_keypad
30 | event_data:
31 | title: dbl_click
32 | button: b4
33 | id: Diaper_double_click
34 | - platform: event
35 | event_type: esphome.esp32_keypad
36 | event_data:
37 | title: triple_click
38 | button: b4
39 | id: Diaper_triple_click
40 | - platform: event
41 | event_type: esphome.esp32_keypad
42 | event_data:
43 | title: single_click
44 | button: b5
45 | id: Button_5
46 | - platform: event
47 | event_type: esphome.esp32_keypad
48 | event_data:
49 | title: single_click
50 | button: b6
51 | id: Button_6
52 | - platform: event
53 | event_type: esphome.esp32_keypad
54 | event_data:
55 | title: single_click
56 | button: b7
57 | id: Button_7
58 | - platform: event
59 | event_type: esphome.esp32_keypad
60 | event_data:
61 | title: single_click
62 | button: b8
63 | id: Button_8
64 | condition: []
65 | action:
66 | - choose:
67 | - conditions:
68 | - condition: trigger
69 | id: Button_1
70 | sequence:
71 | - if:
72 | - condition: template
73 | value_template: "{{state_attr('sensor.$BABY_$NAME_last_timer', 'active')}}"
74 | then:
75 | - service: babybuddy.add_feeding
76 | data:
77 | timer: true
78 | type: Breast milk
79 | method: Left breast
80 | target:
81 | entity_id: switch.$BABY_$NAME_timer
82 | - service: notify.all_phones
83 | data:
84 | title: Baby Buddy
85 | message: >
86 | Left Breast Logged Duration: {{
87 | states.sensor.bb_timer_formatted.state }}
88 | data:
89 | clickAction: $YOUR.BB.URL:8000/feedings/
90 | url: $YOUR.BB.URL:8000/feedings/
91 | persistent: true
92 | title: Baby Buddy
93 | - service: input_text.set_value
94 | data:
95 | value: ""
96 | target:
97 | entity_id: input_text.bb_notes
98 | - service: input_number.set_value
99 | data:
100 | value: 0
101 | target:
102 | entity_id: input_number.bb_amount
103 | - service: counter.increment
104 | data: {}
105 | target:
106 | entity_id: counter.bb_feeding_counter
107 | else:
108 | - service: switch.turn_on
109 | data: {}
110 | target:
111 | entity_id: switch.$BABY_$NAME_timer
112 | - service: notify.all_phones
113 | data:
114 | title: Baby Buddy
115 | message: |
116 | Left Breast Timer Started
117 | data:
118 | clickAction: $YOUR.BB.URL:8000/timers/
119 | url: $YOUR.BB.URL:8000/timers/
120 | persistent: true
121 | title: Baby Buddy
122 | - conditions:
123 | - condition: trigger
124 | id: Button_2
125 | sequence:
126 | - if:
127 | - condition: template
128 | value_template: "{{state_attr('sensor.$BABY_$NAME_last_timer', 'active')}}"
129 | then:
130 | - service: babybuddy.add_feeding
131 | data:
132 | timer: true
133 | type: Breast milk
134 | method: Right breast
135 | target:
136 | entity_id: switch.$BABY_$NAME_timer
137 | - service: notify.all_phones
138 | data:
139 | title: Baby Buddy
140 | message: >
141 | Right Breast Logged Duration: {{
142 | states.sensor.bb_timer_formatted.state }}
143 | data:
144 | clickAction: $YOUR.BB.URL:8000/feedings/
145 | url: $YOUR.BB.URL:8000/feedings/
146 | persistent: true
147 | title: Baby Buddy
148 | - service: input_text.set_value
149 | data:
150 | value: ""
151 | target:
152 | entity_id: input_text.bb_notes
153 | - service: input_number.set_value
154 | data:
155 | value: 0
156 | target:
157 | entity_id: input_number.bb_amount
158 | - service: counter.increment
159 | data: {}
160 | target:
161 | entity_id: counter.bb_feeding_counter
162 | else:
163 | - service: switch.turn_on
164 | data: {}
165 | target:
166 | entity_id: switch.$BABY_$NAME_timer
167 | - service: notify.all_phones
168 | data:
169 | title: Baby Buddy
170 | message: Right Breast Timer Started
171 | data:
172 | clickAction: $YOUR.BB.URL:8000/timers/
173 | url: $YOUR.BB.URL:8000/timers/
174 | persistent: true
175 | title: Baby Buddy
176 | - conditions:
177 | - condition: trigger
178 | id: Button_3
179 | sequence:
180 | - service: babybuddy.add_diaper_change
181 | data:
182 | type: Wet
183 | color: Yellow
184 | target:
185 | entity_id: sensor.baby_$BABY_$NAME
186 | - service: counter.increment
187 | data: {}
188 | target:
189 | entity_id: counter.bb_diaper_counter
190 | - service: notify.all_phones
191 | data:
192 | title: Baby Buddy
193 | message: |
194 | Wet Diaper Logged!
195 | data:
196 | clickAction: $YOUR.BB.URL:8000/diapers/
197 | url: $YOUR.BB.URL:8000/diapers/
198 | persistent: true
199 | title: Baby Buddy
200 | - conditions:
201 | - condition: trigger
202 | id: Button_4
203 | sequence:
204 | - service: babybuddy.add_diaper_change
205 | data:
206 | type: Solid
207 | color: Yellow
208 | target:
209 | entity_id: sensor.baby_$BABY_$NAME
210 | - service: counter.increment
211 | data: {}
212 | target:
213 | entity_id: counter.bb_diaper_counter
214 | - service: notify.all_phones
215 | data:
216 | title: Baby Buddy
217 | message: |
218 | Solid Diaper Logged!
219 | data:
220 | clickAction: $YOUR.BB.URL:8000/diapers/
221 | url: $YOUR.BB.URL:8000/diapers/
222 | persistent: true
223 | title: Baby Buddy
224 | - conditions:
225 | - condition: trigger
226 | id: Diaper_double_click
227 | sequence:
228 | - service: babybuddy.add_diaper_change
229 | data:
230 | type: Solid
231 | color: Green
232 | target:
233 | entity_id: sensor.baby_$BABY_$NAME
234 | - service: counter.increment
235 | data: {}
236 | target:
237 | entity_id: counter.bb_diaper_counter
238 | - service: notify.all_phones
239 | data:
240 | title: Baby Buddy
241 | message: |
242 | Solid Diaper Logged!
243 | data:
244 | clickAction: $YOUR.BB.URL:8000/diapers/
245 | url: $YOUR.BB.URL:8000/diapers/
246 | persistent: true
247 | title: Baby Buddy
248 | - conditions:
249 | - condition: trigger
250 | id: Diaper_triple_click
251 | sequence:
252 | - service: babybuddy.add_diaper_change
253 | data:
254 | type: Solid
255 | color: Brown
256 | target:
257 | entity_id: sensor.baby_$BABY_$NAME
258 | - service: counter.increment
259 | data: {}
260 | target:
261 | entity_id: counter.bb_diaper_counter
262 | - service: notify.all_phones
263 | data:
264 | title: Baby Buddy
265 | message: |
266 | Solid Diaper Logged!
267 | data:
268 | clickAction: $YOUR.BB.URL:8000/diapers/
269 | url: $YOUR.BB.URL:8000/diapers/
270 | persistent: true
271 | title: Baby Buddy
272 | - conditions:
273 | - condition: trigger
274 | id: Button_5
275 | sequence:
276 | - if:
277 | - condition: template
278 | value_template: "{{state_attr('sensor.$BABY_$NAME_last_timer', 'active')}}"
279 | then:
280 | - service: babybuddy.add_sleep
281 | data:
282 | timer: true
283 | target:
284 | entity_id: switch.$BABY_$NAME_timer
285 | - service: notify.all_phones
286 | data:
287 | title: Baby Buddy
288 | message: >
289 | Sleep Logged Duration: {{
290 | states.sensor.bb_timer_formatted.state }}
291 | data:
292 | clickAction: $YOUR.BB.URL:8000/sleep/
293 | url: |
294 | $YOUR.BB.URL:8000/sleep/
295 | persistent: true
296 | title: Baby Buddy
297 | else:
298 | - service: switch.turn_on
299 | data: {}
300 | target:
301 | entity_id: switch.$BABY_$NAME_timer
302 | - service: notify.all_phones
303 | data:
304 | title: Baby Buddy
305 | message: |
306 | Sleep Timer Started
307 | data:
308 | clickAction: $YOUR.BB.URL:8000/timers/
309 | url: $YOUR.BB.URL:8000/timers/
310 | persistent: true
311 | title: Baby Buddy
312 | - conditions:
313 | - condition: trigger
314 | id: Button_6
315 | sequence:
316 | - service: notify.all_phones
317 | data:
318 | title: Baby Buddy
319 | message: Tap and Hold to enter amount
320 | data:
321 | actions:
322 | - action: PUMP_CUSTOM
323 | title: Enter Amount Pumped in Ounces
324 | behavior: textInput
325 | textInputButtonTitle: (ounces)
326 | textInputPlaceholder: "1.0"
327 | subtitle: "Log Pumping:"
328 | - wait_for_trigger:
329 | - platform: event
330 | event_type: mobile_app_notification_action
331 | event_data:
332 | action: PUMP_CUSTOM
333 | continue_on_timeout: false
334 | timeout: "1:00"
335 | - service: babybuddy.add_pumping
336 | data:
337 | amount: |
338 | {{wait.trigger.event.data["reply_text"] }}
339 | target:
340 | entity_id: sensor.baby_$BABY_$NAME
341 | - wait_for_trigger:
342 | - platform: state
343 | entity_id:
344 | - sensor.$BABY_$NAME_last_pumping
345 | attribute: amount
346 | timeout:
347 | hours: 0
348 | minutes: 0
349 | seconds: 2
350 | milliseconds: 0
351 | - service: notify.all_phones
352 | data:
353 | title: Baby Buddy
354 | message: |
355 | Pumping Logged
356 | Amount: {{states('sensor.$BABY_$NAME_last_pumping')}} Ounces
357 | data:
358 | clickAction: $YOUR.BB.URL:8000/feedings/
359 | url: $YOUR.BB.URL:8000/feedings/
360 | persistent: true
361 | title: Baby Buddy
362 | - conditions:
363 | - condition: trigger
364 | id: Button_7
365 | sequence:
366 | - if:
367 | - condition: template
368 | value_template: "{{state_attr('sensor.$BABY_$NAME_last_timer', 'active')}}"
369 | then:
370 | - service: babybuddy.add_feeding
371 | data:
372 | timer: true
373 | type: Breast milk
374 | method: Bottle
375 | target:
376 | entity_id: switch.$BABY_$NAME_timer
377 | - service: counter.increment
378 | data: {}
379 | target:
380 | entity_id:
381 | - counter.bb_feeding_counter
382 | - service: input_text.set_value
383 | data:
384 | value: ""
385 | target:
386 | entity_id: input_text.bb_notes
387 | - service: input_number.set_value
388 | data:
389 | value: 0
390 | target:
391 | entity_id: input_number.bb_amount
392 | - service: notify.all_phones
393 | data:
394 | title: Baby Buddy
395 | message: >
396 | Bottle Feeding Logged Duration: {{
397 | states.sensor.bb_timer_formatted.state }}
398 | data:
399 | clickAction: $YOUR.BB.URL:8000/feedings/
400 | url: $YOUR.BB.URL:8000/feedings/
401 | persistent: true
402 | title: Baby Buddy
403 | else:
404 | - service: switch.turn_on
405 | data: {}
406 | target:
407 | entity_id: switch.$BABY_$NAME_timer
408 | - service: notify.all_phones
409 | data:
410 | title: Baby Buddy
411 | message: |
412 | Solid Food Timer Started
413 | data:
414 | clickAction: $YOUR.BB.URL:8000/timers/
415 | url: $YOUR.BB.URL:8000/timers/
416 | persistent: true
417 | title: Baby Buddy
418 | - conditions:
419 | - condition: trigger
420 | id: Button_8
421 | sequence:
422 | - if:
423 | - condition: template
424 | value_template: "{{state_attr('sensor.$BABY_$NAME_last_timer', 'active')}}"
425 | then:
426 | - service: babybuddy.add_tummy_time
427 | data:
428 | timer: true
429 | target:
430 | entity_id: switch.$BABY_$NAME_timer
431 | - service: notify.all_phones
432 | data:
433 | title: Baby Buddy
434 | message: >
435 | Tummy Time Logged! Duration: {{
436 | states.sensor.bb_timer_formatted.state }}
437 | data:
438 | clickAction: $YOUR.BB.URL:8000/tummy-time/
439 | url: $YOUR.BB.URL:8000/tummy-time/
440 | persistent: true
441 | title: Baby Buddy
442 | else:
443 | - service: switch.turn_on
444 | data: {}
445 | target:
446 | entity_id: switch.$BABY_$NAME_timer
447 | - service: notify.all_phones
448 | data:
449 | title: Baby Buddy
450 | message: |
451 | Tummy Time Timer Started
452 | data:
453 | clickAction: $YOUR.BB.URL:8000/timers/
454 | url: $YOUR.BB.URL:8000/timers/
455 | persistent: true
456 | title: Baby Buddy
457 | enabled: true
458 | mode: parallel
459 | max: 10
460 |
--------------------------------------------------------------------------------
/automations/generic_keypad_automation.yaml:
--------------------------------------------------------------------------------
1 | alias: Esp32_Keypad_automations
2 | description: Do stuff when the keypad buttons are pressed
3 | trigger:
4 | - platform: event
5 | event_type: esphome.esp32_keypad
6 | id: Button_1_single
7 | event_data:
8 | title: single_click
9 | button: b1
10 | alias: Button 1 Single Click
11 | - platform: event
12 | event_type: esphome.esp32_keypad
13 | event_data:
14 | title: single_click
15 | button: b2
16 | id: Button_2_single
17 | alias: Button 2 Single Click
18 | - platform: event
19 | event_type: esphome.esp32_keypad
20 | event_data:
21 | title: single_click
22 | button: b3
23 | id: Button_3_single
24 | alias: Button 3 Single Click
25 | - platform: event
26 | event_type: esphome.esp32_keypad
27 | event_data:
28 | title: single_click
29 | button: b4
30 | id: Button_4_single
31 | alias: Button 4 Single Click
32 | - platform: event
33 | event_type: esphome.esp32_keypad
34 | event_data:
35 | title: single_click
36 | button: b5
37 | id: Button_5_single
38 | alias: Button 5 Single Click
39 | - platform: event
40 | event_type: esphome.esp32_keypad
41 | event_data:
42 | title: single_click
43 | button: b6
44 | id: Button_6_single
45 | alias: Button 6 Single Click
46 | - platform: event
47 | event_type: esphome.esp32_keypad
48 | event_data:
49 | title: single_click
50 | button: b7
51 | id: Button_7_single
52 | alias: Button 7 Single Click
53 | - platform: event
54 | event_type: esphome.esp32_keypad
55 | event_data:
56 | title: single_click
57 | button: b8
58 | id: Button_8_single
59 | alias: Button 8 Single Click
60 |
61 | - platform: event
62 | event_type: esphome.esp32_keypad
63 | event_data:
64 | title: dbl_click
65 | button: b1
66 | id: Button_1_double
67 | alias: Button 1 Double Click
68 | - platform: event
69 | event_type: esphome.esp32_keypad
70 | event_data:
71 | title: dbl_click
72 | button: b2
73 | id: Button_2_double
74 | alias: Button 2 Double Click
75 | - platform: event
76 | event_type: esphome.esp32_keypad
77 | event_data:
78 | title: dbl_click
79 | button: b3
80 | id: Button_3_double
81 | alias: Button 3 Double Click
82 | - platform: event
83 | event_type: esphome.esp32_keypad
84 | event_data:
85 | title: dbl_click
86 | button: b4
87 | id: Button_4_double
88 | alias: Button 4 Double Click
89 | - platform: event
90 | event_type: esphome.esp32_keypad
91 | event_data:
92 | title: dbl_click
93 | button: b5
94 | id: Button_5_double
95 | alias: Button 5 Double Click
96 | - platform: event
97 | event_type: esphome.esp32_keypad
98 | event_data:
99 | title: dbl_click
100 | button: b6
101 | id: Button_6_double
102 | alias: Button 6 Double Click
103 | - platform: event
104 | event_type: esphome.esp32_keypad
105 | event_data:
106 | title: dbl_click
107 | button: b7
108 | id: Button_7_double
109 | alias: Button 7 Double Click
110 | - platform: event
111 | event_type: esphome.esp32_keypad
112 | event_data:
113 | title: dbl_click
114 | button: b8
115 | id: Button_8_double
116 | alias: Button 8 Double Click
117 | - platform: event
118 | event_type: esphome.esp32_keypad
119 | event_data:
120 | title: triple_click
121 | button: b1
122 | id: Button_1_triple
123 | alias: Button 1 Triple Click
124 | - platform: event
125 | event_type: esphome.esp32_keypad
126 | event_data:
127 | title: triple_click
128 | button: b2
129 | id: Button_2_triple
130 | alias: Button 2 Triple Click
131 | - platform: event
132 | event_type: esphome.esp32_keypad
133 | event_data:
134 | title: triple_click
135 | button: b3
136 | id: Button_3_triple
137 | alias: Button 3 Triple Click
138 | - platform: event
139 | event_type: esphome.esp32_keypad
140 | event_data:
141 | title: triple_click
142 | button: b4
143 | id: Button_4_triple
144 | alias: Button 4 Triple Click
145 | - platform: event
146 | event_type: esphome.esp32_keypad
147 | event_data:
148 | title: triple_click
149 | button: b5
150 | id: Button_5_triple
151 | alias: Button 5 Triple Click
152 | - platform: event
153 | event_type: esphome.esp32_keypad
154 | event_data:
155 | title: triple_click
156 | button: b6
157 | id: Button_6_triple
158 | alias: Button 6 Triple Click
159 | - platform: event
160 | event_type: esphome.esp32_keypad
161 | event_data:
162 | title: triple_click
163 | button: b7
164 | id: Button_7_triple
165 | alias: Button 7 Triple Click
166 | - platform: event
167 | event_type: esphome.esp32_keypad
168 | event_data:
169 | title: triple_click
170 | button: b8
171 | id: Button_8_triple
172 | alias: Button 8 Triple Click
173 |
174 | - platform: event
175 | event_type: esphome.esp32_keypad
176 | event_data:
177 | title: long_click
178 | button: b1
179 | id: Button_1_long
180 | alias: Button 1 Long Click
181 | - platform: event
182 | event_type: esphome.esp32_keypad
183 | event_data:
184 | title: long_click
185 | button: b2
186 | id: Button_2_long
187 | alias: Button 2 Long Click
188 | - platform: event
189 | event_type: esphome.esp32_keypad
190 | event_data:
191 | title: long_click
192 | button: b3
193 | id: Button_3_long
194 | alias: Button 3 Long Click
195 | - platform: event
196 | event_type: esphome.esp32_keypad
197 | event_data:
198 | title: long_click
199 | button: b4
200 | id: Button_4_long
201 | alias: Button 4 Long Click
202 | - platform: event
203 | event_type: esphome.esp32_keypad
204 | event_data:
205 | title: long_click
206 | button: b5
207 | id: Button_5_long
208 | alias: Button 5 Long Click
209 | - platform: event
210 | event_type: esphome.esp32_keypad
211 | event_data:
212 | title: long_click
213 | button: b6
214 | id: Button_6_long
215 | alias: Button 6 Long Click
216 | - platform: event
217 | event_type: esphome.esp32_keypad
218 | event_data:
219 | title: long_click
220 | button: b7
221 | id: Button_7_long
222 | alias: Button 7 Long Click
223 | - platform: event
224 | event_type: esphome.esp32_keypad
225 | event_data:
226 | title: long_click
227 | button: b8
228 | id: Button_8_long
229 | alias: Button 8 Long Click
230 | - platform: event
231 | event_type: esphome.esp32_keypad
232 | event_data:
233 | title: hold
234 | button: b1
235 | id: Button_1_hold
236 | alias: Button 1 Hold
237 | - platform: event
238 | event_type: esphome.esp32_keypad
239 | event_data:
240 | title: hold
241 | button: b2
242 | id: Button_2_hold
243 | alias: Button 2 Hold
244 | - platform: event
245 | event_type: esphome.esp32_keypad
246 | event_data:
247 | title: hold
248 | button: b3
249 | id: Button_3_hold
250 | alias: Button 3 Hold
251 | - platform: event
252 | event_type: esphome.esp32_keypad
253 | event_data:
254 | title: hold
255 | button: b4
256 | id: Button_4_hold
257 | alias: Button 4 Hold
258 | - platform: event
259 | event_type: esphome.esp32_keypad
260 | event_data:
261 | title: hold
262 | button: b5
263 | id: Button_5_hold
264 | alias: Button 5 Hold
265 | - platform: event
266 | event_type: esphome.esp32_keypad
267 | event_data:
268 | title: hold
269 | button: b6
270 | id: Button_6_hold
271 | alias: Button 6 Hold
272 | - platform: event
273 | event_type: esphome.esp32_keypad
274 | event_data:
275 | title: hold
276 | button: b7
277 | id: Button_7_hold
278 | alias: Button 7 Hold
279 | - platform: event
280 | event_type: esphome.esp32_keypad
281 | event_data:
282 | title: hold
283 | button: b8
284 | id: Button_8_hold
285 | alias: Button 8 Hold
286 |
287 | condition: []
288 | action:
289 | - choose:
290 | - conditions:
291 | - condition: trigger
292 | id: Button_1_single
293 | alias: Button 1 Single Click
294 | sequence: []
295 | - conditions:
296 | - condition: trigger
297 | id: Button_1_dbl
298 | alias: Button 1 Double Click
299 | sequence: []
300 | - conditions:
301 | - condition: trigger
302 | id: Button_1_triple
303 | alias: Button 1 Triple Click
304 | sequence: []
305 | - conditions:
306 | - condition: trigger
307 | id: Button_1_long
308 | alias: Button 1 Long Click
309 | sequence: []
310 | - conditions:
311 | - condition: trigger
312 | id: Button_1_hold
313 | alias: Button 1 Hold
314 | sequence: []
315 |
316 | - conditions:
317 | - condition: trigger
318 | id: Button_2_single
319 | alias: Button 2 Single Click
320 | sequence: []
321 | - conditions:
322 | - condition: trigger
323 | id: Button_2_dbl
324 | alias: Button 2 Double Click
325 | sequence: []
326 | - conditions:
327 | - condition: trigger
328 | id: Button_2_triple
329 | alias: Button 2 Triple Click
330 | sequence: []
331 | - conditions:
332 | - condition: trigger
333 | id: Button_2_long
334 | alias: Button 2 Long Click
335 | sequence: []
336 | - conditions:
337 | - condition: trigger
338 | id: Button_2_hold
339 | alias: Button 2 Hold
340 | sequence: []
341 |
342 | - conditions:
343 | - condition: trigger
344 | id: Button_3_single
345 | alias: Button 3 Single Click
346 | sequence: []
347 | - conditions:
348 | - condition: trigger
349 | id: Button_3_dbl
350 | alias: Button 3 Double Click
351 | sequence: []
352 | - conditions:
353 | - condition: trigger
354 | id: Button_3_triple
355 | alias: Button 3 Triple Click
356 | sequence: []
357 | - conditions:
358 | - condition: trigger
359 | id: Button_3_long
360 | alias: Button 3 Long Click
361 | sequence: []
362 | - conditions:
363 | - condition: trigger
364 | id: Button_3_hold
365 | alias: Button 3 Hold
366 | sequence: []
367 |
368 | - conditions:
369 | - condition: trigger
370 | id: Button_4_single
371 | alias: Button 4 Single Click
372 | sequence: []
373 | - conditions:
374 | - condition: trigger
375 | id: Button_4_dbl
376 | alias: Button 4 Double Click
377 | sequence: []
378 | - conditions:
379 | - condition: trigger
380 | id: Button_4_triple
381 | alias: Button 4 Triple Click
382 | sequence: []
383 | - conditions:
384 | - condition: trigger
385 | id: Button_4_long
386 | alias: Button 4 Long Click
387 | sequence: []
388 | - conditions:
389 | - condition: trigger
390 | id: Button_4_hold
391 | alias: Button 4 Hold
392 | sequence: []
393 |
394 | - conditions:
395 | - condition: trigger
396 | id: Button_5_single
397 | alias: Button 5 Single Click
398 | sequence: []
399 | - conditions:
400 | - condition: trigger
401 | id: Button_5_dbl
402 | alias: Button 5 Double Click
403 | sequence: []
404 | - conditions:
405 | - condition: trigger
406 | id: Button_5_triple
407 | alias: Button 5 Triple Click
408 | sequence: []
409 | - conditions:
410 | - condition: trigger
411 | id: Button_5_long
412 | alias: Button 5 Long Click
413 | sequence: []
414 | - conditions:
415 | - condition: trigger
416 | id: Button_5_hold
417 | alias: Button 5 Hold
418 | sequence: []
419 |
420 | - conditions:
421 | - condition: trigger
422 | id: Button_6_single
423 | alias: Button 6 Single Click
424 | sequence: []
425 | - conditions:
426 | - condition: trigger
427 | id: Button_6_dbl
428 | alias: Button 6 Double Click
429 | sequence: []
430 | - conditions:
431 | - condition: trigger
432 | id: Button_6_triple
433 | alias: Button 6 Triple Click
434 | sequence: []
435 | - conditions:
436 | - condition: trigger
437 | id: Button_6_long
438 | alias: Button 6 Long Click
439 | sequence: []
440 | - conditions:
441 | - condition: trigger
442 | id: Button_6_hold
443 | alias: Button 6 Hold
444 | sequence: []
445 |
446 | - conditions:
447 | - condition: trigger
448 | id: Button_7_single
449 | alias: Button 7 Single Click
450 | sequence: []
451 | - conditions:
452 | - condition: trigger
453 | id: Button_7_dbl
454 | alias: Button 7 Double Click
455 | sequence: []
456 | - conditions:
457 | - condition: trigger
458 | id: Button_7_triple
459 | alias: Button 7 Triple Click
460 | sequence: []
461 | - conditions:
462 | - condition: trigger
463 | id: Button_7_long
464 | alias: Button 7 Long Click
465 | sequence: []
466 | - conditions:
467 | - condition: trigger
468 | id: Button_7_hold
469 | alias: Button 7 Hold
470 | sequence: []
471 |
472 | - conditions:
473 | - condition: trigger
474 | id: Button_8_single
475 | alias: Button 8 Single Click
476 | sequence: []
477 | - conditions:
478 | - condition: trigger
479 | id: Button_8_dbl
480 | alias: Button 8 Double Click
481 | sequence: []
482 | - conditions:
483 | - condition: trigger
484 | id: Button_8_triple
485 | alias: Button 8 Triple Click
486 | sequence: []
487 | - conditions:
488 | - condition: trigger
489 | id: Button_8_long
490 | alias: Button 8 Long Click
491 | sequence: []
492 | - conditions:
493 | - condition: trigger
494 | id: Button_8_hold
495 | alias: Button 8 Hold
496 | sequence: []
497 |
498 |
499 | enabled: true
500 | mode: parallel
501 | max: 10
502 |
--------------------------------------------------------------------------------
/icons/Keyboard_Template.ai:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/drpeppershaker/ESP32_keypad/a234bb7c294f27ec7542f176638d677312a37ac3/icons/Keyboard_Template.ai
--------------------------------------------------------------------------------
/icons/Keyboard_Template.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/drpeppershaker/ESP32_keypad/a234bb7c294f27ec7542f176638d677312a37ac3/icons/Keyboard_Template.pdf
--------------------------------------------------------------------------------
/icons/Single Key Legend Template.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/drpeppershaker/ESP32_keypad/a234bb7c294f27ec7542f176638d677312a37ac3/icons/Single Key Legend Template.pdf
--------------------------------------------------------------------------------
/icons/basic_flat_lineal_icons/baby-bottle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/drpeppershaker/ESP32_keypad/a234bb7c294f27ec7542f176638d677312a37ac3/icons/basic_flat_lineal_icons/baby-bottle.png
--------------------------------------------------------------------------------
/icons/basic_flat_lineal_icons/breast-pump.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/drpeppershaker/ESP32_keypad/a234bb7c294f27ec7542f176638d677312a37ac3/icons/basic_flat_lineal_icons/breast-pump.png
--------------------------------------------------------------------------------
/icons/basic_flat_lineal_icons/crawl.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/drpeppershaker/ESP32_keypad/a234bb7c294f27ec7542f176638d677312a37ac3/icons/basic_flat_lineal_icons/crawl.png
--------------------------------------------------------------------------------
/icons/basic_flat_lineal_icons/crawl_01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/drpeppershaker/ESP32_keypad/a234bb7c294f27ec7542f176638d677312a37ac3/icons/basic_flat_lineal_icons/crawl_01.png
--------------------------------------------------------------------------------
/icons/basic_flat_lineal_icons/crawl_bow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/drpeppershaker/ESP32_keypad/a234bb7c294f27ec7542f176638d677312a37ac3/icons/basic_flat_lineal_icons/crawl_bow.png
--------------------------------------------------------------------------------
/icons/basic_flat_lineal_icons/crawling.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/drpeppershaker/ESP32_keypad/a234bb7c294f27ec7542f176638d677312a37ac3/icons/basic_flat_lineal_icons/crawling.png
--------------------------------------------------------------------------------
/icons/basic_flat_lineal_icons/diaper.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/drpeppershaker/ESP32_keypad/a234bb7c294f27ec7542f176638d677312a37ac3/icons/basic_flat_lineal_icons/diaper.png
--------------------------------------------------------------------------------
/icons/basic_flat_lineal_icons/mom.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/drpeppershaker/ESP32_keypad/a234bb7c294f27ec7542f176638d677312a37ac3/icons/basic_flat_lineal_icons/mom.png
--------------------------------------------------------------------------------
/icons/basic_flat_lineal_icons/sleep.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/drpeppershaker/ESP32_keypad/a234bb7c294f27ec7542f176638d677312a37ac3/icons/basic_flat_lineal_icons/sleep.png
--------------------------------------------------------------------------------
/icons/basic_flat_lineal_icons/spoon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/drpeppershaker/ESP32_keypad/a234bb7c294f27ec7542f176638d677312a37ac3/icons/basic_flat_lineal_icons/spoon.png
--------------------------------------------------------------------------------
/icons/basic_flat_lineal_icons/timer.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/drpeppershaker/ESP32_keypad/a234bb7c294f27ec7542f176638d677312a37ac3/icons/basic_flat_lineal_icons/timer.png
--------------------------------------------------------------------------------
/icons/readme.md:
--------------------------------------------------------------------------------
1 | ## Icons
2 | Keyboard_Template.ai -- Use this if you have illustrator -> you can change all the icons to your heart's desire
3 |
4 | Keyboard_Template.pdf -- PDF version if you don't have illustrator
5 |
6 | Single Key Legend Template.pdf -- Blank template
7 |
8 | [basic_flat_lineal_icons](../icons/basic_flat_lineal_icons) -- bold, simple icons
9 |
10 | [special_lineal_icons](../icons/special_lineal_icons) -- thinner, more complex icons
11 |
12 | ## Attributions
13 |
14 | [Icons for keypad courtesy of Freepik on Flaticon](https://www.flaticon.com/authors/freepik)
15 | [blank template courtesy of X-keys](https://xkeys.com/)
16 |
--------------------------------------------------------------------------------
/icons/special_lineal_icons/breastfeed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/drpeppershaker/ESP32_keypad/a234bb7c294f27ec7542f176638d677312a37ac3/icons/special_lineal_icons/breastfeed.png
--------------------------------------------------------------------------------
/icons/special_lineal_icons/diaper-thin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/drpeppershaker/ESP32_keypad/a234bb7c294f27ec7542f176638d677312a37ac3/icons/special_lineal_icons/diaper-thin.png
--------------------------------------------------------------------------------
/icons/special_lineal_icons/feeding-bottle copy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/drpeppershaker/ESP32_keypad/a234bb7c294f27ec7542f176638d677312a37ac3/icons/special_lineal_icons/feeding-bottle copy.png
--------------------------------------------------------------------------------
/icons/special_lineal_icons/feeding-bottle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/drpeppershaker/ESP32_keypad/a234bb7c294f27ec7542f176638d677312a37ac3/icons/special_lineal_icons/feeding-bottle.png
--------------------------------------------------------------------------------
/icons/special_lineal_icons/moon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/drpeppershaker/ESP32_keypad/a234bb7c294f27ec7542f176638d677312a37ac3/icons/special_lineal_icons/moon.png
--------------------------------------------------------------------------------
/icons/special_lineal_icons/sleep2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/drpeppershaker/ESP32_keypad/a234bb7c294f27ec7542f176638d677312a37ac3/icons/special_lineal_icons/sleep2.png
--------------------------------------------------------------------------------
/icons/special_lineal_icons/spoon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/drpeppershaker/ESP32_keypad/a234bb7c294f27ec7542f176638d677312a37ac3/icons/special_lineal_icons/spoon.png
--------------------------------------------------------------------------------
/icons/special_lineal_icons/stopwatch.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/drpeppershaker/ESP32_keypad/a234bb7c294f27ec7542f176638d677312a37ac3/icons/special_lineal_icons/stopwatch.png
--------------------------------------------------------------------------------
/icons/special_lineal_icons/timer.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/drpeppershaker/ESP32_keypad/a234bb7c294f27ec7542f176638d677312a37ac3/icons/special_lineal_icons/timer.png
--------------------------------------------------------------------------------
/icons/special_lineal_icons/tummy-time.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/drpeppershaker/ESP32_keypad/a234bb7c294f27ec7542f176638d677312a37ac3/icons/special_lineal_icons/tummy-time.png
--------------------------------------------------------------------------------