added files

This commit is contained in:
locker98 2024-10-07 16:44:03 -04:00
parent da94300b3b
commit ca75fb8965
26 changed files with 117306 additions and 1 deletions

BIN
3D/Button.stl Executable file

Binary file not shown.

BIN
3D/Clicker Case Bottom.stl Executable file

Binary file not shown.

BIN
3D/Clicker Case Top.stl Executable file

Binary file not shown.

BIN
3D/Clicker.f3d Executable file

Binary file not shown.

View File

@ -0,0 +1,8 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
"version": "0.2.0",
"configurations": [
]
}

632
ESP32 Code/clicker/clicker.ino Executable file
View File

@ -0,0 +1,632 @@
#include <Arduino.h>
#include <WiFi.h>
#include <ESPAsyncWebServer.h>
#include <Preferences.h>
#include <HTTPClient.h>
#include <Adafruit_NeoPixel.h>
#include <BleKeyboard.h>
#include <Battery.h>
Battery battery(3000, 4200, 36, 12);
BleKeyboard bleKeyboard("ESP Clicker");
Preferences prefs;
WiFiClient client;
HTTPClient http;
AsyncWebServer server(80);
Adafruit_NeoPixel led(1, 13, NEO_GRB + NEO_KHZ800);
String ssid, pass, ip_address, layer, name, serverPath;
char ssid_char[20];
char pass_char[20];
float voltage;
bool connected = false;
bool blemode;
unsigned long target_time;
int lazer_button;
String index_html;
int httpResponseCode = 0;
int LAZER = 15;
int BUTTON0 = 12;
int BUTTON1 = 14;
int BUTTON2 = 27;
int BUTTON3 = 26;
int BUTTON4 = 25;
int BUTTON5 = 33;
int BUTTON6 = 32;
int BUTTON7 = 35;
int BUTTON8 = 34;
int BUTTON9 = 39;
// Button Array
int button[10] = { BUTTON0, BUTTON1, BUTTON2, BUTTON3, BUTTON4, BUTTON5, BUTTON6, BUTTON7, BUTTON8, BUTTON9 };
// HTML web page to handle 3 input fields (input1, input2, input3)
const char index_html1[] PROGMEM = R"rawliteral(
<!DOCTYPE HTML>
<html>
<head>
<title>Clicker</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
body {
font-family: Arial, sans-serif;
margin: 0;
padding: 20px;
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
background-color: #f0f0f0;
}
#container {
text-align: center;
background-color: white;
padding: 20px;
border-radius: 10px;
max-width: 100%;
}
h1 {
margin-top: 0;
}
h2 {
margin-bottom: 10px;
}
form {
margin-bottom: 20px;
}
input[type="text"],
input[type="password"] {
width: 100%;
max-width: 200px;
padding: 5px;
margin-bottom: 10px;
}
button,
input[type="submit"] {
padding: 10px 20px;
cursor: pointer;
background-color: #007bff;
border: none;
color: white;
border-radius: 5px;
}
button:hover,
input[type="submit"]:hover {
background-color: #0056b3;
}
</style>
</head>
<body>
<div id="container">
<h1>ESP Clicker - )rawliteral";
const char index_html2[] PROGMEM = R"rawliteral(</h1>
<hr>
<h2>Change WIFI Password</h2>
<form action="/" id="form_wifi">
SSID: <input type="text" name="ssid" id="ssid">
<br>
Password: <input type="password" name="pass" id="pass">
<br>
<input type="submit" value="Update Wifi" id="submit_wifi">
</form>
<button onclick="window.location.href='/?data=1';">Get Current Wifi Data</button>
<br>
<br>
<br>
<h2>Set Companion IP address</h2>
<form action="/" id="form_ip_address">
<input type="text" minlength="7" maxlength="15" size="1" id="ipaddress" name="ipaddress" placeholder="xxx.xxx.xxx.xxx" autocomplete="off">
<br>
<input type="submit" value="Update IP" id="submit_ip">
</form>
<button onclick="window.location.href='/?ipget=1';">Get Current Remote IP</button>
<br>
<br>
<br>
<h2>Set Companion Layer</h2>
<form action="/" id="form_Companion_layer">
<input type="number" minlength="1" maxlength="2" size="1" id="layer" name="layer" placeholder="xx" autocomplete="off">
<br>
<input type="submit" value="Update Layer" id="submit_layer">
</form>
<br>
<br>
<h2>Set Lazer Button</h2>
<form action="/" id="lazer">
<select id="lazer_dropdown" name="lazer">
<option value="-2">-- Select One --</option>
<option value="0">1</option>
<option value="1">2</option>
<option value="2">3</option>
<option value="3">4</option>
<option value="4">5</option>
<option value="5">6</option>
<option value="6">7</option>
<option value="7">8</option>
<option value="8">9</option>
<option value="9">10</option>
<option value="-1">Disable</option>
</select>
<br>
<br>
<input type="submit" value="Update Lazer Button" id="submit_lazer">
</form>
<br>
<br>
<h2>Set Device Name</h2>
<form action="/" id="form_name">
<input type="text" name="name" id="name">
<br>
<input type="submit" value="Update Name" id="submit_name">
</form>
<br>
<br>
<button onclick="window.location.href='/?voltageget=1';">Get Current Battery Voltage</button>
<script>
const lazer_form = document.getElementById('lazer');
const lazer_selector = document.getElementById('lazer_dropdown');
lazer_form.addEventListener('submit', function(event) {
// Check if the default option is selected
if (lazer_selector.value == '-2') {
// If it is, prevent the default submission behavior and show a message
event.preventDefault();
alert("Please select an option other than '-- Select One --'");
}
});
document.getElementById('submit_wifi').disabled = true;
document.getElementById('submit_ip').disabled = true;
document.getElementById('submit_layer').disabled = true;
document.addEventListener('keyup', e => {
if (document.getElementById('ssid').value == "" || document.getElementById('pass').value == "") {
document.getElementById('submit_wifi').disabled = true;
} else {
document.getElementById('submit_wifi').disabled = false;
}
if (document.getElementById("ipaddress").value == "") {
document.getElementById('submit_ip').disabled = true;
} else {
document.getElementById('submit_ip').disabled = false;
}
if (document.getElementById("layer").value == "") {
document.getElementById('submit_layer').disabled = true;
} else {
document.getElementById('submit_layer').disabled = false;
}
if (document.getElementById("name").value == "") {
document.getElementById('submit_name').disabled = true;
} else {
document.getElementById('submit_name').disabled = false;
}
});
</script>
</div>
</body>
</html>
)rawliteral";
// the setup function runs once when you press reset or power the board
void setup() {
// Initialize Memory
prefs.begin("clicker");
// Battery
battery.begin(3300, 2.24);
//Get Device Name
name = prefs.getString("NAME", name);
// Initialize Serial
Serial.begin(9600);
// Initialize NeoPixel strip object (REQUIRED)
led.begin();
// Setup pins
pinMode(LAZER, OUTPUT);
pinMode(BUTTON0, INPUT);
pinMode(BUTTON1, INPUT);
pinMode(BUTTON2, INPUT);
pinMode(BUTTON3, INPUT);
pinMode(BUTTON0, INPUT);
pinMode(BUTTON1, INPUT);
pinMode(BUTTON2, INPUT);
pinMode(BUTTON3, INPUT);
pinMode(BUTTON4, INPUT);
pinMode(BUTTON5, INPUT);
pinMode(BUTTON6, INPUT);
pinMode(BUTTON7, INPUT);
pinMode(BUTTON8, INPUT);
pinMode(BUTTON9, INPUT);
//Set up Lazer
lazer_button = prefs.getInt("LAZER_BUTTON");
digitalWrite(LAZER, LOW);
// Check for BLE Mode
blemode = prefs.getBool("BLEMODE");
if (digitalRead(BUTTON8) && digitalRead(BUTTON9)) {
prefs.putBool("BLEMODE", !blemode);
blemode = !blemode;
}
if (blemode) {
bleclicker();
}
// Initilize WIFI
WiFi.mode(WIFI_STA);
ssid = prefs.getString("SSID");
pass = prefs.getString("PASS");
ssid.toCharArray(ssid_char, 20);
pass.toCharArray(pass_char, 20);
WiFi.begin(ssid_char, pass_char);
target_time = millis() + 10000;
while (millis() < target_time && WiFi.status() != WL_CONNECTED) {
led.setPixelColor(0, led.Color(0, 100, 0));
led.show();
delay(1000);
led.setPixelColor(0, led.Color(0, 0, 0));
led.show();
delay(1000);
}
if (WiFi.status() != WL_CONNECTED) {
WiFi.mode(WIFI_MODE_AP);
WiFi.softAP("clicker", "clcob5364");
WiFi.softAPIP();
}
// Get Companion Info
layer = prefs.getString("LAYER");
ip_address = prefs.getString("IPADDRESS");
// Send web page with input fields to client
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) {
if (request->hasParam("pass") && request->hasParam("ssid")) {
request->send_P(200, "text/html", index_html.c_str());
ssid = request->getParam("ssid")->value();
pass = request->getParam("pass")->value();
Serial.print("New Password is:\t");
Serial.println(pass);
Serial.print("New SSID is:\t");
Serial.println(ssid);
prefs.putString("SSID", ssid);
prefs.putString("PASS", pass);
Serial.println("Done");
} else if (request->hasParam("data")) {
ssid = prefs.getString("SSID");
pass = prefs.getString("PASS");
request->send(200, "text/html", "<!DOCTYPE HTML><html><head><title>ESP Clicker</title><meta name='viewport' content='width=device-width, initial-scale=1'></head><body><h1>Current WIFI Settings</h1><hr><br/>SSID: \"" + ssid + "\"<br/>Password: \"" + pass + "\"<br/><br/><br/><hr><button onclick=\"window.location.href='/';\">Back</button></body></html>");
} else if (request->hasParam("ipaddress")) {
request->send_P(200, "text/html", index_html.c_str());
ip_address = request->getParam("ipaddress")->value();
prefs.putString("IPADDRESS", ip_address);
} else if (request->hasParam("ipget")) {
ip_address = prefs.getString("IPADDRESS");
request->send(200, "text/html", "<!DOCTYPE HTML><html><head><title>ESP Clicker</title><meta name='viewport' content='width=device-width, initial-scale=1'></head><body><h1>Current IP Settings</h1><hr>Remote IP Address: \"" + ip_address + "\"<br/><br/><br/><hr><button onclick=\"window.location.href='/';\">Back</button></body></html>");
} else if (request->hasParam("layer")) {
request->send_P(200, "text/html", index_html.c_str());
layer = request->getParam("layer")->value();
prefs.putString("LAYER", layer);
} else if (request->hasParam("layerget")) {
layer = prefs.getString("LAYER");
request->send(200, "text/html", "<!DOCTYPE HTML><html><head><title>ESP Clicker</title><meta name='viewport' content='width=device-width, initial-scale=1'></head><body><h1>Current IP Settings</h1><hr>Remote Companion Layer: \"" + layer + "\"<br/><br/><br/><hr><button onclick=\"window.location.href='/';\">Back</button></body></html>");
} else if (request->hasParam("voltageget")) {
voltage = battery.voltage();
voltage = voltage / 1000;
Serial.println(voltage);
request->send(200, "text/html", "<!DOCTYPE HTML><html><head><title>ESP Clicker</title><meta name='viewport' content='width=device-width, initial-scale=1'></head><body><h1>Current voltage</h1><hr>\"" + String(voltage) + "\" Volts <br/>" + String(battery.level()) + "% Battery Percentage<br/><br/><br/><hr><button onclick=\"window.location.href='/';\">Back</button></body></html>");
} else if (request->hasParam("name")) {
name = request->getParam("name")->value();
index_html = index_html1 + name + index_html2;
prefs.putString("NAME", name);
request->send_P(200, "text/html", index_html.c_str());
} else if (request->hasParam("lazer")) {
lazer_button = request->getParam("lazer")->value().toInt();
prefs.putInt("LAZER_BUTTON", lazer_button);
request->send_P(200, "text/html", index_html.c_str());
} else {
request->send_P(200, "text/html", index_html.c_str());
}
index_html = index_html1 + name + index_html2;
});
server.begin();
}
// the loop function runs over and over again forever
void loop() {
lazer();
// Read port 0
if (digitalRead(BUTTON0)) {
Serial.println("Button 0");
httpResponseCode = POSTRequest("http://" + ip_address + ":8000/api/location/" + layer + "/0/1/press");
waitfor();
}
// Read port 1
if (digitalRead(BUTTON1)) {
Serial.println("Button 1");
httpResponseCode = POSTRequest("http://" + ip_address + ":8000/api/location/" + layer + "/0/2/press");
waitfor();
}
// Read port 2
if (digitalRead(BUTTON2)) {
Serial.println("Button 2");
httpResponseCode = POSTRequest("http://" + ip_address + ":8000/api/location/" + layer + "/0/3/press");
waitfor();
}
// Read port 3
if (digitalRead(BUTTON3)) {
Serial.println("Button 3");
httpResponseCode = POSTRequest("http://" + ip_address + ":8000/api/location/" + layer + "/0/4/press");
waitfor();
}
// Read port 4
if (digitalRead(BUTTON4)) {
Serial.println("Button 4");
httpResponseCode = POSTRequest("http://" + ip_address + ":8000/api/location/" + layer + "/0/5/press");
waitfor();
}
// Read port 5
if (digitalRead(BUTTON5)) {
Serial.println("Button 5");
httpResponseCode = POSTRequest("http://" + ip_address + ":8000/api/location/" + layer + "/0/6/press");
waitfor();
}
// Read port 6
if (digitalRead(BUTTON6)) {
Serial.println("Button 6");
httpResponseCode = POSTRequest("http://" + ip_address + ":8000/api/location/" + layer + "/0/7/press");
waitfor();
}
// Read port 7
if (digitalRead(BUTTON7)) {
Serial.println("Button 7");
httpResponseCode = POSTRequest("http://" + ip_address + ":8000/api/location/" + layer + "/1/1/press");
waitfor();
}
// Read port 8
if (digitalRead(BUTTON8)) {
Serial.println("Button 8");
httpResponseCode = POSTRequest("http://" + ip_address + ":8000/api/location/" + layer + "/1/2/press");
waitfor();
}
// Read port 9
if (digitalRead(BUTTON9)) {
Serial.println("Button 9");
httpResponseCode = POSTRequest("http://" + ip_address + ":8000/api/location/" + layer + "/1/3/press");
waitfor();
}
voltage = battery.voltage();
voltage = voltage / 1000;
lazer();
if (voltage < 3.68) {
led.setPixelColor(0, led.Color(1, 0, 0));
} else if (!connected) {
led.setPixelColor(0, led.Color(1, 1, 1));
} else {
led.setPixelColor(0, led.Color(0, 1, 0));
}
led.show();
}
void waitfor() {
while (digitalRead(BUTTON0) || digitalRead(BUTTON1) || digitalRead(BUTTON2) || digitalRead(BUTTON3) || digitalRead(BUTTON4) || digitalRead(BUTTON5) || digitalRead(BUTTON6) || digitalRead(BUTTON7) || digitalRead(BUTTON8) || digitalRead(BUTTON9)) {
led.setPixelColor(0, led.Color(0, 0, 0));
led.show();
}
led.show();
if (httpResponseCode == 200) {
connected = true;
Serial.println(httpResponseCode);
} else {
connected = false;
Serial.println(httpResponseCode);
}
httpResponseCode = -1;
}
void lazer() {
if (lazer_button != -1) {
if (digitalRead(button[lazer_button])) {
led.setPixelColor(0, led.Color(255, 0, 0));
led.show();
digitalWrite(LAZER, HIGH);
while (digitalRead(button[lazer_button]))
;
digitalWrite(LAZER, LOW);
}
}
}
int GETRequest(String URL) {
int response;
HTTPClient http;
http.begin(URL.c_str());
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
http.setTimeout(5000);
response = http.GET();
http.end();
Serial.println(URL);
return response;
}
int POSTRequest(String URL) {
int response;
HTTPClient http;
http.begin(URL.c_str());
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
http.setTimeout(5000);
response = http.POST("");
http.end();
Serial.println(URL);
return response;
}
void bleclicker() {
bleKeyboard.setName("ESP Clicker");
bleKeyboard.begin();
bleKeyboard.setBatteryLevel(battery.level());
while (true) {
while (bleKeyboard.isConnected()) {
// Set LED Color
led.setPixelColor(0, led.Color(0, 0, 1));
led.show();
if (millis() > target_time) {
bleKeyboard.setBatteryLevel(battery.level());
Serial.println("battery update");
target_time = millis() + 60000;
}
// Read port 0
if (digitalRead(BUTTON0)) {
Serial.println("Button 0");
bleKeyboard.write(KEY_LEFT_ARROW);
waitfor();
}
// Read port 1
if (digitalRead(BUTTON1)) {
Serial.println("Button 1");
bleKeyboard.write(KEY_RIGHT_ARROW);
waitfor();
}
// Read port 2
if (digitalRead(BUTTON8)) {
Serial.println("Lazer");
led.setPixelColor(0, led.Color(255, 0, 0));
led.show();
digitalWrite(LAZER, HIGH);
while (digitalRead(BUTTON8))
;
digitalWrite(LAZER, LOW);
}
}
// Wait for a Second
led.setPixelColor(0, led.Color(0, 0, 100));
led.show();
delay(1000);
led.setPixelColor(0, led.Color(0, 0, 0));
led.show();
delay(1000);
}
}

