Skip to content

Commit f61c5f7

Browse files
committed
improve readme with more notes and schematics
1 parent c2123ab commit f61c5f7

File tree

3 files changed

+59
-3
lines changed

3 files changed

+59
-3
lines changed

README.md

Lines changed: 59 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
A control panel for under my desk that allows me to control my KVM as well as other peripherals.
66

7-
A MCU like an ESP32 enables a fancier interface with a 0.96" OLED screen.
7+
A MCU like an ESP32-C3 enables a fancier interface with a 0.96" OLED screen.
88

99
### Peripherals
1010

@@ -37,6 +37,8 @@ When active, the LED has a 1.8V potential difference. However, relative to a sha
3737
| ON | 1.8V | 0V | OFF | 0V | 0V |
3838
| OFF | 3.3V | 3.3V | ON | 0V | 1.8V |
3939

40+
> Due to lack of pins on the ESP32-C3, the state of the HDMI Switches will *not* be monitored by the ESP32-C3. The latching switches should be sufficient for state UI.
41+
4042
#### USB Hub Switch
4143

4244
The USB hub switch directs 4 USB ports between upstream computer A or upstream computer B.
@@ -74,17 +76,27 @@ P_total = V_in × I_total
7476
= 0.833 mW
7577
```
7678

79+
> Since the USB hub switch is triggered with a momentary switch rather than a latching switch, the ESP32-C3 will monitor state for presentation to the user on the OLED screen. The monitored pins are `LED A Pin 1` and `LED B Pin 1`.
80+
7781
#### Speaker Channels
7882

7983
There is currently two toggle switches that are manually spliced into the 3.5mm audio cables from two computers to direct the output from each computer to the speaker left and right channels.
8084
This implementation will remain the same as this simple analog switching is working well.
8185

86+
> The toggle switches are sufficient state UI and therefore does not require monitoring by the ESP32-C3.
87+
88+
- [x] Refine design of enclosure
89+
- Orient inputs and outputs on the same side
90+
- Use PETG instead of PLA for better durability
91+
- Use fuzzy skin to camouflage layer lines for improved aesthetics
92+
- [~] Redo connections to use hot-swappable DuPont connectors and longer, more flexible stranded wires
93+
8294
#### USB Power
8395

8496
Control USB power using MOSFETs. Planned USB-powered peripherals include:
8597

8698
- Pyle PAD43MXUBT Audio Mixer (500mA @ 5V)
87-
- Arduino LED sign (200mA @ 5V)
99+
- Meeting Sign (200mA @ 5V)
88100

89101
To be triggered by an ESP32, this should be accomplished with a _logic level_ P-Channel MOSFET. The MOSFET should be logic level in order to be driven by a 3.3V ESP32 directly. The IRLML6402 is widely available and cheaper but without features like short-circuit and thermal protection of a dedicated USB Switch IC.
90102

@@ -95,11 +107,47 @@ Using the P-Channel MOSFET should include
95107
- A 1kΩ inline series gate resistor to reduce inrush current and EMI when switching the gate. [Source](https://www.build-electronic-circuits.com/mosfet-gate-resistor/)
96108
- A 10kΩ pull-up resistor to ensure the MOSFET stays off during MCU boot/reset, while the GPIO is floating.
97109

110+
##### Meeting Sign
111+
112+
An [existing project](https://github.com/noahbaculi/embedded-meeting-sign) that is USB-powered and utilizes an Arduino Nano to countdown a timer and indicate the remaining duration on a series of LEDs.
113+
114+
- [x] Rewrite firmware
115+
- [x] Use the ESP32-C3 instead of the Arduino Nano in order to use consistent `esp-hal` and `embassy` tooling
116+
- [x] Allow the timer to be controlled via UART
117+
- [x] If no UART commands are received, there should be a default timer
118+
- [x] There should be a `SENSE` connection between the Meeting Sign ESP32-C3 and the Control Panel ESP32-C3 that allows the Control Panel to detect if the Meeting Sign is online
119+
- This can be a Meeting Sign output that is set high when the Meeting Sign is online and low when it is not
120+
- The Control Panel can use this signal on an input with a pull-down resistor to determine if the Meeting Sign is online and display the status on the OLED screen
121+
- [~] Once a timer completes, the ESP32-C3 should go into deep sleep
122+
- [ ] Archive the previous version of the repository with a link to this new version
123+
- [x] Refine design of enclosure
124+
- [x] Shrink footprint thanks to smaller size of the ESP32-C3
125+
- [~] Use USB-C socket instead of Arduino Nano's micro USB for power
126+
- [~] Use power switch for manual operation if not using the Meeting Sign with the Control Panel
127+
98128
### Important Concepts
99129

100130
- Make sure to connect the grounds of all the peripherals.
101131

102-
## Development
132+
## High Level Wiring Diagram
133+
134+
![High Level Wiring Diagram](./assets/high_level_wiring_diagram.svg)
135+
136+
## Back Module Distribution PCB Schematic
137+
138+
![Back Module Distribution PCB Schematic](./assets/back_module_distribution_schematic.svg)
139+
140+
## Firmware Development
141+
142+
This project is built in a `no_std` environment utilizing the `esp-hal` crate in conjunction with the [Embassy](https://embassy.dev/) framework.
143+
144+
<!-- - Rust via [rustup](https://rustup.rs/) -->
145+
<!-- - Install [ESP32 Rust tooling](https://docs.esp-rs.org/book/installation/index.html) -->
146+
<!---->
147+
<!-- ```shell -->
148+
<!-- cargo install espup -->
149+
<!-- espup install -->
150+
<!-- ``` -->
103151

104152
### Commands
105153

@@ -115,3 +163,11 @@ Run tests
115163
```shell
116164
cargo test --config .cargo/probe-rs.toml
117165
```
166+
167+
## Reference
168+
169+
[ESP32-C3 GPIO Summary](https://docs.espressif.com/projects/esp-idf/en/stable/esp32c3/api-reference/peripherals/gpio.html)
170+
171+
### ESP32 C3 SuperMini Pinout
172+
173+
![ESP32 C3 SuperMini Pinout](./datasheets/ESP32_C3_supermini_pinout.jpg)
218 KB
Loading

0 commit comments

Comments
 (0)