View File

@ -0,0 +1,70 @@
(kicad_symbol_lib (version 20211014) (generator kicad_symbol_editor)
(symbol "SK12D07VG4" (pin_names (offset 1.016)) (in_bom yes) (on_board yes)
(property "Reference" "U" (id 0) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom))
)
(property "Value" "SK12D07VG4" (id 1) (at 0 0.0 0)
(effects (font (size 1.27 1.27)) (justify bottom))
)
(property "Footprint" "SK12D07VG4:SK12D07VG4" (id 2) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "MF" "C&K" (id 4) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "Description" "\nSwitch Slide ON ON SPDT Side Slide 0.3A 30VDC PC Pins Bracket Mount/Through Hole Bulk\n" (id 5) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "Package" "None" (id 6) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "Price" "None" (id 7) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "SnapEDA_Link" "https://www.snapeda.com/parts/SK12D07VG4/C%2526K/view-part/?ref=snap" (id 8) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "MP" "SK12D07VG4" (id 9) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "Availability" "Not in stock" (id 10) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "Check_prices" "https://www.snapeda.com/parts/SK12D07VG4/C%2526K/view-part/?ref=eda" (id 11) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(symbol "SK12D07VG4_0_0"
(polyline
(pts (xy 0.0 0.0) (xy -1.27 3.048)) (stroke (width 0.254))
)
(rectangle (start -5.08 -2.54) (end 5.08 5.08)
(stroke (width 0.254)) (fill (type background))
)
(pin bidirectional line (at 0.0 -5.08 90.0) (length 5.08)
(name "COM"
(effects (font (size 1.016 1.016)))
)
(number "COM"
(effects (font (size 1.016 1.016)))
)
)
(pin bidirectional line (at -2.54 7.62 270.0) (length 5.08)
(name "1"
(effects (font (size 1.016 1.016)))
)
(number "1"
(effects (font (size 1.016 1.016)))
)
)
(pin bidirectional line (at 2.54 7.62 270.0) (length 5.08)
(name "2"
(effects (font (size 1.016 1.016)))
)
(number "2"
(effects (font (size 1.016 1.016)))
)
)
)
)
)

View File

@ -0,0 +1,165 @@
(kicad_symbol_lib (version 20211014) (generator kicad_symbol_editor)
(symbol "WS2812B" (pin_names (offset 1.016)) (in_bom yes) (on_board yes)
(property "Reference" "LED" (id 0) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom))
)
(property "Value" "WS2812B" (id 1) (at 0 0.0 0)
(effects (font (size 1.27 1.27)) (justify bottom))
)
(property "MF" "Worldsemi" (id 4) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "Description" "\nIntelligent control LED integrated light source\n" (id 5) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "Package" "None" (id 6) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "Price" "None" (id 7) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "SnapEDA_Link" "https://www.snapeda.com/parts/WS2812B/Worldsemi/view-part/?ref=snap" (id 8) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "MP" "WS2812B" (id 9) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "Availability" "Not in stock" (id 10) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "Check_prices" "https://www.snapeda.com/parts/WS2812B/Worldsemi/view-part/?ref=eda" (id 11) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(symbol "WS2812B_0_0"
(polyline
(pts (xy -6.35 5.08) (xy -5.08 5.08)) (stroke (width 0.254))
)
(polyline
(pts (xy -5.08 2.54) (xy -6.35 5.08)) (stroke (width 0.254))
)
(polyline
(pts (xy 2.54 2.54) (xy 3.81 5.08)) (stroke (width 0.254))
)
(polyline
(pts (xy 3.81 5.08) (xy 2.54 5.08)) (stroke (width 0.254))
)
(polyline
(pts (xy -6.35 2.54) (xy -5.08 2.54)) (stroke (width 0.254))
)
(polyline
(pts (xy 2.54 2.54) (xy 3.81 2.54)) (stroke (width 0.254))
)
(polyline
(pts (xy -1.27 2.54) (xy -1.27 1.27)) (stroke (width 0.254))
)
(polyline
(pts (xy -1.27 7.62) (xy -5.08 7.62)) (stroke (width 0.254))
)
(polyline
(pts (xy -5.08 7.62) (xy -5.08 5.08)) (stroke (width 0.254))
)
(polyline
(pts (xy -1.27 5.08) (xy -1.27 7.62)) (stroke (width 0.254))
)
(polyline
(pts (xy 2.54 5.08) (xy 2.54 7.62)) (stroke (width 0.254))
)
(polyline
(pts (xy 2.54 7.62) (xy -1.27 7.62)) (stroke (width 0.254))
)
(polyline
(pts (xy -5.08 5.08) (xy -3.81 5.08)) (stroke (width 0.254))
)
(polyline
(pts (xy -5.08 2.54) (xy -3.81 5.08)) (stroke (width 0.254))
)
(polyline
(pts (xy 1.27 5.08) (xy 2.54 2.54)) (stroke (width 0.254))
)
(polyline
(pts (xy 1.27 5.08) (xy 2.54 5.08)) (stroke (width 0.254))
)
(polyline
(pts (xy -5.08 2.54) (xy -5.08 1.27)) (stroke (width 0.254))
)
(polyline
(pts (xy 2.54 1.27) (xy -1.27 1.27)) (stroke (width 0.254))
)
(polyline
(pts (xy -1.27 1.27) (xy -5.08 1.27)) (stroke (width 0.254))
)
(polyline
(pts (xy 0.0 -4.064) (xy 0.0 -5.08)) (stroke (width 0.254))
)
(text "WS2812B" (at -4.064 8.382 0)
(effects (font (size 1.27 1.27)) (justify bottom left))
)
(polyline
(pts (xy -3.81 2.54) (xy -5.08 2.54)) (stroke (width 0.254))
)
(polyline
(pts (xy -2.54 2.54) (xy -1.27 2.54)) (stroke (width 0.254))
)
(polyline
(pts (xy -1.27 2.54) (xy 0.0 2.54)) (stroke (width 0.254))
)
(polyline
(pts (xy -1.27 2.54) (xy -2.54 5.08)) (stroke (width 0.254))
)
(polyline
(pts (xy -2.54 5.08) (xy 0.0 5.08)) (stroke (width 0.254))
)
(polyline
(pts (xy 0.0 5.08) (xy -1.27 2.54)) (stroke (width 0.254))
)
(polyline
(pts (xy 2.54 2.54) (xy 1.27 2.54)) (stroke (width 0.254))
)
(polyline
(pts (xy 2.54 2.54) (xy 2.54 1.27)) (stroke (width 0.254))
)
(polyline
(pts (xy 5.08 10.16) (xy 5.08 7.62)) (stroke (width 0.254))
)
(polyline
(pts (xy 2.54 7.62) (xy 5.08 7.62)) (stroke (width 0.254))
)
(rectangle (start -7.62 -5.08) (end 7.62 10.16)
(stroke (width 0.254)) (fill (type background))
)
(pin power_in line (at 5.08 15.24 270.0) (length 5.08)
(name "VDD"
(effects (font (size 1.016 1.016)))
)
(number "1-VDD"
(effects (font (size 1.016 1.016)))
)
)
(pin input line (at -12.7 -2.54 0) (length 5.08)
(name "DI"
(effects (font (size 1.016 1.016)))
)
(number "4-DIN"
(effects (font (size 1.016 1.016)))
)
)
(pin power_in line (at 0.0 -10.16 90.0) (length 5.08)
(name "GND"
(effects (font (size 1.016 1.016)))
)
(number "3-GND"
(effects (font (size 1.016 1.016)))
)
)
(pin output line (at 12.7 -2.54 180.0) (length 5.08)
(name "DO"
(effects (font (size 1.016 1.016)))
)
(number "2-DOUT"
(effects (font (size 1.016 1.016)))
)
)
)
)
)

146
PCB/clicker/button.kicad_sym Executable file
View File

@ -0,0 +1,146 @@
(kicad_symbol_lib
(version 20231120)
(generator "kicad_symbol_editor")
(generator_version "8.0")
(symbol "TWS4417-250AT"
(exclude_from_sim no)
(in_bom yes)
(on_board yes)
(property "Reference" "U"
(at 0 11.43 0)
(effects
(font
(size 1.27 1.27)
)
)
)
(property "Value" ""
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
)
)
(property "Footprint" ""
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
(hide yes)
)
)
(property "Datasheet" ""
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
(hide yes)
)
)
(property "Description" ""
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
(hide yes)
)
)
(symbol "TWS4417-250AT_1_1"
(rectangle
(start -3.81 3.81)
(end 3.81 -3.81)
(stroke
(width 0)
(type default)
)
(fill
(type background)
)
)
(text "SMD Button"
(at 0 6.35 0)
(effects
(font
(size 1.27 1.27)
)
)
)
(pin input line
(at -6.35 2.54 0)
(length 2.54)
(name ""
(effects
(font
(size 1.27 1.27)
)
)
)
(number "1"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin input line
(at 6.35 2.54 180)
(length 2.54)
(name ""
(effects
(font
(size 1.27 1.27)
)
)
)
(number "2"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin output line
(at -6.35 -2.54 0)
(length 2.54)
(name ""
(effects
(font
(size 1.27 1.27)
)
)
)
(number "3"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin output line
(at 6.35 -2.54 180)
(length 2.54)
(name ""
(effects
(font
(size 1.27 1.27)
)
)
)
(number "4"
(effects
(font
(size 1.27 1.27)
)
)
)
)
)
)
)

View File

@ -0,0 +1,149 @@
(footprint "TWS4417-250AT"
(version 20240108)
(generator "pcbnew")
(generator_version "8.0")
(layer "F.Cu")
(property "Reference" "REF**"
(at 0 -4 0)
(unlocked yes)
(layer "F.SilkS")
(uuid "1af38da6-a815-4a6d-b027-f2892a709d63")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Value" "TWS4417-250AT"
(at 0 2.5 0)
(unlocked yes)
(layer "F.Fab")
(uuid "fddb58d4-3c05-46ef-8776-2eeff4c64653")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Footprint" "TWS4417-250AT"
(at 0 -2 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "9ac2449a-cbfd-4a74-9c3d-aa753fe8daef")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Datasheet" ""
(at 0 -2 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "0bd96643-f2b3-4788-98a1-01355ef398b6")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Description" ""
(at 0 -2 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "eaf8ce91-2641-4585-8bd0-771fa7cc38c1")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(attr smd)
(fp_rect
(start -5 -2.9)
(end 5 2.9)
(stroke
(width 0.15)
(type default)
)
(fill none)
(layer "F.SilkS")
(uuid "94bae4e4-9bed-4c69-85d4-39bf18f3984e")
)
(fp_rect
(start -5.25 -3)
(end 5.25 3)
(stroke
(width 0.05)
(type default)
)
(fill none)
(layer "F.CrtYd")
(uuid "bbe72dcf-a1a8-498b-9992-bef9ca4d5adb")
)
(fp_text user "Button"
(at -2.5 0.5 0)
(unlocked yes)
(layer "F.SilkS")
(uuid "7e70be57-5a1a-4337-8bf9-d17237da936a")
(effects
(font
(size 1 1)
(thickness 0.15)
)
(justify left bottom)
)
)
(fp_text user "${REFERENCE}"
(at 0 0.5 0)
(unlocked yes)
(layer "F.Fab")
(uuid "e5b468b6-f1db-45bb-8953-7138dda5abce")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(pad "1" smd roundrect
(at -3.2 -1.85)
(size 2.286 1.524)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.25)
(thermal_bridge_angle 45)
(uuid "f8c27cc2-e9ee-4397-8ba7-a036ad76204a")
)
(pad "2" smd roundrect
(at 3.2 -1.85)
(size 2.286 1.524)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.25)
(thermal_bridge_angle 45)
(uuid "d3d2402c-23e4-46fd-a45c-441b1a096258")
)
(pad "3" smd roundrect
(at -3.2 1.85)
(size 2.286 1.524)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.25)
(thermal_bridge_angle 45)
(uuid "f25b93a1-2c36-4dd2-a5f4-e0ad9788e3fe")
)
(pad "4" smd roundrect
(at 3.2 1.85)
(size 2.286 1.524)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.25)
(thermal_bridge_angle 45)
(uuid "f17c31be-2c6a-4b08-9970-2ccc3980dfab")
)
)

Binary file not shown.

11665
PCB/clicker/clicker.kicad_pcb Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,85 @@
{
"board": {
"active_layer": 0,
"active_layer_preset": "All Layers",
"auto_track_width": true,
"hidden_netclasses": [],
"hidden_nets": [
""
],
"high_contrast_mode": 0,
"net_color_mode": 1,
"opacity": {
"images": 0.6,
"pads": 1.0,
"tracks": 1.0,
"vias": 1.0,
"zones": 0.6
},
"selection_filter": {
"dimensions": true,
"footprints": true,
"graphics": true,
"keepouts": true,
"lockedItems": false,
"otherItems": true,
"pads": true,
"text": true,
"tracks": true,
"vias": true,
"zones": true
},
"visible_items": [
0,
1,
2,
3,
4,
5,
8,
9,
10,
11,
12,
13,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28,
29,
30,
32,
33,
34,
35,
36,
39,
40
],
"visible_layers": "fffffff_ffffffff",
"zone_display_mode": 0
},
"git": {
"repo_password": "",
"repo_type": "",
"repo_username": "",
"ssh_key": ""
},
"meta": {
"filename": "clicker.kicad_prl",
"version": 3
},
"project": {
"files": []
}
}

View File

@ -0,0 +1,693 @@
{
"board": {
"3dviewports": [],
"design_settings": {
"defaults": {
"apply_defaults_to_fp_fields": false,
"apply_defaults_to_fp_shapes": false,
"apply_defaults_to_fp_text": false,
"board_outline_line_width": 0.05,
"copper_line_width": 0.2,
"copper_text_italic": false,
"copper_text_size_h": 1.5,
"copper_text_size_v": 1.5,
"copper_text_thickness": 0.3,
"copper_text_upright": false,
"courtyard_line_width": 0.05,
"dimension_precision": 4,
"dimension_units": 3,
"dimensions": {
"arrow_length": 1270000,
"extension_offset": 500000,
"keep_text_aligned": true,
"suppress_zeroes": false,
"text_position": 0,
"units_format": 1
},
"fab_line_width": 0.1,
"fab_text_italic": false,
"fab_text_size_h": 1.0,
"fab_text_size_v": 1.0,
"fab_text_thickness": 0.15,
"fab_text_upright": false,
"other_line_width": 0.1,
"other_text_italic": false,
"other_text_size_h": 1.0,
"other_text_size_v": 1.0,
"other_text_thickness": 0.15,
"other_text_upright": false,
"pads": {
"drill": 0.762,
"height": 1.524,
"width": 1.524
},
"silk_line_width": 0.1,
"silk_text_italic": false,
"silk_text_size_h": 1.0,
"silk_text_size_v": 1.0,
"silk_text_thickness": 0.1,
"silk_text_upright": false,
"zones": {
"min_clearance": 0.5
}
},
"diff_pair_dimensions": [],
"drc_exclusions": [
"starved_thermal|64890000|124490000|1448bc55-085a-4bea-8bf9-a719b4e4dbc4|cb5c4da2-a727-48ef-9d10-ace6ebc73f87|B.Cu"
],
"meta": {
"version": 2
},
"rule_severities": {
"annular_width": "error",
"clearance": "error",
"connection_width": "warning",
"copper_edge_clearance": "error",
"copper_sliver": "warning",
"courtyards_overlap": "error",
"diff_pair_gap_out_of_range": "error",
"diff_pair_uncoupled_length_too_long": "error",
"drill_out_of_range": "error",
"duplicate_footprints": "warning",
"extra_footprint": "warning",
"footprint": "error",
"footprint_symbol_mismatch": "warning",
"footprint_type_mismatch": "ignore",
"hole_clearance": "error",
"hole_near_hole": "error",
"holes_co_located": "warning",
"invalid_outline": "error",
"isolated_copper": "ignore",
"item_on_disabled_layer": "error",
"items_not_allowed": "error",
"length_out_of_range": "error",
"lib_footprint_issues": "warning",
"lib_footprint_mismatch": "warning",
"malformed_courtyard": "error",
"microvia_drill_out_of_range": "error",
"missing_courtyard": "ignore",
"missing_footprint": "warning",
"net_conflict": "warning",
"npth_inside_courtyard": "ignore",
"padstack": "warning",
"pth_inside_courtyard": "ignore",
"shorting_items": "error",
"silk_edge_clearance": "ignore",
"silk_over_copper": "ignore",
"silk_overlap": "ignore",
"skew_out_of_range": "error",
"solder_mask_bridge": "error",
"starved_thermal": "error",
"text_height": "ignore",
"text_thickness": "warning",
"through_hole_pad_without_hole": "error",
"too_many_vias": "error",
"track_dangling": "warning",
"track_width": "error",
"tracks_crossing": "error",
"unconnected_items": "error",
"unresolved_variable": "error",
"via_dangling": "warning",
"zones_intersect": "error"
},
"rules": {
"max_error": 0.005,
"min_clearance": 0.15,
"min_connection": 0.15,
"min_copper_edge_clearance": 0.5,
"min_hole_clearance": 0.25,
"min_hole_to_hole": 0.25,
"min_microvia_diameter": 0.2,
"min_microvia_drill": 0.1,
"min_resolved_spokes": 2,
"min_silk_clearance": 0.15,
"min_text_height": 0.8,
"min_text_thickness": 0.08,
"min_through_hole_diameter": 0.3,
"min_track_width": 0.15,
"min_via_annular_width": 0.1,
"min_via_diameter": 0.5,
"solder_mask_to_copper_clearance": 0.0,
"use_height_for_length_calcs": true
},
"teardrop_options": [
{
"td_onpadsmd": true,
"td_onroundshapesonly": false,
"td_ontrackend": false,
"td_onviapad": true
}
],
"teardrop_parameters": [
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_round_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_rect_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_track_end",
"td_width_to_size_filter_ratio": 0.9
}
],
"track_widths": [],
"tuning_pattern_settings": {
"diff_pair_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 1.0
},
"diff_pair_skew_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 0.6
},
"single_track_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 0.6
}
},
"via_dimensions": [],
"zones_allow_external_fillets": false
},
"ipc2581": {
"dist": "",
"distpn": "",
"internal_id": "",
"mfg": "",
"mpn": ""
},
"layer_presets": [],
"viewports": []
},
"boards": [],
"cvpcb": {
"equivalence_files": []
},
"erc": {
"erc_exclusions": [],
"meta": {
"version": 0
},
"pin_map": [
[
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
2,
0,
1,
0,
0,
1,
0,
2,
2,
2,
2
],
[
0,
0,
0,
0,
0,
0,
1,
0,
1,
0,
1,
2
],
[
0,
1,
0,
0,
0,
0,
1,
1,
2,
1,
1,
2
],
[
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
2
],
[
1,
1,
1,
1,
1,
0,
1,
1,
1,
1,
1,
2
],
[
0,
0,
0,
1,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
2,
1,
2,
0,
0,
1,
0,
2,
2,
2,
2
],
[
0,
2,
0,
1,
0,
0,
1,
0,
2,
0,
0,
2
],
[
0,
2,
1,
1,
0,
0,
1,
0,
2,
0,
0,
2
],
[
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2
]
],
"rule_severities": {
"bus_definition_conflict": "error",
"bus_entry_needed": "error",
"bus_to_bus_conflict": "error",
"bus_to_net_conflict": "error",
"conflicting_netclasses": "error",
"different_unit_footprint": "error",
"different_unit_net": "error",
"duplicate_reference": "error",
"duplicate_sheet_names": "error",
"endpoint_off_grid": "warning",
"extra_units": "error",
"global_label_dangling": "warning",
"hier_label_mismatch": "error",
"label_dangling": "error",
"lib_symbol_issues": "warning",
"missing_bidi_pin": "warning",
"missing_input_pin": "warning",
"missing_power_pin": "error",
"missing_unit": "warning",
"multiple_net_names": "warning",
"net_not_bus_member": "warning",
"no_connect_connected": "warning",
"no_connect_dangling": "warning",
"pin_not_connected": "error",
"pin_not_driven": "error",
"pin_to_pin": "warning",
"power_pin_not_driven": "error",
"similar_labels": "warning",
"simulation_model_issue": "ignore",
"unannotated": "error",
"unit_value_mismatch": "error",
"unresolved_variable": "error",
"wire_dangling": "error"
}
},
"libraries": {
"pinned_footprint_libs": [],
"pinned_symbol_libs": []
},
"meta": {
"filename": "clicker.kicad_pro",
"version": 1
},
"net_settings": {
"classes": [
{
"bus_width": 12,
"clearance": 0.2,
"diff_pair_gap": 0.25,
"diff_pair_via_gap": 0.25,
"diff_pair_width": 0.2,
"line_style": 0,
"microvia_diameter": 0.3,
"microvia_drill": 0.1,
"name": "Default",
"pcb_color": "rgba(0, 0, 0, 0.000)",
"schematic_color": "rgba(0, 0, 0, 0.000)",
"track_width": 0.2,
"via_diameter": 0.8,
"via_drill": 0.4,
"wire_width": 6
},
{
"bus_width": 12,
"clearance": 0.2,
"diff_pair_gap": 0.25,
"diff_pair_via_gap": 0.25,
"diff_pair_width": 0.2,
"line_style": 0,
"microvia_diameter": 0.3,
"microvia_drill": 0.1,
"name": "Power",
"pcb_color": "rgba(0, 0, 0, 0.000)",
"schematic_color": "rgba(0, 0, 0, 0.000)",
"track_width": 0.5,
"via_diameter": 0.8,
"via_drill": 0.4,
"wire_width": 6
},
{
"bus_width": 12,
"clearance": 0.2,
"diff_pair_gap": 0.25,
"diff_pair_via_gap": 0.25,
"diff_pair_width": 0.2,
"line_style": 0,
"microvia_diameter": 0.3,
"microvia_drill": 0.1,
"name": "Signal",
"pcb_color": "rgba(0, 0, 0, 0.000)",
"schematic_color": "rgba(0, 0, 0, 0.000)",
"track_width": 0.3,
"via_diameter": 0.8,
"via_drill": 0.4,
"wire_width": 6
}
],
"meta": {
"version": 3
},
"net_colors": null,
"netclass_assignments": null,
"netclass_patterns": [
{
"netclass": "Power",
"pattern": "GND"
},
{
"netclass": "Signal",
"pattern": "B1"
},
{
"netclass": "Signal",
"pattern": "B2"
},
{
"netclass": "Signal",
"pattern": "B3"
},
{
"netclass": "Signal",
"pattern": "B4"
},
{
"netclass": "Signal",
"pattern": "B5"
},
{
"netclass": "Signal",
"pattern": "B6"
},
{
"netclass": "Signal",
"pattern": "B7"
},
{
"netclass": "Signal",
"pattern": "B8"
},
{
"netclass": "Signal",
"pattern": "B9"
},
{
"netclass": "Signal",
"pattern": "B10"
},
{
"netclass": "Power",
"pattern": "+3.3V"
},
{
"netclass": "Signal",
"pattern": "RGB_D"
},
{
"netclass": "Power",
"pattern": "/lazer power"
},
{
"netclass": "Power",
"pattern": "/battery_gnd"
},
{
"netclass": "Power",
"pattern": "/BtoSwitch"
},
{
"netclass": "Power",
"pattern": "/Switch_gnd"
},
{
"netclass": "Signal",
"pattern": "battery_voltage"
}
]
},
"pcbnew": {
"last_paths": {
"gencad": "",
"idf": "",
"netlist": "",
"plot": "clicker-gerber/",
"pos_files": "",
"specctra_dsn": "",
"step": "",
"svg": "",
"vrml": ""
},
"page_layout_descr_file": ""
},
"schematic": {
"annotate_start_num": 0,
"bom_export_filename": "",
"bom_fmt_presets": [],
"bom_fmt_settings": {
"field_delimiter": ",",
"keep_line_breaks": false,
"keep_tabs": false,
"name": "CSV",
"ref_delimiter": ",",
"ref_range_delimiter": "",
"string_delimiter": "\""
},
"bom_presets": [],
"bom_settings": {
"exclude_dnp": false,
"fields_ordered": [
{
"group_by": false,
"label": "Reference",
"name": "Reference",
"show": true
},
{
"group_by": true,
"label": "Value",
"name": "Value",
"show": true
},
{
"group_by": false,
"label": "Datasheet",
"name": "Datasheet",
"show": true
},
{
"group_by": false,
"label": "Footprint",
"name": "Footprint",
"show": true
},
{
"group_by": false,
"label": "Qty",
"name": "${QUANTITY}",
"show": true
},
{
"group_by": true,
"label": "DNP",
"name": "${DNP}",
"show": true
}
],
"filter_string": "",
"group_symbols": true,
"name": "Grouped By Value",
"sort_asc": true,
"sort_field": "Reference"
},
"connection_grid_size": 50.0,
"drawing": {
"dashed_lines_dash_length_ratio": 12.0,
"dashed_lines_gap_length_ratio": 3.0,
"default_line_thickness": 6.0,
"default_text_size": 50.0,
"field_names": [],
"intersheets_ref_own_page": false,
"intersheets_ref_prefix": "",
"intersheets_ref_short": false,
"intersheets_ref_show": false,
"intersheets_ref_suffix": "",
"junction_size_choice": 3,
"label_size_ratio": 0.375,
"operating_point_overlay_i_precision": 3,
"operating_point_overlay_i_range": "~A",
"operating_point_overlay_v_precision": 3,
"operating_point_overlay_v_range": "~V",
"overbar_offset_ratio": 1.23,
"pin_symbol_size": 25.0,
"text_offset_ratio": 0.15
},
"legacy_lib_dir": "",
"legacy_lib_list": [],
"meta": {
"version": 1
},
"net_format_name": "",
"page_layout_descr_file": "",
"plot_directory": "",
"spice_current_sheet_as_root": false,
"spice_external_command": "spice \"%I\"",
"spice_model_current_sheet_as_root": true,
"spice_save_all_currents": false,
"spice_save_all_dissipations": false,
"spice_save_all_voltages": false,
"subpart_first_id": 65,
"subpart_id_separator": 0
},
"sheets": [
[
"f0b422ce-a8ea-4f89-9af1-97a85de89c8e",
"Root"
]
],
"text_variables": {}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,334 @@
(footprint "ESP32_withBMS"
(version 20240108)
(generator "pcbnew")
(generator_version "8.0")
(layer "F.Cu")
(property "Reference" "REF**"
(at 0 -0.5 0)
(unlocked yes)
(layer "F.SilkS")
(uuid "c922f88a-cc74-46c5-bfa7-1df3ee8c2197")
(effects
(font
(size 1 1)
(thickness 0.1)
)
)
)
(property "Value" "ESP32_withBMS"
(at 0 1 0)
(unlocked yes)
(layer "F.Fab")
(uuid "231f97ba-c28e-4311-b8e1-21f8421c4047")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Footprint" ""
(at 0 0 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "307abd3c-2c61-4c99-b0ea-de79d33a30c7")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Datasheet" ""
(at 0 0 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "1fd3802e-5301-49ef-88c8-5b773f999203")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Description" ""
(at 0 0 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "bdc6db5b-e736-4111-8d19-95f43b152ba7")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(attr through_hole)
(fp_rect
(start -12.5 -25)
(end 12.5 25)
(stroke
(width 0.15)
(type default)
)
(fill none)
(layer "F.SilkS")
(uuid "852471d6-c540-480e-a5ad-23787e6c35c3")
)
(fp_rect
(start 1.27 20.32)
(end 8.89 24.765)
(stroke
(width 0.15)
(type default)
)
(fill none)
(layer "F.SilkS")
(uuid "bdb2d8cb-7580-4a03-8e38-53e0cd91b698")
)
(fp_circle
(center -9.525 -22.225)
(end -7.62 -22.225)
(stroke
(width 0.1)
(type default)
)
(fill none)
(layer "F.SilkS")
(uuid "c30f8826-4f53-4bc8-b536-a8150d1792ee")
)
(fp_circle
(center 9.525 16.51)
(end 11.43 16.51)
(stroke
(width 0.15)
(type default)
)
(fill none)
(layer "F.SilkS")
(uuid "4f757e4d-3664-4673-af8c-24505920fd7a")
)
(fp_text user "${REFERENCE}"
(at 0 2.5 0)
(unlocked yes)
(layer "F.Fab")
(uuid "8a63733e-1045-4a46-adb6-041f317e65db")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(pad "0" thru_hole circle
(at 11.43 5.715)
(size 1.56 1.56)
(drill 1.04)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(uuid "cf08ce45-ddbb-49f9-8c89-8e0e0e6bd105")
)
(pad "2" thru_hole circle
(at 11.43 8.255)
(size 1.56 1.56)
(drill 1.04)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(uuid "358172a5-1cc3-499d-8209-29efd666535e")
)
(pad "4" thru_hole circle
(at 11.43 3.175)
(size 1.56 1.56)
(drill 1.04)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(uuid "86b67c18-810e-43f4-937d-b79fd6153a18")
)
(pad "5" thru_hole circle
(at 11.43 -4.445)
(size 1.56 1.56)
(drill 1.04)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(uuid "ff0fccb0-9082-48a6-b19a-7a4025cab1a3")
)
(pad "12" thru_hole circle
(at -11.43 10.795)
(size 1.56 1.56)
(drill 1.04)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(uuid "47903413-cfac-4f6a-9996-cb48d06837aa")
)
(pad "13" thru_hole circle
(at 11.43 13.335)
(size 1.56 1.56)
(drill 1.04)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(uuid "f46d8ce3-2ea7-43e5-a3ab-89dc205dd129")
)
(pad "14" thru_hole circle
(at -11.431943 8.385877)
(size 1.56 1.56)
(drill 1.04)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(uuid "ead982eb-4485-434e-a4a6-394274cc002d")
)
(pad "15" thru_hole circle
(at 11.43 10.795)
(size 1.56 1.56)
(drill 1.04)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(uuid "8186ae38-2a13-4839-a204-674686e33a06")
)
(pad "18" thru_hole circle
(at 11.43 -6.985)
(size 1.56 1.56)
(drill 1.04)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(uuid "1c49071e-6770-4578-9173-a588c5fffc15")
)
(pad "19" thru_hole circle
(at 11.43 -12.065)
(size 1.56 1.56)
(drill 1.04)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(uuid "f514e035-2d17-489c-8f07-a33056847bfd")
)
(pad "23" thru_hole circle
(at 11.43 -9.525)
(size 1.56 1.56)
(drill 1.04)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(uuid "e0242565-0ccb-4cf1-9551-9f79bfa2d7f1")
)
(pad "25" thru_hole circle
(at -11.43 0.635)
(size 1.56 1.56)
(drill 1.04)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(uuid "ce32f624-3c73-4859-8826-62bd0cde3d2e")
)
(pad "26" thru_hole circle
(at -11.43 3.175)
(size 1.56 1.56)
(drill 1.04)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(uuid "60f33d7f-4160-4498-990f-e4a37da2b6d9")
)
(pad "27" thru_hole circle
(at -11.43 5.715)
(size 1.56 1.56)
(drill 1.04)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(uuid "3fecaac8-5cbe-439f-96bb-6502531d81d5")
)
(pad "32" thru_hole circle
(at -11.43 -4.445)
(size 1.56 1.56)
(drill 1.04)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(uuid "04482967-4f32-4d84-9d6d-d57de71bb952")
)
(pad "33" thru_hole circle
(at -11.43 -1.905)
(size 1.56 1.56)
(drill 1.04)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(uuid "5188c819-809d-465a-bf2c-26cce1c35fab")
)
(pad "34" thru_hole circle
(at -11.43 -9.525)
(size 1.56 1.56)
(drill 1.04)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(uuid "229ea36c-bebc-4df6-a74a-89ee522e1295")
)
(pad "35" thru_hole circle
(at -11.43 -6.985)
(size 1.56 1.56)
(drill 1.04)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(uuid "8ff4d83a-8587-40c9-8b65-bcc9b6ab391e")
)
(pad "36" thru_hole circle
(at -11.43 -17.145)
(size 1.56 1.56)
(drill 1.04)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(uuid "2608740b-195e-4381-a3f9-6e73ce2a5f53")
)
(pad "39" thru_hole circle
(at -11.43 -14.605)
(size 1.56 1.56)
(drill 1.04)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(uuid "369d777b-c370-4ed3-aa46-a97af8196a30")
)
(pad "EN" thru_hole circle
(at -11.43 -12.065)
(size 1.56 1.56)
(drill 1.04)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(uuid "7909ed4f-34be-42b8-8382-d4c7d9f5efa2")
)
(pad "G" thru_hole rect
(at -11.43 13.335)
(size 1.56 1.56)
(drill 1.04)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(uuid "57d27fac-cc7e-4d72-bba2-d96b74aa2455")
)
(pad "RX" thru_hole circle
(at 11.43 0.635)
(size 1.56 1.56)
(drill 1.04)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(uuid "c5234c83-e7fd-479b-87f4-2944688a5546")
)
(pad "TX" thru_hole circle
(at 11.43 -1.905)
(size 1.56 1.56)
(drill 1.04)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(uuid "8596f493-1a92-408d-a221-a32e80f63204")
)
(pad "led" thru_hole circle
(at 11.43 -14.605)
(size 1.56 1.56)
(drill 1.04)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(uuid "03a5198e-9f4d-4a2a-b156-19f9233cf7f0")
)
(pad "vcc" thru_hole circle
(at 11.43 -17.145)
(size 1.56 1.56)
(drill 1.04)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(uuid "3ba87acb-bdc0-4d67-82f0-5330df595f4a")
)
)

View File

@ -0,0 +1,122 @@
(footprint "Standard_connector"
(version 20240108)
(generator "pcbnew")
(generator_version "8.0")
(layer "F.Cu")
(property "Reference" "REF**"
(at 0 -8.08 0)
(unlocked yes)
(layer "F.SilkS")
(uuid "32d82d3f-0dc7-4ceb-8258-8c6d50e1b7d2")
(effects
(font
(size 1 1)
(thickness 0.1)
)
)
)
(property "Value" "Standard_connector"
(at 0 -6.58 0)
(unlocked yes)
(layer "F.Fab")
(uuid "0157bdcb-8b83-4dcb-9b5f-aa0a6fd95472")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Footprint" ""
(at 0 -7.58 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "91eba0c0-945b-4148-ac30-1718f83dd436")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Datasheet" ""
(at 0 -7.58 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "70452928-4e2f-43fd-896c-7804eeb9e5f6")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Description" ""
(at 0 -7.58 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "d37ceeb4-517e-4a6e-b33f-106bd823c52c")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(attr through_hole)
(fp_rect
(start -5.08 -2.54)
(end 5.08 2.54)
(stroke
(width 0.15)
(type default)
)
(fill none)
(layer "F.SilkS")
(uuid "4a64b6a6-d05d-4018-9d9f-67a454007c9f")
)
(fp_text user "+ -"
(at -3.2258 2.4384 0)
(unlocked yes)
(layer "F.SilkS")
(uuid "0c45272c-5b97-48ca-abf8-5feb8008bd9b")
(effects
(font
(size 1 1)
(thickness 0.1)
)
(justify left bottom)
)
)
(fp_text user "${REFERENCE}"
(at 0 -5.08 0)
(unlocked yes)
(layer "F.Fab")
(uuid "384c7ffb-f14a-44d7-84a2-0f9a78195a75")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(pad "1" thru_hole circle
(at -2.54 0)
(size 1.56 1.56)
(drill 1.04)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(uuid "da579588-e199-424d-ba3c-0909433d2899")
)
(pad "2" thru_hole rect
(at 2.54 0)
(size 1.56 1.56)
(drill 1.04)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(uuid "94e50b82-8ac6-4259-9fb8-dd109b2e513f")
)
)

View File

@ -0,0 +1,24 @@
(footprint SK12D07VG4 (layer F.Cu) (tedit 6682C70A)
(descr "")
(fp_text reference "REF**" (at 0 0) (layer F.SilkS)
(effects (font (size 0.787401574803 0.787401574803) (thickness 0.15)))
)
(fp_text value "SK12D07VG4" (at 0 0) (layer F.Fab)
(effects (font (size 0.787401574803 0.787401574803) (thickness 0.15)))
)
(pad 1 thru_hole circle (at -2.0 0.0) (size 1.308 1.308) (drill 0.8) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad 2 thru_hole circle (at 2.0 0.0) (size 1.308 1.308) (drill 0.8) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad COM thru_hole circle (at 0.0 0.0) (size 1.308 1.308) (drill 0.8) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad M1 thru_hole circle (at -4.15 0.0) (size 2.1 2.1) (drill 1.4) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad M2 thru_hole circle (at 4.15 0.0) (size 2.1 2.1) (drill 1.4) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(fp_line (start -4.4 -2.2) (end 4.4 -2.2) (layer F.SilkS) (width 0.127))
(fp_line (start 4.4 -2.2) (end 4.4 2.2) (layer F.SilkS) (width 0.127))
(fp_line (start 4.4 2.2) (end 4.0 2.2) (layer F.SilkS) (width 0.127))
(fp_line (start 4.0 2.2) (end -4.0 2.2) (layer F.SilkS) (width 0.127))
(fp_line (start -4.0 2.2) (end -4.4 2.2) (layer F.SilkS) (width 0.127))
(fp_line (start -4.4 2.2) (end -4.4 -2.2) (layer F.SilkS) (width 0.127))
(fp_line (start -4.0 2.2) (end -4.0 4.2) (layer F.SilkS) (width 0.127))
(fp_line (start -4.0 4.2) (end 4.0 4.2) (layer F.SilkS) (width 0.127))
(fp_line (start 4.0 4.2) (end 4.0 2.2) (layer F.SilkS) (width 0.127))
)

View File

@ -0,0 +1,204 @@
(footprint "WS2812B"
(version 20240108)
(generator "pcbnew")
(generator_version "8.0")
(layer "F.Cu")
(property "Reference" "REF**"
(at 3.8989 0.4445 180)
(layer "F.SilkS")
(uuid "fa68a86c-14d9-45fc-88db-3258a8064893")
(effects
(font
(size 0.64 0.64)
(thickness 0.15)
)
)
)
(property "Value" "WS2812B"
(at 0 0 0)
(layer "F.Fab")
(uuid "7acf12d9-2b07-48b7-a808-74cbc68ea64f")
(effects
(font
(size 0.787402 0.787402)
(thickness 0.15)
)
)
)
(property "Footprint" ""
(at 0 0 0)
(layer "F.Fab")
(hide yes)
(uuid "0048eb94-c5eb-4526-8415-dc5ecc592182")
(effects
(font
(size 1.27 1.27)
(thickness 0.15)
)
)
)
(property "Datasheet" ""
(at 0 0 0)
(layer "F.Fab")
(hide yes)
(uuid "8b620fc3-b168-4cd4-9251-ce4f5e16204a")
(effects
(font
(size 1.27 1.27)
(thickness 0.15)
)
)
)
(property "Description" ""
(at 0 0 0)
(layer "F.Fab")
(hide yes)
(uuid "43cb58e3-07c8-4df8-8363-7a54700ad1f5")
(effects
(font
(size 1.27 1.27)
(thickness 0.15)
)
)
)
(attr smd)
(fp_line
(start -2.5 -2.5)
(end -1.6 -2.5)
(stroke
(width 0.127)
(type solid)
)
(layer "F.SilkS")
(uuid "e03f808e-1140-4838-84bb-5ce5b3070954")
)
(fp_line
(start -2.5 -1.6)
(end -2.5 -2.5)
(stroke
(width 0.127)
(type solid)
)
(layer "F.SilkS")
(uuid "e26ae03e-36e2-46ec-b489-8c829125e0db")
)
(fp_line
(start -2.5 -1.6)
(end -1.6 -2.5)
(stroke
(width 0.127)
(type solid)
)
(layer "F.SilkS")
(uuid "81a8721b-f3be-42cf-90ce-6fc8ed963e8d")
)
(fp_line
(start -2.5 2.5)
(end -2.5 -1.6)
(stroke
(width 0.127)
(type solid)
)
(layer "F.SilkS")
(uuid "99288a31-9a74-4080-adb1-a64396f9ee49")
)
(fp_line
(start -1.7 -3.2)
(end -2.5 -2.5)
(stroke
(width 0.127)
(type solid)
)
(layer "F.SilkS")
(uuid "af40ca1a-5648-4e3c-9be8-a1c7398218cf")
)
(fp_line
(start -1.6 -2.5)
(end -1.3 -2.8)
(stroke
(width 0.127)
(type solid)
)
(layer "F.SilkS")
(uuid "a2be93f3-074a-4a11-a018-210b07af87f3")
)
(fp_line
(start -1.6 -2.5)
(end 2.5 -2.5)
(stroke
(width 0.127)
(type solid)
)
(layer "F.SilkS")
(uuid "6d4c8af5-703b-43af-8e61-91165fce3446")
)
(fp_line
(start -1.3 -2.8)
(end -1.7 -3.2)
(stroke
(width 0.127)
(type solid)
)
(layer "F.SilkS")
(uuid "11d4ed4d-ac80-4687-82f3-0c796a8615bf")
)
(fp_line
(start 2.5 -2.5)
(end 2.5 2.5)
(stroke
(width 0.127)
(type solid)
)
(layer "F.SilkS")
(uuid "3ad5dbb8-ade7-4598-9ae7-048b8d72cf8d")
)
(fp_line
(start 2.5 2.5)
(end -2.5 2.5)
(stroke
(width 0.127)
(type solid)
)
(layer "F.SilkS")
(uuid "8f4ad853-a5fb-4869-bc42-66e7e3efb781")
)
(fp_circle
(center 0 0)
(end 1.72046 0)
(stroke
(width 0.127)
(type solid)
)
(fill none)
(layer "F.SilkS")
(uuid "118b08e5-289d-44c3-885b-34be2a3ae21b")
)
(pad "1-VDD" smd rect
(at -2.45 1.65 180)
(size 1.5 0.9)
(layers "F.Cu" "F.Paste" "F.Mask")
(solder_mask_margin 0.102)
(uuid "6814d27f-47ea-4657-9c2b-dc52cc5c85b6")
)
(pad "2-DOUT" smd rect
(at 2.45 1.65 180)
(size 1.5 0.9)
(layers "F.Cu" "F.Paste" "F.Mask")
(solder_mask_margin 0.102)
(uuid "2ac7e823-1ee2-4d93-a587-d06a4fcc0f32")
)
(pad "3-GND" smd rect
(at 2.45 -1.65 180)
(size 1.5 0.9)
(layers "F.Cu" "F.Paste" "F.Mask")
(solder_mask_margin 0.102)
(uuid "2715bb34-b948-4e0f-9554-50b66aeaf436")
)
(pad "4-DIN" smd rect
(at -2.45 -1.65 180)
(size 1.5 0.9)
(layers "F.Cu" "F.Paste" "F.Mask")
(solder_mask_margin 0.102)
(uuid "e001c81a-3448-4678-9103-c8395a38771d")
)
)

94025
PCB/clicker/fp-info-cache Normal file

File diff suppressed because it is too large Load Diff

6
PCB/clicker/fp-lib-table Normal file
View File

@ -0,0 +1,6 @@
(fp_lib_table
(version 7)
(lib (name "footprints_clicker_library")(type "KiCad")(uri "${KIPRJMOD}/footprints_clicker_library")(options "")(descr ""))
(lib (name "button")(type "KiCad")(uri "${KIPRJMOD}/button.pretty")(options "")(descr ""))
(lib (name "clicker")(type "KiCad")(uri "${KIPRJMOD}/clicker.pretty")(options "")(descr ""))
)

848
PCB/clicker/lazer_pin.bak Normal file
View File

@ -0,0 +1,848 @@
(kicad_symbol_lib
(version 20231120)
(generator "kicad_symbol_editor")
(generator_version "8.0")
(symbol "battery_connector"
(exclude_from_sim no)
(in_bom yes)
(on_board yes)
(property "Reference" "T"
(at 0 2.54 0)
(effects
(font
(size 1.27 1.27)
)
)
)
(property "Value" ""
(at 0 2.54 0)
(effects
(font
(size 1.27 1.27)
)
)
)
(property "Footprint" ""
(at 0 2.54 0)
(effects
(font
(size 1.27 1.27)
)
(hide yes)
)
)
(property "Datasheet" ""
(at 0 2.54 0)
(effects
(font
(size 1.27 1.27)
)
(hide yes)
)
)
(property "Description" ""
(at 0 2.54 0)
(effects
(font
(size 1.27 1.27)
)
(hide yes)
)
)
(symbol "battery_connector_0_1"
(polyline
(pts
(xy -2.54 0) (xy 2.54 0)
)
(stroke
(width 0)
(type default)
)
(fill
(type none)
)
)
)
(symbol "battery_connector_1_1"
(text "Battery Connector"
(at 0 6.35 0)
(effects
(font
(size 1.27 1.27)
)
)
)
(pin input line
(at -2.54 0 270)
(length 2.54)
(name "Power"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "1"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin input line
(at 2.54 0 270)
(length 2.54)
(name "GND"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "2"
(effects
(font
(size 1.27 1.27)
)
)
)
)
)
)
(symbol "esp_with_battery"
(exclude_from_sim no)
(in_bom yes)
(on_board yes)
(property "Reference" "U"
(at 15.24 22.86 0)
(effects
(font
(size 1.27 1.27)
)
)
)
(property "Value" ""
(at 15.24 22.86 0)
(effects
(font
(size 1.27 1.27)
)
)
)
(property "Footprint" ""
(at 15.24 22.86 0)
(effects
(font
(size 1.27 1.27)
)
(hide yes)
)
)
(property "Datasheet" ""
(at 15.24 22.86 0)
(effects
(font
(size 1.27 1.27)
)
(hide yes)
)
)
(property "Description" ""
(at 15.24 22.86 0)
(effects
(font
(size 1.27 1.27)
)
(hide yes)
)
)
(symbol "esp_with_battery_0_1"
(rectangle
(start -13.97 33.02)
(end 6.35 -12.7)
(stroke
(width 0)
(type default)
)
(fill
(type none)
)
)
(circle
(center -11.43 30.48)
(radius 1.27)
(stroke
(width 0)
(type default)
)
(fill
(type none)
)
)
(rectangle
(start -1.27 -8.89)
(end 5.08 -12.7)
(stroke
(width 0)
(type default)
)
(fill
(type none)
)
)
(polyline
(pts
(xy -5.08 29.21) (xy -5.08 31.75) (xy -3.81 31.75) (xy -3.81 29.21) (xy -3.81 31.75) (xy -2.54 31.75)
(xy -2.54 30.48) (xy -1.27 30.48) (xy -1.27 31.75) (xy 0 31.75) (xy 0 30.48) (xy 1.27 30.48) (xy 1.27 31.75)
(xy 2.54 31.75) (xy 2.54 29.21)
)
(stroke
(width 0)
(type default)
)
(fill
(type none)
)
)
(circle
(center 3.81 -6.35)
(radius 1.27)
(stroke
(width 0)
(type default)
)
(fill
(type none)
)
)
)
(symbol "esp_with_battery_1_1"
(text "RST"
(at -4.572 -10.414 0)
(effects
(font
(size 0.762 0.762)
)
)
)
(text "USB-C"
(at 1.778 -10.922 0)
(effects
(font
(size 1.016 1.016)
)
)
)
(pin power_in line
(at -8.89 -15.24 90)
(length 2.54)
(name "GND"
(effects
(font
(size 1.27 1.27)
)
)
)
(number ""
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin power_in line
(at -11.43 -15.24 90)
(length 2.54)
(name "VCC"
(effects
(font
(size 1.27 1.27)
)
)
)
(number ""
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at 8.89 3.81 180)
(length 2.54)
(name "GPIO00"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "0"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at -16.51 -1.27 0)
(length 2.54)
(name "GPIO12"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "12"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at 8.89 -3.81 180)
(length 2.54)
(name "GPIO13"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "13"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at -16.51 1.27 0)
(length 2.54)
(name "GPIO14"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "14"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at 8.89 -1.27 180)
(length 2.54)
(name "GPIO15"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "15"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at 8.89 16.51 180)
(length 2.54)
(name "GPIO18"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "18"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at 8.89 21.59 180)
(length 2.54)
(name "GPIO19"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "19"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at 8.89 1.27 180)
(length 2.54)
(name "GPIO02"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "2"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at 8.89 19.05 180)
(length 2.54)
(name "GPIO23"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "23"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at -16.51 8.89 0)
(length 2.54)
(name "GPIO25"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "25"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at -16.51 6.35 0)
(length 2.54)
(name "GPIO26"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "26"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at -16.51 3.81 0)
(length 2.54)
(name "GPIO27"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "27"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at -16.51 13.97 0)
(length 2.54)
(name "GPIO32"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "32"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at -16.51 11.43 0)
(length 2.54)
(name "GPIO33"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "33"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at -16.51 19.05 0)
(length 2.54)
(name "GPIO34"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "34"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at -16.51 16.51 0)
(length 2.54)
(name "GPIO35"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "35"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at -16.51 26.67 0)
(length 2.54)
(name "GPIO36"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "36"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at -16.51 24.13 0)
(length 2.54)
(name "GPIO39"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "39"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at 8.89 6.35 180)
(length 2.54)
(name "GPIO04"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "4"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at 8.89 13.97 180)
(length 2.54)
(name "GPIO05"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "5"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at -16.51 21.59 0)
(length 2.54)
(name "RESET"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "EN"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin power_out line
(at -16.51 -3.81 0)
(length 2.54)
(name "GND"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "G"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at 8.89 8.89 180)
(length 2.54)
(name "GPIO16"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "RX"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at 8.89 11.43 180)
(length 2.54)
(name "GPIO17"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "TX"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at 8.89 24.13 180)
(length 2.54)
(name "GPIO22"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "led"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin output line
(at 8.89 26.67 180)
(length 2.54)
(name "3.3V"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "vcc"
(effects
(font
(size 1.27 1.27)
)
)
)
)
)
)
(symbol "lazer"
(exclude_from_sim no)
(in_bom yes)
(on_board yes)
(property "Reference" "U"
(at -0.762 7.366 0)
(effects
(font
(size 1.27 1.27)
)
)
)
(property "Value" ""
(at -1.27 7.62 0)
(effects
(font
(size 1.27 1.27)
)
)
)
(property "Footprint" ""
(at -1.27 7.62 0)
(effects
(font
(size 1.27 1.27)
)
(hide yes)
)
)
(property "Datasheet" ""
(at -1.27 7.62 0)
(effects
(font
(size 1.27 1.27)
)
(hide yes)
)
)
(property "Description" ""
(at -1.27 7.62 0)
(effects
(font
(size 1.27 1.27)
)
(hide yes)
)
)
(symbol "lazer_1_1"
(rectangle
(start -3.81 0)
(end 3.81 0)
(stroke
(width 0)
(type default)
)
(fill
(type none)
)
)
(text "Lazer"
(at 0 5.588 0)
(effects
(font
(size 1.27 1.27)
)
)
)
(pin input line
(at -2.54 0 270)
(length 2.54)
(name "Power"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "1"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin input line
(at 2.54 0 270)
(length 2.54)
(name "Gnd"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "2"
(effects
(font
(size 1.27 1.27)
)
)
)
)
)
)
)

View File

@ -0,0 +1,812 @@
(kicad_symbol_lib
(version 20231120)
(generator "kicad_symbol_editor")
(generator_version "8.0")
(symbol "battery_connector"
(exclude_from_sim no)
(in_bom yes)
(on_board yes)
(property "Reference" "T"
(at 0 2.54 0)
(effects
(font
(size 1.27 1.27)
)
)
)
(property "Value" ""
(at 0 2.54 0)
(effects
(font
(size 1.27 1.27)
)
)
)
(property "Footprint" ""
(at 0 2.54 0)
(effects
(font
(size 1.27 1.27)
)
(hide yes)
)
)
(property "Datasheet" ""
(at 0 2.54 0)
(effects
(font
(size 1.27 1.27)
)
(hide yes)
)
)
(property "Description" ""
(at 0 2.54 0)
(effects
(font
(size 1.27 1.27)
)
(hide yes)
)
)
(symbol "battery_connector_0_1"
(polyline
(pts
(xy -2.54 0) (xy 2.54 0)
)
(stroke
(width 0)
(type default)
)
(fill
(type none)
)
)
)
(symbol "battery_connector_1_1"
(text "Battery Connector"
(at 0 6.35 0)
(effects
(font
(size 1.27 1.27)
)
)
)
(pin input line
(at -2.54 0 270)
(length 2.54)
(name "Power"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "1"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin input line
(at 2.54 0 270)
(length 2.54)
(name "GND"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "2"
(effects
(font
(size 1.27 1.27)
)
)
)
)
)
)
(symbol "esp_with_battery"
(exclude_from_sim no)
(in_bom yes)
(on_board yes)
(property "Reference" "U"
(at 15.24 22.86 0)
(effects
(font
(size 1.27 1.27)
)
)
)
(property "Value" ""
(at 15.24 22.86 0)
(effects
(font
(size 1.27 1.27)
)
)
)
(property "Footprint" ""
(at 15.24 22.86 0)
(effects
(font
(size 1.27 1.27)
)
(hide yes)
)
)
(property "Datasheet" ""
(at 15.24 22.86 0)
(effects
(font
(size 1.27 1.27)
)
(hide yes)
)
)
(property "Description" ""
(at 15.24 22.86 0)
(effects
(font
(size 1.27 1.27)
)
(hide yes)
)
)
(symbol "esp_with_battery_0_1"
(rectangle
(start -13.97 33.02)
(end 6.35 -12.7)
(stroke
(width 0)
(type default)
)
(fill
(type none)
)
)
(circle
(center -11.43 30.48)
(radius 1.27)
(stroke
(width 0)
(type default)
)
(fill
(type none)
)
)
(rectangle
(start -1.27 -8.89)
(end 5.08 -12.7)
(stroke
(width 0)
(type default)
)
(fill
(type none)
)
)
(polyline
(pts
(xy -5.08 29.21) (xy -5.08 31.75) (xy -3.81 31.75) (xy -3.81 29.21) (xy -3.81 31.75) (xy -2.54 31.75)
(xy -2.54 30.48) (xy -1.27 30.48) (xy -1.27 31.75) (xy 0 31.75) (xy 0 30.48) (xy 1.27 30.48) (xy 1.27 31.75)
(xy 2.54 31.75) (xy 2.54 29.21)
)
(stroke
(width 0)
(type default)
)
(fill
(type none)
)
)
(circle
(center 3.81 -6.35)
(radius 1.27)
(stroke
(width 0)
(type default)
)
(fill
(type none)
)
)
)
(symbol "esp_with_battery_1_1"
(text "RST"
(at -4.572 -10.414 0)
(effects
(font
(size 0.762 0.762)
)
)
)
(text "USB-C"
(at 1.778 -10.922 0)
(effects
(font
(size 1.016 1.016)
)
)
)
(pin bidirectional line
(at 8.89 3.81 180)
(length 2.54)
(name "GPIO00"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "0"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at -16.51 -1.27 0)
(length 2.54)
(name "GPIO12"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "12"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at 8.89 -3.81 180)
(length 2.54)
(name "GPIO13"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "13"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at -16.51 1.27 0)
(length 2.54)
(name "GPIO14"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "14"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at 8.89 -1.27 180)
(length 2.54)
(name "GPIO15"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "15"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at 8.89 16.51 180)
(length 2.54)
(name "GPIO18"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "18"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at 8.89 21.59 180)
(length 2.54)
(name "GPIO19"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "19"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at 8.89 1.27 180)
(length 2.54)
(name "GPIO02"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "2"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at 8.89 19.05 180)
(length 2.54)
(name "GPIO23"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "23"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at -16.51 8.89 0)
(length 2.54)
(name "GPIO25"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "25"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at -16.51 6.35 0)
(length 2.54)
(name "GPIO26"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "26"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at -16.51 3.81 0)
(length 2.54)
(name "GPIO27"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "27"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at -16.51 13.97 0)
(length 2.54)
(name "GPIO32"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "32"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at -16.51 11.43 0)
(length 2.54)
(name "GPIO33"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "33"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at -16.51 19.05 0)
(length 2.54)
(name "GPIO34"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "34"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at -16.51 16.51 0)
(length 2.54)
(name "GPIO35"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "35"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at -16.51 26.67 0)
(length 2.54)
(name "GPIO36"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "36"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at -16.51 24.13 0)
(length 2.54)
(name "GPIO39"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "39"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at 8.89 6.35 180)
(length 2.54)
(name "GPIO04"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "4"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at 8.89 13.97 180)
(length 2.54)
(name "GPIO05"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "5"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at -16.51 21.59 0)
(length 2.54)
(name "RESET"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "EN"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin power_out line
(at -16.51 -3.81 0)
(length 2.54)
(name "GND"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "G"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at 8.89 8.89 180)
(length 2.54)
(name "GPIO16"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "RX"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at 8.89 11.43 180)
(length 2.54)
(name "GPIO17"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "TX"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at 8.89 24.13 180)
(length 2.54)
(name "GPIO22"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "led"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin output line
(at 8.89 26.67 180)
(length 2.54)
(name "3.3V"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "vcc"
(effects
(font
(size 1.27 1.27)
)
)
)
)
)
)
(symbol "lazer"
(exclude_from_sim no)
(in_bom yes)
(on_board yes)
(property "Reference" "U"
(at -0.762 7.366 0)
(effects
(font
(size 1.27 1.27)
)
)
)
(property "Value" ""
(at -1.27 7.62 0)
(effects
(font
(size 1.27 1.27)
)
)
)
(property "Footprint" ""
(at -1.27 7.62 0)
(effects
(font
(size 1.27 1.27)
)
(hide yes)
)
)
(property "Datasheet" ""
(at -1.27 7.62 0)
(effects
(font
(size 1.27 1.27)
)
(hide yes)
)
)
(property "Description" ""
(at -1.27 7.62 0)
(effects
(font
(size 1.27 1.27)
)
(hide yes)
)
)
(symbol "lazer_1_1"
(rectangle
(start -3.81 0)
(end 3.81 0)
(stroke
(width 0)
(type default)
)
(fill
(type none)
)
)
(text "Lazer"
(at 0 5.588 0)
(effects
(font
(size 1.27 1.27)
)
)
)
(pin input line
(at -2.54 0 270)
(length 2.54)
(name "Power"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "1"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin input line
(at 2.54 0 270)
(length 2.54)
(name "Gnd"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "2"
(effects
(font
(size 1.27 1.27)
)
)
)
)
)
)
)

View File

@ -0,0 +1,7 @@
(sym_lib_table
(version 7)
(lib (name "lazer_pin")(type "KiCad")(uri "${KIPRJMOD}/lazer_pin.kicad_sym")(options "")(descr ""))
(lib (name "button")(type "KiCad")(uri "${KIPRJMOD}/button.kicad_sym")(options "")(descr ""))
(lib (name "SK12D07VG4")(type "KiCad")(uri "${KIPRJMOD}/SK12D07VG4.kicad_sym")(options "")(descr ""))
(lib (name "WS2812B")(type "KiCad")(uri "${KIPRJMOD}/WS2812B.kicad_sym")(options "")(descr ""))
)

29
README.md Normal file → Executable file
View File

@ -1,2 +1,29 @@
# presentation-clicker # KAM Alarm
![Image of KAM alarms](docs/Images/Image2.jpg)
The KAM Alarm system was born out of a need for efficient communication between the sound room and kids ministry at our church. The goal was to enable seamless updates on service progression, attendance counts, and worker presence.
**Key Features**
- Wireless connectivity using ESP32 boards that store WiFi credentials persistently across resets
- Create an access point (AP) if no WiFi is available; connect to it with your phone or device
- Once connected to a network, login to set the remote IP address, which enables connection to another KAM Alarm devices
**How It Works**
1. Connect your device to the KAM Alarm's AP or existing WiFi network.
2. Log in and configure the remote IP address, linking the two devices.
3. Use the system to send updates on service progression, attendance counts, and worker presence between the sound room and kids ministry.
**Technical Details**
- Two ESP32 boards connect via WiFi to each other
- Sends GET requests to different URLs for data exchange
**Get Started**
Check out our [documentation](docs/documentation.md) for a detailed list of components used in this project.
Check out our [BOM](docs/BOM.md) for a list of the parts used and the total cost.